- •03.10.11 Лекция 3
- •Структура множества программ.
- •2. Класс объектно-ориентированных программ.
- •3. Класс простых процессов.
- •4.Математические основы
- •Отношения порядка
- •a S ― наименьший (наибольший) элемент S Ds S. a s ( s
- •Наименьшая неподвижная точка
- •m 0am lub {am}m 0 ― наименьшая верхняя грань цепи
- •3. Теория невзаимодействующих программ.
- •Исчисление вычислимых предикатов ― множество вычислимых формул языка исчисления предикатов
- •Система типов данных
- •Множество подмножеств конечного типа X:
- •Произвольный тип либо примитивный, либо вводится следующим определением:
- •Рекурсивные типы данных
- •Запрещается рекурсия
- •Логическая и операционная семантика
- •Структура программы на языке CCP
- •Логическая семантика вызова и определения предиката :
- •Вызов предиката
- •Пусть истинно A(z: u). Тогда в соответствии с определением A(x: y) K(x: y)
- •Оператор суперпозиции
- •Допустим, исполнение H(x: y) завершается вычислением y. Докажем истинность H(x: y). Исполнение пары
- •Параллельный оператор
- •Условный оператор
- •Допустим, исполнение H(b, x: y) завершается вычислением y, т.е. исполнение оператора (3.22) завершается
- •Конструктор предиката
- •Лемма 3.7. Пусть имеется вызов ConsPred(x, B: A), причем Cons(B) истинно. Тогда истинно
- •Конструктор массива
- •Доказательство. Пусть истинно Cons(B). Зафиксируем x. В соответствии с (3.30) после исполнение оператора
Лемма 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)).