Lambda račun: opis teoreme, karakteristike, primjeri

Lambda račun je formalni sistem u matematičkoj logici za izražavanje proračuna zasnovanih na apstrakciji i primjeni funkcija korištenjem vezivanja i zamjene varijabli. Ovo je univerzalni model koji se može koristiti za dizajn bilo koje Turingove mašine. Lambda račun je prvi uveo Church, poznati matematičar, 1930-ih.

Sistem se sastoji od izgradnje lambda članova i izvođenja operacija redukcije na njima.

Objašnjenja i aplikacije

lambda calculus solutions

Grčko slovo lambda (λ) koristi se u lambda izrazima i lambda terminima za označavanje vezivanja varijable u funkciji.

Lambda račun se može untyped ili otkucati. U prvoj varijanti, funkcije se mogu primijeniti samo ako su sposobne za primanje podataka ovog tipa. Otkucani lambda kamenci su slabiji, mogu izraziti manju vrijednost. Ali, s druge strane, oni vam omogućavaju da dokažete više stvari.

Jedan od razloga zašto postoji mnogo različitih vrsta je želja naučnika da učine više bez odustajanja od mogućnosti da dokažu snažne teoreme lambda računa.

Sistem nalazi primjenu u mnogim različitim oblastima matematike, filozofije, lingvistike i informatike. Prije svega, lambda račun je proračun koji je odigrao važnu ulogu u razvoju teorije programskih jezika. Stilovi funkcionalnog stvaranja implementiraju sisteme. Oni su također stvarna tema istraživanja u teoriji ovih kategorija.

For dummies

Lambda račun uveo je matematičar Alonzo Church 1930-ih kao dio studije o osnovama nauke. Pokazalo se da je originalni sistem logički nekompatibilan 1935. godine kada su Stephen Kline i J. B. Rosser je razvio Klini-Rosserov paradoks.

Kasnije, 1936. godine, Church je izdvojio i objavio samo dio koji je relevantan za proračune, ono što se danas zove untyped lambda calculus. Godine 1940.uveo je i slabiju, ali logički dosljednu teoriju poznatu kao sistem jednostavnog tipa. U svom radu cijelu teoriju objašnjava jednostavnim jezikom, pa možemo reći da je Church objavio lambda račun za lutke.

Sve do 1960-ih, kada je njegov stav prema programskim jezicima postao jasan, λ je postao samo formalizam. Zahvaljujući primjeni Richarda Montaguea i drugih lingvista u semantici prirodnog jezika, račun je počeo zauzimati počasno mjesto i u lingvistici i u računarstvu.

Porijeklo simbola

lambda račun

Lambda ne označava riječ ili skraćenicu, nastala je zahvaljujući referenci u Russellovoj "fundamentalnoj matematici", nakon čega slijede dvije tipografske promjene. Primjer notacije: za funkciju f sa f(y) = 2y + 1 jednako je 2ŷ + 1. I ovdje se simbol nosača ("šešir") koristi iznad y za označavanje ulazne varijable.

Crkva je prvobitno namjeravala koristiti slične simbole, ali slagači nisu mogli postaviti simbol "šešira" iznad slova. Pa su ga umjesto toga u početku ispisali kao " / y.2y+1". U sljedećoj epizodi montaže, slagači su zamijenili "/" vizuelno sličnim znakom.

Uvod u Lambda račun

primjeri rješenja

Sistem se sastoji od jezika pojmova koji su odabrani određenom formalnom sintaksom i skupa pravila transformacije koja vam omogućavaju da njima manipulišete. Posljednja tačka se može smatrati teorijom jednakosti ili operativnom definicijom.

Sve funkcije u lambda računu su anonimne, odnosno nemaju imena. Oni prihvataju samo jednu ulaznu varijablu, dok se currying koristi za implementaciju grafikona sa nekoliko nestalnih.

Lambda uslovi

Sintaksa računa definiše neke izraze kao važeće, a druge kao nevažeće. Baš kao što su različiti nizovi znakova važe C programa, a neki nisu. Važeći izraz lambda računa naziva se"lambda termin".

Sljedeća tri pravila daju induktivnu definiciju koja se može primijeniti za konstruiranje svih sintaktički važećih koncepata:

Sama varijabla x je važeći lambda termin:

  • ako je T LT, a x je nestalan, onda se (lambda xt) naziva apstrakcija.
  • ako su T i s koncepti, tada se (TS) naziva aplikacija.

Ništa drugo nije lambda izraz. Dakle, koncept važi ako i samo ako se može dobiti ponovljenom primjenom ova tri pravila. Međutim, neki zagrade se mogu izostaviti prema drugim kriterijima.

Definicije

primjeri lambda računa

Lambda izrazi se sastoje od:

  • varijable v 1, v 2,..., v n,...
  • simboli apstrakcije ` λ `i tačke`.`
  • brackets ().

Skup Λ, može se definisati induktivno:

  • Ako je x varijabla, tada je x ∈ Λ;
  • x nije konstanta I m ∈ Λ, zatim (λx.M) Λ;
  • M, n ∈ Λ, zatim (MN) ∈ Λ.

Oznaka

Da bi notacija lambda izraza bila neometana, obično se koriste sljedeće konvencije:

  • Vanjski zagradi su izostavljeni: MN umjesto (MN).
  • Pretpostavlja se da aplikacije ostaju asocijativne: umjesto ((MN) P) možete napisati MNP.
  • Tijelo apstrakcije proteže se dalje udesno: λx.MN znači λx. (MN), ne (λx.M) N.
  • Redoslijed Apstrakcija je smanjen: λx.λy.λz.N može biti λxyz.N.

Slobodne i vezane varijable

Operator λ pridružuje se svojoj ne-konstanti gdje god se nalazi u tijelu apstrakcije. Varijable koje spadaju u opseg nazivaju se vezane. U izrazu λ x. M, dio λ x se često naziva vezivo. Kao da nagoveštava da varijable postaju grupa sa dodatkom X x na M. Svi ostali nestabilni zovu se slobodni.

Na primjer, u izrazu λ y. x X y, y je vezan ne-konstanta, i x je slobodan. I takođe vrijedi bilježenje, da je varijabla grupirana po svojoj" najbližoj " apstrakciji. U sledećem primeru, rešenje lambda računa je predstavljeno jednim pojavljivanjem x, koji je povezan sa drugom komponentom:

λ x. y (λ x. z x)

Skup slobodnih varijabli M označava se kao FV (M) i definira se rekurzijom prema strukturi pojmova na sljedeći način:

  • FV (x) = {x}, gdje je x varijabla.
  • FV (λx.M) = FV (M){x}.
  • FV(MN) = FV (M) ∪ FV (N).

Formula koja ne sadrži slobodne varijable naziva se zatvorena. Zatvoreni lambda izrazi su također poznati kao kombinatori i ekvivalentni su terminima u kombinatornoj logici.

Smanjenje

Značenje lambda izraza određuje se po tome kako se mogu skratiti.

Postoje tri vrste rezova:

  • α-transformacija: promjena srodnih varijabli (alfa).
  • β-redukcija: primjena funkcija na njihove argumente (beta).
  • N-transformacija: pokriva koncept ekstenzivnosti.

Ovdje također govorimo o dobivenim ekvivalencijama: dva izraza su β-ekvivalentna ako se mogu β-transformirati u istu komponentu, a α /n-ekvivalencija je definirana slično.

Izraz redex, skraćenica od citiranog prometa, odnosi se na podteme koje se mogu skratiti jednim od pravila. Lambda račun za lutke, primjeri:

(λ x.M) N je beta redex u izrazu zamjene N sa x U M. Komponenta na koju se redukcija redukuje naziva se njegova redukcija. Smanjenje (λ x.M) N je m [x: = N].

Ako x nije slobodan U M, λ x. M x takođe et-REDEX sa M regulatorom.

α-transformacija

Alfa preimenovanje vam omogućava da promijenite imena srodnih varijabli. Na primjer, λ x. x može dati λ y. y. Pojmovi koji se razlikuju samo po alfa transformaciji nazivaju se α-ekvivalent. Često, kada se koristi lambda račun, α-ekvivalencije se smatraju recipročnim.

Tačno pravila za alfa transformacija nije sasvim trivijalna. Prvo, ovom apstrakcijom preimenuju se samo one varijable koje su povezane s istim sistemom. Na primjer, alfa transformacija λ x.λ x. x može dovesti do λ y.λ x. x, ali možda neće zaroniti u λy.λx.y ovo drugo ima drugačije značenje od originala. Ovo je analogno konceptu varijabilnog programiranja zasjenjivanja.

Drugo, alfa transformacija nije moguća ako dovodi do hvatanja nestalne druge apstrakcije. Na primjer, ako zamijenite x sa y u λ x.λ y. x, tada možete dobiti λ y.λ y. y, što uopšte nije isto.

U programskim jezicima sa statičkim opsegom, alfa transformacija se može koristiti za pojednostavljenje rezolucije imena. U isto vrijeme, vodeći računa da koncept varijable ne maskira oznaku u području koje sadrži.

U De Bruyne indeksnoj notaciji, bilo koja dva alfa-ekvivalentna pojma su sintaktički identična.

je zamjena

Promjene napisane sa E [V: = R], predstavljaju proces zamjene svih slobodnih pojava varijable V u izrazu E obrtom R. Zamjena u smislu λ definirana je lambda rekurzijskog računa prema strukturi pojmova na sljedeći način (Napomena: x i y su samo varijable, A M I N su bilo koji λ izraz).

x [x:= N] ≡ N

y [x: = N] ≡ y ako je x ≠ y

(M 1 M 2) [x: = N] ≡ (M 1 [x: = N]) (M 2 [x: = N])

(λ x.M) [x: = N] ≡ λ x.M

(λ y.M) [x: = N] y λ y. (M [x: = N]) ako je x ≠ y, pod uslovom da je y ∉ FV (N).

Za zamjenu u Lambda apstrakciju, ponekad je potrebno α-transformirati izraz. Na primjer, nije tačno da (λ x. Y) [y: = x] rezultiralo (λ x. X), jer je supstituisani x trebao biti slobodan, ali na kraju je bio vezan. Tačna zamjena u ovom slučaju je (λ z. X) Do α-ekvivalencije. Vrijedi napomenuti da je zamjena nedvosmisleno određena vjernošću do lambde.

β-redukcija

Beta redukcija odražava ideju primjene funkcije. Beta-reduktivna je definisana u smislu supstitucije: ((X V. E) E`) je E [V: = E`].

Na primjer, pod pretpostavkom nekog kodiranja od 2, 7,×, postoji sljedeća β-redukcija: ((λ n. N × 2) 7) → 7 × 2.

Beta redukcija se može posmatrati kao ista kao i koncept lokalne reducibilnosti pod prirodnim dedukcijom putem Curry-Howardovog izomorfizma.

N-transformacija

lambda primjeri problema

Ova konverzija izražava ideju ekstenzivnosti, koja je u ovom kontekstu da su dvije funkcije jednake kada daju isti rezultat za sve argumente. Ova konverzija razmjenjuje između λ x. (F x) i f kad god se čini da x nije slobodan u f.

Ova se akcija može smatrati istim kao i koncept lokalne potpunosti u prirodnom dedukciji putem Curry-Howardovog izomorfizma.

Normalne forme i spajanje

Za netipirani lambda račun, β-redukcija, po pravilu prepisivanja, nije ni snažno ni slabo normalizovana.

Ipak, može se pokazati da se β-redukcija spaja tokom rada do α-transformacije (. tj. dva normalna oblika mogu se smatrati jednakim ako je moguće α-transformisati jedan u drugi).

Stoga i snažno normalizirajući pojmovi i slabo prilagođavajući koncepti imaju jedan normalan oblik. Za prve Termine, svaka strategija smanjenja garantovano rezultira tipičnom konfiguracijom. Dok za slabo normalizirajuće uvjete, neke strategije smanjenja možda neće pronaći.

Dodatne metode programiranja

lambda vrste rješenja

Postoji veliki broj idioma stvaranja za lambda račun. mnogi od njih su prvobitno razvijeni u kontekstu upotrebe sistema kao osnove za semantika programski jezik, efektivno ih primjenjujući kao kreaciju niskog nivoa. Budući da neki stilovi uključuju lambda račun (ili nešto vrlo slično) kao fragment, ove metode također nalaze primjenu u praktičnom stvaranju, ali se tada mogu percipirati kao nejasne ili strane.

Imenovane konstante

U lambda računu, biblioteka ima oblik skupa prethodno definiranih funkcija, u kojima su pojmovi samo konkretne konstante. Čisti račun nema koncept imenovanih nepromjenjivih materijala, budući da su svi atomski lambda pojmovi varijable. Ali oni se također mogu imitirati isticanjem nestalne kao konstantnog imena, koristeći lambda apstrakciju da veže ovu varijablu u glavnom dijelu i primijeni ovu apstrakciju na predviđenu definiciju. Dakle, ako koristimo f za označavanje M u N, možemo reći,

(λ f. H) M.

Autori često uvode sintaktički koncept kao što je let to omogućiti pisanje svega intuitivnijim redoslijedom.

f = M u N

Kombinujući takve definicije u lanac, može se napisati "program" lambda računa kao nula ili više definicija funkcija iza kojih slijedi jedan lambda pojam, koristeći one definicije koje čine glavni dio programa.

Značajno ograničenje ovog let-a je da ime f nije definirano u M, budući da je M izvan obavezujućeg opsega lambda apstrakcije f. To znači da se atribut rekurzivne funkcije ne može koristiti kao M sa let. Naprednija sintaktička konstrukcija letrec, koja vam omogućava da napišete rekurzivne definicije funkcija u ovom stilu, umjesto toga dodatno koristi kombinatore sa fiksnom tačkom.

Štampani analozi

lambda rješenja

Ovaj tip je otkucani formalizam koji koristi simbol za označavanje anonimne apstrakcije funkcije. U ovom kontekstu, tipovi su obično objekti sintaktičke prirode koji su dodijeljeni lambda terminima. Tačna priroda zavisi od dotičnog računa. Sa određene tačke gledišta, otkucani LI se može smatrati poboljšanjima netipiranog LI. Ali s druge strane, oni se također mogu smatrati fundamentalnijom teorijom, a netipirani lambda račun je poseban slučaj sa samo jednim tipom.

Otkucani LI su osnovni programski jezici i osnova funkcionalnih, kao što su ML i Haskell. I, indirektno, imperativni stilovi stvaranja. Otkucani lambda kamenci igraju važnu ulogu u razvoju tipskih sistema za programske jezike. Ovdje tipabilnost obično bilježi željena svojstva programa, na primjer, neće uzrokovati kršenje pristupa memoriji.

Otkucani lambda calculi usko su povezani sa matematičkom logikom i teorijom dokaza kroz Curry-Howard izomorfizam, a mogu se posmatrati kao interni jezik klase kategorije, na primjer, što je jednostavno Kartezijski zatvoreni stil.