Compiler verification efforts often come down to proving the compiler fully abstract: that it preserves and reflects (contextual) equivalences.
Instead of providing full abstraction proofs, some recent (categorical based) compiler verification work by Hasegawa [1,2] and Egger et. al. [3] prove the full completeness of various CPS translations.
Question: What is the difference between full completeness and full abstraction?
To me, completeness just looks like equivalence reflection for a translation and fullness appears to be a consequence of equivalence preservation.
Note: Both Curien [7] and Abramsky [8] explore the relationship between definability, full abstraction, and to some extent full completeness. I suspect these resources may have the answer to my question, but after a surface read I have yet to confirm that.
Some Background: The term "full completeness" was coined by Abramsky and Jagadeesan [4] to characterize the correctness of a game-semantic model of Multiplicative Linear Logic.
Blute [5] provides the following definition:
Let $\mathcal{F}$ be a free category. We say that a categorical model $\mathcal{M}$ is fully complete for $\mathcal{F}$ or that we have full completeness of $\mathcal{F}$ with respect to $\mathcal{M}$ if, with respect to some interpretation of the generators, the unique free functor $[\![ - ]\!] : \mathcal{F} \rightarrow \mathcal{M}$ is full.
As far as I can tell, Hasegawa in [6] is the first to adapt full completeness to describe a program translation instead of a categorical semantic model. In this case, the Girard translation from simply typed lambda calculus to the linear lambda calculus. Later, in [1], he defines full completeness of the CPS translation $(\cdot)^\circ$ as:
If $\Gamma^{\circ};\emptyset \vdash N : (\sigma^\circ \rightarrow o) \multimap o$ is derivable in the linear lambda calculus, then there exists $\Gamma \vdash M : \sigma$ in the computational lambda calculus such that $\Gamma^{\circ};\emptyset \vdash M^\circ = N : (\sigma^\circ \rightarrow o) \multimap o$ holds in the linear lambda calculus.
(where $o$ is a base type in the linear lambda calculus (target language), but not in the computational lambda calculus (source language).)
To me, Hasegawa's definition seems like a fullness and should really be combined with completeness to get full completeness.
Egger et. al. [3] define full completeness of a CPS translation $(\cdot)^v$ as a combination of (1) completeness and (2) fullness:
(1): If $\Theta \vdash M,N : \tau$ and $\Theta^v | - \vdash M^v =_{\beta\eta} N^v : !\tau^v$ then $\Theta \vdash M =_{\lambda_c} N : \tau$
(2): If $\Theta^v | - \vdash t : !\tau^v$ then there exists a term $\Theta \vdash M : \tau$ such that $\Theta^v | - \vdash M^v =_{\beta\eta} t : !\tau^v$
(where $=_{\lambda_c}$ is Moggi's computational equational theory)
[1] "Linearly Used Effects: Monadic and CPS Transformations into Linear Lambda Calculus", Hasegawa 2002
[2] "Semantics of Linear Continuation-Passing in Call-by-Name", Hasegawa 2004
[3] "Linear-use CPS Translations in the Enriched Effect Calculus", Egger et. al. 2012
[4] "Games and Full Completeness for Multiplicative Linear Logic", Abramsky and Jagadeesan 1992
[5] "Category Theory for Linear Logicians", Blute 2003
[6] "Girard Translation and Logical Predicates", Hasegawa 2000
[7] "Definability and full abstraction", Curien 2007
[8] "Axioms for Definability and Full Completeness", Abramsky 1999
Or do translations work differently from denotational semantics?
– Blaisorblade Mar 26 '14 at 03:39