Systém F

Systém F ( polymorfní počet lambda , systém , typovaný počet lambda druhého řádu ) je typovaný systém počtu lambda , který se liší od jednoduše typovaného systému přítomností univerzálního kvantifikačního mechanismu nad typy. Tento systém vyvinul v roce 1972 Jean-Yves Girard [1] v kontextu teorie důkazů v logice. Nezávisle na něm podobný systém navrhl v roce 1974 John Reynolds [2] . Systém F vám umožňuje formalizovat koncept parametrického polymorfismu v programovacích jazycích a slouží jako teoretický základ pro takové programovací jazyky, jako jsouHaskell a ML .

Systém F umožňuje konstrukci termínů v závislosti na typech. Technicky je toho dosaženo mechanismem abstrahování termínu podle typu, což vede k novému termínu. Tradičně se pro takovou abstrakci používá velký symbol lambda . Například, vezmeme-li výraz typu a abstrahujeme proměnnou typu , získáme term . Tento termín je funkcí od typů k termínům. Aplikací této funkce na různé typy získáme termíny se stejnou strukturou, ale různými typy:

- termín typu ; je termín typu .

Je vidět, že termín má polymorfní chování, to znamená, že definuje společné rozhraní pro různé datové typy. V systému F je tomuto termínu přiřazen typ . Univerzální kvantifikátor v typu zdůrazňuje možnost nahrazení typové proměnné jakýmkoli platným typem .

Formální popis

Syntaxe typu

Typy systému F jsou konstruovány ze sady typových proměnných pomocí operátorů a . Podle tradice se pro typové proměnné používají řecká písmena. Pravidla pro formování typů jsou následující:

Vnější závorky jsou často vynechány, operátor je považován za asociativní vpravo a akce operátoru pokračuje doprava, pokud je to možné. Například je standardní zkratka pro .

Syntaxe termínů

Termíny systému F jsou konstruovány ze sady termínových proměnných ( , atd .) podle následujících pravidel

Vnější závorky jsou často vynechány, oba druhy použití jsou považovány za asociativní vlevo a akce abstrakce se považuje za pokračování doprava, pokud je to možné.

Existují dvě verze jednoduchého systému. Pokud, jako ve výše uvedených pravidlech, jsou termínové proměnné v lambda abstrakci označeny typy, pak je systém označován jako Church-typed . Pokud je pravidlo abstrakce nahrazeno

a zahoďte poslední dvě pravidla, pak se systém nazývá Curry-typed . Ve skutečnosti jsou podmínky Curry-typizovaného systému stejné jako ty v netypizovaném lambda kalkulu.

Pravidla snížení

Kromě standardního -redukčního pravidla pro lambda kalkul

Kostelní systém F zavádí další pravidlo,

,

umožňující vypočítat aplikaci termínu na typ pomocí mechanismu substituce typu namísto typové proměnné.

Kontexty psaní a tvrzení typu

Kontext, stejně jako v jednoduše zadaném lambda kalkulu , je soubor příkazů o přiřazování typů různým proměnným, oddělených čárkou

Pro tento kontext můžete do kontextu přidat proměnnou „fresh“: pokud je platný kontext, který neobsahuje proměnnou , a je to typ, pak je to také platný kontext.

Obecná forma typizačního příkazu je:

To zní následovně: v kontextu má výraz typ .

Pravidla církevního psaní

V Churchově typizovaném systému F se přiřazování typů termínům provádí podle následujících pravidel:

( Počáteční pravidlo ) Pokud je proměnná přítomna s typem v kontextu , pak má typ v tomto kontextu . Ve formě inferenčního pravidla

( Úvodní pravidlo ) Jestliže v nějakém kontextu rozšířeném o příkaz, který má typ , má výraz typ , pak v uvedeném kontextu (bez ) má abstrakce lambda typ . Ve formě inferenčního pravidla

( pravidlo odstranění ) Pokud má v nějakém kontextu termín typ a termín má typ , pak má typ aplikace . Ve formě inferenčního pravidla

( Úvodní pravidlo ) Jestliže v nějakém kontextu má termín typ , pak v tomto kontextu má termín typ . Ve formě inferenčního pravidla

Toto pravidlo vyžaduje upozornění: typová proměnná se nesmí vyskytovat v výrazech pro zadávání kontextu .

( pravidlo odstranění ) Pokud má v nějakém kontextu výraz typ , a je typem, pak v tomto kontextu má výraz typ . Ve formě inferenčního pravidla

Curryho pravidla psaní

V systému F typu Curry se přiřazování typů termínům provádí podle následujících pravidel:

( Počáteční pravidlo ) Pokud je proměnná přítomna s typem v kontextu , pak má typ v tomto kontextu . Ve formě inferenčního pravidla

( Úvodní pravidlo ) Jestliže v nějakém kontextu rozšířeném o příkaz, který má typ , má výraz typ , pak v uvedeném kontextu (bez ) má abstrakce lambda typ . Ve formě inferenčního pravidla

( pravidlo odstranění ) Pokud má v nějakém kontextu termín typ a termín má typ , pak má typ aplikace . Ve formě inferenčního pravidla

( Úvodní pravidlo ) Pokud má termín v nějakém kontextu typ , pak v tomto kontextu lze tomuto termínu také přiřadit typ . Ve formě inferenčního pravidla

Toto pravidlo vyžaduje upozornění: typová proměnná se nesmí vyskytovat v výrazech pro zadávání kontextu .

( pravidlo odstranění ) Pokud má v nějakém kontextu výraz typ , a je typem, pak v tomto kontextu lze tomuto výrazu přiřadit také typ . Ve formě inferenčního pravidla

Příklad. Podle původního pravidla:

Použijme pravidlo odebrání , přičemž jako typ

Nyní, v souladu s pravidlem odebrání , máme možnost použít termín na sebe sama

a konečně podle pravidla úvodu

Toto je příklad výrazu zadávaného v systému F, ale ne v jednoduše zadávaném systému .

Reprezentace datových typů

Systém F je dostatečně expresivní, aby přímo implementoval mnoho datových typů používaných v programovacích jazycích. Budeme pracovat v Churchově verzi systému F.

Prázdný typ. Typ

je v systému F neobydlený, to znamená, že v něm nejsou žádné termíny s tímto typem.

Jediný typ. Typ Y

systém F má jednoho normálního obyvatele, člen

.

booleovský typ. V systému F je dáno následovně:

.

Tento typ má přesně dva obyvatele identifikované dvěma booleovskými konstantami

Konstrukce podmíněného operátoru

Tato funkce splňuje přirozené požadavky

a

pro libovolný typ a libovolný a . Je snadné to ověřit rozšířením definic a provedením -redukce.

Typ uměleckého díla. Pro libovolné typy a typ jejich kartézského součinu

obývá pár

pro každého a . Projekce dvojice jsou dány funkcemi

Tyto funkce splňují přirozené požadavky a .

Typ částky. Pro libovolné typy a typ jejich součtu

vyplněno buď termínem typu , nebo termínem typu , v závislosti na použitém konstruktoru

Zde , . Funkce, která provádí analýzu velkých a malých písmen (pattern matching) má tvar

Tato funkce splňuje následující přirozené požadavky

a

pro libovolné typy a libovolné termíny a .

Kostelní čísla. Typ přirozených čísel v soustavě F

obývá nekonečné množství různých prvků, získaných prostřednictvím dvou konstruktérů a :

Přirozené číslo lze získat aplikací druhého konstruktoru - krát na první, nebo ekvivalentně reprezentované výrazem

Vlastnosti

Všimněte si, že korespondence Curry-Howard přiřazuje true jeden typ, false prázdný typ, spojuje součin typů a odděluje jejich součet.

Poznámky

  1. 1 2 Girard, Jean-Yves. Interpretace fonctionnelle et elimination des coupures de l'aritmétique d'ordre supérieur : Ph.D. teze. — Université Paris 7, 1972.
  2. John C. Reynolds. Směrem k teorii typové struktury . - 1974. Archivováno 31. října 2014.
  3. Wells JB Typabilita a typová kontrola v lambda-kalkulu druhého řádu jsou ekvivalentní a nerozhodnutelné  // Sborník z 9. výročního sympozia IEEE o logice v počítačové vědě (LICS). - 1994. - S. 176-185 . Archivováno z originálu 22. února 2007.

Literatura