20110224 systems of_typed_lambda_calculi_moskvin_lecture03
TRANSCRIPT
Ñèñòåìû òèïèçàöèè ëÿìáäà-èñ÷èñëåíèÿ
Ëåêöèÿ 2. λ-èñ÷èñëåíèå: ïðîãðàììèðîâàíèå è
λ-îïðåäåëèìîñòü
Äåíèñ Ìîñêâèí
27.02.2011
CS Club ïðè ÏÎÌÈ ÐÀÍ
1
Ïðîãðàììèðîâàíèå íà ÿçûêå λ-èñ÷èñëåíèÿ
λ-èñ÷èñëåíèå � ïîëíîöåííûé ÿçûê ïðîãðàììèðîâàíèÿ? Íåò,
íî åñëè åãî ðàññìàòðèâàòü â ýòîì êà÷åñòâå, òî:
• óäîáíî ðàáîòàòü ñ çàìêíóòûìè òåðìàìè;
• â ÷èñòîì λ-èñ÷èñëåíèè çíà÷åíèÿ � ýòî λ-àáñòðàêöèè;
• β-ïðåîáðàçîâàíèÿ ìîäåëèðóþò ïðîöåññ âû÷èñëåíèÿ.
2
Áóëåâû çíà÷åíèÿ (1)
Áóëåâû çíà÷åíèÿ ìîæíî îïðåäåëèòü òàê:
TRU ≡ λ t f. tFLS ≡ λ t f. f
Còàíäàðòíûå áóëåâû îïåðàöèè:
IIF ≡ λb xy.bxyNOT ≡ ??? (÷óòü ïîçæå)AND ≡ λ xy. xy FLS
OR ≡ ??? (äîìàøíåå çàäàíèå)
3
Áóëåâû çíà÷åíèÿ (2)
Ïðîâåðèì, ÷òî îæèäàåìûå ñâîéñòâà óñëîâíîãî âûðàæåíèÿ
IIF ≡ λb xy.bxy âûïîëíÿþòñÿ:
IIF TRU v w ≡ (λb xy.bxy) (λ t f. t) v w
= (λ t f. t) v w
= (λ f. v) w
= v;
IIF FLS v w ≡ (λb xy.bxy) (λ t f. f) v w
= (λ t f. f) v w
= (λ f. f)w
= w.
4
Áóëåâû çíà÷åíèÿ (3)
Ïðîâåðèì, ÷òî îæèäàåìûå ñâîéñòâà ëîãè÷åñêîãî îïåðàòîðà
¾È¿ AND ≡ λ xy. xy FLS âûïîëíÿþòñÿ:
AND TRU w ≡ (λ xy. xy FLS) TRU w
= TRU w FLS
= w;
AND FLS w ≡ (λ xy. xy FLS) FLS w
= FLS w FLS
= FLS.
5
Áóëåâû çíà÷åíèÿ (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
Ïàðû (1)
Ïàðó (äâóõýëåìåíòíûé êîðòåæ) ìîæíî îïðåäåëèòü òàê:
PAIR ≡ λ xy f. f x y
Ïðè ýòîì êîíêðåòíàÿ ïàðà òàêîâà:
PAIR a b = λ f. f a b
Ñòàíäàðòíûå îïåðàöèè äëÿ ïàðû (ïðîåêöèè):
FST ≡ λp.p TRU
SND ≡ λp.p FLS
7
Ïàðû (2)
Ïðîâåðèì, ÷òî îæèäàåìûå ñâîéñòâà ïðîåêöèé FST ≡ λp.p TRU
è SND ≡ λp.p FLS âûïîëíÿþòñÿ:
FST (PAIR a b) = PAIR a b TRU
≡ (λ xy f. f x y) a b TRU
= TRU a b
= a;
SND (PAIR a b) = PAIR a b FLS
≡ (λ xy f. f x y) a b FLS
= FLS a b
= b.
8
×èñëà (1)
×èñëà (íóìåðàëû) ×¼ð÷à:
0 ≡ λs z. z1 ≡ λs z. s z2 ≡ λs z. s (s z)3 ≡ λs z. s (s (s z))4 ≡ λs z. s (s (s (s z)))
...
×åðòó ñâåðõó áóäåì îïóñêàòü, åñëè ýòî íå áóäåò ïðèâîäèòü ê
ïóòàíèöå.
Íàáëþäåíèå: 0 ≡ FLS.
9
×èñëà (2)
Áîëåå ôîðìàëüíî:
Âûðàæåíèå Fn(X), ãäå n ∈ N, à F,X ∈ Λ, îïðåäåëèì èíäóêòèâíî:
F0(X) ≡ X;
Fn+1(X) ≡ F(Fn(X)).
Òîãäà n-îå ÷èñëî ×¼ð÷à îïðåäåëÿåòñÿ òàê:
n ≡ λs z. sn(z).
10
×èñëà (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
×èñëà (4)
Ôóíêöèÿ ñëåäîâàíèÿ äëÿ ÷èñåë
SUCC ≡ λn s z. s (ns 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.ns (s z)
¾íàäñòðàåâàåò¿ n-êðàòíîå ïðèìåíåíèå s íå íàä íóë¼ì (z), à
íàä åäèíèöåé (s z).
12
×èñëà: ñëîæåíèå (1)
Ñëîæåíèå ÷èñåë ×¼ð÷à îñíîâûâàåòñÿ íà àíàëîãè÷íîé èäåå
PLUS ≡ λmns z.ms (ns 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
×èñëà: ñëîæåíèå (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 ≡ λmns z.ms (ns z) äåéñòâèòåëüíî ñêëàäûâàåò.
14
×èñëà: óìíîæåíèå (1)
Áëàãîäàðÿ êàððèðîâàíèþ PLUS n ïðèáàâëÿåò n ê ëþáîìó ïå-
ðåäàíîìó àðãóìåíòó. Ïîýòîìó óìíîæåíèå ìîæåò áûòü çàäàíî
òàê
MULT1 ≡ λmn.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 ≡ λmns z.m (ns) z
MULT ≡ λmns.m (ns)
15
×èñëà: óìíîæåíèå (2)
Ïðîâåðèì MULT2 ≡ λmns z.m (ns) 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 ≡ λmns.m (ns) ïîëó÷àåòñÿ èç MULT2 ñ ïîìîùüþ
η-ïðåîáðàçîâàíèÿ.
16
×èñëà: óìíîæåíèå (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 ≡ λmns z.m (ns) z äåéñòâèòåëüíî óìíîæàåò.
17
×èñëà: ïðåäøåñòâîâàíèå
Âñïîìîãàòåëüíûå ôóíêöèè
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
×èñëà: ïðèìèòèâíàÿ ðåêóðñèÿ
Îáîáùèì ïðåäûäóùóþ ñõåìó
XZ ≡ λx. PAIR x 0
FS ≡ λf p. PAIR (f (FST p) (SND p)) (SUCC (SND p))
REC ≡ λmf 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 (λxy.y) 0. À ôàêòîðèàë?
19
Ñïèñêè
Êîíñòðóêòîðû ñïèñêîâ:
NIL ≡ λcn.nCONS ≡ λe l cn. c e (l c n)
Íàïðèìåð,
[ ] = NIL = λcn.n
[5, 3, 2] = CONS 5 (CONS 3 (CONS 2 NIL)) = λcn. c 5 (c 3 (c 2 n))
Ñòàíäàðòíûå ôóíêöèè:
EMPTY ≡ λl. l (λh t. FLS) TRU
HEAD ≡ ?? äîìàøíåå çàäàíèå
TAIL ≡ ?? äîìàøíåå çàäàíèå **
20
λ-îïðåäåëèìîñòü (1)
• ×èñëîâàÿ ôóíêöèÿ � ýòî îòîáðàæåíèå f : Np → N.
• ×èñëîâàÿ ôóíêöèÿ f íàçûâàåòñÿ λ-îïðåäåëèìîé, åñëè äëÿíåêîòîðîãî êîìáèíàòîðà F ðàâåíñòâî
F n1 . . .np = f(n1, . . . ,np)
âûïîëíÿåòñÿ äëÿ âñåõ n1, . . . ,np ∈ N. Ïðè ýòîì f íàçûâàþòλ-îïðåäåëåííîé ïîñðåäñòâîì F.
21
λ-îïðåäåëèìîñòü (2)
Êëèíè (Kleene) 1936: âñå ðåêóðñèâíûå ôóíêöèè λ-îïðåäåëèìû
è íàîáîðîò.
Çàìå÷àíèå. Ïîä ðåêóðñèâíûìè çäåñü, êîíå÷íî, ïîíèìàþòñÿ
÷àñòè÷íûå ðåêóðñèâíûå ôóíêöèè (0, SUCC, ïðîåêöèè è îïåðà-
òîð ìèíèìèçàöèè) [LCWT 2.2, ÂÔ 11]
Ïîíÿòèÿ ðåêóðñèâíîñòè, λ-îïðåäåëåííîñòè è âû÷èñëèìîñòè
ïî Òüþðèíãó ýêâèâàëåíòíû.
Áåñòèïîâîå λ-èñ÷èñëåíèå ïîëíî ïî Òüþðèíãó.
22
Íàçðåøèìîñòü λ-èñ÷èñëåíèÿ
Ïóñòü A ⊆ Λ.A íàçûâàåòñÿ çàìêíóòûì îòíîñèòåëüíî =, åñëè
M ∈ A, λ `M = N ⇒ N ∈ A.
A íàçûâàåòñÿ íåòðèâèàëüíûì, åñëè A 6= ∅ è A 6= Λ.
Òåîðåìà. Ïóñòü A ⊆ Λ ÿâëÿåòñÿ íåòðèâèàëüíûì è çàìêíó-
òûì îòíîñèòåëüíî =. Òîãäà A íå ÿâëÿåòñÿ ðåêóðñèâíûì.
[LCWT 2.2]
Ñëåäñòâèå. Ìíîæåñòâî {M |M ∈ Λ,M = TRU} íå ÿâëÿåòñÿ ðå-
êóðñèâíûì.
Áåñòèïîâîå λ-èñ÷èñëåíèå íå ÿâëÿåòñÿ ðàçðåøèìîé òåîðèåé.
23
Äîìàøíåå çàäàíèå
Çàêîäèðóéòå â áåñòèïîâîì λ-èñ÷èñëåíèè:
� ëîãè÷åñêóþ îïåðàöèþ OR;
� ïÿòèýëåìåíòíûé êîðòåæ TUPLE5 è ôóíêöèè, îñóùåñòâëÿþ-
ùèå ïðîåêöèè PRJ1, . . . , PRJ5;
� ñòàíäàðòíûå ôóíêöèè äëÿ ñïèñêîâ;
� ôóíêöèè âû÷èòàíèÿ, ïðîâåðêè íà ðàâåíñòâî è âîçâåäåíèÿ
â ñòåïåíü äëÿ ÷èñåë ×¼ð÷à.
 ïîñëåäíåì ñëó÷àå ïðèâåäèòå èíäóêòèâíîå äîêàçàòåëüñòâî.
24
Ëèòåðàòóðà (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
Ëèòåðàòóðà (2)
ÂÔ ãë. 11
Í.Ê. Âåðåùàãèí, À. Øåíü, Âû÷èñëèìûå ôóíêöèè
Ì:ÌÖÍÌÎ 2008
I2FP ãë. 3
John Harrison, Introduction to Functional Programming
26