2015年莲都区政协第十四届四次会议重点提案目录
Rachunek lambda – system formalny u?ywany do badania zagadnień zwi?zanych z podstawami matematyki jak rekurencja, definiowalno?? funkcji, obliczalno??, podstawy matematyki np. definicja liczb naturalnych, warto?ci logicznych itd. Rachunek lambda zosta? wprowadzony przez Alonzo Churcha w 1930 roku. Jest uniwersaln? reprezentacj? obliczeń i równoznaczny maszynie Turinga, tzn. dowolne wyra?enie w rachunku lambda mo?na przedstawi? jako program na maszynie Turinga i odwrotnie. Zosta? u?yty do udowodnienia hipotezy, nazwanej pó?niej hipotez? Churcha-Turinga.
Rachunek lambda jest przydatny do badania algorytmów. Wszystkie algorytmy, które dadz? si? zapisa? w rachunku lambda, dadz? si? zaimplementowa? na maszynie Turinga i odwrotnie.
Istnieje wiele rodzajów rachunku lambda, z czego najprostszym jest rachunek lambda bez typów, stanowi?cy pierwotn? inspiracj? dla powstania programowania funkcyjnego (Lisp). Rachunek lambda z typami jest podstaw? dzisiejszych systemów typów w j?zykach programowania.
Opis nieformalny
[edytuj | edytuj kod]W rachunku lambda ka?de wyra?enie okre?la funkcj? jednoargumentow?. Z kolei argumentem tej funkcji jest równie? funkcja jednoargumentowa, warto?ci? funkcji jest znów funkcja jednoargumentowa. Funkcja jest definiowana anonimowo przez wyra?enie lambda, które opisuje, co funkcja robi ze swoim argumentem.
Funkcja zwracaj?ca argument powi?kszony o dwa, któr? mo?na by matematycznie zdefiniowa? jako w rachunku lambda ma posta? (nazwa parametru formalnego jest dowolna, wi?c mo?na zast?pi? inn? zmienn?). Z kolei warto?? funkcji w punkcie, np. ma zapis Warto wspomnie? o tym, ?e funkcja jest ??czna lewostronnie wzgl?dem argumentu, tzn.
Poniewa? wszystko jest funkcj? jednoargumentow?, mo?emy zdefiniowa? zmienn? o zadanej warto?ci – nazwijmy j? Funkcja jest oczywi?cie sta?a, cho? nic nie stoi na przeszkodzie, aby by?a to dowolna inna funkcja. W rachunku lambda jest dane wzorem
Teraz jeste?my w stanie dokona? klasycznego otrzymania warto?ci w punkcie lub te? lepiej rzecz ujmuj?c, wykona? z?o?enie funkcji, mianowicie Niech b?dzie dana jak poprzednio, wtedy: i dalej a wi?c otrzymujemy po prostu
Funkcj? dwuargumentow? mo?na zdefiniowa? za pomoc? techniki zwanej curryingiem, mianowicie jako funkcj? jednoargumentow?, której wynikiem jest znowu funkcja jednoargumentowa. Rozpatrzmy funkcj? której zapis w rachunku lambda ma posta? Aby upro?ci? zapis stosuje si? powszechnie konwencj?, aby funkcje ?curried” zapisywa? wed?ug wzoru
Wyra?enia lambda
[edytuj | edytuj kod]Niech b?dzie nieskończonym, przeliczalnym zbiorem zmiennych. Wyra?enie lambda definiuje si? nast?puj?co:
- Je?eli to jest wyra?eniem lambda,
- Je?eli jest wyra?eniem lambda i to napis jest wyra?eniem lambda,
- Je?eli oraz s? wyra?eniami lambda, to napis jest wyra?eniem lambda,
- Wszystkie wyra?enia lambda mo?na utworzy? korzystaj?c z powy?szych regu?.
Zbiór wszystkich wyra?eń lambda oznacza si?
Wyra?enia lambda rozpatruje si? najcz??ciej jako klasy abstrakcji relacji alfa-konwersji.
Zmienne wolne
[edytuj | edytuj kod]Zbiór zmiennych wolnych definiuje si? nast?puj?co:
Logika
[edytuj | edytuj kod]U?ycie warto?ci liczbowych do oznaczania warto?ci logicznych mo?e prowadzi? do nie?cis?o?ci przy operowaniu relacjami na liczbach, dlatego te? nale?y wyra?nie oddzieli? logik? od obiektów, na których ona operuje. Z tego powodu oczywistym staje si? fakt, ?e warto?ci logiczne prawdy i fa?szu musz? by? elementami skonstruowanymi z wyra?eń tego rachunku.
Warto?ciami logicznymi nazwiemy funkcje dwuargumentowe, z których jedna zawsze b?dzie zwraca? pierwszy argument, a druga – drugi:
- (prawda) to
- (fa?sz) to
Teraz chc?c ukonstytuowa? operacje logiczne stosujemy nasze ustalone warto?ci tak, by wyniki tych operacji by?y zgodne z naszymi oczekiwaniami, mamy:
- (negacja) to
- (koniunkcja) to
- (alternatywa) to
Rozwini?t? implikacj? ?je?li to w przeciwnym razie ” zapisa? mo?na jako czyli
Przyk?ad
[edytuj | edytuj kod]Obliczmy warto?? wyra?enia ?prawda i fa?sz”, czyli w rachunku lambda
czyli ?fa?sz” zgodnie z oczekiwaniami.
Struktury danych
[edytuj | edytuj kod]Para z?o?ona z elementów i to Pierwszy element wyci?ga si? za pomoc? natomiast drugi przez
Listy mo?na konstruowa? nast?puj?cym sposobem:
- NIL to
- CONS to PARA warto?? i lista
Nast?puj?ca funkcja zwraca je?li argumentem jest NIL, oraz je?li to CONS:
Rekurencja w rachunku lambda
[edytuj | edytuj kod]Rachunek lambda z pozoru nie ma ?adnego mechanizmu, który umo?liwia?by rekurencj? – nie mo?na odwo?ywa? si? w definicji do samej funkcji. A jednak rekurencj? mo?na osi?gn?? poprzez operator paradoksalny Y.
Paradoks polega na tym ?e dla ka?dego F zachodzi:
- Y F = F (Y F)
Tak wi?c np. funkcja negacji nie jest mo?liwa do zaimplementowania w postaci ogólnej, gdy?:
- (Y nie) = nie (Y nie)
Funkcja rekurencyjna musi pobra? siebie sam? jako warto??.
Dzia?a to w nast?puj?cy sposób:
- (Y f) n
- f (Y f) n
- λ f. λ n. cia?o_f
gdzie cia?o_f mo?e si? odwo?ywa? do siebie samej
Np.:
- silnia = Y (λ f. λ n. if_then_else (is_zero n) 1 (mult n (f (pred n))))
Zobacz te?
[edytuj | edytuj kod]Linki zewn?trzne
[edytuj | edytuj kod]- Jesse Alama , The Lambda Calculus, [w:] Stanford Encyclopedia of Philosophy, CSLI, Stanford University, 21 marca 2018, ISSN 1095-5054 [dost?p 2025-08-08] (ang.). (Rachunek lambda)
- Shane Steinert-Threlkeld , Lambda Calculi, Internet Encyclopedia of Philosophy, ISSN 2161-0002 [dost?p 2025-08-08] (ang.).
Lambda calculus (ang.), Routledge Encyclopedia of Philosophy, rep.routledge.com [dost?p 2025-08-08].