Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures / lecture2.ppt
Скачиваний:
9
Добавлен:
06.06.2015
Размер:
264.7 Кб
Скачать

Программа – оператор S(x, y)

x аргументы набор входных данных, y результаты набор выходных данных.

Предикатная спецификация программы формула P(x) & Q(x, y)

P(x) предусловие, истинное перед исполнением программы,

Q(x, y) постусловие, истинное после исполнения программы.

Спецификация изображается в виде: [ P (x), Q(x, y) ]

Программа со спецификацией представляется тройкой Хоара {P(x)} S(x, y) {Q(x, y)}.

P(x) { S (x, y) } Q(x, y)

(2.1)

L(S(x, y)) – логика программы

Однозначность программы S(x, y) :

P(x) & L(S(x, y1)) & L(S(x, y2)) y1 = y2

Однозначность спецификации [P(x), Q(x, y)] :

P(x) & Q(x, y1) & Q(x, y2) y1 = y2

Тотальность спецификации [P(x), Q(x, y)] :

P(x) y. Q(x, y)

Свойство 2. Программа должна соответствовать спецификации.

Конкретизация закона соответствия программы и спецификации:

-аргументы x должны соответствовать предусловию P(x) перед исполнением программы;

-аргументы x и результаты y должны удовлетворять постусловию Q(x, y) после завершения исполнения программы.

P(x) { S (x, y) } Q(x, y)

(2.1)

Предусловие P(x) не следует из L(S(x, y)). Оно должно быть доказано ранее – перед вызовом S(x, y). Здесь же оно должно быть истинно априори, и поэтому должно быть посылкой, т.е.:

P(x) & L(S(x, y)) Q(x, y)

(2.3)

Данное условие определяет частичную корректность программы S (x, y).

Условие завершения программы:

 

P(x) y. L(S(x, y))

(2.4)

Тотальная корректность программы S(x, y) относительно спецификации [P(x), Q(x, y)] складывается из частичной корректности и условия завершения программы:

P(x) [L(S(x, y)) Q(x, y)] & y. L(S(x, y)) (2.5)

Частичная корректность

Условие завершения

 

программы

P(x) & L(S(x, y)) Q(x, y)

(2.3)

P(x) y. L(S(x, y))

(2.4)

Термин «корректность» далее используется в смысле тотальной корректности.

Лемма 2.1. Если программа корректна относительно спецификации, то спецификация тотальна.

Доказательство. Пусть истинно P(x). Необходимо доказать истинность y. Q(x, y). Из условия (2.4) следует истинность

y. L(S(x, y)). Допустим, истинность этой формулы реализуется для некоторого y0. Из условия (2.3) получаем истинность Q(x, y0), а значит и y. Q(x, y). □

Предикат A(x, y) является однозначным в области X, если:

x X. A(x, y1) & A(x, y2) y1 = y2

Лемма 2.2. Допустим, предикат D(x, y) является однозначным в области X, а предикат Z(x, y) тотальный в области X. Пусть истинна формулаx 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.1 тождества спецификации и программы

P(x) { S (x, y) } Q(x, y)

(2.1)

Оператор S(x, y) является однозначным, а спецификация [P(x), Q(x, y)] тотальной. Пусть истина формула:

P(x) & Q(x, y) L(x, y)

(2.6)

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

 

Доказательство. Достаточно доказать (2.5), т.е.:

 

P(x) [L(S(x, y)) Q(x, y)] & y. L(S(x, y))

(2.5)

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

Докажем истинность формулы L(S(x, y)) Q(x, y). Поскольку истинны P(x) и формула (2.6), то истинна формула Q(x, y) L(S(x, y)).

В соответствии с леммой 2.2 истинна формула L(S(x, y)) Q(x, y), поскольку постусловие Q(x, y) тотально, а L(S(x, y)) однозначно. □

Лемма 2.8. В условиях теоремы 2.1 истинна ф-ла: P(x) (L(S(x, y)) Q(x, y))

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

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

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

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

Структура множества программ.

Иерархия классов программ

Всякий класс программ представлен тройкой: (программа, спецификация, условия корректности) Программа – язык (базисные языковые конструкции и типы), формальная семантика языка.

Спецификация – язык, формы спецификации. Базисные условия корректности программы относительно спецификации.

1.Класс невзаимодействующих программ. Язык исчисления вычислимых предикатов, формальная операционная семантика, логика программы. Спецификация в виде предусловия и

постусловия: [ P (x), Q(x, y) ]. Формула тотальной

корректности: P(x) [ L(S(x: y)) Q(x, y) ] & y. L(S(x: y))

2. Класс объектно-ориентированных программ.

База – язык невзаимодействующих программ.

Дополнительно - классы, инкапсуляция (внутреннее состояние), наследование.

Спецификация в виде предусловия и постусловия для методов, инвариант класса. Для наследуемых

методов предусловия могут быть ослаблены, а постусловие и инвариант класса – усилены.

Формула тотальной корректности для методов. Выполнимость инварианта после вызова любого метода класса.

Соседние файлы в папке lectures