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

5.3. Язык p2: другое обобщение оператора суперпозиции

Оператор B(x: z); C(z: y) определен как наиболее простая форма оператора суперпозиции; см. (4.16). Оператор B(x: z); C(x, z: y) является обобщением оператора суперпозиции. Применяя данное обобщение к оператору суперпозиции общего вида (5.3), получим оператор

P(x) {B1(x: z1); B2(x, z1: z2) ;...; Bj(x, zj-1: zj) ;...; Bn(x, zn-1: y)} Q(x, y) . (5.10)

Логическая и операционная семантика, правила RS3, RS4, LS3, LS4 обобщаются, а леммы 5.1 и 5.2 аналогичным образом доказываются для оператора (5.10). Отметим, что оператор вида B(x: z); C(u, z: y), где набор u содержит часть переменных набора x, можно рассматривать как частный случай оператора B(x: z); C(x, z: y).

Наиболее общей формой суперпозиции двух операторов является оператор

A(xt, y) º P(x) {B(x: z, t); C(x, z: y)} Q(x, t, y) . (5.11)

Здесь x, y, z, t  различные непересекающиеся наборы переменных, причем наборы x и t могут быть пустыми; B и C обозначают предикаты или блоки языка P1 со спецификациями (предусловиями и постусловиями) PB(x), QB(x, z, t), PC(x, z), QC(x, z, y).

Оператор суперпозиции (5.11) можно определить через оператор суперпозиции (4.16) и параллельный оператор (4.19) языка CCP следующим образом. Введем определения предикатов B1 и C1:

B1(x: x1, z, t1) º PB(x) {B(x: z, t1) || x1 = x} QB(x, z, t1) & 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(xt, y) º P(x) {B1(x: x1, z, t1); C1(x1, z, t1: t, y)} Q(x, t, y) . (5.12)

Определение (5.12) по форме соответствует простейшему оператору суперпозиции (4.16). Подставим правую часть (5.12) в определение логической и операционной семантики (4.17, 4.18) и проведем эквивалентные преобразования. Получим логическую и операционную семантику оператора (5.11):

LS(B(x: z, t); C(x, z: y)) º $z. (LS(B(x: z, t)) & LS(C(x, z, y))) . (5.13)

runCallBlock(s, B(x: z, t)); (5.14)

runCallBlock (s, C(x, z: y)) .

Для определения (5.12) применимы леммы 2.5 и 2.11. Применим правила RS1 и RS2 для оператора в правой части (5.12). Получим следующие правила.

Правило 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).

Эквивалентные преобразования RS1’ и RS2’ дают правила RS5 и RS6, по форме подобные правилам RS1 и RS2 для простейшего оператора суперпозиции (4.16).

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

Правило 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) является корректным.

Оператор суперпозиции вида (5.11) можно обобщить для произвольного числа композируемых операторов. Обобщается логическая и операционная семантика, а также лемма 5.5.

Применим правила LS1 и LS2 для оператора в правой части (5.12). Получим следующие правила.

Правило 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.

Эквивалентные преобразования LS1’ и LS2’ дают правила LS6 и LS7.

Правило 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) является корректным.

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