System F

System F ( polymorphic lambda calculus , system , andra ordningens typad lambda calculus ) är ett maskinskrivet lambda-kalkylsystem som skiljer sig från ett enkelt maskinskrivet system genom närvaron av en universell kvantifieringsmekanism över typer. Detta system utvecklades 1972 av Jean-Yves Girard [1] i samband med bevisteori i logik. Oberoende av honom föreslogs ett liknande system 1974 av John Reynolds [2] . F-systemet låter dig formalisera begreppet parametrisk polymorfism i programmeringsspråk och fungerar som en teoretisk grund för sådana programmeringsspråk som Haskell och ML .

Systemet F tillåter konstruktion av termer beroende på typer. Tekniskt sett uppnås detta genom mekanismen att abstrahera en term för typ, vilket resulterar i en ny term. Traditionellt, för en sådan abstraktion, används den stora lambda-symbolen . Om vi ​​till exempel tar en term av typ och abstraherar över en variabel av typ , får vi term . Denna term är en funktion från typer till termer. Genom att tillämpa denna funktion på olika typer får vi termer med identisk struktur men olika typer:

- typterm ; är en term av typ .

Det kan ses att termen har polymorft beteende, det vill säga den definierar ett gemensamt gränssnitt för olika datatyper. I System F tilldelas denna term typen . Den universella kvantifieraren i en typ understryker möjligheten att ersätta en typvariabel med vilken giltig typ som helst.

Formell beskrivning

Skriv syntax

Typerna av System F är konstruerade från en uppsättning typvariabler med hjälp av operatorerna och . Av tradition används grekiska bokstäver för typvariabler. Reglerna för att bilda typer är följande:

Yttre parenteser utelämnas ofta, operatören anses vara högerassociativ och operatörens agerande fortsätter till höger så långt det är möjligt. Till exempel är standardförkortningen för .

Syntax för termer

Termerna för System F är konstruerade från en uppsättning termvariabler ( , , etc.) enligt följande regler

Yttre parenteser utelämnas ofta, båda typerna av tillämpning anses vara vänsterassociativa, och abstraktionernas verkan anses fortsätta till höger så långt det är möjligt.

Det finns två versioner av det enkelt skrivna systemet. Om, som i reglerna ovan, termen variabler i lambdaabstraktionen är kommenterad med typer, så sägs systemet vara kyrkligt . Om abstraktionsregeln ersätts av

och kassera de två sista reglerna, då kallas systemet Curry-typat . Faktum är att villkoren för det Curry-typade systemet är desamma som i den otypade lambda-kalkylen.

Reduktionsregler

Förutom standarden -reduktionsregeln för lambdakalkyl

Kyrkoliknande system F introducerar en ytterligare regel,

,

gör det möjligt att beräkna tillämpningen av en term på en typ genom mekanismen för typsubstitution istället för en typvariabel.

Skrivkontexter och typpåstående

Kontexten, som i den enkelt skrivna lambdakalkylen , är en uppsättning påståenden om att tilldela typer till olika variabler, åtskilda med kommatecken

Du kan lägga till en variabel "fresh" för detta sammanhang till sammanhanget: om är ett giltigt sammanhang som inte innehåller variabeln och är en typ, så är det också ett giltigt sammanhang.

Den allmänna formen för ett skrivpåstående är:

Detta lyder som följer: i sammanhanget har en term typ .

Kyrkans skrivregler

I kyrkligt system F görs tilldelningen av typer till termer enligt följande regler:

( Initialregel ) Om en variabel finns med en typ i ett sammanhang , så har den en typ i det sammanhanget . I form av en slutledningsregel

( Introduktionsregel ) Om termen i något sammanhang utökas med påståendet som har typ , har termen typ , så har lambdaabstraktionen i nämnda sammanhang (utan ) typ . I form av en slutledningsregel

( Removal regel ) Om en term i något sammanhang har en typ och en term har en typ , så har applikationen en typ . I form av en slutledningsregel

( Introduktionsregel ) Om en term i något sammanhang har en typ , så har termen i det sammanhanget en typ . I form av en slutledningsregel

Den här regeln kräver en varning: en typvariabel får inte förekomma i kontextskrivningspåståenden .

( Borttagningsregel ) Om en term i något sammanhang har typ , och är en typ, så har termen i detta sammanhang typ . I form av en slutledningsregel

Currys skrivregler

I Curry-typat System F görs tilldelningen av typer till termer enligt följande regler:

( Initialregel ) Om en variabel finns med en typ i ett sammanhang , så har den en typ i det sammanhanget . I form av en slutledningsregel

( Introduktionsregel ) Om termen i något sammanhang utökas med påståendet som har typ , har termen typ , så har lambdaabstraktionen i nämnda sammanhang (utan ) typ . I form av en slutledningsregel

( Removal regel ) Om en term i något sammanhang har en typ och en term har en typ , så har applikationen en typ . I form av en slutledningsregel

( Introduktionsregel ) Om en term i något sammanhang har en typ , så kan denna term i detta sammanhang också tilldelas en typ . I form av en slutledningsregel

Den här regeln kräver en varning: en typvariabel får inte förekomma i kontextskrivningspåståenden .

( Borttagningsregel ) Om en term i något sammanhang har typ , och är en typ, kan i detta sammanhang även denna term tilldelas typ . I form av en slutledningsregel

Exempel. Enligt den ursprungliga regeln:

Låt oss tillämpa borttagningsregeln , ta som typen

Nu, enligt regeln om borttagning , har vi möjlighet att tillämpa termen på sig själv

och slutligen enligt introduktionsregeln

Det här är ett exempel på en term som skrivs i System F, men inte i ett enkelt maskinskrivet system .

Representation av datatyper

System F är tillräckligt uttrycksfullt för att direkt implementera många av de datatyper som används i programmeringsspråk. Vi kommer att arbeta i kyrkans version av system F.

Tom typ. Sorts

är obebodd i systemet F, det vill säga det finns inga termer med denna typ i det.

Enkel typ. Y typ

systemet F har en enda normalform invånare, term

.

boolesk typ. I system F ges följande:

.

Denna typ har exakt två invånare, identifierade med två booleska konstanter

Villkorlig operatörskonstruktion

Denna funktion uppfyller de naturliga kraven

och

för en godtycklig typ och godtycklig och . Det är lätt att verifiera detta genom att utöka definitionerna och utföra -reduktioner.

Typ av konstverk. För godtyckliga typer och typen av deras kartesiska produkt

bebos av ett par

för varje och . Projektionerna av ett par ges av funktionerna

Dessa funktioner uppfyller de naturliga kraven för och .

Typ av belopp. För godtyckliga typer och typen av deras summa

fylls med antingen en term av type , eller en term av typ , beroende på den tillämpade konstruktorn

Här , . Funktionen som utför fallanalys (mönstermatchning) har formen

Denna funktion uppfyller följande naturliga krav

och

för godtyckliga typer , och och godtyckliga termer och .

Kyrkans nummer. Typ av naturliga tal i systemet F

bebos av ett oändligt antal olika element, erhållna genom två konstruktörer och :

Ett naturligt tal kan erhållas genom att tillämpa den andra konstruktorn - gånger på den första, eller på motsvarande sätt representeras av en term

Egenskaper

Observera att Curry-Howard-korrespondensen tilldelar sant en enskild typ, false en tom typ, konjunktioner en produkt av typer och disjunktioner en summa av dem.

Anteckningar

  1. 1 2 Girard, Jean-Yves. Tolkning fonctionnelle et elimination des coupures de l'arithmétique d'ordre supérieur : Ph.D. avhandling. — Université Paris 7, 1972.
  2. John C. Reynolds. Mot en teori om typstruktur . - 1974. Arkiverad 31 oktober 2014.
  3. Wells JB Typbarhet och typkontroll i andra ordningens lambda-kalkyl är likvärdiga och obestämbara  // Proceedings of the 9th Annual IEEE Symposium on Logic in Computer Science (LICS). - 1994. - S. 176-185 . Arkiverad från originalet den 22 februari 2007.

Litteratur