2. Íåôîðìàëüíîå ââåäåíèå (1)
 λ-èñ÷èñëåíèè äâå îïåðàöèè: ïðèìåíåíèå è àáñòðàêöèÿ.
Ïðèìåíåíèå (Application):
FX
Ïðîãðàìèñòñêèé âçãëÿä:
F (àëãîðèòì) ïðèìåíÿåòñÿ ê X (âõîäíûå äàííûå).
Äîïóñòèìî ñàìîïðèìåíåíèå F F.
2
3. Íåôîðìàëüíîå ââåäåíèå (2)
Àáñòðàêöèÿ (Abstraction):
Ïóñòü M ≡ M[x] âûðàæåíèå, ñîäåðæàùåå x. Òîãäà
λx. M
îáîçíà÷àåò ôóíêöèþ
x → M[x],
òî åñòü êàæäîìó x ñîïîñòàâëÿåòñÿ M[x].
Åñëè x â M[x] îòñóòñòâóåò, òî λx. M êîíñòàíòíàÿ ôóíêöèÿ
ñî çíà÷åíèåì M.
3
4. Íåôîðìàëüíîå ââåäåíèå (3)
Ïðèìåíåíèå è àáñòðàêöèÿ ðàáîòàþò ñîâìåñòíî:
(λx. 2 × x + 1) 42 = 2 × 42 + 1 (= 85).
F X
Òî åñòü (λx. 2 × x + 1) 42 ïðèìåíåíèå ôóíêöèè x → 2×x+1 ê
àðãóìåíòó 42, äàþùåå â ðåçóëüòàòå 2 × 42 + 1.
 îáùåì ñëó÷àå èìååì β-ïðåîáðàçîâàíèå
(λx. M) N = M[x := N],
ãäå M[x := N] îáîçíà÷àåò ïîäñòàíîâêó N âìåñòî x â M.
4
5. Òåðìû (1)
Ìíîæåñòâî λ-òåðìîâ Λ ñòðîèòñÿ èç ïåðåìåííûõ V = {x, y, z, . . .}
c ïîìîùüþ ïðèìåíåíèÿ è àáñòðàêöèè:
x∈V ⇒ x∈Λ
M, N ∈ Λ ⇒ (M N) ∈ Λ
M ∈ Λ, x ∈ V ⇒ (λx. M) ∈ Λ
 àáñòðàêòíîì ñèíòàêñèñå
Λ ::= V | (Λ Λ) | (λV. Λ)
Ñîãëàøåíèå. Ïðîèçâîëüíûå òåðìû ïèøåì çàãëàâíûìè áóê-
âàìè, ïåðåìåííûå ñòðî÷íûìè.
5
7. Òåðìû (3)
Ñîãëàøåíèÿ:
• Âíåøíèå ñêîáêè îïóñêàþòñÿ.
• Ïðèìåíåíèå àññîöèàòèâíî âëåâî :
FXY Z îáîçíà÷àåò (((F X) Y) Z)
• Àáñòðàêöèÿ àññîöèàòèâíà âïðàâî :
λx y z. M îáîçíà÷àåò (λx. (λy. (λz. (M))))
7
8. Òåðìû (4)
Òå æå ïðèìåðû, ñ èñïîëüçîâàíèåì ñîãëàøåíèé
x ≡ x
(x z) ≡ x z
(λx. (x z)) ≡ λx. x z
((λx. (x z)) y) ≡ (λx. x z) y
((λy. ((λx. (x z)) y)) w) ≡ (λy. (λx . x z) y) w
(λz. (λw. ((λy. ((λx. (x z)) y)) w))) ≡ λz w. (λy. (λx . x z) y) w
8
9. Ñâîáîäíûå è ñâÿçàííûå ïåðåìåííûå (1)
Àáñòðàêöèÿ λx . M[x] ñâÿçûâàåò äîòîëå ñâîáîäíóþ ïåðåìåí-
íóþ x â òåðìå M.
Ïðèìåðû:
(λy. (λx. x z) y) w
Ïåðåìåííûå x è y ñâÿçàííûå, à z è w ñâîáîäíûå.
(λx. (λx. x z) x) x
Ïåðåìåííàÿ x ñâÿçàííàÿ (äâàæäû!) è ñâîáîäíàÿ, à z
ñâîáîäíàÿ.
9
11. Ñâîáîäíûå è ñâÿçàííûå ïåðåìåííûå (3)
M çàìêíóòûé λ-òåðì (èëè êîìáèíàòîð ), åñëè FV(M) = ∅.
Ìíîæåñòâî çàìêíóòûõ λ-òåðìîâ îáîçíà÷àåòñÿ ÷åðåç Λ0.
Êëàññè÷åñêèå êîìáèíàòîðû:
I ≡ λx. x;
ω ≡ λx. x x; Ω ≡ ω ω = (λx. x x)(λx. x x);
K ≡ λx y. x; K∗ ≡ λx y. y;
S ≡ λf g x. f x (g x);
B ≡ λf g x. f (g x).
11
12. Ôóíêöèè íåñêîëüêèõ ïåðåìåííûõ, êàððèðîâàíèå
Øîíôèíêåëü (1924): ôóíêöèè íåñêîëüêèõ ïåðåìåííûõ ìî-
ãóò áûòü îïèñàíû ïîñëåäîâàòåëüíûì ïðèìåíåíèåì. Ïóñòü
ϕ(x, y, z) òåðì, çàâèñÿùèé îò x, y, z.
Φx,y = λz. ϕ(x, y, z)
Φx = λy. Φx,y = λy. (λz. ϕ(x, y, z))
Φ = λx. Φx = λx. (λy. (λz. ϕ(x, y, z))) = λx y z. ϕ(x, y, z)
Òîãäà
Φ X Y Z = ((Φ X) Y) Z = (ΦX Y) Z = ΦX,Y Z = ϕ(X, Y, Z).
 îáùåì ñëó÷àå
→
(λ x → →
x N
→
− . ϕ(− )) − = ϕ(−
N).
12
13. Òîæäåñòâåííîå ðàâåíñòâî òåðìîâ
Èìåíà ñâÿçàííûõ ïåðåìåííûõ íå âàæíû. Ïåðåèìåíóåì x â y:
λx. M[x], λy. M[y]
Îíè âåäóò ñåáÿ (ïðè ïîäñòàíîâêàõ) îäèíàêîâî:
(λx. M[x]) N = M[x := N], (λy. M[y]) N = M[y := N]
Ïîýòîìó M ≡ N îáîçíà÷àåò, ÷òî M è N ýòî îäèí è òîò æå
òåðì ñ òî÷íîñòüþ äî ïåðåèìåíîâàíèÿ ñâÿçàííûõ ïåðåìåí-
íûõ. Íàïðèìåð,
(λx. x) z ≡ (λx. x) z;
(λx. x) z ≡ (λy. y) z.
Èíîãäà òàêîå ïåðåèìåíîâàíèå íàçûâàþò α-ïðåîáðàçîâàíèåì
è ïèøóò M ≡α N.
13
14. Ïîäñòàíîâêà (1)
M[x := N] îáîçíà÷àåò ïîäñòàíîâêó N âìåñòî ñâîáîäíûõ âõîæ-
äåíèé x â M.
Ïðàâèëà ïîäñòàíîâêè:
x[x := N] ≡ N;
y[x := N] ≡ y;
(P Q)[x := N] ≡ (P[x := N]) (Q[x := N]);
(λy. P)[x := N] ≡ λy. (P[x := N]), y ∈ FV(N);
(λx. P)[x := N] ≡ (λx. P).
Ïîäðàçóìåâàåòñÿ, ÷òî x ≡ y.
Ïðèìåð:
((λx. (λx . x z) x) x)[x := N] ≡ (λx. (λx . x z) x) N
14
15. Ïîäñòàíîâêà (2)
Íåïðèÿòíîñòü: (λy. x y)[x := y] (y ∈ FV(N) â ÷åòâ¼ðòîì ïðàâèëå).
Ñîãëàøåíèå Áàðåíäðåãòà: Èìåíà ñâÿçàííûõ ïåðåìåííûõ
âñåãäà áóäåì âûáèðàòü òàê, ÷òîáû îíè îòëè÷àëèñü îò ñâî-
áîäíûõ ïåðåìåííûõ â òåðìå (òåðìàõ).
Íàïðèìåð, âìåñòî
y(λx y. x y z)
áóäåì ïèñàòü
y(λx y . x y z)
Òîãäà ìîæíî èñïîëüçîâàòü ïîäñòàíîâêó áåç îãîâîðêè î ñâî-
áîäíûõ è ñâÿçàííûõ ïåðåìåííûõ.
15
16. Ëåììà ïîäñòàíîâêè
Ëåììà ïîäñòàíîâêè.
Ïóñòü M, N, L ∈ Λ. Ïðåäïîëîæèì x≡y è x ∈ FV(L). Òîãäà
M[x := N][y := L] ≡ M[y := L][x := N[y := L]].
Äîêàçàòåëüñòâî. Èíäóêöèåé ïî ñòðóêòóðå M.
1. M = z. Òðèâèàëüíî.
2. M = x.
x[x := N][y := L] = N[y := L];
x[y := L][x := N[y := L]] = x[x := N[y := L]] = N[y := L].
3. M = y.
y[x := N][y := L] = y[y := L] = L;
y[y := L][x := N[y := L]] = L[x := N[y := L]] = L, ò.ê. x ∈ FV(L).
16
19. Ïðåîáðàçîâàíèÿ (êîíâåðñèè): β
• Îñíîâíàÿ ñõåìà àêñèîì äëÿ λ-èñ÷èñëåíèÿ: äëÿ ëþáûõ
M, N ∈ Λ
(λx . M)N = M[x := N] (β)
• ¾Ëîãè÷åñêèå¿ àêñèîìû è ïðàâèëà:
M = M; M = N ⇒ N = M; M = N, N = L ⇒ M = L;
M=M ⇒ M Z = M Z; M=M ⇒ ZM = ZM ;
M=M ⇒ λx. M = λx. M (ïðàâèëî ξ).
• Åñëè M=N äîêàçóåìî â λ-èñ÷èñëåíèè, ïèøóò λ M = N.
19
20. Ïðåîáðàçîâàíèÿ (êîíâåðñèè): α è η
Èíîãäà ââîäÿò:
• ñõåìó àêñèîì α-ïðåîáðàçîâàíèÿ:
λx . M = λy . M[x := y] (α)
â ïðåäïîëîæåíèè, ÷òî y ∈ FV(M);
• ñõåìó àêñèîì η-ïðåîáðàçîâàíèÿ:
λx . M x = M (η)
â ïðåäïîëîæåíèè, ÷òî x ∈ FV(M).
20
21. Ïðåîáðàçîâàíèÿ (êîíâåðñèè): α
Äëÿ ðàññóæäåíèé äîñòàòî÷íî ñîãëàøåíèÿ Áàðåíäðåãòà, íî
äëÿ êîìïüþòåðíîé ðåàëèçàöèè α-ïðåîáðàçîâàíèå ïîëåçíî:
Ïóñòü ω ≡ λx. x x è 1 ≡ λy z. y z. Òîãäà
ω 1 ≡ (λx. x x)(λy z. y z)
= (λy z. y z)(λy z. y z)
= λz. (λy z. y z) z
≡ λz. (λy z . y z ) z
= λz z . z z
≡ λy z. y z
≡ 1.
21
22. Ïðåîáðàçîâàíèÿ (êîíâåðñèè): α
Èíäåêñû Äå Áðàóíà (De Bruijn) ïðåäñòàâëÿþò àëüòåðíà-
òèâíûé ñïîñîá ïðåäñòàâëåíèÿ òåðìîâ.
Ïåðåìåííûå íå èìåíóþòñÿ, à íóìåðóþòñÿ (èíäåêñèðóþòñÿ),
èíäåêñ ïîêàçûâàåò, ñêîëüêî ëÿìáä íàçàä ïåðåìåííàÿ áûëà
ñâÿçàíà:
λx. (λy. x y) ↔ λ (λ 2 1)
λx. x (λy. x y y) ↔ λ 1 (λ 2 1 1)
Ïîäðîáíåå [ËÈÑÑ, Ïðèëîæåíèå C], [TAPL, 6]
22
23. Ïðåîáðàçîâàíèÿ (êîíâåðñèè): η
η-ïðåîáðàçîâàíèå îáåñïå÷èâàåò ïðèíöèï ýêñòåíñèîíàëüíî-
ñòè : äâå ôóíêöèè ñ÷èòàþòñÿ ýêñòåíñèîíàëüíî ýêâèâàëåíò-
íûìè, åñëè îíè äàþò îäèíàêîâûé ðåçóëüòàò ïðè îäèíàêîâîì
ââîäå:
∀x : F x = G x.
Âûáèðàÿ y ∈ FV(F) ∪ FV(G), ïîëó÷àåì (ξ, çàòåì η)
Fy = Gy
λy. F y = λy. G y
F = G
23
24. Òåðìîâûå óðàâíåíèÿ
Ñõåìà β-ðåäóêöèè äà¼ò íàì âîçìîæíîñòü ðåøàòü ïðîñòåéøèå
óðàâíåíèÿ íà òåðìû.
Ïðèìåð: íàéòè F, òàêîé ÷òî ∀ M, N, L λ F M N L = M L (N L).
F M N L = M L (N L)
F M N = λz. M z (N z)
F M = λy. λz. M z (y z)
F = λx y z. x z (y z)
À åñëè óðàâíåíèå ðåêóðñèâíîå, íàïðèìåð, F M = M F?
24
25. Òåîðåìà íåïîäâèæíîé òî÷êè (1)
Òåîðåìà. Äëÿ ëþáîãî λ-òåðìà F ñóùåñòâóåò íåïîäâèæíàÿ
òî÷êà:
∀F ∈ Λ ∃X ∈ Λ λ FX = X
Äîê-âî. Ââåäåì W ≡ λx. F (x x) è X ≡ W W . Òîãäà
X ≡ W W ≡ (λx. F(x x)) W = F (W W) ≡ F X
Òåîðåìà. Ñóùåñòâóåò êîìáèíàòîð íåïîäâèæíîé òî÷êè
Y ≡ λf. (λx. f (x x))(λx. f (x x)),
òàêîé ÷òî ∀F F(Y F) = Y F.
Äîê-âî. Y F ≡ (λx. F (x x))(λx. F (x x)) = F ((λx. F (x x))(λx. F (x x))) ≡
YF
F(Y F)
25
26. Òåîðåìà íåïîäâèæíîé òî÷êè (2)
Y -êîìáèíàòîð ïîçâîëÿåò ââåñòè ðåêóðñèþ â λ-èñ÷èñëåíèå.
Ôàêòîðèàë ðåêóðñèâíî:
FAC = λn. IIF (ISZRO n) 1 (MULT n (FAC (PRED n)))
Ïåðåïèñûâàåì â âèäå
FAC = (λf n. IIF (ISZRO n) 1 (MULT n (f (PRED n)))) FAC
Îòñþäà âèäíî, ÷òî FAC íåïîäâèæíàÿ òî÷êà äëÿ ôóíêöèè
F ≡ λf n. IIF (ISZRO n) 1 (MULT n (f (PRED n))):
FAC = Y F
26
27. Òåîðåìà íåïîäâèæíîé òî÷êè (3)
Êàê ðàáîòàåò FAC ≡ Y F?
FAC 3 = (Y F) 3
= F (Y F) 3
= IIF (ISZRO 3) 1 (MULT 3 ((Y F) (PRED 3)))
= MULT 3 ((Y F) 2)
= MULT 3 (F (Y F) 2)
= MULT 3 (MULT 2 ((Y F) 1))
= MULT 3 (MULT 2 (MULT 1 ((Y F) 0)))
= MULT 3 (MULT 2 (MULT 1 1))
= 6
27
28. Äîìàøíåå çàäàíèå
Äîêàæèòå,
÷òî S K K = I, B = S (K S) K.
÷òî ïðèìåíåíèå íåêîììóòàòèâíî è íåàññîöèàòèâíî.
Çàâåðøèòå äîêàçàòåëüñòâî ëåììû ïîäñòàíîâêè.
Ðåàëèçóéòå àëãîðèòì ïîäñòàíîâêè íà êàêîì-ëèáî ßÏ.
Ñêîíñòðóèðóéòå
¾ïîæèðàòåëü¿, òî åñòü òàêîé òåðì F, êîòîðûé äëÿ ëþáîãî
M îáåñïå÷èâàåò F M = F.
òåðì F òàêèì îáðàçîì, ÷òîáû äëÿ ëþáîãî M âûïîëíÿëîñü
F M = M F.
òåðì F òàêèì îáðàçîì, ÷òîáû äëÿ ëþáûõ òåðìîâ M è N
âûïîëíÿëîñü F M N = N F (N M F).
28
29. Ëèòåðàòóðà (1)
LCWT ãë. 2.1
Henk Barendregt, Lambda calculi with types,
Handbook of logic in computer science (vol. 2), Oxford University
Press, 1993
TAPL ãë. 5, 6
Benjamin C. Pierce, Types and Programming Languages, MIT
Press, 2002
29
30. Ëèòåðàòóðà (2)
I2FP ãë. 2
John Harrison, Introduction to Functional Programming
ËÈÑÑ ãë. 2
Õ. Áàðåíäðåãò, Ëàìáäà-èñ÷èñëåíèå, åãî ñèíòàêñèñ è ñåìàí-
òèêà, Ì:Ìèð, 1985
30