- •26.09.12 Лекция 2
- •Основные свойства программы:
- •Логика программы
- •Логика базисных операторов
- •Логика оператора цикла
- •Корректность логики программы
- •Логика по всей программе
- •Аппроксимация логики программы
- •x, y ― наборы переменных Оператор S(x: y)
- •2. Задача дедуктивной
- •Программа – оператор S(x, y)
- •Предикат A(x, y) является однозначным в области X, если:
- •Теорема 2.1 тождества спецификации и программы
- •Докажем истинность формулы L(S(x, y)) Q(x, y). Поскольку истинны P(x) и формула (2.6),
- •Лемма 2.9. Допустим, программа (2.1) является корректной, а ее спецификация однозначной. Тогда истинна
- •Структура множества программ.
- •2. Класс объектно-ориентированных программ.
- •3. Класс простых процессов.
- •3. Язык исчисления вычислимых предикатов
- •Исчисление вычислимых предикатов ― множество вычислимых формул языка исчисления предикатов
- •Структура программы на языке CCP
- •Система типов данных
- •Структурный тип ― композиция компонентных типов
- •Произведение типов
- •Множество подмножеств конечного типа X:
- •Произвольный тип либо примитивный, либо вводится следующим определением:
- •Тип “подмножество типа” может быть параметризован набором переменных d
- •Примеры рекурсивных типов
3. Класс простых процессов.
База – язык объектно-ориентированных программ.
Дополнительно - loop {A(s, x: s’, y)}.
s – переменные, модифицируемые в цикле Пример. Системы автоматического управления
4. Класс реактивных систем. База – язык простых процессов.
Дополнительно - send m(e), receive m(x){ B }else C, with (y) { B }, F || G.
Спецификация. Машина конечных мета-состояний. Язык темпоральной логики. Условия живости,
безопасности, справедливости, ….
………………………………
3. Язык исчисления вычислимых предикатов
Исчисление вычислимых предикатов ― множество вычислимых формул языка исчисления предикатов
― язык CCP (Calculus of Computable Predicates)
―ядро для построения языка предикатного программирования
Структура программы на языке CCP
Программа ─ набор определений предикатов |
|
Определение A K предикат A , оператор K |
|
параллельный оператор, оператор суперпозиции, условный оператор |
|
Вызов предиката |
|
(d1, d2, …, dn : e1, e2, …, em) |
(3.1) |
φ─ имя предиката или переменной предикатного типа, n 0, m > 0, d1, d2, …, dn ─ имена переменных ─ аргументы вызова,
e1, e2, …, em ─ результаты вызова
Вычисление предиката
Вызов φ(d: e), где d = d1, d2, …, dn, e = e1, e2, …, em – наборы переменных
n = 0 – вызов предикта соответствует константе
Значение φ(d) φ(d: b) , где b ─ переменная логического типа
Определение предиката A(x: y) K(x: y) (3.2)
A имя предиката; набор x аргументы предиката, набор y результаты предиката, K(x: y) – оператор.
Предикат – определяемый, базисный, значение переменной.
Тип данных определяет набор базисных предикатов со значениями типа
Система типов определяет совокупность всех базисных предикатов
Система типов данных
Тип ― множество значений, имя типа
Система типов: примитивные типы, подмножество типа и структурные типы
Примитивные типы: логический BOOL, целый INT, вещественный REAL и литерный CHAR.
Базисные предикаты: +(x, y: z) z = x + y, |
- |
(x, y: z) z = x - y, -(x: y) y = -x, |
|
<(x, y: b) b = x < y и др. |
|
Предикаты равенства =(x: y) y = x и |
|
=(x, y: b) b = (x = y) для всех примитивных типов |
|
Предикаты ConsIntZero( : x) x = 0 ConsIntOne( : x) x = 1
x переменная типа T, d возможно пустой набор переменных – параметров типа
Подмножество типа T на базе предиката P(x, d)
S = Subset(T, x, P, d) = {x T | P(x, d)} |
(3.3) |
Subset стандартное имя, P вычислимый, d параметры типа
NAT = Subset(INT, x, GE0) = {x INT | x 0}.
DIAP(n) = Subset(INT, x, IN1_n, n) = {x INT | x 1 x n}
Структурный тип ― композиция компонентных типов
Структурные типы: произведение типов (кортеж), объединение типов, множество подмножеств типа, предикатный тип (в т.ч. массив).
Базисные предикаты конструкторы, деструкторы и другие операции
Конструктор по значениям компонентных типов строит значение структурного типа.
Деструктор для значения структурного типа определяет соответствующие значения компонент.
Нет типов указателей !
Произведение типов |
Z = X Y |
= {(x, y) | x X, y Y} |
(3.4) |
x X, y Y, z Z |
|
Конструктор ConsStruct(x, y: z) z = (x, y) Деструктор CompStruct(z: x, y) z = (x, y)
Объединение типов |
|
Z = X + Y = {(1, x) | x X} {(2, y) | y Y} |
(3.5) |
Первая компонента (1 или 2) ― тег значения Конструктор ConsUnion1(x: z) z = (1, x). Конструктор ConsUnion2(y: z) z = (2, y)
Деструктор CompUnion(z: i, x, y) либо z = (1, x) и i = 1, либо z = (2, y) и i = 2. Если i = 1, то y не определено. Если i = 2, то x не определено
Множество подмножеств конечного типа X: |
|
Z = Set(X) = {z | z X} |
(3.6) |
Конструктор ConsSetEmpty( : z) z = |
|
Конструктор ConsSetElem(x : z) z = {x} |
|
Предикат CompSet(z, x: b) b = x z |
|
Предикатный тип |
|
Z = Pred(D: E) = { (d: e) | d D, e E, - вычислимый} |
(3.7) |
― множество вычислимых предикатов вида (d: e) для непересекающихся списков переменных d и e
Z = { (d: e) | d D, e E, CCP}
Конструктор предиката ConsPred будет определен позже
Z ― тип массива D не пуст & типы D конечны &Z d D e (d: e)
(d: e) ― массив с индексом d и элементом массива e
Конструктор предиката ConsArray будет определен позже Деструктор CompArray(a, i: x) x = a(i) a(i: x)
Произвольный тип либо примитивный, либо вводится следующим определением:
<имя типа> = <типовый терм>
Z = Subset(T, x, P, d) |
(3.3) |
Z = X Y |
|
(3.4) |
|
Z = X + Y |
(3.5) |
Z = Set(X) |
(3.6) |
Z = Pred(D: E) |
(3.7) |
Z, T, X, Y, D, E ― имена типов, примитивных или определяемых.