108 Глава 5. Доказательство корректности структурированных программ
Пусть
ϕ ∼ x = y ∧ y < 3, ψ ∼ y
2
< 5.
Если σ |= ϕ, то σ 6|= x < y, следовательно, Π (σ) = σ. Это означает,
что тройка {ϕ}Π {ψ} полностью корректна, так как если σ |= ϕ, то
Π (σ) определено и Π (σ) |= ψ.
Пусть
ϕ ∼ y − x = 4, ψ ∼ x + y = 1.
Тогда σ |= x < y. Если σy < 5, то σy ≤ 4. Это значит, что σy = 4 и
σx = 0, следовательно, Π (σ) определено и
Π (σ) = {(y, 0) ; (x, 1)}.
Для остальных σ таких, что σ |= ϕ, Π (σ) не определено. Итак, тройка
{ϕ}Π {ψ} является частично корректной, но не является полностью
корректной.
Пусть
ϕ ∼ x + y = 5, ψ ∼ x − y = 3.
Рассмотрим следующее состояние: σ = {(x, 2) , (y, 3)}. Очевидно, σ |=
ϕ. Далее, σ |= x < y и σy < 5. Следовательно, Π (σ) определено и
Π (σ) = {(y, 0) ; (x, 4)}.
Ясно, что Π (σ) 6|= ψ. Таким образом, тройка {ϕ}Π {ψ} не является
частично корректной (и, тем более, полностью корректной).
Задача 5.3. Для каждой из программ из примера 3.5 на стр. 35 напи-
шите по три тройки Хоара, одна из которых должна быть полность
корректной, другая частично корректной, но не полностью коррект-
ной, третья — не частично корректной. Для всех ли программ это
можно сделать?
Замечание 5.2. Если Π (σ) определено для любого σ, то для любой
тройки Хоара с программой Π полная и частичная корректности эк-
вивалентны.
Замечание 5.3. Чтобы установить, что алгоритм
Alg A;
arg x
1
, . . . , x
n
;
Π
A
end;