Semantics encoding
Encyclopedia : S : SE : SEM : Semantics encoding
A semantics encoding is a "translation" between formal languages.
For programmers, the most familiar form of encoding is the compilation of a programming language into machine code or byte-code. Conversion between document formats are also forms of encoding. Compilation of TeX or LaTeX documents to PostScript are also commonly encountered encoding processes. Some high-level preprocessors such as Objective Caml's Camlp4 or Apple Computer's WorldScript also involve encoding of a programming language into another.
Definition
Formally, an encoding of a language A into language B is a mapping of all terms of A into B.
If there is a 'satisfactory' encoding of A into B, B is considered 'at least as powerful' (or 'at least as expressive') as A.
Properties of encodings
This informal notion of translation is not sufficient to help determine expressivity of languages, as it permits trivial encodings such as mapping all elements of A to the same element of B. Therefore, it is necessary to determine the definition of a "good enough" encoding. This notion varies with the application.
Commonly, an encoding [[cdot]: A \longrightarrow B] is expected to preserve a number of properties.
Preservation of compositions
- soundness
- For every n-ary operator [op_A] of A, there exists an n-ary operator [op_B] of B such that
- [\forall T_A^1,T_A^2,\dots,T_A^n, [op_A(T_A^1,T_A^2,cdots,T_A^n)] = op_B([T_A^1],[T_A^2],\cdots,[T_A^n])]
- completeness
- For every n-ary operator [op_A] of A, there exists an n-ary operator [op_B] of B such that
- [\forall T_B^1,T_B^2,\dots,T_B^n, \exists T_A^1,\dots,T_A^n, op_B(T_B^1,\cdots,T_B^N) = [op_A(T_A^1,T_A^2,cdots,T_A^n)]]
Preservation of compositions is useful insofar as it guarantees that components can be examined either separately or together without "breaking" any interesting property. In particular, in the case of compilations, this soundness guarantees the possibility of proceeding with separate compilation of components, while completeness guarantees the possibility of de-compilation.
Preservation of reductions
This assumes the existence of a notion of reduction on both language A and language B. Typically, in the case of a programming language, reduction is the relation which models the execution of a program.
We write [\longrightarrow] for one step of reduction and [\longrightarrow^*] for any number of steps of reduction.
- soundness
- For every terms [T_A^1, T_A^2] of language A, if [T_A^1 \longrightarrow^* T_A^2] then [[T_A^1] \longrightarrow^* [T_A^2]].
- completeness
- For every term [T_A^1] of language A and every terms [T_B^2] of language B, if [[T_A^1] \longrightarrow^* T_B^2] then there exists some [T_A^2] such that [T_B^2 = [T_A^2]].
Preservation of termination
This also assumes the existence of a notion of reduction on both language A and language B.
- soundness
- for any term [T_A], if all reductions of [T_A] converge, then all reductions of [[T_A]] converge.
- completeness
- for any term [[T_A]], if all reductions of [[T_A]] converge, then all reductions of [T_A] converge.
Preservation of observations
This assumes the existence of a notion of observation on both language A and language B. In programming languages, typical observables are results of inputs and outputs, by opposition to pure computation. In a description language such as HTML, a typical observable is the result of page rendering.
- soundness
- for every observable [obs_A] on terms of A, there exists an observable [obs_B] of terms of B such that for any term [T_A] with observable [obs_A], [[T_A]] has observable [obs_B].
- completeness
- for every observable [obs_A] on terms of A, there exists an observable [obs_B] on terms of B such that for any term [[T_A]] with observable [obs_B], [T_A] has observable [obs_A].
Preservation of simulations
This assumes the existence of notion of simulation on both language A and language B. In a programming languages, a program simulates another if it can perform all the same (observable) tasks and possibly some others. Simulations are used typically to describe compile-time optimizations.
- soundness
- for every terms [T_A^1, T_A^2], if [T_A^2] simulates [T_A^1] then [[T_A^2]] simulates [[T_A^1]].
- completeness
- for every terms [T_A^1, T_A^2], if [[T_A^2]] simulates [[T_A^1]] then [T_A^2] simulates [T_A^1].
Preservation of equivalences
This assumes the existence of a notion of equivalence on both language A and language B. Typically, this can be a notion of equality of structured data or a notion of syntactically different yet semantically identical programs, such as structural congruence or structural equivalence.
- soundness
- if two terms [T_A^1] and [T_A^2] are equivalent in A, then [[T_A^1]] and [[T_A^2]] are equivalent in B.
- completeness
- if two terms [[T_A^1]] and [[T_A^2]] are equivalent in B, then [T_A^1] and [T_A^2] are equivalent in A.
Preservation of distribution
This assumes the existence of a notion of distribution on both language A and language B. Typically, for compilation of distributed programs written in Acute, JoCaml or E, this means distribution of processes and data among several computers or CPUs.
- soundness
- if a term [T_A] is the composition of two agents [T_A^1~|~T_A^2] then [[T_B]] must be the composition of two agents [[T_A^1]~|~[T_A^2]].
- completeness
- if a term [[T_A]] is the composition of two agents [T_B^1~|~T_B^2] then [T_B] must be the composition of two agents [T_A^1~|~T_A^2] such that [[T_A^1]=T_B^1] and [[T_A^2]=T_B^2].
See also
External links
From Wikipedia, the Free Encyclopedia. Original article here. Support Wikipedia by contributing or donating.
All text is available under the terms of the GNU Free Documentation License See Wikipedia Copyrights for details.
