Интуитивно программа понимается как набор операторов, переводящих машину из одних состояний в другие. Хоар предложил для отладки и верификации программ рассматривать формулы, описывающие состояния машины перед выполнением (предусловие) и после выполнения (постусловие) программы. Программе p сопоставлялась запись: {А}p{В}, означающая, что предусловие описывается формулой А, а постусловие формулой В. Пратт предложил запись: А ® [p]В – если перед выполнением программы состояние машины описывается формулой А, то после выполнения верна формула В. Это позволило описывать вычислительные процессы, состоящие из комплексов программ, с помощью модальной логики, рассматривая каждую программу как модальность.
Пропозициональная динамическая логика
Пусть p0 – произвольное множество. Его элементы называются базисными программами. Предположим, что p Ê p0 – такое множество слов, что вместе с любыми p1, p2 Î p оно содержит:
1) p1 È p2 (неопределённый выбор одной из программ p1 или p2);
2) p1 ; p2 (выполнение p1 ,затем p2);
3) p1* (выполнение p1 конечное, возможно нулевое, количество раз);
4) p1 Ç p2 (одновременное выполнение программ p1 или p2).
Элементы из P будем называть программами. Рассмотрим атомы из Р как простые высказывания о состояниях машины, в которую загружаются программы. Для каждой программы p Î P обозначим через [p] соответствующую ей модальность. Определим формулы пропозициональной динамической логики PDL по индукции:
1) атомы р Î Р – формулы;
2) А & В, ØА, [p]А – формулы для любых формул А и В, и элемента p Î P;
3) все формулы PDL составляются с помощью правил 1 – 2.
Введём обозначение: <p>А как сокращение для Ø[p]ØА.
Для каждой формулы А определим программу: А? Î P, тестирующую, верна ли формула А. Эта программа заканчивает работу, если формула А верна, и зависает (аварийно завершает работу), если нет. Эта программа вводится с целью интерпретации оператора
if (A) then p1 else p2
как программы
(А?; p1) È ((ØА)? ; p2) Î P.
Семантика пропозициональной динамической логики
Пусть P0 – множество базисных программ, P – множество всех программ, Р – атомные формулы, F(P) – все формулы, W – множество состояний машины, в которой могут работать программы pÎP. Для каждого p Î P определена модальность [p]. Стало быть, мы должны каждому p поставить в соответствие некоторое отношение доступности Rp Í W ´ W.
Шкала Крипке (или система переходов) будет состоять из пары: (W, (Rp)pÎP), где W – множество состояний, а Rp – отношения Rp Í W ´ W.
Программу можно интерпретировать как множество пар (x, y) Î Rp таких, что после выполнения программы p машина из состояния х перейдёт в состояние y. Каждому атому p Î P ставится в соответствие подмножество h(p) Í W состояний, при которых высказывание р верно.
Интерпретацией называется тройка M = (W, (Rp)pÎP, h), состоящая из шкалы Крипке и оценки h : P ® P(W), удовлетворяющих соотношениям:
1) Ra È b = Ra È Rb;
2) Ra ; b = Ra ° Rb;
3) ;
4) RA? = {(x, x) : x Î W и M, x |= A}.
Здесь Rp* – наименьшее рефлексивное транзитивное отношение, содержащее Rp. Расширим h на множество формул F(P), полагая t Î h(A), если и только если M, t |= A. Получим соотношения:
5) h(A Ú B) = h(A) Ú h(B);
6) h(ØA) = W h(A);
7) h(<p>A) = {t Î W : (t, u) Î Rp для некоторого u Î h(A)}.
В некоторых случаях под семантикой логики PDL понимают шкалу с расширенной на F(P) оценкой, удовлетворяющие соотношениям 1 – 7.
Аксиомы PDL
Можно ожидать, что для любых формулы А и программы p Î P формула <p*>А, (означающая возможность того, что после кратного применения p машина перейдёт в состояние, удовлетворяющее формуле А), будет равносильна формуле А Ú <p; p*>А, (означающей, что верно А, или А будет, возможно, верно после применения p не менее, чем 1 раз). Получим аксиому:
<p*>А « А Ú <p; p*> А.
Аналогично, исходя из других соображений, получаем аксиомы PDL и формальную теорию:
1) все тавтологии исчисления высказываний;
2) <a>A & <a>B « <a>(A & B);
3) <a>(A Ú B) « <a>A Ú <a>B);
4) <a Ú b>A « <a>A Ú <b>A;
5) <a ; b>A « <a><b>A;
6) <A?>B « A&B;
7) A È <a><a*>A « <a*>A;
8) <a*>A ® A Ú <a*> (ØA & <a>A).
Аксиомы 1 – 3 стандартны для модальных логик. Аксиома 8 равносильна аксиоме Сегерберга:
[a*](A ® [a]A) ® (A ® [a*]A)
и называется аксиомой PDL – индукции.
Правила вывода
; .
Для формальной теории PDL справедливы теорема корректности и полноты.
Логика Хоара
Как мы уже отмечали, логика Хоара предназначалась для дедуктивного доказательства правильности программ. Её формулами являются тройки {А}p{В}, состоящие из предусловия А, программы p и постусловия В. Приведём форму записи, применяемой Хоаром, и её перевод на язык исчисления PDL:
skip |
= 1? |
fail |
= 0? |
if A then a else b |
= (A? ; a) È (ØA? ; b) |
if A1 ® p1 |…| An ® pn fi |
= (A1? ; p1) È … È (An? ; pn) |
do A ® p od |
= (A? ; p)* ; (ØA)? |
{A}p{B} |
= A ® [p] B |
Форма {A}p{B} называется тройкой Хоара. Логика Хоара является формальной теорией для вывода с помощью троек Хоара. Преобразуя аксиомы языка PDL, можно получить следующие правила вывода логики Хоара:
(композиция)
(условие)
(цикл)
(следствие).