Programowanie funkcyjne. Wykªad 13



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

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

P. Urzyczyn: Materia ly do wyk ladu z semantyki. Uproszczony 1 j. ezyk PCF

Wykład 3 Funkcje wyższych rzędów

Wykład 3 Funkcje wyższych rzędów

Programowanie. Lista zadań nr 15. Na ćwiczenia 11, 19 i 23 czerwca 2008

Wykład 2: Rachunek lambda

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

Arytmetyka pierwszego rz du

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Programowanie Funkcyjne. Marcin Kubica Świder,

Algorytmy zwiazane z gramatykami bezkontekstowymi

Ćwiczenia z wyliczania wartości funkcji

Metody numeryczne i statystyka dla in»ynierów

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

LOGIKA ALGORYTMICZNA

Mathematica - podstawy

Paradygmaty programowania

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

Funkcje wielu zmiennych

R. D. Tennent, The Denotational Semantics of Programming Languages [1976]

Podstawy Informatyki Gramatyki formalne

Wstęp do Programowania potok funkcyjny

Logika i teoria mnogości Wykład 14

Wstęp do Programowania potok funkcyjny

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.

Lista 3 Modele algorytmiczne

Ksztaªt orbity planety: I prawo Keplera

det A := a 11, ( 1) 1+j a 1j det A 1j, a 11 a 12 a 21 a 22 Wn. 1 (Wyznacznik macierzy stopnia 2:). = a 11a 22 a 33 +a 12 a 23 a 31 +a 13 a 21 a 32

25 lutego 2013, godzina 23: 57 strona 1. P. Urzyczyn: Materia ly do wyk ladu z semantyki. Logika Hoare a

Podstawy matematyki dla informatyków

1 Bª dy i arytmetyka zmiennopozycyjna

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

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

Logika matematyczna (16) (JiNoI I)

Elementy Modelowania Matematycznego Wykªad 9 Systemy kolejkowe

Kurs wyrównawczy dla kandydatów i studentów UTP

Maszyny Turinga i problemy nierozstrzygalne. Maszyny Turinga i problemy nierozstrzygalne

Maksymalna liczba punktów do zdobycia: 80. Zadanie 1: a) 6 punktów, b) 3 punkty, Zadanie 2: a) 6 punktów, b) 4 punkty,

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

WSTĘP DO PROGRAMOWANIA

Surowiec Zużycie surowca Zapas A B C D S 1 0,5 0,4 0,4 0, S 2 0,4 0,2 0 0, Ceny x

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

x = (x 1, x 2,..., x n ), p = (p 1, p 2,..., p n )

Jan Olek. Uniwersytet Stefana Kardynała Wyszyńskiego. Procesy z Opóźnieniem. J. Olek. Równanie logistyczne. Założenia

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie funkcyjne (w- 9)

Lab. 02: Algorytm Schrage

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

TEORIA GIER W EKONOMII WYKŁAD 1: GRY W POSTACI EKSTENSYWNEJ I NORMALNEJ

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

Wykład 5 Listy leniwe

Metody numeryczne i statystyka dla in»ynierów

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

ZAJ CIA 4. Podstawowe informacje o algorytmie. Operatory relacyjne i logiczne, instrukcja warunkowa if

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Aproksymacja funkcji metod najmniejszych kwadratów

Wstęp do Programowania potok funkcyjny

Przetwarzanie sygnaªów

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

P 0max. P max. = P max = 0; 9 20 = 18 W. U 2 0max. U 0max = q P 0max = p 18 2 = 6 V. D = T = U 0 = D E ; = 6

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wstęp do programowania. Różne różności

Podstawy programowania

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Wykªad 4. Funkcje wielu zmiennych.

EGZAMIN MATURALNY Z INFORMATYKI CZERWIEC 2011 POZIOM ROZSZERZONY WYBRANE: CZĘŚĆ I. Czas pracy: 90 minut. Liczba punktów do uzyskania: 20

Technologie Informatyczne Wykład VII

Zagadnienia na wej±ciówki z matematyki Technologia Chemiczna

Algorytmy i Struktury Danych.

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie funkcyjne w Pythonie

JĘZYK ROSYJSKI POZIOM ROZSZERZONY

Operatory logiczne. Podstawowe operatory logiczne, składanie wyrażeń z użyciem operatorów logicznych

EGZAMIN MATURALNY Z INFORMATYKI

Wstęp do programowania

Visual Basic for Application (VBA)

Rekurencja. Przygotowała: Agnieszka Reiter

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

Wstęp do programowania

Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi.

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Model obiektu w JavaScript

I. LOGICZNE STRUKTURY DRZEWIASTE

Wstęp do Programowania potok funkcyjny

Programowanie wspóªbie»ne

Programowanie wspóªbie»ne

ASD - ćwiczenia III. Dowodzenie poprawności programów iteracyjnych. Nieformalnie o poprawności programów:

Wiedza niepewna i wnioskowanie (c.d.)

Rekurencyjna przeliczalność

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ Arkusz I. Czas pracy: 60 minut Liczba punktów do uzyskania: 15

//warunki początkowe m=500; T=30; c=0.4; t=linspace(0,t,m); y0=[-2.5;2.5];

Programowanie obiektowe

Projekt wykonania zadania informatycznego specyfikacja zadania

Transkrypt:

Programowanie funkcyjne. Wykªad 13 Siªa wyrazu rachunku lambda Zdzisªaw Spªawski Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 1

Wst p Warto±ci logiczne Liczby naturalne jako liczebniki Churcha Kombinatory punku staªego Reguªy delta Kombinator punktu staªego w OCamlu Zadania kontrolne Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 2

Wst p 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. Te rozszerzenia rachunku lambda stosuje si w celu uªatwienia pisania programów, polepszenia ich czytelno±ci i zwi kszenia efektywno±ci. Logicznie nie s one koniecznie. Jako przykªady zostan zdeniowane warto±ci logiczne i liczby naturalne z odpowiednimi funkcjami jako termy rachunku lambda. Zostan te» podane najwa»niejsze twierdzenia ±wiadcz ce o sile wyrazu rachunku lambda. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 3

Warto±ci logiczne Specykacja algebraiczna: if true M N = M if false M N = N Odpowiednie termy mo»na zdeniowa na przykªad tak: true λxy.x false λxy.y if λbuv.buv Udowodnimy,»e speªnione jest pierwsze równanie specykacji. if true M N (λbuv.b u v) true M N β (λuv.true u v)m N β (λv.true M v) N β true M N (λxy.x) M N β (λy.m)n β M Analogicznie wygl da dowód drugiego równania. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 4

Liczby naturalne jako liczebniki Churcha Specykacja algebraiczna: Iter 0 M N = N Iter (suc n) M N = M(Iter n M N) Odpowiednie termy mo»na zdeniowa na ró»ne sposoby, np. liczebniki Churcha s zdeniowane nast puj co: 0 λfx.x 1 λfx.fx 2 λfx.f(fx) i tak dalej. Mo»emy to uogólni i zauwa»y,»e liczebnik reprezentuj cy liczb n b dzie miaª posta λfx.f n x, czyli jest iteratorem. Wobec tego deniujemy: suc λnfx.f(nfx) Iter λnfa.nfa ( η λn.n) Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 5

Kombinatory punku staªego Równania staªopunktowe w matematyce. Rozwa»my równania algebraiczne, np. x = 5/x czy x = 6 x Problem rozwi zania tych równa«mo»na te» sformuªowa jako problem znalezienia punktów staªych funkcji: f 1 λx.5/x i f 2 λx.6 x Punktem staªym funkcji jest warto± nale» ca do dziedziny funkcji, odwzorowywana przez funkcj na siebie. Poszukujemy wi c takich warto±ci w 1 i w 2,»e f 1 w 1 = w 1 i f 2 w 2 = w 2 Oczywi±cie w 1 = 5 i w 2 = 3. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 6

Kombinatory punku staªego Równania staªopunktowe w programowaniu. Podobny problem pojawia si przy denicjach funkcji rekurencyjnych, np. lub inaczej: s(n) = if n = 0 then 1 else n s(n 1) s = λn.if n = 0 then 1 else n s(n 1) Z matematycznego punktu widzenia to jest równanie (wy»szego rz du) z jedn niewiadom s. Symbol = oznacza tu β (lub βη) konwersj. Problem rozwi zania tego równania, tj. znalezienia lambda termu, speªniaj cego równanie, sprowadza si do znalezienia punktu staªego funkcjonaªu: F λfn.if n = 0 then 1 else n f(n 1) Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 7

Kombinatory punku staªego Kombinator punktu staªego Denicja. Kombinatorem punktu staªego nazywamy ka»dy term M taki,»e F.MF = F (MF ). Twierdzenie o punkcie staªym. Dowód. (i) F. X.X = F X (ii) Istnieje kombinator punktu staªego Y λf.(λx.f(xx))(λx.f(xx)) taki,»e YF = F (YF ). (i) Niech W λx.f (xx) i X W W. Wówczas X W W (λx.f (xx))w F (W W ) F X (ii) YF (λf.(λx.f(xx))(λx.f(xx)))f β (λx.f (xx))(λx.f (xx)) β F ((λx.f (xx))(λx.f (xx))) = β F ((λf.(λx.f(xx))(λx.f(xx)))f ) F (YF ) Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 8

Kombinatory punku staªego Przykªad u»ycia kombinatora punktu staªego: silnia. Teraz mo»emy zdeniowa lambda term dla silni jako: s Y F gdzie F λfn.if n = 0 then 1 else n f(n 1) Uwaga. Przy warto±ciowaniu tego termu nale»y stosowa redukcj normaln. s n (Y F ) n = β F (Y F ) n (λfn.if n = 0 then 1 else n f(n 1))(Y F ) n β if n = 0 then 1 else n (Y F )(n 1) if n = 0 then 1 else n s(n 1) Oczywi±cie, mo»liwa jest inna denicja silni za pomoc iteratora, co odpowiadaªoby rekursji ogonowej. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 9

Reguªy delta Reguªy delta Denicja. (i) Niech δ b dzie pewn staª. Wówczas Λδ jest zbiorem λ-termów zbudowanych ze zmiennych i staªej δ za pomoc aplikacji i abstrakcji w zwykªy sposób. (ii) Analogicznie deniuje si Λ δ, gdzie δ oznacza ci g staªych. (iii) Niech M oznacza ci g zamkni tych λ-termów w postaci normalnej. δ-redukcja ma posta δ M f( M). Dla zadanej funkcji f δ-redukcja nie jest pojedyncz reguª, lecz schematem reguª. Tak wzbogacony system nazywamy rachunkiem λδ. Relacje kontrakcji i redukcji s oznaczane odpowiednio przez βδ i βδ. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 10

Reguªy delta Reguªy delta Twierdzenie. Niech f b dzie funkcj na zamkni tych λ-termach w postaci normalnej. Wówczas relacja redukcji βδ speªnia twierdzenie Churcha-Rossera. Poj cie redeksu, postaci normalnej i strategii redukcji w sposób naturalny uogólnia si na rachunek λδ. Prawdziwe jest te» twierdzenie o standardyzacji. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 11

Reguªy delta Przykªad: poprzednik. { pred 0 = 0 pred (suc n) = n Ide obliczania poprzednika wyja±nia poni»szy program. } y := 0; 0, 0 z := 0; while y n do ( z = pred y ) begin } z := y; n-krotna iteracja operacji q q y, z suc y, y y := suc y; end ( z = pred n ) Teraz ten algorytm mo»emy zapisa w postaci lambda-termu. pred snd (Iter n (λp.pair(suc(fst p))(fst p)) (pair 0 0)) Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 12

Reguªy delta Denicja. Funkcja cz ±ciowa f : N k N jest deniowalna w beztypowym rachunku lambda, je±li istnieje zamkni ty term F, speªniaj cy dla dowolnych n 1... n k N nast puj ce warunki: (i) Je±li f(n 1... n k ) = m, to F n 1... n k = β m; (ii) Je±li warto± f(n 1... n k ) jest nieokre±lona, to F n 1... n k nie ma postaci normalnej. Twierdzenie. Wszystkie funkcje rekurencyjne s λ-deniowalne. Teza Churcha [Churcha-Turinga]. Ka»da funkcja obliczalna w nieformalnym sensie jest rekurencyjna. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 13

Kombinator punktu staªego w OCamlu Kombinator punktu staªego w OCamlu. I Bezpo±rednia denicja kombinatora Y λf.(λx.f(xx))(λx.f(xx)) w j zyku OCaml spowoduje bª d typu. Mo»emy jednak zdeniowa typ danych: type 'a coded = Encode of ('a coded -> 'a);; a nast pnie funkcjonaª fixl : ('a -> 'a) -> 'a let fixl f = let g (Encode x) = f (x (Encode x)) in g (Encode g);; który dziaªa poprawnie dla dla j zyków z warto±ciowaniem leniwym. W OCamlu, który stosuje warto±ciowanie gorliwie, warto±ciowanie fixl nie ko«czy si i nie uda si nam zdeniowa np. niesko«czonej listy jedynek (sprawd¹ to!): let ones = fixl (function x -> 1::x);; Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 14

Kombinator punktu staªego w OCamlu Kombinator punktu staªego w OCamlu. II Mo»na jednak nieco zmodykowa powy»szy funkcjonaª (spróbuj to zrobi ) i otrzyma funkcjonaª: fix : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b, który znajduje punkty staªe funkcji (ale ju» nie list!). Przekonaj si o tym, deniuj c funkcj obliczaj c silni zadanej liczby bez jawnego u»ycia rekursji. Funkcjonaª fix : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b mo»na te» zdeniowa bez u»ycia typu 'a coded, np. let fix f = let rec fixf x = f fixf x in fixf;; Mo»na go teraz u»y do zdeniowania silni bez u»ycia rekursji: let fact = fix (fun f n -> if n=0 then 1 else n*f(n-1));; Przekonaj si,»e jest to rzeczywi±cie funkcja silni. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 15

Kombinator punktu staªego w OCamlu Skªadnia i semantyka prostego j zyka imperatywnego. I Na wykªadzie 3 byªa podana skªadnia i semantyka dla prostego j zyka imperatywnego PJI. Funkcje semantyczne zostaªy tam zapisane jako funkcjonaªy w j zyku OCaml. Materiaª z tego wykªadu pozwala lepiej zrozumie denicj funkcji semantycznej dla p tli while. Skªadnia abstrakcyjna V Zmienna N Liczba B ::= true false B&&B B B not B E < E E = E E ::= N V E + E E E E E E C ::= skip C; C V := E if B then C else C while B do C od Semantyk denotacyjn j zyka zadaje si deniuj c funkcje semantyczne, które opisuj, jak semantyka wyra»enia mo»e by otrzymana z semantyki skªadowych tego wyra»enia (semantyka kompozycyjna). Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 16

Kombinator punktu staªego w OCamlu Skªadnia i semantyka prostego j zyka imperatywnego. II Funkcja semantyczna dla instrukcji C jest funkcj cz ±ciow [C ], zmieniaj c wektor stanu programu S (pami operacyjn ). Dziedzin S reprezentujemy za pomoc zbioru funkcji σ : Zmienna Z. Zaªó»my dla uproszczenia,»e funkcje semantyczne dla wyra»e«logicznych B i arytmetycznych E s znane. Zdeniujemy funkcj semantyczn [C ] : S S dla instrukcji, a potem (pomijaj c pewne szczegóªy formalne), zaprogramujemy j w OCamlu. Teraz mo»emy to zrobi w czystym rachunku lambda. Semantyka denotacyjna [B ] : S {true, false} [E ] : S Z [skip]σ = σ [C 1 ; C 2 ]σ [C 2 ]([C 1 ]σ) [V := E ]σ σ[v [E ]σ] [if B then C 1 else C 2 fi]σ { [C1 ]σ gdy [B ]σ = true [C 2 ]σ gdy [B ]σ = false Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 17

Kombinator punktu staªego w OCamlu Skªadnia i semantyka prostego j zyka imperatywnego. III Wykonuj c jednokrotnie p tl while otrzymujemy poni»sze równanie dla funkcji semantycznej [while B do C od]: { [while B do C od]([c ]σ) gdy [B ]σ = true [while B do C od]σ σ gdy [B ]σ = false Z analogicznym problemem mieli±my do czynienia w przypadku funkcji silnia. Nale»y znale¹ najmniejszy punkt staªy funkcjonaªu: { f([c ]σ) gdy [B ]σ = true F λf.λσ. σ gdy [B ]σ = false czyli, u»ywaj c operatora punktu staªego fix: [while B do C od] fix F Powy»ej s u»ywane dwa funkcjonaªy F : [S S] [S S] i fix : [[S S] [S S]] [S S], znajduj cy najmniejszy punkt staªy zadanego funkcjonaªu. Jego istnienie gwarantuje teoria dziedzin. Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 18

Zadania kontrolne Zadanie 1. Wykorzystuj c term if zdeniuj pozostaªe spójniki logiczne. Zadanie 2.Udowodnij,»e termy 0, suc, Iter speªniaj specykacj algebraiczn ze strony 6. Zadanie 3. Zdeniuj lambda wyra»enia pair, fst i snd z nast puj cymi reguªami redukcji: fst (pair M N) M snd (pair M N) N Zdzisªaw Spªawski: Programowanie funkcyjne. Wykªad 13, Siªa wyrazu rachunku lambda 19