Sémantické kódování - Semantics encoding

A kódování sémantiky je překlad mezi formální jazyky. Pro programátory je nejznámější formou kódování kompilace programovacího jazyka do strojového kódu nebo bajtového kódu. Konverze mezi formáty dokumentů jsou také formami kódování. Kompilace TeX nebo Latex dokumenty do PostScript se také běžně vyskytují v procesech kódování. Některé preprocesory na vysoké úrovni, jako např OCaml je Camlp4 také zahrnovat kódování programovacího jazyka do jiného.

Formálně je kódování jazyka A ​​do jazyka B mapováním všech výrazů A do B. Pokud existuje a uspokojivý uvažuje se kódování A do B, B. přinejmenším stejně silný (nebo přinejmenším stejně expresivní) jako.

Vlastnosti

Neformální pojem překladu nestačí k určení expresivity jazyků, protože umožňuje triviální kódování, jako je mapování všech prvků A na stejný prvek B. Proto je nutné určit definici „dostatečně dobrého“ kódování . Tato představa se liší podle aplikace.

Běžně kódování Očekává se, že zachová řadu vlastností.

Uchování skladeb

zdravost
Pro každého operátora n-ary z A existuje operátor n-ary B takové, že
úplnost
Pro každého operátora n-ary z A existuje operátor n-ary z B takové, že

(Poznámka: pokud si je autor vědom, toto kritérium úplnosti se nikdy nepoužívá.)

Zachování kompozic je užitečné, protože zaručuje, že komponenty lze zkoumat buď samostatně, nebo společně, aniž by došlo k „rozbití“ jakékoli zajímavé vlastnosti. Zejména v případě kompilací tato spolehlivost zaručuje možnost pokračovat v samostatné kompilaci komponent, zatímco úplnost zaručuje možnost dekompilace.

Zachování redukcí

To předpokládá existenci pojmu redukce jak pro jazyk A, tak pro jazyk B. Typicky je v případě programovacího jazyka redukce relací, která modeluje provádění programu.

Píšeme pro jeden krok redukce a pro libovolný počet kroků redukce.

zdravost
Za každé období jazyka A, pokud pak .
úplnost
Pro každý termín jazyka A ​​a všech termínů jazyka B, pokud pak nějaké existují takhle .

Toto zachování zaručuje, že se oba jazyky chovají stejně. Zdravost zaručuje, že jsou zachována všechna možná chování, zatímco úplnost zaručuje, že kódování nepřidá žádné chování. Zejména v případě kompilace programovacího jazyka znamená spolehlivost a úplnost dohromady to, že se kompilovaný program chová odpovídající sémantice programovacího jazyka na vysoké úrovni.

Zachování ukončení

To také předpokládá existenci pojmu redukce jak pro jazyk A, tak pro jazyk B.

zdravost
na jakýkoli termín , pokud všechna snížení o konvergovat, pak všechna snížení o konvergovat.
úplnost
na jakýkoli termín , pokud všechna snížení o konvergovat, pak všechna snížení o konvergovat.

V případě kompilace programovacího jazyka zaručuje spolehlivost, že kompilace nezavádí nekončení, jako jsou nekonečné smyčky nebo nekonečné rekurze. Vlastnost úplnosti je užitečná, když se jazyk B používá ke studiu nebo testování programu napsaného v jazyce A, případně extrahováním klíčových částí kódu: pokud tato studie nebo test prokáže, že program končí v B, končí také v A.

Uchovávání pozorování

To předpokládá existenci pojmu pozorování jak v jazyce A, tak v jazyce B. V programovacích jazycích jsou typické pozorovatelné výsledky vstupů a výstupů, na rozdíl od čistého výpočtu. V jazyce popisu, jako je HTML, typický pozorovatelný je výsledek vykreslování stránky.

zdravost
pro každého pozorovatelného z hlediska A existuje pozorovatelný podmínek B tak, že pro jakýkoli termín s pozorovatelným , má pozorovatelný .
úplnost
pro každého pozorovatelného z hlediska A existuje pozorovatelný za podmínek B tak, že pro jakýkoli termín s pozorovatelným , má pozorovatelný .

Zachování simulací

To předpokládá existenci pojmu simulace jak v jazyce A, tak v jazyce B. V programovacích jazycích program simuluje jiný, pokud může provádět všechny stejné (pozorovatelné) úkoly a případně i některé další. Simulace se obvykle používají k popisu optimalizace při kompilaci.

zdravost
za každé období , pokud simuluje pak simuluje .
úplnost
za každé období , pokud simuluje pak simuluje .

Zachování simulací je mnohem silnější vlastností než uchování pozorování, které s sebou nese. Na druhé straně je slabší než vlastnost zachování bisimulace. Stejně jako v předchozích případech je pro kompilaci důležitá spolehlivost, zatímco úplnost je užitečná pro testování nebo prokázání vlastností.

Zachování rovnocennosti

To předpokládá existenci pojmu ekvivalence jak pro jazyk A, tak pro jazyk B. Typicky to může být pojem rovnosti strukturovaných dat nebo pojem syntakticky odlišných, ale sémanticky identických programů, jako je strukturální shoda nebo strukturální ekvivalence.

zdravost
pokud dva termíny a jsou tedy ekvivalentní v A a jsou ekvivalentní v B.
úplnost
pokud dva termíny a jsou tedy ekvivalentní v B a jsou ekvivalentní v A.

Zachování distribuce

To předpokládá existenci pojmu distribuce jak v jazyce A, tak v jazyce B. Typicky pro kompilaci distribuovaných programů napsaných v Akutní, JoCaml nebo E, to znamená distribuci procesů a dat mezi několik počítačů nebo procesorů.

zdravost
pokud termín je složení dvou látek pak musí být složení dvou látek .
úplnost
pokud termín je složení dvou látek pak musí být složení dvou látek takhle a .

Viz také

externí odkazy