Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pred_prog_tutor.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.03 Mб
Скачать

2.5. Система правил вывода программы из спецификации

Понятие корректности программы, введенное в разд. 2.3, состоит из трех условий (2.7–2.9). Главным из них является условие (2.7) соответствия программы и спецификации, согласно которому постусловие оператора S должно быть доказано из LS(S). Однако в практике построения программ из математического решения задачи, как правило, реализуется вывод в обратную сторону: программа выводится из спецификации. Нашей целью является определения условий, при которых такой вывод был бы возможен, с построением соответствующих правил доказательства корректности программы. Необходимым условием является однозначность спецификации.

2.5.1. Однозначность предикатов

Предикат H(x, y) является однозначным в области X для набора переменных x, если он определяет функцию, отображающую значения набора x в значения набора y. Должно быть истинным следующее условие:

"xX "y1,y2. H(x, y1) & H(x, y2) Þ y1 = y2 .

Отметим, что однозначный предикат в некоторой области X не обязательно является реализуемым в этой области.

Оператор S является однозначным в области X, если формула LS(S)(x, y) однозначна в области X. Нетрудно убедиться, что оператор суперпозиции A; B, параллельный оператор A || B и условный оператор if (C) A else B являются однозначными, если однозначными являются операторы A и B.

Спецификация оператора S, представленная предусловием P(x) и постусловием Q(x, y), является однозначной, если постусловие является однозначным в области предусловия, т. е.

"x. P(x) Þ "y1,y2. (Q(x, y1) & Q(x, y2) Þ y1 = y2) .

Отметим, что однозначная спецификация не обязательно является реализуемой.

Лемма 2.7. Допустим, предикат D(x, y) является однозначным в области X, а предикат Z(x, y) реализуем в области X. Пусть истинна формула Z(x, y) Þ D(x, y). Тогда истинна следующая формула: "xÎX. D(x, y) Þ Z(x, y). Как следствие, предикаты D и Z оказываются тождественными в области X.

Доказательство. Пусть истинно D(x, y) для некоторого xÎX. Докажем истинность Z(x, y). Поскольку предикат Z реализуем, то существует некоторый y’, для которого истинно Z(x, y’). Из Z(x, y) Þ D(x, y) получаем истинность D(x, y’). Поскольку истинны D(x, y) и D(x, y’), то из однозначности D следует y = y’. Тогда истинно Z(x, y). □

2.5.2. Теорема тождества спецификации и программы

Теорема определяет условия, при которых программа может быть выведена из спецификации.

Теорема 2.1 тождества спецификации и программы. Рассмотрим программу со спецификацией в виде тройки Хоара:

{P(x)} S {Q(x, y)} 7 . (2.15)

Допустим, оператор S является однозначным в области истинности предусловия P(x), а спецификация оператора S является реализуемой. Предположим, LS(S)(x, y) выводима из спецификации, т. е.

P(x) & Q(x, y) Þ LS(S)(x, y) . (2.16)

Тогда программа (2.15) является корректной.

Доказательство. Для доказательства корректности программы (2.15) достаточно доказать истинность формулы (2.10), т. е.

P(x) Þ [ LS(S)(x, y)   Q(x, y) ] & $y. LS(S)(x, y) .

Допустим, предусловие P(x) истинно.

Докажем истинность $y. LS(S)(x, y). Поскольку спецификация предиката S реализуема, то истинна формула $y. Q(x, y). Пусть эта формула истинна для некоторого y’. Тогда из (2.16) истинна LS(S)(x, y’) и, следовательно, $y. LS(S)(x, y).

Докажем истинность формулы LS(S)(x, y)  Q(x, y). Поскольку истинны P(x) и формула (2.16), то истинна формула Q(x, y)  LS(S)(x, y). В соответствии с леммой 2.7 истинна формула LS(S)(x, y)  Q(x, y), поскольку постусловие Q(x, y) реализуемо, а LS(S)(x, y)  однозначно. □

Лемма 2.8. В условиях теоремы 2.1 истинна следующая формула:

P(x) Þ (LS(S)(x, y) º Q(x, y)) .

Доказательство. Допустим, предусловие P(x) истинно. Истинность формулы LS(S)(x, y)  Q(x, y) установлена при доказательстве теоремы 2.1. Обратная импликация следует из (2.16). □

Как следствие леммы 2.8 спецификация в виде предусловия P(x) и постусловия Q(x, y) оказывается однозначной.

Лемма 2.9. Допустим, программа (2.15) является корректной, а ее спецификация  однозначной. Тогда истинна формула (2.16), т. е. LS(S)(x, y) выводима из спецификации.

Доказательство. Допустим, истинны P(x) и Q(x, y). Докажем истинность LS(S)(x, y). Из корректности программы (2.15) по формуле (2.10) следует истинность формулы LS(S)(x, y)  Q(x, y), а также реализуемость LS(S)(x, y). Пусть для некоторого y’ истинно LS(S)(x, y’). Тогда истинно Q(x, y’), а из однозначности Q следует y = y’. Следовательно, истинно LS(S)(x, y). □

Теорема 2.1, сформулированная для программы в целом, применима также к произвольным операторам программы. Предлагаемая ниже система правил доказательства корректности операторов базируется на теореме 2.1, в соответствии с которой для реализуемой спецификации и при условии однозначности используемых операторов требуется доказать истинность формулы (2.16). Отметим, что однозначности спецификации не требуется. Однако в случае неоднозначной спецификации не удастся доказать истинность формулы (2.16).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]