Выполнение операторов программы – результаты и допущения

Вычисление выражений

Приоритет операций:

↑ (возведение в степень)

+, - (знак)

*, / (умножение, деление)

+, - (сложение, вычитание)

<, >, =, ≤, ≥, ≠ (операции отношения)

not (записывается также в виде )

and (записывается также в виде )

or (записывается также в виде )

(логическая импликация)

Пример. Массив Y описан для значений индекса только от 1 до 10.

Значения переменных n = 11, х = 3

Пусть требуется вычислить значение выражения (n ≤ 10 and Y[n]=x )

11 ≤ 10 and Y[11]=3

ложно and (не определено = 3)

ложно and не определено

ложно

Выполнение оператора присваивания

x := E(x, y,…)

Аксиома

х′- значение переменной x до выполнения оператора присваивания

х′′- значение переменной x после выполнения оператора присваивания

x′′ = E(x, y′,…)

y′′ = y

Основы доказательства корректности

Формулируется математическая теорема о результатах выполнения сегмента программы:

Если условие V (предусловие) истинно непосредственно перед выполнением сегмента программы, тогда после выполнения сегмента тоже истнинно будет условие P (постусловие)

{V} S {P}

V есть предусловие для постусловия P по отношению к оператору S

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

Оператор полностью корректный, если для частично корректного оператора доказано, что его выполнение действительно заканчивается.

НЕ нашли? Не то? Что вы ищете?

Правила вывода

Правило вывода Р1 – усиление предусловия и ослабление постусловия

Правило вывода А1 – получение предусловия оператора присваивания

{?} x:=E {P}

V = PxE

Чтобы получить предусловие для заданного постусловия Р по отношению к заданному оператору присваивания x:=E, подставим выражение (Е) вместо переменной с именем х всюду, где это имя встечается в постусловии Р.

Правило вывода А2 – Проверка предусловия оператора присваивания

{V} x:=E {P}

Если

То

{V} x:=E {P}

Правило вывода IF1 - Проверка предусловия условного оператора

Если

{V and B} S1 {P} и

{V and not B} S2 {P}

то

{V} if B then S1 else S2 endif {P}

Правило вывода IF2 – Получение предусловия условного оператора

Если

{V1} S1 {P} и

{V2} S2 {P}

то

{(V1 and B) or (V2 and not B)} if B then S1 else S2 endif {P}

Правило вывода IF3 –Условный оператор

Если

{V1} S1 {P} и

{V2} S2 {P}

то

{V1 and V2 }if B then S1 else S2 endif {P}

Правило вывода IF4 – Условный оператор

Если

{V1 and B} S1 {P} и

{V2 and not B} S2 {P}

то

{V1 and V2 }if B then S1 else S2 endif {P}

Правило вывода S1 – Последовательность операторов

Если

{V} S1 {P1} и

{P1} S2 {P}

то

{V} (S1; S2) {P}

Правило вывода W1 – Цикл с условием продолжения без инициализации

Если

{I and B} S {I}

то

{I} while B do S endwhile {I and not B)

Условие I называют инвариантом цикла.

Правило вывода W2 – Цикл с условием продолжения с инициализацией

Пусть задано условие I (инвариант цикла)

Если

{V} инициализация {I} и

{I and B} S {I} и

{I and not B} P

то

{V} (инициализация; while B do S endwhile ){P}

Чтобы доказать частичную корректность цикла с условием продолжения с помощью праила вывода W2, необходимо:

1. найти инвариант цикла I,

2. доказать, что {V} инициализация {I},

3.доказать, что {I and B} S {I},

4. доказать, что {I and not B} P

Для доказательства, что цикл полностью корректный необходимо дополнительно показать, что цикл завершается.

Правило вывода DC1 – разделяй и властвуй

Если

{V1} S{P1} и

{V2} S {P2}

то

{V1 and V2 } S { P1 and P2 }

Правило вывода DC2 – разделяй и властвуй

Если

{V1} S{P1} и

{V2} S {P2}

то

{V1 orV2 } S { P1 or P2 }

Правило вывода DC3 – разделяй и властвуй

Если

{V} S{P1} и

{V} S {P2}

то

{V } S { P1 and P2 }

Правило вывода DC4 – разделяй и властвуй

Если

{V} S{P1} и

{V} S {P2}

то

{V } S { P1 or P2 }