nikolay shilov. csedays 2
TRANSCRIPT
Николай Вячеславович Шилов – CSEdays, Екатеринбург 12 – 14 ноября 2010 г.
Что программистам надо знать о программных логиках - II.
Что было в первой лекции
Понятие о синтаксисе и семантике динамической логики с неподвижными точками на примере головоломки. Понятие верификации моделей на примере решения головоломки и её обобщения.
Что было упомянуто вскользь
К сожалению, все алгоритмы верификации моделей для динамической логики с неподвижными точками имеют верхнюю оценку сложности (O(|LTS|)O(|Φ|), а хорошей реалистической нижней оценки неизвестно.
Что делать?
Чтобы сделать верификацию моделей практичным методом верификации можно уменьшать размеры помеченных систем переходов и упрощать логику. Но при этом надо побеспокоиться, что бы средств упрощённой логики хватило для спецификации интересных свойств, а уменьшение модели не привело к изменению специфицированных свойств.
Как уменьшить размер модели: симметрия
Симметрия модели – это любой автоморфизм помеченной системы переходов, который сохраняет все специфицированные свойства. Симметрии модели образуют группу, а каждый элемент модели (вершина графа помеченной системы переходов) определяет орбиту – множество симметричных ему элементов.
Как уменьшить размер модели: симметрия
Очевидно, что из каждой орбиты достаточно оставить только по одному элементу-представителю, и соединить представителей орбит помеченной дугой, если в этих орбитах были вершины, связанные такой же дугой.
Симметрия в GAME(M,N)
Например, для игры простая перенумерация монет очевидным образом является симметрией по отношению к свойствам, представленным формулами Φ0, Φ1, ... Φ, специфицирующих существование выигрышной стратегии за 0, 1, ... и сколько угодно раундов.
Симметрия в GAME(M,N)
Поэтому вместо всех возможных позиций (U, L, H, V, Q),
где U, L, H и V попарно непересекающиеся множества номеров монет,
а Q = (S1, S2) – запрос на взвешивание,
Симметрия в GAME(M,N)
можно ограничиться позициями, в которых U, L, H и V – непересекающиеся интервалы,
а S1 = U1 ∪ L1 ∪ H1 ∪ V1 и S2 = U2 ∪ L2 ∪ H2 ∪ V2, где
U1∪ U2 – начальный интервал U,
L1∪ L2 – начальный интервал L,
H1∪ H2 – начальный интервал H,
U1∪ U2 – начальный интервал V.
Как уменьшить размер модели: абстракция
Однако для нашей головоломки размер модели
можно уменьшить еще больше, если вместо
симметрии использовать числовую абстракцию.
Как уменьшить размер модели: абстракция
Пусть у нас есть множество формул Ψ0, Ψ1, ..., две помеченных системы переходов LTS1 и LTS2, а также отображение F:LTS1 --> LTS2 такое, что [Ψ0]LTS1 = прообраз [Ψ0]LTS1 при отображении F,[Ψ1]LTS1 = прообраз [Ψ1]LTS1 при отображении F,..............................................................................
Тогда отображение говорят, что отображение F является абстракцией, помеченные системы
переходов LTS1 и LTS2 – конкретной и абстрактной моделями для верификации формул Ψ0, Ψ1, ...
Числовая абстракция для GAME(M,N)
Естественная идея: когда человек решает головоломки о монетах, он обычно думает не в
терминах номеров монет, а в терминах количествмонет разных видов – «непроверенных», «легких»,
«тяжелых» и «настоящих».
Абстрактная модель game(M,N)
Позициями служат пятерки (u, l, h, v, q), гдеu – количество монет про которые пока ничего невозможно сказать,l – количество монет, которые пока неопознаны, но были на более легкой чаше весов,h – количество монет, которые пока неопознаны, но были на более тяжелой чаше весов,v – количество монет, про которые известно, что они настоящие,q – (запрос на) взвешивание, т. е. пара четверок ((u1, l1, h1, v1) , (u2, l2, h2, v2)).
Абстрактная модель game(M,N)
На эти позиции налагаются ограничения, связанные со «смыслом» чисел:
u + l + h ≤N, u + l + h + v = N + M, u + l + h ≥1, u≠0 тогда и только тогда, когда l + h =0,u1 + u2 ≤u, l1 + l2 ≤l, h1 + h2 ≤h, v1 + v2 ≤v,
u1 + l1 + h1 + v1 = u2 + l2 + h2 + v2.
Абстрактная модель game(M,N)
Возможный ход игрока prog – это запрос
на взвешивание двух «порций» монет, т. е. пара позицийследующего вида:
Абстрактная модель game(M,N)
Возможный ход игрока user – это ответ
«<», «=» или «>» на предыдущий запрос. Этот ответ вызывает изменение позиции:
Абстрактная модель game(M,N)
Абстрактная модель game(M,N)
Позиции (u, u, h, v, ((0,0,0,0), (0,0,0,0))), в которых u + l + h =1, помечены «OK».
-------------------------------------------------------
Получилась очень небольшая модель по сравнению с GAME(M,N)!
В частности, в game(14,1) всего-то порядка миллиона позиций.
Абстрактная модель game(M,N)
Отображение count: GAME(M,N) --> game(M,N)
заданное правиломcount (U, L, H, V, (S1,S2)) = (|U|, |L|, |H|, |V|, q),
где q есть ( (|S1∩U|, |S1∩L|, |S1∩H|, |S1∩V|) , (|S2∩U|, |S2∩L|, |S2∩H|, |S2∩V|) ),
является абстракцией для верификации формул Φ0, Φ1, ... Φ.
И ещё один раз о головоломке
Теперь головоломку о поиске фальшивой монеты среди 14 за 3 взвешивания с использованием 1
эталонной решается с использованием абстракции и верификации модели:
сгенерировать помеченную систему переходов game(14,1);для формулы Φ3 и game(14,1) выполнить алгоритм верификации модели;Проверить (14,0,0,1,((0,0,0,0) , (0,0,0,0)))∈[Φ3]game(14,1).
На пути к другим программным логикам
Мы определили динамическую логику с неподвижными точками не вполне строго, в
частности, не было сказано явно, что конструктор наименьшей неподвижной точки «µP» можно
применять только к формулам Ψ без негативных вхождений пропозициональной переменной P.
Но далее мы будем подразумевать, что это синтаксическое ограничение выполнено для всех
формул, к которым мы применяем этот конструктор.
На пути к другим программным логикам
В конечной модели (т. е. помеченной системе переходов) LTS семантика формулы [µP.Ψ]LTS
определялась следующим образом: строили ряд формул Ψ0 ≡ false, Ψ1 ≡ Ψ(false/P), ... Ψn+1 ≡ Ψ(Ψn/P), ..., вычисляли их семантику S0 = [Ψ0]LTS, S1 = [Ψ1]LTS, ... Sn = [Ψn]LTS, ..., объявляли ∪n≥0Sn семантикой [µP.Ψ]LTS.
На пути к другим программным логикам
Тогда естественно ввести конструктор наибольшей неподвижной точки «ν» и определить его семантику в
конечных моделях «дуальным» образом: построим ряд формул Ψ0 ≡ true, Ψ1 ≡ Ψ(true/P), ... Ψn+1 ≡ Ψ(Ψn/P), ..., вычислим их семантику S0 = [Ψ0]LTS, S1 = [Ψ1]LTS, ... Sn
= [Ψn]LTS, ..., объявим ∩n≥0Sn семантикой [νP.Ψ]LTS.
Пропозициональная Динамическая Логика (ПДЛ)
ПДЛ – это «фрагмент» динамической логики с неподвижными точками, в котором «µ» и «ν» могут встречаться только в следующих двух макросах:
[α*]Ψ ≡ νP.(Ψ & [α]P), ⟨α*⟩Ψ ≡ µP.(Ψ ∨ ⟨α⟩P).
Можно показать, что в помеченной системе переходов
[α*]Ψ означает «после любого количества итераций α имеет место Ψ», ⟨α*⟩Ψ означает «после некоторого количества итераций α имеет место Ψ».
ПДЛ: «за» и «против»
«ЗА»:Верификация моделей для ПДЛ имеет хорошую верхнюю оценку сложности O(|LTS|×|Φ|).В ПДЛ представимы формулы, выражающие существование выигрышной стратегии за (неболее чем) 0, 1, 2, ... раундов.
«ПРОТИВ»:В ПДЛ многие свойства невыразимы. Например, в ПДЛ нельзя выразить существование выигрышной стратегии в произвольной конечной игре.
Логика Дерева Вычислений (CTL)
●CTL – это тоже «фрагмент» динамической логики с неподвижными точками, в котором «µ» и «ν» могут встречаться только в специальных макросах. Доводы «за» и «против» CTL те же, что и ПДЛ, хотя CTL более выразительная логика, чем ПДЛ.В ПДЛ и CTL невыразимы свойства справедливости. Например: если начиная с какого-то момента какой-либо из процессов постоянно готов к исполнению, то рано или поздно после этого он получит исполняется (центральный процессор в свое полное распоряжение и т. п.).
Аалгоритмы + Структуры Данных = Программы
Программы верификации моделей можно классифицировать по представлению данных.
• Прямое представление («explicit»): семантика формулы в модели – это множество, заданное своей характеристической функцией, представленной битовым вектором.
• Символьное представление: семантика формулы в модели – это множество, заданное своей характеристическая функция которого задана или булевской формулой, или арифметическим выражением, и т. д.
«Symbolic» и «Unbounded» верификация моделей
В частности,• «Symbolic» = «символическая» верификация
моделей: используются ориентированные двоичные диаграммы решений (OBDD) для представления булевских формул.
• «Unbounded» = «ограниченная» верификация моделей: используются конъюнктивные нормальные формы (к.н.ф.) для представления булевских формул.
• Аффинная верификация моделей: используются аффинные арифметические выражения для представления характеристических функций интервалов целых числах.
Но есть еще одна интересная головоломка...
Есть 40 монет, среди которых 3 лёгких – фальшивые,
а остальные – настоящие, все настоящие монеты имеют равный вес.
Спрашивается, можно ли найти 18 настоящих монет за 3 взвешивания на чашечных весах?
... и её обобщение для программистов
Как программно проверить, что среди N монет можно найти V настоящих за K взвешиваний, если известно, что среди этих монет
есть ровно L лёгких фальшивых монет?
Принимаются любые решения (необязательно в терминах программных логик).