20110224 systems of_typed_lambda_calculi_moskvin_lecture03

Preview:

Citation preview

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

Ëåêöèÿ 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

Recommended