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

Логическая семантика вызова и определения предиката :

L(φ(d: e)) φ(d, e) , где φ имя предиката

L(A(x: y) K(x: y)) A(x, y) L(K(x: y))

Операционная семантика: метапрограмма

Метаязык. Память – набор секций. Секция памяти – набор переменных и их значений: аргументы, результаты, локалы.

s[a] – значение переменной с именем a в секции s s[x] – набор значений для набора имен x в секции s

s[a] := v оператор присваивания значения v переменной a в секции s s[x] := w – групповое присваивание набора значений w набору

переменных x в секции s

s = newSect(A) – создание в памяти новой секции s для определения

предиката с именем A

runCall(s, φ(d: e)) – исполнение вызова φ(d: e)

runStat(s, K(x: y)) – исполнение оператора K(x: y) правой части

 

Значение переменной предикатного типа

(имя

предиката, набор значений части аргументов)

 

Например, (A, z~), для A(z, t: y) K(z, t: y), где t не пусто.

 

s[C] = (A, z~) предикат A является заместителем переменной C предикатного типа.

subs(C) множество заместителей переменной C. A subs(C)

H(x: y) есть вызов предиката или оператор.

RUN(H, x, y) любое исполнение H(x: y) для значений набора x завершается со значениями набора y.

Свойство согласованности Cons(H)

x y L(H(x: y)) RUN(H, x, y)

(4.11)

Предикат A обладает свойством согласованности Cons(A) если любой его вызов обладает свойством согласованности

Вызов предиката

Вызов

A(z: u)

(3.12)

 

A(x: y) K(x: y)

(3.13)

q текущая секция

Процедура runCall(q, A(z: u)) абстрактного процессора:

 

s = newSect(A);

(3.14)

 

s[x] := q[z];

 

 

runStat(s, K(x: y));

 

 

q[u] := s[y];

 

Свойства:

x = z & u = y

(3.15)

Лемма 3.2. Пусть имеется определение (3.13) для предиката

A. Тогда Cons(K) Cons(A).

Доказательство проводится для вызова A(z: u). Пусть истинно Cons(K). Докажем истинность Cons(A).

Зафиксируем значения наборов z и u. Пусть истинно A(z: u).

Пусть истинно A(z: u). Тогда в соответствии с определением A(x: y) K(x: y) истинна формула K(z: u). Из этого следует, что все исполнения K(z: u) для набора z завершаются получением набора u. Рассмотрим исполнение A(z: u) по программе (3.14). В соответствии с (3.15) справедливы равенства x = z и u = y. Поэтому все исполнения K(x: y) завершаются получением y. Тогда исполнение последовательности (3.14), а значит и исполнение A(z: u), завершается получением значений набора u, что доказывает первую часть свойства Cons(A).

Пусть исполнение A(z: u) для набора z завершается получением набора u. Тогда завершается исполнение тела (3.14), в частности, исполнение K(x: y) завершается получением y. Поскольку в соответствии с (3.15) реализуется x = z и u = y, то исполнение K(z: u) завешается вычислением набора u. Из Cons(K) следует, что K(z: u)

истинно. Тогда из определения A(x: y) K(x: y) следует истинность A(z: u), что доказывает вторую часть свойства Cons(A). □

Оператор суперпозиции

A(x: y) B(x: z); C(z: y)

 

(3.16)

L(B(x: z); C(z: y)) z. (B(x, z) & C(z, y))

(3.17)

Процедура runStat(s, K(x: y)) абстрактного процессора:

 

runCall(s, B(x: z));

 

(3.18)

runCall(s, C(z: y))

 

 

z набор локальных переменных

секции s

 

Лемма 3.3 Cons(B) & Cons(C) Cons(H), где H обозначает B(x: z); C(z: y).

Доказательство. Пусть истинно Cons(B) и Cons(C). Докажем истинность Cons(H). Зафиксируем значения x и y. Пусть истинна H(x: y), т.е. истинна правая часть (3.17). Для некоторого z будут истинны B(x: z) и C(z: y). Из Cons(B) и Cons(C) следует, что исполнение B(x: z) завершается получением набора z, а исполнение C(z: y) вычислением набора y. Поэтому исполнение операторов (3.18), а значит и H(x: y), завершается вычислением y. Это доказывает первую часть истинности Cons(H).

Допустим, исполнение H(x: y) завершается вычислением y. Докажем истинность H(x: y). Исполнение пары операторов (3.18) завершается вычислением y. В частности, завершается первый оператор runCall(s, B(x: z)). Тогда существует некоторый набор z, являющийся результатом исполнения. Таким образом, для некоторого z исполняются вызовы B(x: z) и C(z: y). Из Cons(B) и Cons(C) следует истинность B(x: z) и C(z: y). Следовательно, истинна правая часть (3.18) и H(x: y). □

Параллельный оператор

A(x: y, z) B(x: y) || C(x: z)

(3.19)

x, y и z произвольные непересекающиеся наборы переменных, причем x может быть пустым.

Если B или C есть имя переменной предикатного типа, то это имя входит в набор x.

Логическая семантика параллельного оператора:

L(B(x: y) || C(x: z)) B(x, y) & C(x, z)

Процедура runStat(s, K(x: y)) абстрактного процессора: runCall(s, B(x: y)) ||

runCall(s, C(x: z))

Лемма 3.4. Cons(B) & Cons(C) Cons(H), где H обозначает B(x: y) || C(x: z).

Условный оператор

A(b, x: y) if (b) B(x: y) else C(x: y)

(3.20)

L(if (b) B(x: y) else C(x: y)) (b B(x, y)) ( b C(x, y)) (3.21)

Процедура runStat(s, K(x: y)) абстрактного процессора:

if (s[b]) runCall(s, B(x: y)) else runCall(s, C(x: y))

(3.22)

Лемма 3.5. Cons(B) & Cons(C) Cons(H), где H(b, x: y) обозначает if (b) B(x: y) else C(x: y).

Доказательство. Пусть истинно Cons(B) и Cons(C). Докажем истинность Cons(H). Зафиксируем значения b, x и y. Пусть истинна H(b, x: y). Тогда в соответствии с (3.21) истинны формулы b B(x, y) и b C(x, y). Рассмотрим случай, когда значение b истинно. Тогда истинна формула B(x, y). Из Cons(B) следует, что исполнение вызова B(x: y) завершается получением набора y. Поэтому исполнение оператора (3.22), а значит и H(b, x: y), завершается вычислением y. Это доказывает первую часть свойства Cons(H) для истинного значения b. Доказательство в случае ложного значения b проводится аналогично.

Допустим, исполнение H(b, x: y) завершается вычислением y, т.е. исполнение оператора (3.22) завершается вычислением y. Докажем истинность H(b, x: y). Пусть b истинно. Тогда исполнение вызова B(x: y) завершается получением набора y. Из Cons(B) следует истинность B(x: y). Тогда истинны формулы b B(x, y) и b C(x, y), поскольку b истинно. Следовательно, истинна правая часть (3.21) и H(b, x: y). Доказательство истинности H(b, x: y) в случае ложного значения b проводится аналогично. □

Конструктор предиката

Базисный предикат ConsPred(x, B: A), x набор переменных, B имя предиката, A имя переменной предикатного типа. B не ConsPred и не ConsArray

L(ConsPred(x, B: A))

y z. (L(A(y: z)) L(B(x, y: z)))

(3.23)

Процедура runCall(s, ConsPred(x, B: A)) абстрактного

 

процессора:

 

 

s[A] := pVal(B, s[x])

(3.24)

pVal(B, x~) = (C, (t~, x~))

(3.25)

где s[B] = (C, t~) для переменной B;

 

C=B и t~ = для имени предиката B

 

Пусть q[A]=(D, p).

Операционная семантика A(y: z) :

runCall(q, A(y: z)) runCall(q, D(p, y: z)).

 

Лемма 3.6. Cons(B) Cons(ConsPred).

 

Доказательство.

 

 

L(A(y: z)) L(B(x, y: z)) L(C(t~, x, y: z))

 

RUN(C(t~, x, y: z)) RUN(B( x, y: z)) RUN(A(y: z))

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