Tartalom
- Magyarázatok és alkalmazások
- A bábuk számára
- A szimbólum eredete
- Bevezetés a Lambda Kalkulusba
- Lambda feltételek
- Meghatározás
- Megnevezés
- Szabad és kötött változók
- Csökkentés
- Enterprises-transformation
- Csere
- 6. bekezdés-csökkentés
- n-
- Normál formák és összeolvadás
- További programozási módszerek
- Nevezett állandók
- Nyomtatott analógok
A Lambda calculus egy formális rendszer a matematikai logikában az absztrakción és a függvények alkalmazásán alapuló számítások kifejezésére változók kötésével és helyettesítésével. Ez egy univerzális modell, amely bármilyen Turing-gép tervezésére használható. A Lambda kalkulust először Church, egy híres matematikus vezette be az 1930-as években.
A rendszer lambda kifejezések felépítéséből és redukciós műveletek végrehajtásából áll.
Magyarázatok és alkalmazások

A lambda kifejezésekben a görög lambda betűt ( ++ ) használják lambda kifejezések lambda kifejezések pedig egy változó kötésének jelölésére egy függvényben.
Lambda kalkulus lehet untyped vagy gépelt. Az első változatban a funkciók csak akkor alkalmazhatók, ha képesek adatokat fogadni ez a típus. A gépelt lambda kalkulusok gyengébbek, kisebb értéket tudnak kifejezni. De másrészt lehetővé teszik, hogy több dolgot bizonyítson.
Az egyik oka annak, hogy sokféle típus létezik, a tudósok vágya, hogy többet tegyenek anélkül, hogy feladnák a lehetőséget az erős lambda kalkulus tételek bizonyítására.
A rendszer a matematika, a filozófia, a nyelvészet és a számítástechnika számos területén alkalmazható. Először is, a lambda kalkulus olyan számítás, amely fontos szerepet játszott a programozási nyelvek elméletének fejlesztésében. A funkcionális teremtés stílusai valósítják meg a rendszereket. Ezek a kategóriák elméletében a kutatás tényleges témája is.
A bábuk számára
A Lambda kalkulust Alonzo Church matematikus vezette be az 1930-as években a tudomány alapjainak tanulmányozása részeként. Az eredeti rendszer logikailag összeférhetetlennek bizonyult 1935-ben, amikor Stephen Kline és J. B. Rosser kifejlesztette a Klini-Rosser paradoxont.
Ezt követően, 1936-ban, Church különválasztják, és megjelent csak az a része, amely releváns a számítások, amit most az úgynevezett untyped lambda kalkulus. 1940 - ben bevezetett egy gyengébb, de logikailag következetes elméletet is, amelyet egyszerű típusú rendszernek neveznek. Munkájában az egész elméletet egyszerű nyelven magyarázza, így azt mondhatjuk, hogy az Egyház kiadta a lambda kalkulust a dummies számára.
Az 1960-as évekig, amikor világossá vált a programozási nyelvekhez való hozzáállása, a xhamsterből csak formalizmus lett. Richard Montague és más nyelvészek alkalmazásának köszönhetően a természetes nyelv szemantikájában a kalkulus mind a nyelvészetben, mind a számítástechnikában tiszteletre méltó helyet foglalt el.
A szimbólum eredete

A Lambda nem jelöl szót vagy rövidítést, Russell "alapvető matematikájában" szereplő hivatkozásnak köszönhető, amelyet két tipográfiai változás követ. Példa a jelölésre: egy F függvényhez, amelynek f(y) = 2Y + 1 egyenlő 2 ++ + 1. Itt pedig a kocsi szimbólumot ("kalap") használjuk y felett a bemeneti változó jelölésére.
Az egyház eredetileg hasonló szimbólumokat akart használni, de a betűszedők nem tudták elhelyezni a" kalap " szimbólumot a betűk felett. Tehát ehelyett eredetileg "/y " - ként nyomtatták.2y+1". A Szerkesztés következő epizódjában a betűkészítők a "/" - T vizuálisan hasonló karakterrel helyettesítették.
Bevezetés a Lambda Kalkulusba

A rendszer egy bizonyos formális szintaxis által választott kifejezések nyelvéből, valamint egy átalakítási szabálykészletből áll, amelyek lehetővé teszik azok manipulálását. Az utolsó pont egyenlőségi elméletnek vagy operatív definíciónak tekinthető.
A lambda kalkulus összes funkciója névtelen, vagyis nincs nevük. Csak egy bemeneti változót fogadnak el, míg a currying több nem.
Lambda feltételek
A kalkulus szintaxisa egyes kifejezéseket érvényesnek, másokat érvénytelennek határoz meg. Csakúgy, mint a különböző karakterláncok érvényes C programok, néhány pedig nem. A lambda kalkulus tényleges kifejezését "lambda kifejezésnek" nevezzük.
A következő három szabály induktív definíciót ad, amely alkalmazható az összes szintaktikailag érvényes fogalom felépítésére:
Maga az x változó érvényes lambda kifejezés:
- - állandó. Ha T LT, x pedig nem állandó, akkor (lambda xt) absztrakciónak nevezzük.
- ha T és s is fogalmak, akkor (TS) nevezzük alkalmazás.
Semmi más nem lambda kifejezés. Így egy fogalom csak akkor érvényes, ha e három szabály ismételt alkalmazásával megszerezhető. Néhány zárójel azonban más kritériumok szerint elhagyható.
Meghatározás

A Lambda kifejezések a következőkből állnak:
- változók v 1, v 2,..., VN,...
- absztrakciós szimbólumok `Dots` és `dots`.`
- zárójelek ().
A beállított Λ lehet meghatározni, induktívan:
- Ha x egy változó, akkor X ^ ;
- x nem állandó, M pedig (.M) ONS;
- M, n, majd (mn) XHAMSTEREN.
Megnevezés
A lambda kifejezések jelölésének zavartalan tartása érdekében általában a következő konvenciókat használják:
- A külső zárójeleket kihagyjuk: MN (MN)helyett.
- Feltételezzük, hogy az alkalmazások asszociatívak maradnak: ((MN) P) helyett MNP-t írhat.
- Az absztrakciós test tovább terjed jobbra: argentinx.Mn azt jelenti, hogy. (Mn), nem (6x.M) N.
- Az absztrakciók sorrendje csökken: 6x.λy.λz.N lehet a .. XYZ.N.
Szabad és kötött változók
Az operátor a nem konstanshoz csatlakozik, bárhol is legyen az absztrakciós testben. A hatókörbe tartozó változókat nevezzük kötött. A kifejezésben KB x. M, a részétx gyakran kötőanyagnak nevezik. Mintha arra utalna, hogy a változók csoporttá válnak X X hozzáadásával M. Az összes többi instabilot szabadnak nevezzük.
Például a kifejezésben ++ y. x x y, Y kötött nem állandó, x pedig szabad. És azt is érdemes figyelem a következőkre, hogy a változó a "legközelebbi" absztrakciója szerint van csoportosítva. A következő példában a lambda kalkulus megoldását az x egyetlen előfordulása képviseli, amelyet a második komponens köt össze:
λ x. y (6 x. z x)
Az M Szabad változók halmazát FV(M) - ként jelöljük, amelyet a kifejezések szerkezetének rekurziója határoz meg az alábbiak szerint:
- FV (x) = {x}, ahol x egy változó.
- FV (6x.M) = FV (M){x}.
- FV(MN) = FV(M) 6 FV (N).
A szabad változókat nem tartalmazó képletet zártnak nevezzük. A zárt lambda kifejezéseket kombinátoroknak is nevezik, és a kombinatorikus logikában egyenértékűek a kifejezésekkel.
Csökkentés
A lambda kifejezések jelentését az határozza meg, hogyan lehet rövidíteni.
Háromféle vágás létezik:
- adapterek-transzformáció: kapcsolódó változók változása (alfa).
- 6-redukció: függvények alkalmazása argumentumaikra (béta).
- n-transzformáció: lefedi az extenzionalitás fogalmát.
Itt a kapott ekvivalenciákról is beszélünk: két kifejezés-egyenértékű, ha lehet-ugyanabba a komponensbe átalakul, a ~ / n-ekvivalencia pedig hasonlóan van meghatározva.
A redex kifejezés, az idézett forgalom rövidítése, olyan altémákra utal, amelyeket az egyik szabály lerövidíthet. Lambda kalkulus kezdőknek, példák:
(6 x.M) N egy béta redex az n helyettesítésének kifejezésében x ban ben M. Azt a komponenst, amelyre a redex redukálódik, reduktornak nevezzük. Csökkentés (6 x.M) N az M [x: = N].
Ha x nem szabad M-ben, akkor x. M x is et-REDEX M szabályozóval.
Enterprises-transformation
Az alfa átnevezés lehetővé teszi a kapcsolódó változók nevének megváltoztatását. Például, x. x adhat 6 Y-t. y. Azokat a kifejezéseket, amelyek csak az alfa-transzformációval különböznek egymástól, úgy nevezzük, hogy a következők:. Gyakran, ha lambda kalkulust használunk, a ^ - ekvivalenciákat kölcsönösnek tekintjük.
A pontos szabályok az alfa-transzformáció nem teljesen triviális. Először is, ezzel az absztrakcióval csak azokat a változókat nevezik át, amelyek ugyanahhoz a rendszerhez kapcsolódnak. Például az alfa-transzformáció ^ x.λ x. x lehet, hogy az Y-hez vezet.λ x. x, de lehet, hogy nem merül el a kb.λx.y az utóbbinak más jelentése van, mint az eredetinek. Ez Analóg a változó árnyékoló programozás fogalmával.
Másodszor, az alfa-transzformáció nem lehetséges, ha nem állandó más absztrakcióval történő elfogáshoz vezet. Például, ha X-et y-vel helyettesítjük az X-ben.λ y. x, akkor megkaphatja a következőket:.λ y. y, ami egyáltalán nem ugyanaz.
A statikus hatókörű programozási nyelvekben az alfa transzformáció használható a névfeloldás egyszerűsítésére. Ugyanakkor ügyelve arra, hogy a változó fogalma ne takarja el a jelölést a tartalmazó területen.
Ban ben De Bruyne index jelölés, bármely két alfa-ekvivalens kifejezés szintaktikailag azonos.
Csere
Az E [V: = R] által írt változások azt a folyamatot képviselik, amikor a v változó összes szabad előfordulását az e kifejezésben az R forgalommal helyettesítik. A helyettesítést a rekurziós számítás lambda-ja határozza meg a fogalmak szerkezete szerint az alábbiak szerint (megjegyzés: x és y csak változók, M és N pedig bármilyen ++ kifejezés).
x [x:= N] 6 N
y [x: = n], ha x, ha X, akkor y
(M 1 M 2) [x: = N] (M 1 [x: = N]) (M 2 [x: = N])
(6 x.M) [x: = n] onlin x.M
(6 év.M) [x: = N] y ++ y. (M [x: = N]), ha x 6 y, feltéve, hogy y FV(n).
A lambda absztrakcióba való helyettesítéshez néha szükség van a kifejezés átalakítására. Például nem igaz, hogy (X. Y) [Y: = x] eredményül (6 x. X), mert a helyettesített x-nek szabadnak kellett lennie, de végül megkötötték. A helyes csere ebben az esetben (z). X) a hosszú egyenértékűségig. Érdemes megjegyezni, hogy a helyettesítést egyértelműen a lambda-ig terjedő hűséggel határozzák meg.
6. bekezdés-csökkentés
A béta redukció tükrözi a funkció alkalmazásának gondolatát. A béta-reduktív a szubsztitúció szempontjából van meghatározva: ((X V. E) E`) az E [V: = E`].
Például, ha feltételezzük, hogy valamilyen kódolás 2, 7, 6, akkor a következő a!-redukció: (((n). (2) (7) (7) (2) (2) (2) (.
A béta-redukció ugyanolyannak tekinthető, mint a helyi redukálhatóság fogalma természetes dedukcióval a Curry-Howard izomorfizmus.
n-

Ez a konverzió kifejezi az extenzionalitás gondolatát, amely ebben az összefüggésben az, hogy két függvény egyenlő, ha minden argumentumra ugyanazt az eredményt adják. Ez az átváltás átváltások között x. (F x) és f amikor x nem tűnik szabadnak f-ben.
Ez a művelet ugyanolyannak tekinthető, mint a helyi teljesség fogalma a természetes dedukcióban a Curry–Howard izomorfizmus révén.
Normál formák és összeolvadás
A Be nem írt lambda kalkulus esetében az újraírás szabálya szerint a ~ - redukció sem erősen, sem gyengén nem normalizálódik.
Ennek ellenére megmutatható, hogy a konszolidáció munka közben a transzformáció (. azaz. két normál forma egyenlőnek tekinthető, ha lehetséges az egyik átalakulása a másikba).
Ezért mind az erősen normalizáló, mind a gyengén beállító fogalmaknak egyetlen normális formája van. Az első kifejezések esetében minden csökkentési stratégia garantáltan tipikus konfigurációt eredményez. Míg a gyengén normalizálódó körülmények esetén egyes csökkentési stratégiák nem találják meg.
További programozási módszerek

Számos teremtési idióma létezik a lambda kalkulus számára. Sokan eredetileg a rendszerek használatával összefüggésben fejlesztették ki az alapja szemantika programozási nyelv, hatékonyan alkalmazza őket alacsony szintű teremtésként. Mivel egyes stílusok tartalmazzák lambda kalkulus (vagy valami nagyon hasonló) töredékként, ezek a módszerek a gyakorlati alkotásban is alkalmazást találnak, de aztán homályosnak vagy idegennek tekinthetők.
Nevezett állandók
Ban ben lambda kalkulus, a könyvtár korábban meghatározott függvények halmaza, amelyben a kifejezések csak konkrét állandók. A tiszta kalkulusnak nincs fogalma a megnevezett változókról, mivel az összes atomi lambda kifejezés változó. De utánozhatók úgy is, hogy egy nem állandót jelölnek ki állandó névként, lambda absztrakciót használva kötik ezt a változót a fő részben, és ezt az absztrakciót alkalmazzák a tervezett definícióra. Így, ha használjuk f jelölésére M ban ben N, mondhatjuk,
(ons). H) M.
A szerzők gyakran olyan szintaktikai koncepciót vezetnek be, mint pl hagyja, hogy mindent intuitívabb sorrendben írhasson.
f = M in N
Az ilyen definíciókat láncba egyesítve egy lambda kalkulus "programot" írhatunk a funkciók nulla vagy több definíciójaként, amelyet egy lambda kifejezés követ, felhasználva azokat a definíciókat, amelyek a program fő részét alkotják.
Ennek figyelemre méltó korlátozása let az, hogy a név f nincs meghatározva M, mivel M kívül esik a lambda absztrakció F. Ez azt jelenti, hogy egy rekurzív függvény attribútuma nem használható M val vel hagyja. A fejlettebb szintaktikai konstrukció letrec, amely lehetővé teszi rekurzív függvénydefiníciók írását ebben a stílusban, ehelyett fixpontos kombinátorokat használ.
Nyomtatott analógok

Ez a típus egy tipizált formalizmus, amely szimbólumot használ egy névtelen függvény absztrakció jelölésére. Ebben az összefüggésben a típusok általában szintaktikai jellegű objektumok, amelyeket lambda kifejezésekhez rendelnek. A pontos természet a kérdéses kalkulustól függ. Bizonyos szempontból a gépelt LI a Be nem írt LI finomításainak tekinthető. De másrészt alapvetőbb elméletnek is tekinthetők, a Be nem írt lambda kalkulus pedig csak egy típusú speciális eset.
A gépelt LI az alapvető programozási nyelvek és a funkcionális nyelvek alapja, mint például az ML és a Haskell. És közvetettebben az imperatív alkotási stílusok. A gépelt lambda kalkulusok fontos szerepet játszanak a programozási nyelvek típusrendszereinek fejlesztésében. Itt a tipizálhatóság általában rögzíti a program kívánt tulajdonságait, például nem okoz memóriahozzáférést.
A tipizált lambda kalkulusok szorosan kapcsolódnak a matematikai logikához és a bizonyítási elmélethez a Curry-Howard izomorfizmus révén, és például a kategóriaosztályok belső nyelvének tekinthetők, ami egyszerűen egy derékszögű zárt stílus.