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

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

Оператор суперпозиции является правой частью следующего определения предиката:

A(x: y) º B(x: z); C(z: y) . (4.16)

Здесь x, y и z  произвольные непересекающиеся наборы переменных, причем набор x может быть пустым. Если B или C есть имя переменной предикатного типа, оно входит в набор x. Переменные набора z являются локальными переменными. Логическая семантика оператора суперпозиции представлена следующим образом:

LS(B(x: z); C(z: y))  $z. (B(x, z) & C(z, y)) . (4.17)

Допустим, определение предиката A исполняется в рамках секции s. Секция s состоит из переменных наборов x, y и z. Исполнение правой части определения (4.16) соответствует оператору runStat(s, K(x: y)) в (4.14) и определяется следующим образом:

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

runCall(s, C(z: y)) .

Таким образом, алгоритм вычисления суперпозиции состоит в последовательном исполнении вызовов предикатов B и C. Значения переменных набора z, вычисленные при исполнении предиката B, используются при вычислении предиката C.

Лемма 4.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), т. е. истинна правая часть (4.17). Для некоторого z будут истинны B(x: z) и C(z: y). Из Cons(B) и Cons(C) следует, что исполнение B(x: z) завершается получением набора z, а исполнение C(z: y)  вычислением набора y. Поэтому исполнение операторов (4.18), а значит и H(xy), завершается вычислением y. Это доказывает первую часть истинности Cons(H).

Допустим, исполнение H(x: y) завершается вычислением y. Докажем истинность H(xy). Исполнение пары операторов (4.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). Следовательно, истинна правая часть (18) и H(x: y). □

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

Параллельный оператор является правой частью следующего определения предиката:

A(x: y, z) º B(x: y) || C(x: z) . (4.19)

Здесь, x, y и z  произвольные непересекающиеся наборы переменных, причем набор x может быть пустым. Если B или C есть имя переменной предикатного типа, то оно входит в набор x. Логическая семантика параллельного оператора представлена следующим образом:

LS(B(x: y) || C(x: z))  B(x, y) & C(x, z) .

Допустим, определение предиката A исполняется в рамках секции s. Секция s состоит из переменных наборов x, y и z. Исполнение правой части определения (4.19) соответствует оператору runStat(s, K(x: y)) в (4.14) и определяется следующим образом:

runCall(s, B(x: y)) ||

runCall(s, C(x: z)) .

Алгоритм вычисления параллельной композиции || на метаязыке слагается из независимого вычисления указанных вызовов предикатов B и C. Поскольку эти два вычисления между собой не взаимодействуют, они могут проводиться параллельно. Эффект параллельной композиции равен конъюнкции эффектов композируемых операторов, т. е. B(x, y) & C(x, z).

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

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