Normalizace hodnocením - Normalisation by evaluation - Wikipedia
tento článek nebo sekce možná bude třeba formátovaný. (Dubna 2014) |
v programovací jazyk sémantika, normalizace hodnocením (NBE) je styl získávání normální forma podmínek v λ počet odvoláním na jejich denotační sémantika. Termín je první interpretován do denotačního modelu λ-termínové struktury a poté je kanonický (β-normální a η-dlouhý) zástupce extrahován reiting označení. Takový v zásadě sémantický přístup se liší od tradičnějšího syntaktického popisu normalizace jako redukce v a systém přepisování termínů kde β-redukce jsou povoleny hluboko uvnitř λ-podmínek.
NBE byl poprvé popsán pro jednoduše zadaný lambda kalkul.[1] Od té doby byla rozšířena jak na slabší systémy typu tak jako netypový lambda kalkul[2] používat teoretická doména a systémy bohatšího typu, jako je několik variant systému Teorie typu Martin-Löf.[3][4]
Obrys
Zvažte jednoduše zadaný lambda kalkul, kde typy τ mohou být základní typy (α), typy funkcí (→) nebo produkty (×), dané následujícími Backus – Naurova forma gramatika (→ přidružení vpravo, jako obvykle):
- (Typy) τ :: = α | τ1 → τ2 | τ1 × τ2
Mohou být implementovány jako datový typ v metajazyku; například pro Standardní ML, můžeme použít:
datový typ ty = Základní z tětiva | Šíp z ty * ty | Prod z ty * ty
Pojmy jsou definovány na dvou úrovních.[5] Nižší syntaktický úroveň (někdy nazývaná dynamický úroveň) je reprezentace, kterou má člověk v úmyslu normalizovat.
- (Podmínky syntaxe) s,t,… ::= var X | lam (X, t) | aplikace (s, t) | pár (s, t) | první t | snd t
Tady lam/aplikace (resp. pár/první,snd) jsou intro /elimin formuláře pro → (resp. ×) a X jsou proměnné. Tyto podmínky mají být implementovány jako první objednávka v metajazyku:
datový typ tm = var z tětiva | lam z tětiva * tm | aplikace z tm * tm | pár z tm * tm | první z tm | snd z tm
The denotační sémantika of (closed) terms in the meta-language interpretuje konstrukty syntaxe, pokud jde o vlastnosti metajazyka; tím pádem, lam je interpretován jako abstrakce, aplikace jako aplikace atd. Konstruované sémantické objekty jsou následující:
- (Sémantické podmínky) S,T,… ::= LAM (λX. S X) | PÁR (S, T) | SYN t
Všimněte si, že v sémantice nejsou žádné proměnné ani formy eliminace; jsou reprezentovány jednoduše jako syntaxe. Tyto sémantické objekty jsou reprezentovány následujícím datovým typem:
datový typ sem = LAM z (sem -> sem) | PÁR z sem * sem | SYN z tm
Existuje dvojice funkcí indexovaných podle typu, které se pohybují tam a zpět mezi syntaktickou a sémantickou vrstvou. První funkce, obvykle psaná ↑τ, odráží termín syntax do sémantiky, zatímco druhý reifikuje sémantika jako syntaktický termín (psaný jako ↓τ). Jejich definice jsou vzájemně rekurzivní následovně:
Tyto definice lze snadno implementovat v metajazyku:
(* reflect: ty -> tm -> sem *) zábava odrážet (Šíp (A, b)) t = LAM (fn S => odrážet b (aplikace t (reify A S))) | odrážet (Prod (A, b)) t = PÁR (odrážet A (první t)) (odrážet b (snd t)) | odrážet (Základní _) t = SYN t (* reify: ty -> sem -> tm *) a reify (Šíp (A, b)) (LAM S) = nechat X = fresh_var () v Lam (X, reify b (S (odrážet A (var X)))) konec | reify (Prod (A, b)) (PÁR S T) = Pár (reify A S, reify b T) | reify (Základní _) (SYN t) = t
Podle indukce na struktuře typů vyplývá, že pokud je sémantický objekt S označuje dobře napsaný výraz s typu τ, pak reifikování objektu (tj. ↓τ S) produkuje β-normální η-dlouhou formu s. Zbývá tedy pouze zkonstruovat počáteční sémantickou interpretaci S ze syntaktického výrazu s. Tato operace, napsáno ∥s∥Γ, kde Γ je kontext vazeb, probíhá indukcí pouze na pojmu struktura:
Při implementaci:
(* význam: ctx -> tm -> sem *) zábava význam G t = případ t z var X => vzhlédnout G X | lam (X, s) => LAM (fn S => význam (přidat G (X, S)) s) | aplikace (s, t) => (případ význam G s z LAM S => S (význam G t)) | pár (s, t) => PÁR (význam G s, význam G t) | první s => (případ význam G s z PÁR (S, T) => S) | snd t => (případ význam G t z PÁR (S, T) => T)
Všimněte si, že existuje mnoho neúplných případů; pokud se však použije na a Zavřeno dobře napsaný termín, žádný z těchto chybějících případů se nikdy nestretne. Operace NBE za uzavřených podmínek je pak:
(* nbe: ty -> tm -> tm *) zábava nbe A t = reify A (význam prázdný t)
Jako příklad jeho použití zvažte syntaktický výraz Sk
definováno níže:
val K. = lam ("X", lam ("y", var "X")) val S = lam ("X", lam ("y", lam („z“, aplikace (aplikace (var "X", var „z“), aplikace (var "y", var „z“))))) val Sk = aplikace (aplikace (S, K.), K.)
Toto je dobře známé kódování funkce identity v kombinační logika. Normalizace na typ identity vytvoří:
- nbe (Šíp (Základní "A", Základní "A")) Sk; val to = lam („v0“,var „v0“) : tm
Výsledek je ve skutečnosti ve formě η-long, což lze snadno zjistit normalizací na jiný typ identity:
- nbe (Šíp (Šíp (Základní "A", Základní „b“), Šíp (Základní "A", Základní „b“))) Sk; val to = lam („v1“,lam („v2“,aplikace (var „v1“,var „v2“))) : tm
Viz také
- MINLOG, a důkaz asistent který používá NBE jako svůj přepisovací modul.
Reference
- ^ Berger, Ulrich; Schwichtenberg, Helmut (1991). Msgstr "Inverzní funkce vyhodnocení pro typizovaný λ-počet". LICS.
- ^ Filinski, Andrzej; Rohde, Henning Korsholm (2004). „Denotační popis netypové normalizace hodnocením“. FOSSACS.
- ^ Abel, Andreas; Aehlig, Klaus; Dybjer, Peter (2007). „Normalizace hodnocením pro Martin-Löfovu teorii typu s jedním vesmírem“ (PDF). MFPS.
- ^ Abel, Andreas; Coquand, Thierry; Dybjer, Peter (2007). „Normalizace pomocí vyhodnocení pro Martin-Löfovu teorii typu s rozsudky typizované rovnosti“ (PDF). LICS.
- ^ Danvy, Olivier (1996). „Typově zaměřené dílčí hodnocení“ (gzipovaný PostScript ). POPL: 242–257.