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.
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 .
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.
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.
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 .
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
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 .
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
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.