Sémantické kódování - Semantics encoding
![]() | tento článek ne uvést žádný Zdroje.Březen 2017) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
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 .