Programowanie funkcjonalne

Podobne dokumenty
Programowanie funkcjonalne. Wykªad 12

Programowanie funkcyjne Wykład 12. Funkcje rekurencyjne i rachunek lambda

Programowanie funkcyjne. Wykªad 13

Programowanie funkcyjne Wykład 14. Rachunek λ z typami prostymi

Twierdzenie Wainera. Marek Czarnecki. Warszawa, 3 lipca Wydziaª Filozoi i Socjologii Uniwersytet Warszawski

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

Metody dowodzenia twierdze«

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

Metodydowodzenia twierdzeń

Teoretyczne Podstawy Informatyki

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Indeksowane rodziny zbiorów

Programowanie funkcyjne Wykład 13. Siła wyrazu rachunku lambda

Teoretyczne Podstawy Języków Programowania Wykład 4. Siła wyrazu rachunku λ

Jak należy się spodziewać, mamy. Zauważmy jednak, że nie zachodzi równość

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

1 Bª dy i arytmetyka zmiennopozycyjna

Elementy rachunku lambda. dr hab. inż. Joanna Józefowska, prof. PP 1

Rachunek Lambda i J zyki Programowania

Ciaªa i wielomiany. 1 Denicja ciaªa. Ciaªa i wielomiany 1

Maszyny Turinga i problemy nierozstrzygalne. Maszyny Turinga i problemy nierozstrzygalne

x y x y x y x + y x y

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

Ukªady równa«liniowych

Logiczne podstawy informatyki 1. Wojciech Buszkowski. Zakład Teorii Obliczeń Wydział Matematyki i Informatyki UAM

Wykªad 4. Funkcje wielu zmiennych.

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Podstawy matematyki dla informatyków. Logika formalna. Skªadnia rachunku zda« Skróty i priorytety. Wykªad 10 (Klasyczny rachunek zda«) 15 grudnia 2011

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

Równowano modeli oblicze

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

2 Liczby rzeczywiste - cz. 2

Logika i teoria mnogości Wykład 14

Logika dla matematyków i informatyków Wykªad 1

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

-termami -wyrażeń pre-termami abstrakcją aplikacją zmiennych wolnych zmienną związaną domknięte

Wybrane poj cia i twierdzenia z wykªadu z teorii liczb

Maªgorzata Murat. Modele matematyczne.

1 0 Je»eli wybierzemy baz A = ((1, 1), (2, 1)) to M(f) A A =. 0 2 Daje to znacznie lepszy opis endomorzmu f.

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

Matematyka dyskretna dla informatyków

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Logika intuicjonistyczna

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Liniowe równania ró»niczkowe n tego rz du o staªych wspóªczynnikach

Funkcje wielu zmiennych

Hotel Hilberta. Zdumiewaj cy ±wiat niesko«czono±ci. Marcin Kysiak. Festiwal Nauki, Instytut Matematyki Uniwersytetu Warszawskiego

Informacje pomocnicze

Rozwi zanie równania ró»niczkowego metod operatorow (zastosowanie transformaty Laplace'a).

Logika matematyczna (16) (JiNoI I)

Model obiektu w JavaScript

Funkcje, wielomiany. Informacje pomocnicze

Zagadnienia na wej±ciówki z matematyki Technologia Chemiczna

Algorytmy zwiazane z gramatykami bezkontekstowymi

Strategia czy intuicja?

Zdzisªaw Dzedzej, Katedra Analizy Nieliniowej pok. 611 Kontakt:

Rachunek zda«. Relacje. 2018/2019

ELEMENTARNA TEORIA LICZB. 1. Podzielno±

Metody numeryczne. Wst p do metod numerycznych. Dawid Rasaªa. January 9, Dawid Rasaªa Metody numeryczne 1 / 9

Podstawy matematyki dla informatyków. Funkcje. Funkcje caªkowite i cz ±ciowe. Deniowanie funkcji. Wykªad pa¹dziernika 2012

LOGIKA ALGORYTMICZNA

Schematy i reguªy wnioskowania w logice rozmytej

Rachunek lambda, zima

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Lab. 02: Algorytm Schrage

Uczenie Wielowarstwowych Sieci Neuronów o

XVII Warmi«sko-Mazurskie Zawody Matematyczne

Arytmetyka zmiennopozycyjna

Automorzmy modeli i twierdzenie EhrenfeuchtaMostowskiego

Podstawy matematyki dla informatyków

Podstawy modelowania w j zyku UML

Funkcje rekurencyjne

Zbiory i odwzorowania

Wykªad 12. Transformata Laplace'a i metoda operatorowa

Logika i teoria typów

Ekstremalnie maªe zbiory

Metoda tablic semantycznych. 1 Metoda tablic semantycznych

Przykªady problemów optymalizacji kombinatorycznej

Geometria Algebraiczna

Zadania z PM II A. Strojnowski str. 1. Zadania przygotowawcze z Podstaw Matematyki seria 2

W poprzednim odcinku... Podstawy matematyki dla informatyków. Relacje równowa»no±ci. Zbiór (typ) ilorazowy. Klasy abstrakcji

O czym będzie ten wykład: Logika i teoria typów. Zbiory i funkcje. Powtórzenie z rachunku lambda. Ekstensjonalność (?) Beztypowy rachunek lambda

Wnioskowanie Boolowskie i teoria zbiorów przybli»onych

Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.

2. L(a u) = al( u) dla dowolnych u U i a R. Uwaga 1. Warunki 1., 2. mo»na zast pi jednym warunkiem: L(a u + b v) = al( u) + bl( v)

Arytmetyka pierwszego rz du

ZADANIA. Maciej Zakarczemny

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

Funkcje wielu zmiennych

Funkcje wielu zmiennych

EGZAMIN MAGISTERSKI, r Matematyka w ekonomii i ubezpieczeniach

Wst p do informatyki. Systemy liczbowe. Piotr Fulma«ski. 21 pa¹dziernika Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Przekroje Dedekinda 1

Macierze i Wyznaczniki

1 Granice funkcji wielu zmiennych.

Podstawy logiki i teorii zbiorów wiczenia

Semestr letni 2014/15

Dokªadna arytmetyka liczb rzeczywistych w j zyku Python

Transkrypt:

Programowanie funkcjonalne Wykªad 12. Funkcje rekurencyjne i rachunek lambda Zdzisªaw Spªawski Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 1

Formalizacje poj cia obliczalno±ci Pierwsze wa»niejsze twierdzenia, dotycz ce obliczalno±ci Teza Churcha-Turinga Funkcje rekurencyjne Przykªady funkcji pierwotnie rekurencyjnych Historia i niektóre zastosowania rachunku lambda Gramatyka i konwencje notacyjne Zmienne wolne i zwi zane Reguªy wnioskowania Semantyka operacyjna Strategie i grafy redukcji Twierdzenie Churcha-Rossera Twierdzenie o standardyzacji Programowanie funkcyjne Literatura Zadania kontrolne Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 2

Formalizacje poj cia obliczalno±ci Matematyczne modele algorytmu Rachunek kombinatorów Schönnkel (1924), Curry (1930) Rachunek lambda (λ-rachunek) A.Church (1932/33) Funkcje (cz ±ciowo) rekurencyjne S.C.Kleene (1936) Rachunek równa«rekurencyjnych K.Gödel wykorzystuj c ide J.Herbranda (1936) Maszyny Turinga A.M.Turing (1936) Systemy (produkcje) Posta E.L.Post (1943) Normalne algorytmy Markova A.A.Markov (1951) Maszyny z nieograniczonym rejestrami J.C.Shepherdson, H.E.Sturgis (1963) J zyk WHILE (z danymi w stylu j zyka LISP) N.D.Jones (1997) i inne. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 3

Pierwsze wa»niejsze twierdzenia, dotycz ce obliczalno±ci Pierwsze wa»niejsze twierdzenia, dotycz ce obliczalno±ci Ackermann (1928) pokazaª,»e istnieje funkcja intuicyjnie obliczalna, która nie jest pierwotnie rekurencyjna. Church i Kleene (1936) udowodnili równowa»no± funkcji rekurencyjnych i λ-obliczalno±ci. Church (1936) wysun ª hipotez,»e (nieformalne) poj cie obliczalno±ci mo»na uto»sami z (formalnym) poj ciem λ-deniowalno±ci. Turing (1937) udowodniª równowa»no± obliczalno±ci na maszynach Turinga i λ-obliczalno±ci. Turing (1937) wysun ª hipotez»e (nieformalne) poj cie obliczalno±ci mo»na uto»sami z (formalnym) poj ciem obliczalno±ci na maszynach Turinga. Pó¹niej udowodniono równowa»no± wszystkich zaproponowanych do tej pory matematycznych modeli algorytmu. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 4

Teza Churcha-Turinga Teza Churcha [Churcha-Turinga]. Ka»da funkcja obliczalna w nieformalnym sensie jest λ-deniowalna (=rekurencyjna). Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 5

Funkcje rekurencyjne Operacja minimum 1. Operacja minimum. Niech f : N n+1 N. (µm.f(x 1,..., x n, m) = 0) : N n N oznacza najmniejsz liczb m, dla której zachodzi f(x 1,..., x n, m) = 0 i f(x 1,..., x n, k) jest zdeniowana dla wszystkich k m; w przeciwnym razie wynik jest niezdeniowany. 2. Operacja minimum ograniczonego. Niech f : N n+1 N. (µm < z.f(x 1,..., x n, m) = 0) : N n N oznacza najmniejsz liczb m < z, dla której zachodzi f(x 1,..., x n, m) = 0 i f(x 1,..., x n, k) jest zdeniowana dla wszystkich k m; w przeciwnym razie wynik jest niezdeniowany. 3. Funkcj numeryczn jest dowolna funkcja f : N n N dla pewnego n. 4. x = df x 1,..., x n dla n N. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 6

Funkcje rekurencyjne Funkcje bazowe Denicja. Funkcje bazowe (pocz tkowe): 1. Z(x) = 0, dla ka»dego x funkcja zeruj ca 2. S(x) = x + 1, dla ka»dego x funkcja nast pnika (ang. succesor) 3. U i n(x 1,..., x n ) = x i, dla 1 i n funkcje projekcji Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 7

Funkcje rekurencyjne Schematy tworzenia nowych funkcji I Denicja. Niech A b dzie zbiorem funkcji numerycznych. 1. A jest zamkni ty ze wzgl du na operacj superpozycji (skªadania funkcji), je±li dla wszystkich f zdeniowanych nast puj co: f( x) = g(h 1 ( x),..., h r ( x)) gdzie g, h 1,..., h r A, zachodzi f A. 2. A jest zamkni ty ze wzgl du na operacj rekursji prostej, je±li dla wszystkich f zdeniowanych nast puj co (druga kolumna odnosi si do przypadku x = ): { f(0, x) = g( x), f(s(n), x) = h(n, f(n, x), x), gdzie g, h A, zachodzi f A. { f(0) = a, dla a N f(s(n)) = h(n, f(n)), Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 8

Funkcje rekurencyjne Schematy tworzenia nowych funkcji II 3. A jest zamkni ty ze wzgl du na operacj minimum efektywnego, je±li dla wszystkich f zdeniowanych nast puj co: f( x) = (µm.g( x, m) = 0), gdzie g A i x. m.g( x, m) = 0, zachodzi f A. 4. A jest zamkni ty ze wzgl du na operacj minimum, je±li dla wszystkich f zdeniowanych nast puj co: gdzie g A, zachodzi f A. f( x) = (µm.g( x, m) = 0), Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 9

Funkcje rekurencyjne Klasa P funkcji pierwotnie rekurencyjnych Denicja. Klasa P funkcji pierwotnie rekurencyjnych jest najmniejsz klas funkcji numerycznych zawieraj cych wszystkie funkcje bazowe i zamkni t ze wzgl du na operacje (i) superpozycji, (ii) rekursji prostej. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 10

Funkcje rekurencyjne Funkcja Ackermanna Funkcja A(m, n), zdeniowana za pomoc nast puj cego ukªadu równa«, jest obliczalna: A(0, n) = n + 1 A(m + 1, 0) = A(m, 1) A(m + 1, n + 1) = A(m, A(m + 1, n)) Powy»sza denicja zawiera podwójn rekursj, która jest nieco silniejsza, ni» schemat rekursji prostej. Zauwa»my jednak,»e przy ka»dym wywoªaniu rekurencyjnym jeden z argumentów maleje, wi c po sko«czonej ilo±ci wywoªa«obliczenia musz si zako«czy. Twierdzenie. Je±li f : N N jest pierwotnie rekurencyjna, to istnieje takie m,»e dla wszystkich n, f(n) < A(m, n), tzn. funkcja Ackermanna asymptotycznie ro±nie szybciej, ni» jakakolwiek funkcja pierwotnie rekurencyjna. Mamy wi c nat puj ce Twierdzenie. P R 0 R. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 11

Funkcje rekurencyjne Klasy R 0 i R funkcji ogólnie i cz ±ciowo rekurencyjnych Denicja. Klasa R 0 funkcji (ogólnie) rekurencyjnych jest najmniejsz klas funkcji numerycznych zawieraj cych wszystkie funkcje bazowe i zamkni t ze wzgl du na operacje (i) superpozycji, (ii) rekursji prostej, (iii) minimum efektywnego. Denicja. Klasa R funkcji cz ±ciowo rekurencyjnych jest najmniejsz klas funkcji numerycznych zawieraj cych wszystkie funkcje bazowe i zamkni t ze wzgl du na operacje (i) superpozycji, (ii) rekursji prostej, (iii) minimum. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 12

Przykªady funkcji pierwotnie rekurencyjnych Dodawanie Nieformalnie: { add(0, n) = n add(m + 1, n) = add(m, n) + 1 Formalnie: gdzie: { add(0, n) = U 1 1 (n) add(s(m), n) = h(m, add(m, n), n) h(x 1, x 2, x 3 ) = S(U 2 3 (x 1, x 2, x 3 )) Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 13

Przykªady funkcji pierwotnie rekurencyjnych Poprzednik Specykacja: δ(n) = Denicja (nieformalna): { δ(0) = 0 { n 1, dla n > 0 0, dla n = 0 δ(s(n)) = n Formalnie: { δ(0) = 0 δ(s(n)) = U2 1 (n, δ(n)) Zostaª tu zastosowany schemat rekursji prostej, w którym x =. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 14

Przykªady funkcji pierwotnie rekurencyjnych Odejmowanie Specykacja: m n = { m n, Denicja (nieformalna): { m 0 = m dla m n 0, dla m < n m S(n) = m n W tym przykªadzie denicja funkcji zostaªa podana nieformalnie, ale nale»y zdawa sobie spraw,»e jest to jedynie pewien skrót notacyjny, który w razie potrzeby nale»y umie zast pi denicj w peªni formaln, zgodn z wprowdzonymi wy»ej schematami deniowania funkcji rekurencyjnych. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 15

Historia i niektóre zastosowania rachunku lambda Rachunek lambda (λ-rachunek) jest teori funkcji rozumianych konstruktywnie jako reguªy obliczania, tj. przeksztaªcania argumentu w wynik. λ-rachunek zostaª zaproponowany w latach trzydziestych ubiegªego wieku przez Alonzo Churcha jako cz ± systemu formalnego, stanowi cego alternatywn formalizacj podstaw matematyki. Chocia» caªy system okazaª si sprzeczny, nie dotyczy to λ-rachunku. Wcze±niej, w latach dwudziestych, Moses Schönnkel zaproponowaª inn teori funkcji, opart na kombinatorach. W latach trzydziestych Haskell Curry niezale»nie wprowadziª kombinatory, rozszerzyª teori Schönnkela oraz pokazaª,»e jest ona równowa»na rachunkowi lambda. Mniej wi cej w tym czasie udowodniono równowa»no± rachunku lambda, funkcji rekurencyjnych i maszyn Turinga. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 16

Historia i niektóre zastosowania rachunku lambda Pod koniec lat pi dziesi tych John McCarthy, zainspirowany rachunkiem lambda, opracowaª j zyk programowania LISP. We wczesnych latach sze± dziesi tych Peter Landin pokazaª, jak mo»na zinterpretowa Algol-60 w rachunku lambda. Opracowany przez niego prototypowy j zyk ISWIM wywarª wpªyw na projektantów zarówno j zyków funkcjonalnych, jak i imperatywnych. Wykorzystuj c te rezultaty Christopher Strachey poªo»yª podstawy semantyki denotacyjnej j zyków programowania. Techniczne problemy rozwi zaª ameryka«ski logik Dana Scott, opracowuj c teori dziedzin, która stanowi wa»ny rozdziaª informatyki teoretycznej. Curry i niezale»nie Howard zauwa»yli odpowiednio± mi dzy rachunkem lambda z typami a dowodami matematycznymi (izomorzm Curry'ego-Howarda). Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 17

Historia i niektóre zastosowania rachunku lambda Pod koniec lat siedemdziesi tych David Turner pokazaª,»e kombinatory równie» mog by u»ywane jako efektywne kody maszynowe dla programów funkcjonalnych. W latach osiemdziesi tych bardzo wiele uwagi po±wi cono typom w j zykach funkcjonalnych, co wywarªo znaczny wpªyw na in»ynieri oprogramowania. W ten sposób wywodz ce si z logiki matematycznej i stworzone jeszcze przed skonstruowaniem pierwszych komputerów rachunek lambda i teoria kombinatorów wywieraj coraz wi kszy wpªyw na wa»ne dziedziny informatyki, m.in. podstawy informatyki, projektowanie i semantyk j zyków programowania, in»ynieri oprogramowania (specykacje, poprawno±...). Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 18

Gramatyka i konwencje notacyjne Gramatyka i konwencje notacyjne Denicja. Zbiór λ-termów Λ deniuje si przy u»yciu niesko«czonego, przeliczalnego zbioru zmiennych V = {v, v, v,...} i dwóch podstawowych operacji aplikacji i abstrakcji funkcyjnej. V ::= v V Λ ::= V (ΛΛ) (λv.λ) Dla uproszczenia zapisu stosuje si nast puj ce konwencje notacyjne. Maªe litery (np. x, y, x 1 ) oznaczaj zmienne. Wielkie litery (np. M, N, P ) oznaczaj λ-termy. λx 1... x n.m oznacza (λx 1 (λx 2 (... (λx n (M))...))). (Abstrakcja wi»e w prawo.) M 1... M n oznacza (... (M 1 M 2 )... M n ). (Aplikacja wi»e w lewo.) Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 19

Zmienne wolne i zwi zane Zmienne wolne i zwi zane Denicja. Zbiór zmiennych wolnych termu M, oznaczany przez F V (M), i zbiór zmiennych zwi zanych, oznaczany przez BV (M), deniuje si przez indukcj po strukturze termu: F V (x) = {x} F V (MN) = F V (M) F V (N) F V (λx.m) = F V (M) \ {x} BV (x) = BV (MN) = BV (M) BV (N) BV (λx.m) = BV (M) {x} Przykªad. (λx.y x) (λy.x y). z: wolne wyst pienie zmiennej z. z: zwi zane wyst pienie zmiennej z. Term bez zmiennych wolnych nazywamy termem zamkni tym lub kombinatorem. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 20

Zmienne wolne i zwi zane Podstawienie za zmienn woln M N oznacza tekstow identyczno± termów M i N z dokªadno±ci do zamiany nazw zmiennych zwi zanych. Denicja. Wynik podstawiania N za wolne wyst pienia zmiennej x w termie M, oznaczany przez M[x := N] lub M[N/x], mo»na zdeniowa indukcyjnie przez: y[x := N] ( N, gdy y x y, gdy y x (P Q)[x := N] (P [x := N])(Q[x := N]) 8 λx.p, (λy.p )[x := N] Przykªad. λy.(p [x := N]), >< >: λz.(p [y := z][x := N]), je±li y x (λy.x(λx.xy))[x := yz] λw.yz(λx.xw) je±li y x i y / F V (N) lub x / F V (P ) je±li y x i y F V (N) i x F V (P ), gdzie z jest dowoln ±wie» zmienn, tzn. z / F V (N) BV (N) F V (P ) BV (P ) Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 21

Reguªy wnioskowania Reguªy wnioskowania dla rachunku lambda I β (λx.m) N = M[x := N] λx.m x = M η gdy x / F V (M) M = M Re N = M Sym M = N K = M K = N M = N Trans K = L M = N MonApp K M = L N M = N λx.m = λx.n MonAbs Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 22

Reguªy wnioskowania Reguªy wnioskowania dla rachunku lambda II Powy»szy rachunek nosi nazw rachunku λη (lub λβη). Je±li pominiemy reguª (η), to otrzymamy teori λ (lub λβ). Je±li w systemie λ mo»na wyprowadzi równo± M = N, to piszemy λ M = N. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 23

Reguªy wnioskowania Reguªy wnioskowania dla rachunku lambda III Przykªad. Dowód równo±ci termów (λxy.x) (λz.z) i (λx.x) (λyz.z). β (λxy.x) (λz.z) = λyz.z β (λx.x) (λyz.z) = λyz.z Sym λyz.z = (λx.x) (λyz.z) Trans (λxy.x) (λz.z) = (λx.x) (λyz.z) W celu sformalizowania zamiany zmiennych zwi zanych Church wprowadziª poni»sz reguª (α). α λx.m = λy.m[x := y] gdy y / F V (M) BV (M) Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 24

Reguªy wnioskowania Reguªy wnioskowania dla rachunku lambda IV Semantyka termów, ró»ni cych si tylko zmiennymi zwi zanymi jest identyczna, wi c zwykle reguªa (α) przenoszona jest do metaj zyka, a termy w rachunku lambda rozwa»ane s z dokªadno±ci do α-kongruencji. Relacja równowa»no±ci jest kongruencj ze wzgl du na f, je±li z x y wynika f(x) f(y). My równie» przyjmiemy tak konwencj. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 25

Semantyka operacyjna Redukcje W zbiorze lambda termów Λ denuje si relacj beta-redukcji jako najmniejsz relacj β (β-redukcja w jednym kroku lub kontrakcja) tak,»e: (λx.m)n β M[x := N] je±li M β N, to ZM β ZN, MZ β NZ oraz (λx.m) β (λx.n). Relacja β-redukcji β jest zwrotnym i przechodnim domkni ciem relacji β. Relacja β-konwersji = β jest relacj równowa»no±ci generowan przez β. Twierdzenie 1. λ M = N M = β N. Dowód. ( ) Przez indukcj po strukturze drzewa wywodu. ( ) Przez indukcj po sposobie generowania relacji = β. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 26

Semantyka operacyjna Posta normalna lambda termu I Niech M Λ. M jest w postaci β-normalnej (β-nf, ang. normal form), je±li nie zawiera β-redeksu (ang. redex = reducible expression), tj. podtermu (λx.p )Q. M jest w postaci βη-normalnej (βη-nf), je±li nie zawiera β- ani η-redeksu, tj. podtermów (λx.p )Q ani λx.p x, gdzie x F V (P ). M jest w czoªowej postaci normalnej (HNF, ang. head-normal form), je±li M λx 1... x n.yn 1... N m dla m, n 0. M jest w sªabej czoªowej postaci normalnej (WHNF, ang. weak head-normal form), je±li M λx.n lub M yn 1... N m dla m 0. M ma R-NF, je±li N.M = N i N jest w R-NF, gdzie R oznacza dowoln redukcj. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 27

Semantyka operacyjna Posta normalna lambda termu II Przykªad. λx.((λy.λz.fzy)x) nie jest w β-nf, ani w HNF, jest w WHNF. Lemat 2. Niech M b dzie w β-nf. Wówczas M β N N M Dowód. Oczywisty, je±li β jest β. Rezultat wynika z przechodnio±ci. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 28

Strategie i grafy redukcji Strategie redukcji I Zgodnie z powy»szymi denicjami lambda term mo»e zawiera kilka redeksów. Na przykªad term: (λx.xyxx)((λz.z)w) zawiera dwa β-redeksy (λx.xyxx)((λz.z)w) oraz (λz.z)w. Mo»na przeprowadza kontrakcje redeksów zgodnie z wybran strategi. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 29

Strategie i grafy redukcji Strategie redukcji II Redukcja normalna (ang. normal-order reduction, NOR) polega na kontrakcji lewostronnego zewn trznego redeksu, tj. redeksu, który zaczyna si najbardziej na lewo i nie jest zawarty w»adnym innym redeksie. Redukcja aplikatywna (ang. applicative-order reduction, AOR) polega na kontrakcji lewostronnego wewn trznego redeksu, tj. lewostronnego redeksu, nie zawieraj cego innych redeksów. S te» inne, mniej wa»ne strategie redukcji. Term jest silnie normalizowalny, je±li ka»da strategia redukcji doprowadza do postaci normalnej. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 30

Strategie i grafy redukcji Strategie redukcji III Poni»sze slogany uªatwiaj zapami tanie istoty najwa»niejszych strategii redukcji. Redukcja normalna: warto±ciuj ka»dy argument tyle razy, ile trzeba. Redukcja aplikatywna: warto±ciuj ka»dy argument dokªadnie raz. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 31

Strategie i grafy redukcji Strategie redukcji przykªady I (λx.xyxx)((λz.z)w) ((λz.z)w)y((λz.z)w)((λz.z)w) wy((λz.z)w)((λz.z)w) wyw((λz.z)w) wyww NOR (λx.xyxx)((λz.z)w) (λx.xyxx)w wyww AOR Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 32

Strategie i grafy redukcji Strategie redukcji przykªady II Niech ω λx.xx oraz Ω ωω. Ω ωω (λx.xx)(λx.xx) (λx.xx)(λx.xx)... (λx.xxy)(λx.xxy) (λx.xxy)(λx.xxy)y... (λx.y(λz.z))(ωω) y(λz.z) NOR (λx.y(λz.z))(ωω) (λx.y(λz.z))(ωω)... AOR Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 33

Strategie i grafy redukcji Grafy redukcji Denicja. Graf R-redukcji termu M (notacja G R (M)) jest zbiorem {N Λ M R N} ukierunkowanym relacj redukcji R. Je±li kilka redeksów powoduje przeksztaªcenie M 0 R M 1, to tyle samo ukierunkowanych kraw dzi prowadzi od M 0 do M 1 w G R (M)). Przykªad. G β (Ω), dla Ω (λx.xx)(λx.xx) Ω G β (W W W ), dla W λxy.xyy W W W (λy.yyy)w (λy.w yy)w (λy.(λz.yzz)y)w Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 34

Twierdzenie Churcha-Rossera Twierdzenie Churcha-Rossera Je±li M β P i M β Q, to dla pewnego N zachodzi P β N i Q β N. P β M β Q β N β Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 35

Twierdzenie Churcha-Rossera Wnioski z twierdzenia Churcha-Rossera I Wniosek 1. Je±li M = β N, to istnieje taki term L,»e M L i N L. Dowód. Przez indukcj po sposobie generowania relacji = β. Wniosek 2. (i) Je±li M ma N jako β-nf, to M β L. (ii) λ-term ma co najwy»ej jedn β-nf. Dowód. (i) Niech M = β N, gdzie N jest β-nf. Na podstawie Wniosku 1 M β L i N β L dla pewnego L. Wówczas N L na podstawie Lematu 2, a wi c M β N. (ii) Niech M ma N 1 i N 2 jako β-nf. Wówczas N 1 = β M = β N 2. Na podstawie Wniosku 1 N 1 β L i N 2 β L dla pewnego L wi c N 1 L N 2 na podstawie Lematu 2. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 36

Twierdzenie Churcha-Rossera Wnioski z twierdzenia Churcha-Rossera II Dalsze wnioski: (1) λ-rachunek jest niesprzeczny jako teoria równo±ciowa, tzn. nie mo»na w niej wyprowadzi wszystkich równo±ci, np. λ true = false, gdzie true λxy.x i false λxy.y. W przeciwnym razie true = β false na podstawie Tw.1, co jest niemo»liwe na podstawie Wniosku 2(ii), poniewa» true i false s ró»nymi β-nf. (2) W celu znalezienia β-nf termu M (je±li istnieje), ró»ne podtermy termu M mog by redukowane w dowolnej kolejno±ci. Je±li redukcja doprowadzi do β-nf, to na podstawie Wniosku 2(ii) β-nf jest jedyna. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 37

Twierdzenie o standardyzacji Twierdzenie o standardyzacji Je±li term M ma posta normaln N to istnieje normalna redukcja z M do N. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 38

Programowanie funkcyjne Programowanie funkcyjne I Jak widzieli±my, beta redukcja wymaga zmiany zmiennych zwi zanych (stosuj c α-konwersj ) w przypadku koniktu nazw zmiennych, powoduj cego zwi zanie zmiennej wolnej w wyniku redukcji, np. λx.(λyx. + xy)x β λx.λz. + zx Taka operacja jest jednak kosztowna i w j zykach funkcyjnych unika si jej, redukuj c wyra»enia do sªabej czoªowej postaci normalnej (WHNF). Powy»szy term jest ju» w WHNF. Warto±ciowanie zostanie przeprowadzone po zaaplikowaniu do argumentu, np. (λx.(λyx. + xy)x)5 β (λyx. + xy)5 β λx. + x5 Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 39

Programowanie funkcyjne Programowanie funkcyjne II W j zykach funkcyjnych maj zastosowanie dwie strategie warto±ciowania: warto±ciowanie gorliwe (ang. eager evaluation) i warto±ciowanie leniwe (ang. lazy evaluation), b d ce sposobami implementacji strategii AOR i NOR. warto±ciowanie gorliwe = AOR do WHNF warto±ciowanie leniwe = NOR do WHNF + wspóªdzielenie + leniwe konstruktory Przy warto±ciowaniu leniwym ka»dy argument funkcji jest warto±ciowany co najwy»ej raz. Argumenty leniwych konstruktorów nie s warto±ciowane. Czasem stosuje si strategie mieszane, np. warto±ciowanie gorliwe + leniwe konstruktory. W OCamlu konstruktory s gorliwe. J zyk funkcyjny mo»na potraktowa jak rachunek lambda (beztypowy lub z typami) z dodanymi staªymi (z odpowiednimi reguªami redukcji) i du» ilo±ci lukru syntaktyczego. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 40

Literatura Literatura (wybrane pozycje) I H.P.Barendregt, The Lambda Calculus. Its Syntax and Semantics, Elsevier, Amsterdam 1984 (revised edition). H.P.Barendregt, Functional Programming and Lambda Calculus, w J.van Leeuwen (ed.), Handbook of Theoretical Computer Science, vol. B, North Holland 1990, Ch.7, pp. 321-363 H.P.Barendregt, Lambda Calculi with Types, w: S.Abramsky, Dov M. Gabbay, T.S.E. Maibaum, Handbook of Logic in Computer Science, vol. 2, Clarendon Press, Oxford 1992, pp. 117-309, http://www.cs.ru.nl/ henk/papers.html Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 41

Literatura Literatura (wybrane pozycje) II M.Felleisen, M.Flatt, Programming Languages and Lambda Calculi, draft 2006, http://www.cs.utah.edu/plt/publications/pllc.pdf J.R.Hindley, J.P.Seldin, Introduction to Combinators and λ-calculus, Cambridge University Press, Cambridge 1986 Ch.Hankin, Lambda Calculi. A Guide for Computer Scientists, Oxford University Press, Oxford 1994 J.R.Hindley, Basic Simple Type Theory, Cambridge University Press, Cambridge 1997 J.L. Krivine, Lambda-Calculus, Types and Models, Masson, Paris 1993 P. Urzyczyn, Rachunek lambda, wykªad monograczny, http://www.mimuw.edu.pl/ urzy/lambda/ Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 42

Zadania kontrolne 1. W poni»szym termie wska» wszystkie beta-redeksy. (λx.x)((λx.x)(λz.(λx.x)z)) 2. Przeprowad¹ normalizacj poni»szego termu. Zwró uwag na konieczno± zmiany nazwy zmiennej zwi zanej. (λx.xx)(λyz.yz) 3. Przeprowad¹ normalizacj poni»szych termów, je±li to mo»liwe. Poka» wszystkie mo»liwe ±cie»ki redukcji (w postaci grafu redukcji). (λx.x)(λz.z) (λx.y)(λz.z) (λx.xx)(λz.z) (λx.(λy.yx)z)(zw) (λx.x)((λx.x)(λz.(λx.x)z) (λuv.v)((λx.xx)(λx.xx)) (λx.xx)(λx.xx) (λx.xxy)(λx.xxy) Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 43

Zadania kontrolne 4. Narysuj graf β-redukcji dla termu MM, gdzie M λx.(λy.yy)x 5. Znajd¹ lambda termy, posiadaj ce poni»sze grafy β-redukcji. a) b) Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 44

Zadania kontrolne 6. Udowodnij,»e w rachunku lambda reguª (η) mo»na zast pi poni»sz reguª ekstensjonalo±ci: Mx = Nx (ext) M = N x F V (M) F V (N) Poka»,»e w λβη mo»na wywie± reguª (ext) jako reguª wtórn i odwrotnie, w λβ + (ext) mo»na wywie± (η). Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 45

Zadania kontrolne 7. Poka»,»e poni»sze funkcje s pierwotnie rekurencyjne. (a) m n = iloczyn argumentów (b) m n = m do pot gi n, gdzie 0 0 = 1 (c) min(m, n) = mniejszy z argumentów (d) max(m, n) = wi kszy z argumentów (e) min k (n 1,..., n k ) (f) max k (n 1,..., n k ) (g) m n = warto± bezwzgl dna ró»nicy (h) n! (i) m % n = reszta z dzielenia m przez n (gdzie m%0 = m) (j) m/n = cz ± caªkowita ilorazu (gdzie m/0 = 0) Dla wszystkich warto±ci argumentów zachodzi zwykªy zwi zek m = m/n + m%n. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 46

Zadania kontrolne 8. Udowodnij,»e funkcja { 0, gdy k = 0 f(n, x) = f(0, x) + + f(k 1, x), gdy k > 0 n<k jest pierwotnie rekurencyjna (przy zaªo»eniu,»e f jest pierwotnie rekurencyjna). 9. Udowodnij,»e klasa funkcji pierwotnie rekurencyjnych jest zamkni ta ze wzgl du na denicje warunkowe h 1 ( x), gdy R 1 ( x) h f( x) = 2 ( x), gdy R 2 ( x) h m ( x), gdy R m ( x) gdzie h i i funkcje charakterystyczne relacji R i (1 i m) s pierwotnie rekurencyjne, a relacje R i (n, x) wykluczaj si wzajemnie oraz wyczerpuj wszelkie mo»liwo±ci. Zdzisªaw Spªawski: Programowanie funkcjonalne, Wykªad 12. Funkcje rekurencyjne i rachunek lambda 47