Логіка Гоара: відмінності між версіями
[неперевірена версія] | [неперевірена версія] |
Вилучено вміст Додано вміст
Bunyk (обговорення | внесок) Створена сторінка: '''Логіка Хоара''' (також відома як '''Флойда-Хоара''') - це формальна система з множиною лог... |
Bunyk (обговорення | внесок) |
||
Рядок 20:
:<math> \frac{}{\{P\}\ \textbf{skip}\ \{P\}} \!</math>
=== Аксіома про присвоєння ===
Аксіома про присвоєння каже що після присвоєння для змінної виконується предикат, який виконувався для правої частини оператора присвоєння:
:<math> \frac{}{\{P[E/x]\}\ x:=E \ \{P\} } \!</math>
Приклади правильних трійок:
:*<math>\{x+1 = 43\}\ y:=x + 1\ \{ y = 43 \}\!</math>
:*<math>\{x + 1 \leq N \}\ x := x + 1\ \{x \leq N\}\ \!</math>
=== Правило композиції ===
Правило композиції застосовується до послідовно виконуваних програм ''S'' та ''T'', де ''S'' виконується до ''T'' і записується ''S;T''.
:<math> \frac {\{P\}\ S\ \{Q\}\ , \ \{Q\}\ T\ \{R\} } {\{P\}\ S;T\ \{R\}} \!</math>
Наприклад, розглянемо такі два присвоєння:
:<math>\{ x + 1 = 43\} \ y:=x + 1\ \{y =43 \}</math>
та
:<math>\{ y = 43\} \ z:=y\ \{z =43 \}</math>
З правила композиції:
:<math>\{ x + 1 = 43\} \ y:=x + 1; z:= y\ \{z =43 \}</math>
=== Правило умови ===
З трійки для умовного оператора можна вивести дві трійки: одну для випадку істинності умови, іншу для її хибності:
:<math>\frac { \{B \wedge P\}\ S\ \{Q\}\ ,\ \{\neg B \wedge P \}\ T\ \{Q\} }
{ \{P\}\ \textbf{if}\ B\ \textbf{then}\ S\ \textbf{else}\ T\ \textbf{endif}\ \{Q\} } \!</math>
=== Правило висновків ===
Передумову та/або постумову можна замінити, якщо для них виконуються певні [[імплікація|імплікації]]:
:<math>
\frac { P^\prime \rightarrow\ P\ ,\ \lbrace P \rbrace\ S\ \lbrace Q \rbrace\ ,\ Q \rightarrow\ Q^\prime }
Рядок 73 ⟶ 66:
\!</math>
===
:<math>\frac { \{P \wedge B \}\ S\ \{P\} }
Рядок 79 ⟶ 72:
\!</math>
=== Правило While для тотальної коректності ===
::<math>
Рядок 87 ⟶ 80:
{ [P]\ \textbf{while}\ B\ \textbf{do}\ S\ \textbf{done}\ [\neg B \wedge P] }
\!</math>
В цьому правилі на додачу до інваріанта циклу, також доводять завершуваність додаванням [[варіант циклу|варіанта циклу]] (тут ''t''), чиє значення строго спадає згідно з [[:en:well-founded relation]] протягом кожної ітерації. Через те що відношення "<" well-founded, кожна ітерація циклу перелічується спадними членами скінченного [[ланцюг (теорія порядку)|ланцюга]]. Також зауважте, що тут для позначення тотальної коректності використовуюються квадратні дужки, тобто завершуваності. (Це одне з можливих позначень тотальної коректності.)
== Приклади ==
:{|style="text-align:left"
|bgcolor="#C0C0C0" colspan=4|'''
|-
|<math>\{x+1 = 43\}\!</math>
|<math>\ y:=x + 1\ \!</math>
|<math>\{ y = 43 \}\!</math>
|(Аксіома присвоєння)
|-
|
Рядок 108 ⟶ 100:
|<math>\ y:=x + 1\ \!</math>
|<math>\{y=43 \land x=42\}\!</math>
|(Правило висновків)
|-
|bgcolor="#C0C0C0" colspan=4|'''
|-
|<math>\{x + 1 \leq N \}\!</math>
|<math>\ x := x + 1\ \!</math>
|<math>\{x \leq N\}\ \!</math>
|(Аксіома присвоєння)
|-
|
Рядок 125 ⟶ 117:
|<math>\ x := x + 1\ \!</math>
|<math>\{x \leq N\}\ \!</math>
|(Правило висновків)
|}
== Дивіться також ==
|