Например, дана программа if p then g elseh fi; при чтении мы предполагаем, что программа имеет функцию f. Задача верификации в этом случае заключается в доказательстве того, что мы сделали верное предположение
f = [if p then g else h fi]
Если перед нами стоит задача проектирования, то, как правило, нам известна функция и нам надо раскрыть её с помощью такой элементарной программы, программная функция которой совпадала бы с исходной.
f = [if p then g else h fi]
Часто задача ставится таким образом, что нам известна функция и известна программа, возможно её реализующая, и нам необходимо доказать это соответствие или опровергнуть его. И опять нам необходимо доказать выше приведённое равенство: f = [if p then g elseh fi]. Таким образом, во всех трёх случаях задачи верификации ( т.е. доказательство правильности программы) идентичны.
4.2 Алгебра корректности структурированных программ
Когда речь идёт о правильности программ, задача доказательства правильности программы связана с ответом на один из двух вопросов:
верно ли, что
1) f = [P]? или 2) f Ì [P]?
Первый вопрос является вопросом полной правильности, второй вопрос - вопросом достаточной правильности. При полной правильности программа P вычисляет только правильные значения функции f от её аргументов, ( т. е., P не определена для аргументов, не принадлежащих области определения f). В случае достаточной правильности P может вычислять значения функции для аргументов, нее принадлежащих области определения f. Например,
F1 = ( x ¹ y ® x, y := y, x)
P1 = while x ³ y do x, y := y, x od
P2 = do x, y := y, x until x ¹ y od
P3 = if x ³ y then x, y := y, x fi
Программные функции:
[P1]={(X,Y)|(x>y®x, y:= y, x | x<y®x, y:= x, y)=(x¹y®x, y:=min(x, y), max( y, x) }
[P2] = {(X, Y)|(x ¹ y® x, y := y, x )}
[P3]={(X,Y)|(x³ y® x, y := y, x | истина® x, y := x, y)=(x, y:=min(x, y),max(x, y)}
Следовательно, из перечисленных выше программ, только P2 удовлетворяет полной правильности F1 = [P2], остальные не удовлетворяют даже достаточной правильности. Если рассмотреть функцию F2 = (x ³ y ®x, y := y, x) ,то программа P2 удовлетворяет достаточной правильности f 2 Ì [P3]
Если P не является элементарной программой, но является структурированной программой, то благодаря алгебре структурированных программ возможна декомпозиция P на элементарные составляющие. Декомпозиция ведёт к снижению трудоёмкости доказательства правильности программы P. Допустим, например, необходимо доказать, что составная программа F = if p then GelseH fi выполняет нужную функцию f. При этом G, H в свою очередь являются программами. Вместо того чтобы попытаться доказать правильность сложной программы, что может быть весьма затруднительным, предположим вид функций [G] и [H] и попытаемся доказать полную правильность составляющих программ, т.е. то, что g =[G] и h = [H].
В случае успешного доказательства можно, используя аксиому замещения, упростить исходную программу и свести задачу к доказательству следующего равенства: f = [if p theng else h fi].
Если это равенство будет доказано, то тем самым будет доказана полная правильность, т.е. равенство f = [F]. Однако, если какая-нибудь из трёх программ удовлетворяет только условию достаточной правильности, то программа F будет лишь достаточной правильной. Например, для программы
SUB = whilex>0 L y>0 do x:= x - 1; y:= y - 1 od;
if y > 0 then x := -y fi ; free y
схема доказательства будет следующей:
полная правильность достаточная правильность
1) s = [if y > 0 then x := -y fi ] s Ì [if y > 0 then x := -y fi ]
2) d = [ x:= x -1; y:= y -1] d Ì [ x:= x -1; y:= y -1]
3) m = [while x>0 L y>0 do d od] m Ì [while x>0 L y>0 do d od]
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.