Аксіоми виводу типу комбінатора
Лекція 7
Лекція 6
· алфавіт;
· твердження;
· аксіоми;
· правила виводу.
1. константи;
2. змінні;
3. комбінаторні вирази (або терми);
4. спеціальні символи.
Константи c1 , c2, ...
Змінні x, y, ...
Вирази (терми) M, N, ...
Спеціальні символи "(", ")"
вираз (MN) є допустимим комбінаторним термом.
аксіоми відношення конвертованості:
(I) Ix = x; існування комбінатора (функції) тотожності
(K) Kxy = x; існування комбінатора (функції) взяття першої проекції
(S) Sxyz = xz(yz). комбінатор-конектор
правила виводу комбінаторних термів відношення конвертованості:
(μ) якщо a=b, то ca=cb;
(ν) якщо a=b, то ac=bc;
(ρ) a=a (рефлексивність);
(σ) якщо a=b, то b=a (симетричність);
(τ) якщо a=b і b=c, то a=c (транзитивність).
XY = (XY), XYZ = ((XY)Z), ...
(XY) = XY, ((XY)Z) = XYZ, ...
БНФ-опис комбінатора:
<комбінатор> ::= K | S | (<комбінатор> <комбінатор>)
БНФ-опис терма комбінаторної логіки, можливо із змінними:
<комбінаторний терм> ::= K | S | <змінна> |
(<комбінаторний терм> <комбінаторний терм>)
Деякі корисні співвідношення для комбінаторів
(I) | I a = a; | комбінатор тотожності |
(K) | К ab = a; | канцелятор (комбінатор взяття першої проекції) |
(S) | S abc = ac(bc); | комбінатор-конектор |
(B) | B abc = a(bc); | комбінатор композиції |
(C) | C abc = acb; | пермутація (перестановка) |
(W) | W xy = xyy. | дублювання аргументів |
механізм редукції
SKKx = (за правилом S) Kx(Kx) = (за правилом K) x.
звідки, з урахуванняи аксіом і правила (I),
I = SKK
Розкладання термів в базисі {K,S} для розглянутих вище комбінаторів:
B = S(KS)K; W = SS(K(SKK)); C = S(BBS)(KK).
тип a приписаний комбінатору X тоді і лише тоді, коли це твердження отримано з таких аксіом:
(FI) ||- #(I) = (a,a),
(FK) ||- #(K) = (a,(b,a)) = (a,b,a),
(FS) ||- #(S) = ((a,(b,c)), ((a, b)(a,c)))
і правила виводу
(F) если ||- #(X) = (a,b) и ||- #(U) = a,
то ||- #(XU) = b.
визначення функцій
fun Ix = x;
fun Kxy = x;
fun Sxyz = xz(yz);
T = {d: D|Ψ}
<S, A, R>
#M ||- T – приписування типу
Аксіома (I) | Ix = x | існування комбінатора (функції) тотожності |
Аксіома(K) | Kxy = x | існування комбінатора (функції) взяття першої проекції |
Аксіома (S) | Sxyz = xz(yz) | попарного зв'язування третього елементу с першими двома |
(FI) ||- #(I) = (a,a), тип тотожності
(FK) ||- #(K) = (a,(b,a)) = (a,b,a), тип канцелятора
(FS) ||- #(S) = ((a,(b,c)), ((a, b)(a,c))) тип зв'язування (конектора)
(F) якщо ||- #(X) = (a,b) и ||- #(U) = a,
то ||- #(XU) = b.
базисні типи:
int - цілі числа;
string - рядки символів;
bool - логічні значення.
let
val Id = fn x => x
in (Id 3, Id true)
end
fn Id => (Id 3, Id true)) (fn x => x)
Приклад 1.
val x=2*3;
val x = 6 : int
Приклад 2.
1+2;
3 : int
Приклад 3.
fun add (x : int)(y : int) = x+y;
val add = fn : int -> int -> int
Приклад 4.
add 1 3;
val it = 4 : int
Приклад 5.
val f = add 1;
val f = fn : int -> int
f 4;
val it = 5 : int
Приклад 6.
hd [1,2,3];
val it = 1 : int
тип (int list -> int).
Приклад 7.
hd [true, false, true, false];
val it = true: bool
тип bool list -> bool
Приклад 8.
hd [(1,2)(3,4),(5,6)];
val it = (1,2) : int*int
тип ((int*int)list -> (int*int)).
Таблиця 7.1. Відображення типів мови програмування SML в типи ієрархії CTS
№ | Тип | Класс.NET | Пояснение |
int | System.Int32 | Целое число | |
string | System.String | Строка | |
bool | System.Boolean | Логическое значение | |
... | ... | ... | ... |