20110224 systems of_typed_lambda_calculi_moskvin_lecture03

26
λ λ

Upload: computer-science-club

Post on 29-Jun-2015

251 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Ñèñòåìû òèïèçàöèè ëÿìáäà-èñ÷èñëåíèÿ

Ëåêöèÿ 2. λ-èñ÷èñëåíèå: ïðîãðàììèðîâàíèå è

λ-îïðåäåëèìîñòü

Äåíèñ Ìîñêâèí

27.02.2011

CS Club ïðè ÏÎÌÈ ÐÀÍ

1

Page 2: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Ïðîãðàììèðîâàíèå íà ÿçûêå λ-èñ÷èñëåíèÿ

λ-èñ÷èñëåíèå � ïîëíîöåííûé ÿçûê ïðîãðàììèðîâàíèÿ? Íåò,

íî åñëè åãî ðàññìàòðèâàòü â ýòîì êà÷åñòâå, òî:

• óäîáíî ðàáîòàòü ñ çàìêíóòûìè òåðìàìè;

• â ÷èñòîì λ-èñ÷èñëåíèè çíà÷åíèÿ � ýòî λ-àáñòðàêöèè;

• β-ïðåîáðàçîâàíèÿ ìîäåëèðóþò ïðîöåññ âû÷èñëåíèÿ.

2

Page 3: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Áóëåâû çíà÷åíèÿ (1)

Áóëåâû çíà÷åíèÿ ìîæíî îïðåäåëèòü òàê:

TRU ≡ λ t f. tFLS ≡ λ t f. f

Còàíäàðòíûå áóëåâû îïåðàöèè:

IIF ≡ λb xy.bxyNOT ≡ ??? (÷óòü ïîçæå)AND ≡ λ xy. xy FLS

OR ≡ ??? (äîìàøíåå çàäàíèå)

3

Page 4: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Áóëåâû çíà÷åíèÿ (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

Page 5: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Áóëåâû çíà÷åíèÿ (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

Page 6: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Áóëåâû çíà÷åíèÿ (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

Page 7: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Ïàðû (1)

Ïàðó (äâóõýëåìåíòíûé êîðòåæ) ìîæíî îïðåäåëèòü òàê:

PAIR ≡ λ xy f. f x y

Ïðè ýòîì êîíêðåòíàÿ ïàðà òàêîâà:

PAIR a b = λ f. f a b

Ñòàíäàðòíûå îïåðàöèè äëÿ ïàðû (ïðîåêöèè):

FST ≡ λp.p TRU

SND ≡ λp.p FLS

7

Page 8: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Ïàðû (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

Page 9: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà (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

Page 10: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà (2)

Áîëåå ôîðìàëüíî:

Âûðàæåíèå Fn(X), ãäå n ∈ N, à F,X ∈ Λ, îïðåäåëèì èíäóêòèâíî:

F0(X) ≡ X;

Fn+1(X) ≡ F(Fn(X)).

Òîãäà n-îå ÷èñëî ×¼ð÷à îïðåäåëÿåòñÿ òàê:

n ≡ λs z. sn(z).

10

Page 11: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà (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

Page 12: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà (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

Page 13: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà: ñëîæåíèå (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

Page 14: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà: ñëîæåíèå (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

Page 15: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà: óìíîæåíèå (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

Page 16: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà: óìíîæåíèå (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

Page 17: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà: óìíîæåíèå (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

Page 18: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà: ïðåäøåñòâîâàíèå

Âñïîìîãàòåëüíûå ôóíêöèè

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

Page 19: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

×èñëà: ïðèìèòèâíàÿ ðåêóðñèÿ

Îáîáùèì ïðåäûäóùóþ ñõåìó

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

Page 20: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Ñïèñêè

Êîíñòðóêòîðû ñïèñêîâ:

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

Page 21: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

λ-îïðåäåëèìîñòü (1)

• ×èñëîâàÿ ôóíêöèÿ � ýòî îòîáðàæåíèå f : Np → N.

• ×èñëîâàÿ ôóíêöèÿ f íàçûâàåòñÿ λ-îïðåäåëèìîé, åñëè äëÿíåêîòîðîãî êîìáèíàòîðà F ðàâåíñòâî

F n1 . . .np = f(n1, . . . ,np)

âûïîëíÿåòñÿ äëÿ âñåõ n1, . . . ,np ∈ N. Ïðè ýòîì f íàçûâàþòλ-îïðåäåëåííîé ïîñðåäñòâîì F.

21

Page 22: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

λ-îïðåäåëèìîñòü (2)

Êëèíè (Kleene) 1936: âñå ðåêóðñèâíûå ôóíêöèè λ-îïðåäåëèìû

è íàîáîðîò.

Çàìå÷àíèå. Ïîä ðåêóðñèâíûìè çäåñü, êîíå÷íî, ïîíèìàþòñÿ

÷àñòè÷íûå ðåêóðñèâíûå ôóíêöèè (0, SUCC, ïðîåêöèè è îïåðà-

òîð ìèíèìèçàöèè) [LCWT 2.2, ÂÔ 11]

Ïîíÿòèÿ ðåêóðñèâíîñòè, λ-îïðåäåëåííîñòè è âû÷èñëèìîñòè

ïî Òüþðèíãó ýêâèâàëåíòíû.

Áåñòèïîâîå λ-èñ÷èñëåíèå ïîëíî ïî Òüþðèíãó.

22

Page 23: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Íàçðåøèìîñòü λ-èñ÷èñëåíèÿ

Ïóñòü A ⊆ Λ.A íàçûâàåòñÿ çàìêíóòûì îòíîñèòåëüíî =, åñëè

M ∈ A, λ `M = N ⇒ N ∈ A.

A íàçûâàåòñÿ íåòðèâèàëüíûì, åñëè A 6= ∅ è A 6= Λ.

Òåîðåìà. Ïóñòü A ⊆ Λ ÿâëÿåòñÿ íåòðèâèàëüíûì è çàìêíó-

òûì îòíîñèòåëüíî =. Òîãäà A íå ÿâëÿåòñÿ ðåêóðñèâíûì.

[LCWT 2.2]

Ñëåäñòâèå. Ìíîæåñòâî {M |M ∈ Λ,M = TRU} íå ÿâëÿåòñÿ ðå-

êóðñèâíûì.

Áåñòèïîâîå λ-èñ÷èñëåíèå íå ÿâëÿåòñÿ ðàçðåøèìîé òåîðèåé.

23

Page 24: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Äîìàøíåå çàäàíèå

Çàêîäèðóéòå â áåñòèïîâîì λ-èñ÷èñëåíèè:

� ëîãè÷åñêóþ îïåðàöèþ OR;

� ïÿòèýëåìåíòíûé êîðòåæ TUPLE5 è ôóíêöèè, îñóùåñòâëÿþ-

ùèå ïðîåêöèè PRJ1, . . . , PRJ5;

� ñòàíäàðòíûå ôóíêöèè äëÿ ñïèñêîâ;

� ôóíêöèè âû÷èòàíèÿ, ïðîâåðêè íà ðàâåíñòâî è âîçâåäåíèÿ

â ñòåïåíü äëÿ ÷èñåë ×¼ð÷à.

 ïîñëåäíåì ñëó÷àå ïðèâåäèòå èíäóêòèâíîå äîêàçàòåëüñòâî.

24

Page 25: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Ëèòåðàòóðà (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

Page 26: 20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Ëèòåðàòóðà (2)

ÂÔ ãë. 11

Í.Ê. Âåðåùàãèí, À. Øåíü, Âû÷èñëèìûå ôóíêöèè

Ì:ÌÖÍÌÎ 2008

I2FP ãë. 3

John Harrison, Introduction to Functional Programming

26