3. Áóëåâû çíà÷åíèÿ (1)
Áóëåâû çíà÷åíèÿ ìîæíî îïðåäåëèòü òàê:
TRU ≡ λ t f. t
FLS ≡ λ t f. f
Còàíäàðòíûå áóëåâû îïåðàöèè:
IIF ≡ λ b x y. b x y
NOT ≡ ??? (÷óòü ïîçæå)
AND ≡ λ x y. x y FLS
OR ≡ ??? (äîìàøíåå çàäàíèå)
3
4. Áóëåâû çíà÷åíèÿ (2)
Ïðîâåðèì, ÷òî îæèäàåìûå ñâîéñòâà óñëîâíîãî âûðàæåíèÿ
IIF ≡ λ b x y. b x y âûïîëíÿþòñÿ:
IIF TRU v w ≡ (λ b x y. b x y) (λ t f. t) v w
= (λ t f. t) v w
= (λ f. v) w
= v;
IIF FLS v w ≡ (λ b x y. b x y) (λ t f. f) v w
= (λ t f. f) v w
= (λ f. f) w
= w.
4
5. Áóëåâû çíà÷åíèÿ (3)
Ïðîâåðèì, ÷òî îæèäàåìûå ñâîéñòâà ëîãè÷åñêîãî îïåðàòîðà
¾È¿ AND ≡ λ x y. x y FLS âûïîëíÿþòñÿ:
AND TRU w ≡ (λ x y. x y FLS) TRU w
= TRU w FLS
= w;
AND FLS w ≡ (λ x y. x y FLS) FLS w
= FLS w FLS
= FLS.
5
6. Áóëåâû çíà÷åíèÿ (4)
Îòðèöàíèå (âåðñèÿ I):
NOT ≡ λ b. IIF b FLS TRU = λ b. b FLS TRU ≡ λ b .b (λ t f. f) (λ t f. t)
Îòðèöàíèå (âåðñèÿ II):
NOT ≡ λ b t f. b f t
Ýòî ðàçíûå òåðìû! Íî íà áóëåâûõ çíà÷åíèÿõ îäèíàêîâûå.
Òèïèçàöèÿ äàñò ãàðàíòèþ, ÷òî íè÷òî, êðîìå áóëåâà çíà÷å-
íèÿ, íå ïðîéä¼ò.
6
7. Ïàðû (1)
Ïàðó (äâóõýëåìåíòíûé êîðòåæ) ìîæíî îïðåäåëèòü òàê:
PAIR ≡ λ x y f. f x y
Ïðè ýòîì êîíêðåòíàÿ ïàðà òàêîâà:
PAIR a b = λ f. f a b
Ñòàíäàðòíûå îïåðàöèè äëÿ ïàðû (ïðîåêöèè):
FST ≡ λ p. p TRU
SND ≡ λ p. p FLS
7
8. Ïàðû (2)
Ïðîâåðèì, ÷òî îæèäàåìûå ñâîéñòâà ïðîåêöèé FST ≡ λ p. p TRU
è SND ≡ λ p. p FLS âûïîëíÿþòñÿ:
FST (PAIR a b) = PAIR a b TRU
≡ (λ x y f. f x y) a b TRU
= TRU a b
= a;
SND (PAIR a b) = PAIR a b FLS
≡ (λ x y f. f x y) a b FLS
= FLS a b
= b.
8
9. ×èñëà (1)
×èñëà (íóìåðàëû) ×¼ð÷à:
0 ≡ λs z. z
1 ≡ λs z. s z
2 ≡ λs z. s (s z)
3 ≡ λs z. s (s (s z))
4 ≡ λs z. s (s (s (s z)))
...
×åðòó ñâåðõó áóäåì îïóñêàòü, åñëè ýòî íå áóäåò ïðèâîäèòü ê
ïóòàíèöå.
Íàáëþäåíèå: 0 ≡ FLS.
9
10. ×èñëà (2)
Áîëåå ôîðìàëüíî:
Âûðàæåíèå Fn(X), ãäå n ∈ N, à F, X ∈ Λ, îïðåäåëèì èíäóêòèâíî:
F0(X) ≡ X;
Fn+1(X) ≡ F(Fn(X)).
Òîãäà n-îå ÷èñëî ×¼ð÷à îïðåäåëÿåòñÿ òàê:
n ≡ λs z. sn(z).
10
11. ×èñëà (3)
Ïðîâåðêà ÷èñëà íà íîëü (0 ≡ λs z. z):
ISZRO ≡ λn. n ?? TRU
Âìåñòî ?? íóæíà ôóíêöèÿ, êîòîðàÿ âñåãäà âîçâðàùàåò FLS:
ISZRO ≡ λn. n (λx. FLS) TRU
Àëüòåðíàòèâíîå îïðåäåëåíèå, êîíñòðóèðóþùåå áóëåâî çíà÷å-
íèå ¾íà ëåòó¿:
ISZRO2 ≡ λn t f. n (λx. f) t
11
12. ×èñëà (4)
Ôóíêöèÿ ñëåäîâàíèÿ äëÿ ÷èñåë
SUCC ≡ λn s z. s (n s z)
Äåéñòâèòåëüíî,
SUCC n ≡ λs z. s (n s z) ≡ λs z. s(sn(z)) ≡ λs z. sn+1(z) ≡ n + 1.
Àëüòåðíàòèâíîå îïðåäåëåíèå
SUCC2 ≡ λn s z. n s (s z)
¾íàäñòðàåâàåò¿ n-êðàòíîå ïðèìåíåíèå s íå íàä íóë¼ì (z), à
íàä åäèíèöåé (s z).
12
13. ×èñëà: ñëîæåíèå (1)
Ñëîæåíèå ÷èñåë ×¼ð÷à îñíîâûâàåòñÿ íà àíàëîãè÷íîé èäåå
PLUS ≡ λm n s z. m s (n s z)
Çäåñü m-êðàòíîå ïðèìåíåíèå s ¾íàäñòðàèâàåòñÿ¿ íàä åãî n-
êðàòíûì ïðèìåíåíèåì. Íàïðèìåð,
PLUS 3 2 = λs z. 3 s (2 s z) = λs z. 3 s (s (s z))
= λs z. s (s (s (s (s z)))) ≡ 5
13
14. ×èñëà: ñëîæåíèå (2)
Ëåììà. m s (n s z) = m + n s z.
Èíäóêöèÿ ïî m.
Áàçà (m = 0): 0 s (n s z) = n s z = 0 + n s z.
IH: Ïóñòü âåðíî äëÿ m, òî åñòü sm (sn (z)) = sn+m(z).
Ïîêàæåì, ÷òî âåðíî è äëÿ m + 1 :
m + 1 s (n s z) = sm+1 (sn (z)) = s (sm (sn (z)))
=IH s (sm+n (z)) = s(m+n)+1 (z)
= s(m+1)+n (z) = (m + 1) + n s z
Òî åñòü PLUS ≡ λm n s z. m s (n s z) äåéñòâèòåëüíî ñêëàäûâàåò.
14
15. ×èñëà: óìíîæåíèå (1)
Áëàãîäàðÿ êàððèðîâàíèþ PLUS n ïðèáàâëÿåò n ê ëþáîìó ïå-
ðåäàíîìó àðãóìåíòó. Ïîýòîìó óìíîæåíèå ìîæåò áûòü çàäàíî
òàê
MULT1 ≡ λm n. m (PLUS n) 0
Íàïðèìåð,
MULT1 3 2 = 3 (PLUS 2) 0 = (λs z. (s (s (s z)))) (PLUS 2) 0
= (PLUS 2) ((PLUS 2) ((PLUS 2) 0)) = 6
Àëüòåðíàòèâíûå îïðåäåëåíèÿ
MULT2 ≡ λm n s z. m (n s) z
MULT ≡ λm n s. m (n s)
15
16. ×èñëà: óìíîæåíèå (2)
Ïðîâåðèì MULT2 ≡ λm n s z. m (n s) z:
MULT2 3 2 = λs z. 3 (2 s) z = λs z. (2 s) ((2 s) (2 s z))
= λs z. (2 s) ((2 s) (s s z)) = 6
Âåðñèÿ MULT ≡ λm n s. m (n s) ïîëó÷àåòñÿ èç MULT2 ñ ïîìîùüþ
η-ïðåîáðàçîâàíèÿ.
16
17. ×èñëà: óìíîæåíèå (3)
Ëåììà. m (n s) z = m · n s z.
Èíäóêöèÿ ïî m.
Áàçà (m = 0): 0 (n s) z = z = 0 · n s z.
IH: Ïóñòü âåðíî äëÿ m, òî åñòü (n s)m (z) = sm·n (z).
Ïîêàæåì, ÷òî âåðíî è äëÿ m + 1 :
m + 1 (n s) z = (n s)m+1 (z) = n s ((n s)m (z))
=IH n s (sm·n (z)) = sn (sm·n (z))
= sn+m·n (z) = s(m+1)n (z) = (m + 1)n s z
Òî åñòü MULT2 ≡ λm n s z. m (n s) z äåéñòâèòåëüíî óìíîæàåò.
17
18. ×èñëà: ïðåäøåñòâîâàíèå
Âñïîìîãàòåëüíûå ôóíêöèè
ZP ≡ PAIR 0 0
SP ≡ λp. PAIR (SND p) (SUCC (SND p))
Âòîðàÿ ðàáîòàåò òàê
SP (PAIR i j) = PAIR j j + 1
SP0 (ZP) = PAIR 0 0
SPm (ZP) = PAIR m − 1 m
(çäåñü m 0). Òîãäà ôóíêöèÿ ïðåäøåñòâîâàíèÿ :
PRED = λm. FST (m SP ZP)
À êàêàÿ, êñòàòè, ó íå¼ âðåìåííàÿ ñëîæíîñòü?
À ÷òî íóæíî ïîìåíÿòü, ÷òîáû âûøåë ôàêòîðèàë?
18
19. ×èñëà: ïðèìèòèâíàÿ ðåêóðñèÿ
Îáîáùèì ïðåäûäóùóþ ñõåìó
XZ ≡ λx. PAIR x 0
FS ≡ λf p. PAIR (f (FST p) (SND p)) (SUCC (SND p))
REC ≡ λm f x. FST (m (FS f) (XZ x))
x, 0
SUCC
Ð ~
f x 0, 1
SUCC
~
f (f x 0) 1, 2
SUCC
{ ~
f (f (f x 0) 1) 2, 3
 ÷àñòíîñòè, PRED = λm. REC m (λx y. y) 0. À ôàêòîðèàë?
19
20. Ñïèñêè
Êîíñòðóêòîðû ñïèñêîâ:
NIL ≡ λc n. n
CONS ≡ λe l c n. c e (l c n)
Íàïðèìåð,
[ ] = NIL = λc n. n
[5, 3, 2] = CONS 5 (CONS 3 (CONS 2 NIL)) = λc n. c 5 (c 3 (c 2 n))
Ñòàíäàðòíûå ôóíêöèè:
EMPTY ≡ λl. l (λh t. FLS) TRU
HEAD ≡ ?? äîìàøíåå çàäàíèå
TAIL ≡ ?? äîìàøíåå çàäàíèå **
20
21. λ-îïðåäåëèìîñòü (1)
• ×èñëîâàÿ ôóíêöèÿ ýòî îòîáðàæåíèå f : Np → N.
• ×èñëîâàÿ ôóíêöèÿ f íàçûâàåòñÿ λ-îïðåäåëèìîé, åñëè äëÿ
íåêîòîðîãî êîìáèíàòîðà F ðàâåíñòâî
F n1 . . . np = f(n1, . . . , np)
âûïîëíÿåòñÿ äëÿ âñåõ n1, . . . , np ∈ N. Ïðè ýòîì f íàçûâàþò
λ-îïðåäåëåííîé ïîñðåäñòâîì F.
21
23. Íàçðåøèìîñòü λ-èñ÷èñëåíèÿ
Ïóñòü A ⊆ Λ.
A íàçûâàåòñÿ çàìêíóòûì îòíîñèòåëüíî =, åñëè
M ∈ A, λ M = N ⇒ N ∈ A.
A íàçûâàåòñÿ íåòðèâèàëüíûì, åñëè A=∅ è A = Λ.
Òåîðåìà. Ïóñòü A ⊆ Λ ÿâëÿåòñÿ íåòðèâèàëüíûì è çàìêíó-
òûì îòíîñèòåëüíî =. Òîãäà A íå ÿâëÿåòñÿ ðåêóðñèâíûì.
[LCWT 2.2]
Ñëåäñòâèå. Ìíîæåñòâî {M | M ∈ Λ, M = TRU} íå ÿâëÿåòñÿ ðå-
êóðñèâíûì.
Áåñòèïîâîå λ-èñ÷èñëåíèå íå ÿâëÿåòñÿ ðàçðåøèìîé òåîðèåé.
23
24. Äîìàøíåå çàäàíèå
Çàêîäèðóéòå â áåñòèïîâîì λ-èñ÷èñëåíèè:
ëîãè÷åñêóþ îïåðàöèþ OR;
ïÿòèýëåìåíòíûé êîðòåæ TUPLE5 è ôóíêöèè, îñóùåñòâëÿþ-
ùèå ïðîåêöèè PRJ1, . . . , PRJ5;
ñòàíäàðòíûå ôóíêöèè äëÿ ñïèñêîâ;
ôóíêöèè âû÷èòàíèÿ, ïðîâåðêè íà ðàâåíñòâî è âîçâåäåíèÿ
â ñòåïåíü äëÿ ÷èñåë ×¼ð÷à.
 ïîñëåäíåì ñëó÷àå ïðèâåäèòå èíäóêòèâíîå äîêàçàòåëüñòâî.
24
25. Ëèòåðàòóðà (1)
TAPL ãë. 5
Benjamin C. Pierce, Types and Programming Languages, MIT
Press, 2002
LCWT ãë. 2.2
Henk Barendregt, Lambda calculi with types,
Handbook of logic in computer science (vol. 2), Oxford University
Press, 1993
25