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

Лемма 3.7. Пусть имеется вызов ConsPred(x, B: A), причем Cons(B) истинно. Тогда истинно Cons(A).

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

Конструктор массива

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

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

(3.27)

Кодирование массива

A(y: z) A~[y] = z

(3.28)

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

 

 

s[A] = newArray(Y, Z);

// Y, Z - списки типов y, z

 

(3.29)

forAll y Y do runCall(s, B(x, y: s[A][y])) end

 

 

S(y: z) F(y). Тогда forAll y Y do S(y: z) end y Y. F(y)

(3.30)

Лемма 3.8. Cons(A). Доказательство непосредственно следует из соотношения (3.28). □

Лемма 3.9. Допустим, предикат B(x, y: z) определяет однозначную всюду определенную функцию по x и y, т.е. истинно условие:

x y Y ! z B(x, y: z)

(3.31)

Тогда Cons(B) Cons(ConsArray)

Доказательство. Пусть истинно Cons(B). Зафиксируем x. В соответствии с (3.30) после исполнение оператора forAll из (3.29) будет истинной формула: y Y. B(x, y: A~[y]). Пусть zтот единственный набор, для которого истинно B(x, y: z) в

соотношении (3.31). Тогда A~[y] = z. Из (3.28) следует истинность A(y: z). В итоге, после исполнения тела forAll

будет истинно y Y. B(x, y: z) & A(y: z). Поскольку z единственно для B(x, y: z) и A(y: z), то будет истиннымy Y. B(x, y: z) A(y: z). Дальнейшее доказательство очевидно. □

Допустим, в секции s исполняется вызов предиката A(u: v), где A является переменной предикатного типа, а значением A является массив. Секция s содержит переменную A и наборы u и v. Исполнение вызова A(u: v) реализуется следующим оператором:

s[v] := s[A] [u]

Для исполнения вызова A(u: v) принято обозначение runCall(s, A(u: v)).

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