27.10.10 Лекция 5Предикатное программирование

Содержание

Слайд 2

Пусть рекурсивный предикат D(z: u) принадлежит кольцу (3.36), т.е. D = Aj для некоторого j.

Пусть рекурсивный предикат D(z: u) принадлежит кольцу (3.36), т.е. D = Aj
Логическая семантика предиката D определяется следующим образом:
LS(D(z: u))  ≅  (z, u)∈pr(j, ∪m≥0Gm) (3.40)
Систему (3.36) определений кольца предикатов запишем в векторном виде: A ≡ K(A), где A = (A1, A2,…, An), K = (K1, K2,…, Kn). Определим цепь векторов предикатов {Am}m≥0:
A0 ≡ Ф, Am+1 ≡ K(Am), m ≥ 0, (3.41)
где Ф ≅ (F, F, …, F) ⎯ вектор тотально ложных предикатов. Цепь {Am}m≥0 соответствует цепи (3.39) вектор-графиков {Gm}m≥0, поскольку Gm = (Gr(Am1), Gr(Am2),…, Gr(Amn)).
G0 = ∅, Gm+1 = V(Gm), m ≥ 0 (3.39)
Ai(xi: yi) ≡ Ki(xi: yi); i = 1…n; n > 0, (3.36)

Слайд 3

Рекурсивное кольцо предикатов представим в виде:
A ≡ K(A1, A2,…, An, E1, E2,…, Es) (3.42)
E1, E2,…, Es, s > 0, ⎯ предикаты, используемые в

Рекурсивное кольцо предикатов представим в виде: A ≡ K(A1, A2,…, An, E1,
правых частях определений (3.36), но не принадлежащих данному кольцу.
Лемма 3.16. Пусть предикаты E1, E2,…, Es, используемые в системе (3.42), обладают свойством согласованности. Тогда рекурсивные предикаты A1, A2,…, An кольца (3.42) обладают свойством согласованности.

Слайд 4

3. Язык исчисления вычислимых предикатов (продолжение 3)

3. Язык исчисления вычислимых предикатов (продолжение 3)

Слайд 5

Однозначность предикатов
Лемма 3.17. Оператор суперпозиции (3.16), параллельный оператор (3.19) или условный оператор

Однозначность предикатов Лемма 3.17. Оператор суперпозиции (3.16), параллельный оператор (3.19) или условный
(3.20) является однозначным, если вызываемые в операторе предикаты B и C являются однозначными.
Лемма 3.18. Пусть имеется рекурсивное кольцо предикатов (3.42). Кроме рекурсивных предикатов A1, A2,…,An в правых частях определений кольца предикатов используются предикаты E1, E2,…, Es. Предположим, что предикаты E1, E2,…, Es являются однозначными. Если аргумент определения кольца имеет предикатный тип, то предикат, являющийся значением аргумента, считается однозначным. Тогда рекурсивные предикаты A1, A2,…,An кольца (3.42) являются однозначными.
Доказательство. Из-за ограничений на сложные формы рекурсии предикат, являющийся значением аргумента, не может входить в кольцо предикатов. Поэтому можно считать, что такой предикат находится среди E1, E2,…, Es.
A ≡ K(A1, A2,…, An, E1, E2,…, Es) (3.42)

Слайд 6

Пусть D(u: v) ⎯ рекурсивный предикат кольца, т.е. D = Aj для некоторого j.

Пусть D(u: v) ⎯ рекурсивный предикат кольца, т.е. D = Aj для
Допустим, истинны D(u: v1) и D(u: v2). Необходимо доказать, что v1 = v2. В соответствии с леммой 3.13 существует m, при котором Dm(u: v1) и Dm(u: v2) ⎯ истинны. Поэтому достаточно доказать, каждый элемент Am цепи {Am}m≥0, определенной в (3.41), является вектором однозначных предикатов. Доказательство проводится индукцией по m.
Элемент A0 является вектором однозначных предикатов, поскольку тотально ложный предикат F является однозначным. Допустим, по индуктивному предположению, Am-1 является вектором однозначных предикатов. Докажем это свойство для Am. В правой части каждого определения из Am используется оператор суперпозиции, параллельный оператор или условный оператор. Вызываемые предикаты в правой части: Am-11, Am-12,…, Am-1n и E1, E2,…, Es ⎯ однозначны. Однозначность компонент Am следует из леммы 3.17. □
Базисные предикаты ConsPred и ConsArray не являются однозначными. В двух разных исполнениях вызова ConsPred(x, B: A) (при совпадающих x и B) в качестве значения переменной A будут получены разные имена.

Слайд 7

Лемма 3.19. Вызов C(…), где C ⎯ переменная предикатного типа, является однозначным,

Лемма 3.19. Вызов C(…), где C ⎯ переменная предикатного типа, является однозначным,
если для каждого вызова конструктора ConsPred(x, B: A) или ConsArray(x, B: A) предикат B является однозначным.
Теорема 3.2. Допустим, всякий базисный предикат языка CCP, кроме ConsPred и ConsArray, является однозначным. Пусть имеется программа на языке CCP, и ее исполнение реализуется вызовом предиката D(u: v), причем в наборе v нет переменных предикатного типа. Тогда предикат D является однозначным.
Доказательство. Сначала доказательство проводится для программы, в которой нет переменных предикатного типа.
Рассмотрим случай, когда программа не содержит рекурсивно определяемых предикатов. Если предикат D ⎯ базисный, то его однозначность гарантируется условием теоремы. Пусть предикат D имеет определение в виде оператора суперпозиции, параллельного оператора или условного оператора. В соответствии с леммой 3.17 достаточно установить однозначность предикатов B и C, вызываемых в правой части определения. Если эти предикаты ⎯ базисные, то их однозначность является условием теоремы. Если один из них ⎯ определяемый, то его полное замкнутое определение ⎯ программа меньшего размера. Далее по индукции.

Слайд 8

Имеется рекурсивных дерево колец (теорема 3.1). Для колец, являющихся листьями, однозначность следует

Имеется рекурсивных дерево колец (теорема 3.1). Для колец, являющихся листьями, однозначность следует
из леммы 3.18. Применяется индукция по длине пути в дереве колец. Доказательство легко обобщается для случая, когда в программе имеются переменные предикатного типа, а их значения ⎯ однозначные предикаты.
Допустим, в программе П имеются переменные предикатного типа. Обозначим через SUBS(П) набор предикатов, являющийся объединением множеств заместителей для всех переменных предикатного типа в программе П. Для набора предикатов M из П обозначим через П[M] минимальную программу, являющуюся частью П и содержащую определения предикатов набора M. Пусть П0 = П, Пj+1 = Пj[SUBS(Пj)], j=0, 1, 2, … . В теореме 3.1 доказано, что для некоторого k программа Пk ≠ ∅, а Пk+1 = ∅. Программа Пk не содержит переменных предикатного типа. Однозначность предикатов программы Пk доказана выше. Тогда предикаты B1, B2,…, Bn, входящие в SUBS(Пk-1), являются однозначными. В соответствии с леммой 3.19 любой вызов вида C(…) в программе Пk-1, где C ⎯ переменная предикатного типа, является однозначным. Доказательство теоремы, представленное выше, обобщается для программы Пk-1, поскольку согласно принятым ограничениям вызов вида C(…) не может участвовать в рекурсии. Доказательство теоремы для произвольной программы Пi, i = k-1, …, 0, проводится по индукции. □

Слайд 9

4. Система правил доказательства корректности операторов 4.1. Правила для однозначной спецификации

4. Система правил доказательства корректности операторов 4.1. Правила для однозначной спецификации

Слайд 10

Предикат B(x, y) корректен относительно [PB(x), QB(x, y)], если:
P(x) ⇒ [Lk(x, y) ⇒ Q(x, y)] &

Предикат B(x, y) корректен относительно [PB(x), QB(x, y)], если: P(x) ⇒ [Lk(x,
∃y. Lk(x, y) (2.5)
P(x) ⇒ [LS(B(x, y)) ⇒ Q(x, y)] & ∃y. LS(B(x, y) (4.1)
Corr(B, P, Q) ≅ (4.1)
Правила для корректного оператора
Лемма 4.3. Пусть имеется оператор B со спецификацией в виде тройки Хоара {PB(x)} B {QB(x, y)}. Предполагается, что оператор B является корректным Тогда истинны следующие правила вывода:
Правило E1. PB(x) ├ ∃y. QB(x, y)
Правило E2. PB(x) ├ ∃y. LS(B(x, y))
Правило E3. PB(x) ├ LS(B(x, y)) ⇒ QB(x, y)

Слайд 11

Теорема 2.1 тождества спецификации и программы P(x) { S (x, y) ♦k } Q(x, y) (2.1)
Оператор

Теорема 2.1 тождества спецификации и программы P(x) { S (x, y) ♦k
S(x, y) является однозначным, а спецификация [P(x), Q(x, y)] ⎯ тотальной. Пусть истина формула:
P(x) & Q(x, y) ⇒ LS(S(x, y)) (4.6)
Тогда программа (2.1) является корректной.
Лемма 2.8. В условиях теоремы 2.1 истинна ф-ла:
P(x) ⇒ (LS(S(x, y)) ≡ Q(x, y))
Лемма 2.9. Допустим, программа (2.1) является корректной, а ее спецификация ⎯ однозначной. Тогда истинна формула (4.6), т.е. LS(S(x, y)) выводима из спецификации.

Слайд 12

Правила для параллельного оператора

{P(x)} A || B {Q(x, y, z)} (4.17)
{PA(x)} A

Правила для параллельного оператора {P(x)} A || B {Q(x, y, z)} (4.17)
{QA(x, y)}, {PB(x)} B {QB(x, z)}
Правило LP1. P(x) ├ PB(x) & PC(x)
Правило LP2. P(x) & Q(x, y, z) ├ QA(x, y).
Правило LP3. P(x) & Q(x, y, z) ├ QB(x, z).
Лемма 4.10. Пусть спецификация параллельного оператора (4.17) реализуема, операторы A и B однозначны в области предусловий и корректны, а их спецификации ⎯ однозначны. Если правила LP1, LP2 и LP3 истинны, то параллельный оператор (4.17) является корректным.
Доказательство. Операторы A и B ⎯ однозначны ⇒ оператор (4.17) однозначный. Поскольку спецификация оператора (4.17) реализуема, в соответствии с теоремой 2.1 достаточно доказать:
P(x) & Q(x, y, z) ⇒ LS(A || B)(x, y, z)
LS(A || B)(x, y, z) ≅ LS(A)(x, y) & LS(B)(x, z) (4.2)
Пусть истинны P(x) и Q(x, y, z). Докажем истинность LS(A)(x, y) и LS(B)(x, z). Из истинности предусловия P(x) по правилу LP1 следует истинность PA(x) и PB(x). По правилам LP2 и LP3 становятся истинными QA(x, y) и QB(x, z). Для предикатов A и B выполняются условия леммы 2.9. Поэтому истинны формулы:
PA(x) & QA(x, y) ⇒ LS(A)(x, y) PB(x) & QB(x, z) ⇒ LS(B)(x, z)
Посылки этих формул истинны ⇒ истинны LS(A)(x, y) и LS(B)(x, z). □

Слайд 13

Правила для оператора суперпозиции

{P(x)} A; B {Q(x, y)} (4.18)
{PA(x)} A {QA(x, z)}, {PB(z)}

Правила для оператора суперпозиции {P(x)} A; B {Q(x, y)} (4.18) {PA(x)} A
B {QB(z, y)}
Правило LS1. P(x) ├ PA(x)
Правило LS2. P(x) & Q(x, y) & QA(x, z) ├ PB(z) & QB(z, y)
Лемма 4.11. Пусть спецификация оператора суперпозиции (4.18) реализуема, операторы A и B однозначны в области предусловий и корректны, а их спецификации ⎯ однозначны. Если правила LS1 и LS2 истинны, то оператор суперпозиции (4.18) является корректным.
Доказательство. Поскольку операторы A и B ⎯ однозначны, то и оператор суперпозиции (4.18) является однозначным. В соответствии с теоремой 2.1 для доказательства леммы достаточно доказать истинность формулы:
P(x) & Q(x, y) ⇒ LS(A; B)(x, y)
LS(A; B)(x, y) ≅ ∃z.(LS(A)(x, z) & LS(B)(z, y)) (4.1)

Слайд 14

Пусть истинны P(x) и Q(x, y). Докажем истинность ∃z.(LS(A)(x, z) & LS(B)(z, y)). Из истинности предусловия P(x)

Пусть истинны P(x) и Q(x, y). Докажем истинность ∃z.(LS(A)(x, z) & LS(B)(z,
по правилу LS1 следует истинность PA(x). Из корректности оператора A по правилу E2 следует истинность формулы ∃z. LS(A)(x, z). Допустим для некоторого z0 истинно LS(A)(x, z0). Для оператора A истинны условия леммы 2.8. Поэтому истинно QA(x, z0). В соответствии с правилом LS2 истинна формула PB(z0) & QB(z0, y). В соответствии с леммой 2.9 истинна формула
PB(z) & QB(z, y) ⇒ LS(B)(z, y)
Тогда истинна LS(B)(z0, y). В итоге, будет истинна формула ∃z.(LS(A)(x, z) & LS(B)(z, y)). □

Слайд 15

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

{P(x)} if (C) A else B {Q(x, y)} (4.19)
{PA(x)} A {QA(x, y)},

Правила для условного оператора {P(x)} if (C) A else B {Q(x, y)}
{PB(x)} B {QB(x, y)}
Правило LC1. P(x) & Q(x, y) & C ├ PA(x) & QA(x, y)
Правило LC2. P(x) & Q(x, y) & ¬C ├ PB(x) & QB(x, y)
Лемма 2.12. Пусть спецификация условного оператора (4.19) реализуема, операторы A и B однозначны в области предусловий и корректны, а их спецификации ⎯ однозначны. Если правила LC1 и LC2 истинны, то условный оператор (4.19) является корректным.
Доказательство. Поскольку операторы A и B ⎯ однозначны, то и условный оператор (4.19) является однозначным. В соответствии с теоремой 2.1 для доказательства леммы достаточно доказать:
P(x) & Q(x, y) ⇒ LS( if (C) A else B ) (x, y)
LS(if (C) A else B)(x, y) ≅ (C ⇒ LS(A)(x, y)) & (¬C ⇒ LS(B)(x, y)) (4.3)

Слайд 16

Пусть истинны P(x) и Q(x, y). Докажем истинность формулы C ⇒ LS(A)(x, y). Пусть истинно C.

Пусть истинны P(x) и Q(x, y). Докажем истинность формулы C ⇒ LS(A)(x,
Докажем истинность LS(A)(x, y). Можно применить правило LC1, поскольку истинны P(x), Q(x, y) и C. Получим истинность формулы PA(x) & QA(x, y). В соответствии с леммой 2.9 истинна формула
PA(x) & QA(x, y) ⇒ LS(A)(x, y)
Поскольку истинна посылка, то истинно LS(A)(x, y). Следовательно, доказана истинность формулы C ⇒ LS(A)(x, y). Истинность формулы ¬C ⇒ LS(B)(x, y) доказывается аналогично. □

Слайд 17

4. Система правил доказательства корректности программы 4.2. Правила для общего случая

4. Система правил доказательства корректности программы 4.2. Правила для общего случая

Слайд 18

Правила для параллельного оператора

{P(x)} A || B {Q(x, y, z)}

Правила для параллельного оператора {P(x)} A || B {Q(x, y, z)} (4.11)
(4.11)
{PA(x)} A {QA(x, y)}, {PB(x)} B {QB(x, z)}
Правило RP1. P(x) ├ PA(x) & PB(x)
Правило RP2. QA(x, y), QB(x, z) ├ Q (x, y, z)
Лемма 4.4. Пусть предусловие P(x) истинно. Допустим, операторы A и B корректны. Если правила RP1 и RP2 истинны (т.е. правая часть доказуема из левой части для каждого правила), то параллельный оператор (4.11) является корректным.
Доказательство. В соответствии с формулой (4.1) достаточно доказать реализуемость LS(A || B) и выводимость постусловия Q(x, y, z) из LS(A || B).
LS(A || B) (x, y, z) ≅ LS(A)(x, y) & LS(B)(x, z).

Слайд 19

Из истинности предусловия P(x) по правилу RP1 следует истинность PA(x) и PB(x).

Из истинности предусловия P(x) по правилу RP1 следует истинность PA(x) и PB(x).
Далее, по правилу E2 становятся истинными формулы ∃y.  LS(A)(x, y) и ∃z. LS(B)(x, z). Их конъюнкция определяет реализуемость LS(A || B)(x, y, z).
Докажем выводимость постусловия Q(x, y, z) из LS(A)(x, y) & LS(B)(x, z). Допустим, истинна LS(A)(x, y) & LS(B)(x, z). Применим правило E3 для PA(x) и PB(x), истинность которых определена выше. Получаем истинность формул LS(A)(x, y) ⇒ QA(x, y) и LS(B)(x, z) ⇒ QB(x, z). Как следствие, будут истинны QA(x, y) и QB(x, z). Применяя правило RP2, получаем истинность постусловия Q(x, y, z). □

Слайд 20

Правила для оператора суперпозиции

{P(x)} A; B {Q(x, y)} (4.12)
{PA(x)} A {QA(x, z)}, {PB(z)}

Правила для оператора суперпозиции {P(x)} A; B {Q(x, y)} (4.12) {PA(x)} A
B {QB(z, y)}
Правило RS1. P(x) ├ PA(x) & ∀z (QA(x, z) ⇒ PB(z))
Правило RS2. P(x) & ∃z (QA(x, z) & QB(z, y))├ Q(x, y)
Лемма 4.5. Пусть предусловие P(x) истинно. Допустим, операторы A и B корректны. Если правила RS1 и RS2 истинны, то оператор суперпозиции (4.12) является корректным.
Доказательство. В соответствии с формулой (4.1) достаточно доказать реализуемость LS(A; B)(x, y) и выводимость постусловия Q(x, y) из LS(A; B)(x, y).
LS(A; B)(x, y) ≅ ∃z.(LS(A)(x, z) & LS(B)(z, y)) .

Слайд 21

Из истинности предусловия P(x) по правилу RS1 следует истинность формул PA(x) и

Из истинности предусловия P(x) по правилу RS1 следует истинность формул PA(x) и
∀z (QA(x, z) ⇒ PB(z)). Из истинности PA(x) и правила E2 следует истинность формулы ∃z. LS(A)(x, z). Допустим для некоторого z0 формула LS(A)(x, z0) истинна. Из истинности PA(x) и правила E3 следует истинность LS(A)(x, z0) ⇒ QA(x, z0). Как следствие, истинно QA(x, z0). Далее, из истинности формулы ∀z (QA(x, z) ⇒ PB(z)) следует истинность PB(z0). По правилу E2 истинна формула ∃y LS(B)(z0, y). Далее, истинна конъюнкция LS(A)(x,z0) & ∃y LS(B)(z0, y), и затем ― формула ∃y. ∃z. (LS(A)(x, z) & LS(B)(z, y)), т.е. доказана реализуемость LS(A; B)(x, y).

Слайд 22

Докажем выводимость постусловия Q(x, y) из LS(A; B)(x, y). Пусть LS(A; B)(x, y) истинно, т.е. истинна формула

Докажем выводимость постусловия Q(x, y) из LS(A; B)(x, y). Пусть LS(A; B)(x,
∃z.(LS(A)(x, z) & LS(B)(z, y)). Пусть формула истинна для некоторого z1. По правилу E3 истинна формула LS(A)(x, z1)⇒QA(x, z1) и далее ― QA(x, z1). Истинность QA(x, z1) и ∀z (QA(x, z) ⇒ PB(z)) влечет истинность PB(z1). По правилу E3 истинно LS(B)(z1, y) ⇒ QB(z1, y). Поскольку LS(B)(z1, y) истинно, то истинно QB(z1, y). Таким образом, истинна правая часть правила RS2, а значит и левая, т.е. истинно постусловие Q(x, y). □

Слайд 23

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

{P(x)} if (C) A else B {Q(x, y)} (4.13)
{PA(x)} A {QA(x, y)}, {PB(x)}

Правила для условного оператора {P(x)} if (C) A else B {Q(x, y)}
B {QB(x, y)}
Правило RC1. P(x) & C ├ PA(x)
Правило RC2. P(x) & ¬C ├ PB(x)
Правило RC3. P(x) & C & QA(x, y) ├ Q(x, y)
Правило RC4. P(x) & ¬C & QB(x, y) ├ Q(x, y)
Лемма 4.6. Пусть предусловие P(x) истинно. Допустим, операторы A и B корректны. Если правила RC1, RC2, RC3 и RC4 истинны, то условный оператор (4.13) является корректным.
Доказательство. Для оператора (4.13) необходимо доказать формулу (2.10). В ней дважды встречается подформула LS(if (C) A else B)(x, y), определяемая в виде: (C ⇒ LS(A)(x, y)) & (¬C ⇒ LS(B)(x, y)) (4.14)
Достаточно доказать реализуемость формулы (4.14) и выводимость постусловия Q(x, y) из (4.14).

Слайд 24

Допустим, что условие C истинно. Из истинности предусловия P(x) по правилу RC1

Допустим, что условие C истинно. Из истинности предусловия P(x) по правилу RC1
следует истинность PA(x). По правилу E2 истинна формула ∃y. LS(A)(x, y). Далее будет истинной формула ∃y. (C ⇒ LS(A)(x, y)). Из истинности C следует истинность формулы ¬C ⇒ LS(B)(x, y), и следовательно, формулы ∃y. [(C ⇒ LS(A)(x, y)) & (¬C ⇒ LS(B)(x, y))]. Это обеспечивает реализуемость формулы (4.14) в случае истинности C. Реализуемость (4.14) в случае ложности C доказывается аналогичным образом.
Докажем выводимость постусловия Q(x, y) из формулы (2.14). Допустим, истинна формула (4.14). Пусть C истинно. Тогда истинно LS(A)(x, y). По правилу RC1 истинно PA(x). По правилу E3 истинна формула LS(A)(x, y) ⇒ QA(x, y), а значит и QA(x, y). Таким образом, истинна правая часть правила RC3. Тогда истинна левая часть правила, т.е. истинно постусловие Q(x, y). Доказательство истинности постусловия Q(x, y) для случая, когда C ложно, проводится аналогично с использованием правила RC4. □

Слайд 25

4. Система правил декомпозиции доказательства корректности операторов 4.3. Правила для однозначной спецификации

4. Система правил декомпозиции доказательства корректности операторов 4.3. Правила для однозначной спецификации

Слайд 26

Правила для параллельного оператора


Для параллельного оператора A(x: y) || B(x: z) определим правила:
Правило FP1. R(x, y,

Правила для параллельного оператора Для параллельного оператора A(x: y) || B(x: z)
z) ├ LS(A(x, y))
Правило FP2. R(x, y, z) ├ LS(B(x, z))
Лемма 7. Если истинны правила FP1 и FP2, то истинна формула:
R(x, y, z) ⇒ LS(A(x: y) || B(x: z))
Доказательство. Формула LS(A(x: y) || B(x: z)) эквивалентна LS(A(x: y)) & LS(B(x: z)). Поэтому достаточно доказать истинность двух формул:
R(x, y, z) ⇒ LS(A(x: y))
R(x, y, z) ⇒ LS(B(x: z))
Эти формулы эквивалентны правилам FP1 и FP2. □
P(x) & Q(x, y) ⇒ LS(S(x, y)) (4.6)

Слайд 27

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

Для условного оператора if (C) A(x: y) else B(x: y) определим правила:
Правило FC1. R(x, y)

Правила для условного оператора Для условного оператора if (C) A(x: y) else
& C ├ LS(A(x: y))
Правило FC2. R(x, y) & ¬C ├ LS(B(x: y))
Лемма 9. Если истинны правила FC1 и FC2, то истинна следующая формула:
R(x, y) ⇒ LS(if (C) A(x: y) else B(x: y))
Доказательство. Формула LS(if (C) A(x: y) else B(x: y)) эквивалентна
(C ⇒ LS(A(x: y))) & (¬C ⇒ LS(B(x: y)))
Таким образом, требуется доказать истинность:
R(x, y) ⇒ (C ⇒ LS(A(x: y))) & (¬C ⇒ LS(B(x: y)))
Последняя формула эквивалентна конъюнкции формул:
R(x, y) ⇒ (C ⇒ LS(A(x: y)))
R(x, y) ⇒ (¬C ⇒ LS(B(x: y)))
А эти формулы эвивалентны правилам FC1 и FC2. □

Слайд 28

Правила для оператора суперпозиции

Для оператора суперпозиции A(x: z); B(x, z: y) определим правила: более общего

Правила для оператора суперпозиции Для оператора суперпозиции A(x: z); B(x, z: y)
вида
Правило FS1. R(x, y) ├ ∃z. LS(A(x: z))
Правило FS2. R(x, y) & LS(A(x: z)) ├ LS(B(x, z: y))
Лемма 3. Если истинны правила FS1 и FS2, то истинна следующая формула:
R(x, y) ⇒ LS(A(x: z); B(x, z: y))
Доказательство. Формула LS(A(x: z); B(x, z: y)) эквивалентна ∃z.(LS(A(x: z)) & LS(B(x, z: y))). Пусть истинно R(x, y). Докажем истинность ∃z.(LS(A(x: z)) & LS(B(x, z: y))). По правилу FS1 истинна формула ∃z. LS(A(x: z)). Допустим для некоторого z0 истинно LS(A(x: z0)). По правилу FS2 истинна формула LS(B(x, z0: y)). В итоге, будет истинна формула ∃z.(LS(A(x: z)) & LS(B(x, z: y))). □
• позиция квантора существования
• вхождение LS(…) в левой части

Слайд 29

Правила для нерекурсивного вызова

Пусть имеется нерекурсивный вызов предиката A(x: y) со спецификацией:
{P(x)} A(x: y) {Q(x, y)} (3)
Для

Правила для нерекурсивного вызова Пусть имеется нерекурсивный вызов предиката A(x: y) со
нерекурсивного вызова предиката A(x: y) определим правило:
Правило FB1. R(x, y) ├ P(x) & Q(x, y)
Лемма 15. Допустим, нерекурсивный вызов предиката A(x: y) является корректным, а его спецификация (3) ⎯ однозначна. Если истинно правило FB1, то истинна следующая формула:
R(x, y) ⇒ LS(A(x: y))
Доказательство. Пусть истинно R(x, y). Докажем истинность LS(A(x: y)). Поскольку истинна правая часть правила FB1, то истинна формула P(x) & Q(x, y) в правой части. В соответствии с леммой 2.9 истинна формула P(x) & Q(x, y) ⇒ LS(A(x: y)) и, следовательно, LS(A(x: y)). □

Слайд 30

4. Система правил декомпозиции доказательства корректности операторов 4.4. Правила для общего случая

4. Система правил декомпозиции доказательства корректности операторов 4.4. Правила для общего случая

Слайд 31

Декомпозиция для параллельного оператора


{P(x)} B(x: y) {Q(x, y)}
Corr(B, P, Q) ≅ P(x) ⇒ [LS(B(x, y))

Декомпозиция для параллельного оператора {P(x)} B(x: y) {Q(x, y)} Corr(B, P, Q)
⇒ Q(x, y)] & ∃y. LS(B(x, y) (4.1)
{P(x)}  A(x: y) || B(x: z)  {Q(x, y, z)}
Q(x, y, z) ≅ Q1(x, y) & Q2(x, z)
Лемма.
Corr(A(x: y) || B(x: z), P, Q) =
Corr(A(x: y), P, Q1) & Corr(B(x: z), P, Q2)

Слайд 32

Декомпозиция для условного оператора


{P(x)} B(x: y) {Q(x, y)}
Corr(B, P, Q) ≅ P(x) ⇒ [LS(B(x, y))

Декомпозиция для условного оператора {P(x)} B(x: y) {Q(x, y)} Corr(B, P, Q)
⇒ Q(x, y)] & ∃y. LS(B(x, y) (4.1)
{P(x)}  if (C) A(x: y) else B(x: y)  {Q(x, y)}
Лемма.
Corr(if (C) A(x: y) else B(x: y), P, Q) =
Corr(A(x: y), P & C, Q) & Corr(B(x: y), P & ¬C, Q)

Слайд 33

Декомпозиция для оператора суперпозиции


Рассмотрим спецификацию оператора суперпозиции в виде тройки Хоара:
{P(x)}

Декомпозиция для оператора суперпозиции Рассмотрим спецификацию оператора суперпозиции в виде тройки Хоара:
A; B {Q(x, y)} . (2.12)
Предположим, что оператор A коррекетн. Спецификация представлены тройками:
{PA(x)} A {QA(x, z)},
Определим правила, гарантирующие корректность оператора суперпозиции (2.12).
Правило RS17. P(x) ├ PA(x) & ∀z (QA(x, z) ⇒ ∃y LS(B)(z, y)).
Правило RS18. P(x) & ∃z (QA(x, z) & LS(B)(z, y)) ├ Q(x, y).
Лемма 2.5. Пусть предусловие P(x) истинно. Допустим, оператор A корректен. Если правила RS1 и RS2 истинны, то оператор суперпозиции (2.12) является корректным.

Слайд 34

Задачи верификации и синтеза

на примере оператора суперпозиции
A(x: y) ≡

Задачи верификации и синтеза на примере оператора суперпозиции A(x: y) ≡ pre
pre P(x) { B(x: z); C(z: y) } post Q(x, y) (3)
Операторы B(x: z) и C(z: y) корректны относительно своих спецификаций [PB(x), QB(x, z)] и [PC(z), QC(z, y)].
Спецификация [P(x), Q(x, y)] тотальна. Корректность предиката A гарантируется в случае истинности правил:
Правило LS1. P(x) ├ PB(x)
Правило LS2. P(x) & Q(x, y) & QB(x, z) ├ PC(z) & QC(z, y)
Задача дедуктивной верификации
Задача программного синтеза: требуется построить программу предиката A, представленного тотальной спецификацией [P(x), Q(x, y)].
Пусть для некоторых предикатов PB(x), QB(x, z), PC(z) и QC(z, y) доказана истинность правил LS1 и LS2. Тогда синтезируем программу (3).
Корректность оператора S(x: y) относительно однозначной и тотальной спецификации [P(x), Q(x, y)]:
P(x) & Q(x, y) ⇒ LS(S(x: y)) (2)

Слайд 35

5. Построение языка предикатного программирования. Методы доказательства корректности предикатных программ

5. Построение языка предикатного программирования. Методы доказательства корректности предикатных программ

Слайд 36

P(x) ⇒ [ LS(S)(x, y) ⇒ Q(x, y) ] & ∃y. LS(S)(x, y) (4.1)
P(x)

P(x) ⇒ [ LS(S)(x, y) ⇒ Q(x, y) ] & ∃y. LS(S)(x,
& Q(x, y) ⇒ LS(S)(x, y) (4.6)
Система правил доказательства корректности оператора суперпозиции, параллельного оператора и условного оператора
Исчисление вычислимых предикатов ― множество вычислимых формул языка исчисления предикатов ― язык CCP (Calculus of Computable Predicates)
минимальный полный базис языка предикатного программирования
Язык предикатного программирования P (Predicate programming language).
Расширяющаяся последовательность языков:
CCP = P0, P1, P2, P3, P4 = P.

Слайд 37

Язык P1: подстановка определения предиката на место вызова
Подстановка определения предиката

Язык P1: подстановка определения предиката на место вызова Подстановка определения предиката A(x:
A(x: y) ≡ K(x: y) на место вызова A(t: z) ⎯ блок { K(t: z) }, где x, y, t, z ⎯ наборы переменных. Происходит замена вхождений переменных и переименование локалов.
LS({ K(t: z) }) ≅  LS(K(t: z)) (5.1)
runBlock(s, { K(t: z) }):
runStat(s, K(t: z)) (5.2)
Программа П’, получаемая из программы П подстановкой определения предиката на место вызова, эквивалентна программе П’: исполнение любого предиката программы П’ на фиксированном наборе аргументов дает тот же результат, что и в программе П.
Язык P1: многократное произвольное применение подстановок определений предикатов на место вызовов.
Конструкция: вызов или блок как подоператор в трех базисных операторах

Слайд 38

Язык P2: оператор суперпозиции и параллельный оператор общего вида
Операторы { A(…); B(…) }; C(…) и

Язык P2: оператор суперпозиции и параллельный оператор общего вида Операторы { A(…);
A(…); { B(…); C(…) } являются эквивалентными
Эквивалентны { A(…) || B(…) } || C(…) и A(…) || { B(…) || C(…) }
Язык P2: оператор суперпозиции и параллельный оператор общего вида: A1(…); A2(…); … ; An(…) и A1(…) || A2(…) || … || An(…) для n > 1.
P(x){B1(x: z1); B2(z1: z2);...; Bj(zj-1: zj);...; Bn(zn-1: y)}Q(x, y) (5.3)
x, z1, z2, …, zn-1, y ⎯ различные непересекающиеся наборы переменных, B1, B2, …, Bn обозначают предикаты или блоки языка P1 со спецификациями (предусловиями и постусловиями) PB1(x), QB1(x, z1), PB2(z1), QB2(z1, z2), …, PBn(zn-1), QBn(zn-1, y).

Слайд 39

LS(B1(x: z1); B2(z1: z2);...; Bj(zj-1: zj);...; Bn(zn-1: y)) ≡
∃ z1, z2, …, zn-1.LS(B1(x: z1)) & LS(B2(z1: z2)) &...&
& LS(Bj(zj-1: zj)) &...& LS(Bn(zn-1: y)) (5.4)
runStat(s,  B1(x: z1); …; Bn(zn-1: y))
runCallBlock(s, B1(x: z1));

LS(B1(x: z1); B2(z1: z2);...; Bj(zj-1: zj);...; Bn(zn-1: y)) ≡ ∃ z1, z2,
(5.5)
runCallBlock(s, B2(z1: z2)); .....;
runCallBlock(s, Bj(zj-1: zj)); .....;
runCallBlock(s, Bn(zn-1: y))

Слайд 40

Параллельный оператор общего вида
P(x){B1(x: y1) || B2(x: y2)||...||Bj(x: yj)||...||Bn(x: yn)}Q(x, y) (5.7)
x, y = y1,…,yn ⎯ различные

Параллельный оператор общего вида P(x){B1(x: y1) || B2(x: y2)||...||Bj(x: yj)||...||Bn(x: yn)}Q(x, y)
непересекающиеся наборы переменных, B1, B2, …, Bn ⎯ предикаты или блоки языка P1 со спецификациями PB1(x), QB1(x, y1), PB2(x), QB2(x, y2),…, PBn(x), QBn(x, yn).
LS(B1(x: y1) || B2(x: y2) ||...|| Bj(x: yj) ||...|| Bn(x: yn)) ≡
LS(B1(x: y1)) & LS(B2(x: y2)) & ... & 
& LS(Bj(x:  yj)) & ... & LS(Bn(x: yn)) (5.8)
runStat(s,  B1(…) || B2(…) || … || Bn(…))
runCallBlock(s, B1(x: y1)) || (5.9)
runCallBlock(s, B2(x: y2)) || ... ||
runCallBlock(s, Bj(x: yj)) || ... ||
runCallBlock(s, Bn(x: yn))

Слайд 41

Правило опускания скобок:
{A(…); B(…)} || C(…) → A(…); B(…) || C(…).
A(x: y); {B(z: t) || C(u: v)}
Набор y пересекается с набором z

Правило опускания скобок: {A(…); B(…)} || C(…) → A(…); B(…) || C(…).
и не пересекается с набором u. Тогда
A(x: y); {B(z: t) || C(u: v)} ≡ {A(x: y); B(z: t)} || C(u: v) ≡
≡ A(x: y); B(z: t)  ||  C(u: v).
{A(x: y) || B(z: t)}; C(u: v) ≡ A(x: y) || B(z: t); C(u: v),
если наборы y и u не пересекаются.

Слайд 42

Язык P2: другое обобщение оператора суперпозиции
B(x: z); C(x, z: y) ⎯ обобщение оператора суперпозиции.
P(x) {B1(x: z1); B2(x, z1: z2);...;

Язык P2: другое обобщение оператора суперпозиции B(x: z); C(x, z: y) ⎯
Bj(x, zj-1: zj);...; Bn(x, zn-1: y)} Q(x, y)
(5.10)
Частный случай: B(x: z); C(u, z: y), набор u ⎯ часть набора x
Наиболее общая форма суперпозиции:
A(x: t, y) ≡ P(x) {B(x: z, t); C(x, z: y)} Q(x, t, y) (5.11)
наборы x и t могут быть пустыми
Спецификации: PB(x), QB(x, z, t), PC(x, z), QC(x, z, y).

Слайд 43

B1(x: x1, z, t1) ≡ PB(x) {B(x: z, t1) || x1 = x} QB(x, z, t1)

B1(x: x1, z, t1) ≡ PB(x) {B(x: z, t1) || x1 =
& x1 = x
C1(x1,z,t1: y, t) ≡ PC(x1, z) {C(x1, z: y) || t = t1} QC(x1,z,y) & t = t1
Поскольку B1(x: x1, z, t1); C1(x1, z, t1: t, y) ≡ B(x: z, t); C(x, z: y), то справедливо другое определение предиката A:
A(x: t, y) ≡ P(x) {B1(x: x1, z, t1); C1(x1, z, t1: t, y)} Q(x, t, y) (5.12)
LS(B(x: z, t); C(x, z: y)) ≡ ∃z. (LS(B(x: z, t)) & LS(C(z, y))) (5.13)
runCallBlock(s, B(x: z, t)); (5.14)
runCallBlock (s, C(x, z: y))
Правило RS1’. P(x) ├
PB(x) & ∀x1, z, t1 ((QB(x, z, t1) & x1 = x) ⇒ PC(x1, z))
Правило RS2’. P(x) &
∃x1,z,t1 (QB(x1, z, t1) & x1 = x & QC(x1, z, y) & t = t1) ├
Q(x, t, y)
A(x: t, y) ≡ P(x) {B(x: z, t); C(x, z: y)} Q(x, t, y) (5.11)

Слайд 44

Правило RS5. P(x) ├ PB(x) & ∀z, t (QB(x, z, t) ⇒ PC(x, z))
Правило

Правило RS5. P(x) ├ PB(x) & ∀z, t (QB(x, z, t) ⇒
RS6. P(x) & ∃z (QB(x, z, t) & (QC(x, z, y))├ Q(x, t, y)
Лемма 5.5. Пусть предусловие P(x) истинно. Допустим, операторы B и C корректны. Если правила RS5 и RS6 истинны, то оператор суперпозиции (5.11) является корректным.
Правило LS1’. P(x) ├ PB(x)
Правило LS2’. P(x) & Q(x, t, y) & QB(x, z, t1) & x1=x ├
PC(x1, z) & QC(x1, z, y) & t = t1
Правило LS6. P(x) ├ PB(x)
Правило LS7. P(x) & Q(x, t, y) & QB(x, z, t1) ├
PC(x, z) & QC(x, z, y) & t = t1
Лемма 5.6. Допустим, спецификация оператора суперпозиции (5.11) реализуема, операторы B и C однозначны в области предусловий и корректны, а их спецификации ⎯ однозначны. Если правила LS6 и LS7 истинны, то оператор суперпозиции (5.11) является корректным.

Слайд 45

Язык P3: выражения
Функциональная форма. Предикат A(t: z).
z = A(t) ≅ A(t: z)
|z| = A(t), если

Язык P3: выражения Функциональная форма. Предикат A(t: z). z = A(t) ≅
z ⎯ набор
Инфиксная и постфиксная нотация как разновидность функциональной формы
+(x, y: z), -(x, y: z), -(x: y), <(x, y: b)
z = x + y, z = x - y, y = -x , b = x < y.
Изображения констант:
ConsIntZero( : x) ConsIntOne( : x) valInt(“2089” : x)
x = 0 x = 1 x = 2089
B(x: z); C(x, z: y) ≡ z =B(x); C(x, z: y) ≡ C(x, B(x): y)
{ A(x: y) || B(z: t) }; C(y, t: u) ≡
≡ { y = A(x) || t = B(z) }; C(y, t: u) ≡ C(A(x), B(z): u)

Слайд 46

D(x, z: u) ≡ P(x, z) {C(A(x), B(z): u)} Q(x, z, u) (5.15)
E(x, z: y,

D(x, z: u) ≡ P(x, z) {C(A(x), B(z): u)} Q(x, z, u)
t) ≡ PA(x) & PB(z){A(x: y) || B(z: t)}QA(x, y) & QB(z, t)
D(x, z: u) ≡ P(x, z) { E(x, z: y, t); C(y, t: u)} Q(x, z, u) (5.16)
Правило RS1’.
P(x, z) ├ PA(x) & PB(z) & ∀y,t (QA(x, y)& QB(z, t) ⇒ PC(y, t))
Правило RS2’.
P(x, z) & ∃y,t. (QA(x, y) & QB(z, t) & QC(y, t, u)) ├ Q(x, z, u)

Слайд 47

Правило RS7. P(x, z) ├ PA(x) & PB(z) & PC(A(x), B(z))
Правило RS8.

Правило RS7. P(x, z) ├ PA(x) & PB(z) & PC(A(x), B(z)) Правило
P(x, z) & QC(A(x), B(z), u) ├ Q(x, z, u).
Лемма 5.7. Пусть предусловие P(x, z) истинно. Допустим, операторы A, B и C корректны, операторы A и B, а также их спецификации PA(x), QA(x, y), PB(z), QB(z, t) ⎯ однозначны.. Если правила RS7 и RS8 истинны, то оператор (5.15) со спецификацией P(x, z) и Q(x, z, u) является корректным.
Для получения правил серии L применим правила LS1 и LS2 для оператора в правой части (5.16).
Правило LS1’. P(x, z) ├ PA(x) & PB(z).
Правило LS2’.
P(x, z) & Q(x, z, u) & QA(x, y) & QB(z, t)├ PC(y, t) & QC(y, t, u).

Слайд 48

Правило LS8. P(x, z) ├ PA(x) & PB(z).
Правило LS9.
P(x, z)

Правило LS8. P(x, z) ├ PA(x) & PB(z). Правило LS9. P(x, z)
& Q(x, z, u)├ PC(A(x), B(z)) & QC(A(x), B(z), u).
Лемма 5.8. Допустим, спецификация P(x, z) и Q(x, z, u) оператора (5.15) реализуема, операторы A, B и C однозначны в области предусловий и корректны, а их спецификации ⎯ однозначны. Если правила LS8 и LS9 истинны, то оператор (5.15) является корректным.
Понятие выражения.
z = a * b; y = z + c ≡ y = (a * b) + c ≡ y = a * b + c
Правила приоритетов операций
Переменные, изображения констант, вызовы функций и их представление в виде операций являются частными случаями понятия выражения.
Имя файла: 27.10.10 - - -Лекция-5Предикатное-программирование.pptx
Количество просмотров: 101
Количество скачиваний: 0