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

Исчисление вычислимых предикатов ― множество вычислимых формул языка исчисления предикатов

― язык CCP (Calculus of Computable Predicates)

ядро для построения языка программирования для невзаимодействующих программ

Необходимо построить формальную операционную и логическую семантику языка CCP и определить условия однозначности программ.

На базе CCP методом последовательного расширения строится язык предикатного программирования P

Система типов данных

Тип множество значений, имя типа

Система типов: примитивные типы, подмножество типа и структурные типы

Примитивные типы: логический 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}

Множество подмножеств конечного типа 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 ― имена типов, примитивных или определяемых.

Рекурсивные типы данных

Z = Subset(T, x, P, d)

(1)

Z = X Y

(2)

Z = X + Y

(3)

Z = Set(X)

(4)

Z = Pred(D: E)

(5)

Xk = φk(X1, X2,…, Xn, T1, T2,…, Ts

типовый терм φ(X, Y)

); k = 1,…,n; n > 0, s≥0

(3.8)

― система типовых уравнений

X = (X1, X2,…, Xn), φ = (φ1, φ2,…, φn)

X = φ(X) векторная форма

(3.9)

(Γ, , ) ― множество типов; Z Γ. Z нижняя грань Вектора типов X Y k=1..n (Xk Yk)

= ( , ,…, ) нижняя грань

(Φ, , ) множество векторов типов

Лемма. (Φ, , ) является нижней полурешеткой

X0 = , Xm+1 = φ(Xm), m 0. (3.10) Лемма. {Ym}m 0 возрастающая цепь типов.

a m 0Ym ( k. n>k. a Yn)

Лемма. Произведение Y Z и объединение Y + Z непрерывны относительно вхождений компонентных типов Y и Z.

{Ym}m 0 и {Zm}m 0 возрастающие цепи типов.m 0(Ym Zm) = ( m 0Ym) ( m 0Zm).

Лемма 3.1. Функция φ системы (3.9) определений рекурсивных типов X = φ(X) является непрерывной относительно произведения и объединения.

По теореме Клини решением системы X = φ(X) является наименьшая неподвижная точка, определяемая как m 0 Xm, при условии, что рекурсия реализуется через произведение и объединение

Запрещается рекурсия

Y = Q(Subset(H(Y))) Z = Q(Set(H(Z)))

A = Q(PRED(H(A), …: …)

B = Q(PRED(…: H(B), …),

где Q и H ― некоторые функционалы, представленные типовыми термами

Логическая и операционная семантика

Программа ― оператор S(x: y) на языке CCP

x и y наборы переменных, аргументы и результаты. Логика программы ― предикат L(S(x: y))

Корректность логики программы (согласованность логической и операционной семантики):

x, y. L(S(x: y)) исполнение оператора S. исполнение завершается &

значения при завершении есть x и y.

Необходимо построить формальную операционную и логическую семантику языка CCP и определить условия однозначности программ.

Структура программы на языке 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) – оператор.

Предикат – определяемый, базисный, значение переменной.

Тип данных определяет набор базисных предикатов со значениями типа Система типов определяет совокупность всех базисных предикатов

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