Egyszerűen beírt lambda számítás - Simply typed lambda calculus

Az egyszerűen gépelt lambda-kalkulus ( ), egyfajta típusú elmélet , egy gépelt értelmezése a lambda-kalkulus egyetlen típus kivitelező ( ), amely épít a funkció típusok . Ez a gépelt lambda -számítás kanonikus és legegyszerűbb példája. Az egyszerűen beírt lambda -kalkulust eredetileg Alonzo Church vezette be 1940 -ben, hogy elkerülje a tipizálatlan lambda -számítás paradox használatát , és sok kívánatos és érdekes tulajdonsággal rendelkezik.

Az egyszerű típus kifejezés az egyszerűen begépelt lambda -számítás kiterjesztéseire is vonatkozik, mint például termékek , társtermékek vagy természetes számok ( T rendszer ), vagy akár teljes rekurzió (például PCF ). Ezzel szemben a polimorf típusokat (például F rendszer ) vagy függő típusokat (például a logikai keretrendszert ) bevezető rendszereket nem tekintik egyszerűen gépeltnek . Az előbbi a teljes rekurzió kivételével még mindig egyszerűnek tekinthető, mert az ilyen struktúrák egyházi kódolása csak és megfelelő típusú változók felhasználásával végezhető el , míg a polimorfizmus és a függőség nem.

Szintaxis

Ebben a cikkben a típusokat használjuk és soroljuk. Informálisan a függvénytípus azokra a függvénytípusokra utal, amelyek adott típusú bemenet alapján típus típusú kimenetet eredményeznek . Megegyezés alapján, a társult jobbra: olvasunk , mint .

Ahhoz, hogy határozza meg az egyes, kezdjük rögzítésével egy sor bázis típusú , . Ezek néha atomi típusok vagy típusú állandók . Javítva, a típusok szintaxisa a következő:

.

Például generál egy végtelen típusú halmazt, kezdve ezzel

Ezenkívül rögzítünk egy konstanskészletet az alaptípusokhoz. Például feltételezhetjük a nat alaptípust , és az állandók kifejezések lehetnek a természetes számok. Az eredeti prezentációban Church csak két alaptípust használt: "az állítások típusához" és "az egyének típusához". A típusnak nincsenek konstansai, míg van egy terminál állandója. Gyakran a csak egy alaptípussal rendelkező számítást veszik figyelembe.

Az egyszerűen beírt lambda -számítás szintaxisa lényegében maga a lambda -számítás. Azért írunk, hogy jelezzük, hogy a változó típusa . A szintaxis kifejezés a BNF -ben a következő:

ahol egy kifejezés állandó.

Vagyis változó hivatkozás , absztrakciók , alkalmazás és állandó . A változó referencia van kötve , ha benne van egy absztrakció kötődését . A kifejezés lezárult, ha nincsenek kötetlen változók.

Hasonlítsa össze ezt a tipizálatlan lambda -számítás szintaxisával:

Látjuk, hogy a begépelt lambda számításban minden függvénynek ( absztrakciónak ) meg kell adnia az argumentum típusát.

Gépelési szabályok

Az adott típusú jól begépelt lambda kifejezések halmazának meghatározásához definiálunk egy gépelési összefüggést a kifejezések és típusok között. Először bemutatjuk a gépelési kontextusokat vagy a gépelési környezeteket , amelyek gépelési feltételezések halmazai. A gépelési feltételezésnek formája van , a jelentésnek típusa .

A gépelési reláció azt jelzi, hogy ez egy típusú kifejezés a kontextusban . Ebben az esetben azt mondják, hogy jól gépelt (típusa van ). A gépelési reláció példányait gépelési ítéleteknek nevezzük . A gépelési ítélet érvényességét egy gépelési levezetés biztosítja , amelyet gépelési szabályok alkalmazásával állítanak elő (ahol a vonal feletti premisszák lehetővé teszik számunkra, hogy levonjuk a vonal alatti következtetést). Az egyszerűen beírt lambda-számítás a következő szabályokat használja:

(1) (2)
(3) (4)

Szavakban,

  1. Ha van szöveg a szövegkörnyezetben, tudjuk, hogy típusa van .
  2. A terminálállandók megfelelő alaptípusokkal rendelkeznek.
  3. Ha egy adott kontextusban, amelynek típusa van , van típusa , akkor ugyanabban a kontextusban anélkül , hogy típusa van .
  4. Ha egy adott kontextusban van típusa és típusa , akkor van típusa .

Példák a zárt kifejezésekre, azaz az üres kontextusban tipizálható kifejezésekre:

  • Minden típushoz egy kifejezés (identitásfüggvény/I-kombinátor),
  • A típusoknál egy kifejezés (a K-kombinátor), és
  • A típusoknál egy kifejezés (az S-kombinátor).

Ezek a kombinált logika alapkombinátorainak gépelt lambda -számításai .

Minden típushoz rendelés, szám tartozik . Alaptípusokhoz ,; függvény típusok . Vagyis egy típus sorrendje méri a leginkább balra ágyazott nyíl mélységét. Ennélfogva:

Szemantika

Belső és külső értelmezések

Általánosságban elmondható, hogy az egyszerűen begépelt lambda -számításnak két különböző módja van a jelentés hozzárendelésének, mint a gépelt nyelveknek általánosságban, amelyeket néha belső vagy külső vagy egyházi stílusú vagy Curry -stílusnak neveznek . A belső/egyházi stílusú szemantika csak a jól begépelt kifejezésekhez rendel jelentést, pontosabban, közvetlenül a gépelési levezetésekhez. Ennek az a hatása, hogy a csak típusjegyzetekben eltérő kifejezéseknek mindazonáltal különböző jelentései lehetnek. Például az egész számok azonossági kifejezése és a logikai kifejezések esetében az identitás kifejezés különböző dolgokat jelenthet. (A klasszikus szándékolt értelmezések az identitásfüggvény egész számokon és az azonosságfüggvény a logikai értékeken.) Ezzel szemben egy külső/Curry-stílusú szemantika a gépeléstől függetlenül jelentést ad a kifejezéseknek, mivel azokat gépelés nélküli nyelven értelmezik. Ebben a nézetben, és ugyanazt jelenti ( azaz ugyanazt, amit ).

A belső és külső szemantika megkülönböztetése néha a lambda -absztrakciókhoz fűzött megjegyzések jelenlétével vagy hiányával függ össze, de szigorúan véve ez a használat pontatlan. Lehetséges a Curry-stílusú szemantika meghatározása megjegyzésekkel ellátott kifejezésekkel egyszerűen a típusok figyelmen kívül hagyásával ( azaz a típus törlésével ), mivel lehetséges egyházi stílusú szemantikát adni megjegyzés nélküli kifejezésekre, amikor a típusok a kontextusból levezethetők ( pl. , típus -következtetéseken keresztül ). A lényegi különbség az intrinzik és az extrinsic megközelítések között éppen abban áll, hogy a gépelési szabályokat úgy tekintik -e, mint a nyelv meghatározását, vagy formalizmusként egy primitívebb alapnyelv tulajdonságainak ellenőrzésére. Az alább tárgyalt különböző szemantikai értelmezések többsége egyházi vagy curry szemszögből is látható.

Egyenletelmélet

Az egyszerűen begépelt lambda-számításnak ugyanaz az βη -ekvivalencia- elmélete , mint a típus nélküli lambda-számításnak , de típuskorlátozásoknak kell alávetni. A béta redukció egyenlete

tartja a kontextusban , amikor és , míg az egyenletet eta csökkentés

bármikor megmarad, és nem jelenik meg ingyen .

Működési szemantika

Hasonlóképpen, a működési szemantika egyszerűen gépelt lambda kalkulus lehet rögzíteni, mint az típustalan lambda kalkulus segítségével hívás név szerint , hogy hívás érték , vagy más értékelési stratégiák . Mint minden gépelt nyelv, a típusbiztonság mindezen értékelési stratégiák alapvető tulajdonsága. Ezenkívül az alábbiakban leírt erős normalizálási tulajdonság azt sugallja, hogy minden értékelési stratégia megszűnik minden egyszerűen beírt kifejezéssel.

Kategorikus szemantika

Az egyszerűen begépelt lambda -számítás ( egyenértékűséggel) a derékszögű zárt kategóriák (CCC) belső nyelve , amint azt Lambek először megfigyelte . Bármely specifikus CCC alapján a megfelelő lambda -számítás alaptípusai csak az objektumok , a kifejezések pedig a morfizmusok . Ezzel szemben minden egyszerűen begépelt lambda számítás olyan CCC -t ad, amelynek objektumai a típusok, a morfizmusok pedig a kifejezések ekvivalenciaosztályai.

Ahhoz, hogy a levelezést egyértelmű, egy típusú kivitelező a Descartes-szorzat az tipikusan a fenti. Megőrizni a kategoricitású a Descartes-szorzat egy hozzáteszi típusú szabályokat az párosítás , vetítés és egy egységnyi távon . Adott két kifejezés és , a kifejezésnek típusa van . Hasonlóképpen, ha valakinek van kifejezése , akkor vannak kifejezések, és ahol ezek megfelelnek a derékszögű termék előrejelzéseinek. Az egység kifejezés , az 1-es típusú, van írva, mint , és vocalized a „nulla”, a végső tárgy . Az egyenletelméletet ugyanígy kiterjesztik, így az embernek van

Ez utóbbi így olvasható: " ha t típusa 1, akkor nullára csökken ".

A fentieket ezután kategóriává alakíthatjuk, ha a típusokat vesszük objektumnak . A morfizmusok vannak ekvivalencia osztályok párok , ahol X jelentése egy változó (típusú ), és t egy olyan kifejezés (típusú ), amelynek nincs szabad változó benne, kivéve az (adott esetben) x . A lezárás a szokásos módon a currying és az alkalmazás segítségével történik .

Pontosabban, a derékszögű zárt kategóriák és az egyszerűen begépelt lambda-elméletek kategóriája között vannak funktorok .

Gyakori, hogy ezt az esetet lineáris típusú rendszer alkalmazásával kiterjeszti zárt szimmetrikus monoid kategóriákra . Ennek az az oka, hogy a CCC a zárt szimmetrikus monoidális kategória speciális esete, amelyet általában a halmazok kategóriájának tekintünk . Ez jó a halmazelmélet megalapozásához , de úgy tűnik, hogy az általánosabb toposz kiváló alapot nyújt.

Bizonyításelméleti szemantika

Az egyszerűen beírt lambda -számítás szorosan kapcsolódik a propozicionális intuíciós logika implikatív töredékéhez , azaz a minimális logikához a Curry – Howard -izomorfizmus révén : a kifejezések pontosan megfelelnek a természetes dedukció bizonyításainak , és a lakott típusok pontosan a minimális logika tautológiái .

Alternatív szintaxisok

A fenti bemutatás nem az egyetlen módja az egyszerűen beírt lambda -számítás szintaxisának meghatározására. Az egyik alternatíva a típuskommentárok teljes eltávolítása (hogy a szintaxis azonos legyen a tipizálatlan lambda-kalkulussal), miközben biztosítja, hogy a kifejezések jól gépelhetők a Hindley – Milner típusú következtetéseken keresztül . A következtetési algoritmus befejező, hangos és teljes: amikor egy kifejezés gépelhető, az algoritmus kiszámítja a típusát. Pontosabban azt kiszámítja a kifejezés fő típusa , mivel gyakran el nem látott kifejezést (pl ) lehet egynél több típusú ( , stb, melyek minden példányát a fő típus ).

Az egyszerűen beírt lambda -számítás egy másik alternatívája kétirányú típusellenőrzésen alapul , amely több típusjegyzést igényel, mint Hindley – Milner következtetés, de könnyebben leírható. A típusú rendszer két részre van osztva értékelések, ami mind ellenőrzés és szintézisét , írásbeli és rendre. Működési szempontból a három összetevő ,, és mind bemenet az ellenőrző ítélethez , míg a szintézis megítélése csak és csak bemenetként veszi fel a típust kimenetként. Ezek az ítéletek a következő szabályok alapján születnek:

[1] [2]
[3] [4]
[5] [6]

Vegye figyelembe, hogy az [1] - [4] szabályok közel azonosak a fenti (1) - (4) szabályokkal, kivéve az ellenőrző vagy szintézis ítéletek gondos megválasztását. Ezeket a választásokat így lehet magyarázni:

  1. Ha van összefüggésben, tudjuk szintetizálni típus számára .
  2. A terminálállandók típusai fixek és szintetizálhatók.
  3. Annak ellenőrzéséhez, hogy van -e típusa valamilyen kontextusban, kibővítjük a kontextust, és ellenőrizzük, hogy van -e típusa .
  4. Ha szintetizálja a típust (bizonyos kontextusban), és ellenőrzi a típust (ugyanabban a kontextusban), akkor szintetizálja a típust .

Vegye figyelembe, hogy a szintézis szabályait felülről lefelé olvassák, míg az ellenőrzés szabályait alulról felfelé. Különösen vegye figyelembe, hogy a [3] szabályban nincs szükségünk megjegyzésekre a lambda -absztrakcióra, mert a kötött változó típusa levezethető abból a típusból, amelynél a funkciót ellenőrizzük. Végül a következőképpen magyarázzuk az [5] és [6] szabályokat:

  1. Annak ellenőrzéséhez, hogy van -e típusa , elegendő a típus szintetizálása .
  2. Ha a típus ellenõrzi , akkor a kifejezetten kommentált kifejezés szintetizál .

Az utóbbi két szabály miatt, amelyek a szintézis és az ellenőrzés között kényszerülnek, könnyen belátható, hogy bármely jól begépelt, de megjegyzés nélküli kifejezés ellenőrizhető a kétirányú rendszerben, amennyiben "elég" típusú megjegyzéseket illesztünk be. És valójában annotációkra csak a β-redexeknél van szükség.

Általános megfigyelések

A szokásos szemantika ismeretében az egyszerűen beírt lambda-számítás erősen normalizálódik : vagyis a jól begépelt kifejezések mindig értékre, azaz absztrakcióra redukálódnak . Ennek oka, hogy a rekurziót a gépelési szabályok nem teszik lehetővé: lehetetlen megtalálni a fixpontos kombinátorok típusait és a ciklusfogalmat . A rekurziót hozzá lehet adni a nyelvhez úgy, hogy van egy speciális operátora , vagy általános rekurzív típusokat ad hozzá , bár mindkettő kiküszöböli az erős normalizálást.

Mivel erősen normalizálódik, eldönthető, hogy egy egyszerűen begépelt lambda -kalkulus program leáll -e vagy sem: valójában mindig leáll. Ezért arra a következtetésre juthatunk, hogy a nyelv nem teljes Turingban .

Fontos eredmények

  • Tait 1967 -ben kimutatta, hogy a redukció erősen normalizálódik . Következésképpen az egyenértékűség eldönthető . Statman 1977 -ben kimutatta, hogy a normalizálási probléma nem elemi rekurzív , ezt bizonyítja Mairson (1992). A probléma köztudottan a Grzegorczyk -hierarchia halmazában van . Berger és Schwichtenberg 1991 -ben pusztán szemantikai normalizálási bizonyítékot (lásd normalizálás értékeléssel ) adott.
  • Az -ekvivalencia egyesítési problémája eldönthetetlen. Huet 1973 -ban megmutatta, hogy a harmadik rendű egyesítés eldönthetetlen, és ezt Baxter 1978 -ban, majd Goldfarb 1981 -ben javította azzal, hogy a második rendű egyesítés már eldönthetetlen. Colin Stirling 2006 -ban bejelentette annak bizonyítékát, hogy a magasabb rendű egyezés (egyesítés, ahol csak egy kifejezés tartalmaz egzisztenciális változókat) eldönthető, és 2009 -ben teljes bizonyítékot tettek közzé.
  • A természetes számokat kódolhatjuk a típus szerint ( egyházi számok ). Schwichtenberg 1976 -ban kimutatta, hogy pontosan a kiterjesztett polinomok ábrázolhatók függvényként az egyházi számok felett; ezek nagyjából a feltételes operátor alatt bezárt polinomok.
  • A teljes modell a adja értelmezése bázis típusok készletek és funkciója típusok a halmazelméleti funkció helyet . Friedman 1975 -ben kimutatta, hogy ez az értelmezés teljes az -ekvivalencia szempontjából, ha az alaptípusokat végtelen halmazok értelmezik. Statman 1983 -ban kimutatta, hogy az -ekvivalencia az a maximális egyenértékűség, amely jellemzően kétértelmű , azaz típuscserék alatt zárt ( Statman tipikus kétértelműségi tétele ). Ennek következménye, hogy a véges modelltulajdonságok érvényesek, azaz a véges halmazok elegendőek a -ekvivalencia által nem azonosított kifejezések megkülönböztetéséhez .
  • Plotkin 1973 -ban vezetett be logikai összefüggéseket, hogy jellemezze a modell azon elemeit, amelyeket lambda kifejezésekkel lehet meghatározni. 1993 -ban Jung és Tiuryn ​​kimutatták, hogy a logikai kapcsolat általános formája (Kripke logikai relációk változó aritással) pontosan jellemzi a lambda meghatározhatóságát. Plotkin és Statman sejtette, hogy eldönthető, hogy a véges halmazokból generált modell adott eleme meghatározható -e egy lambda kifejezéssel ( Plotkin – Statman sejtés ). A sejtést Loader 1993 -ban hamisnak bizonyította.

Megjegyzések

Hivatkozások

Külső linkek