编译器验证工作通常归结为证明编译器完全抽象:它保留并反映(上下文)对等。
代替提供完全抽象样张,由长谷川[一些最近(分类基于)编译器核查工作1,2 ]和艾格等。等 [ 3 ]证明了各种CPS翻译的完全完整性。
问题: 完全完整性和完全抽象之间有什么区别?
在我看来,完整性就像翻译的对等反映,而完整性似乎是对等保存的结果。
注意:Curien [ 7 ]和Abramsky [ 8 ]都探讨了可定义性,完全抽象以及某种程度上完全完整性之间的关系。我怀疑这些资源可能可以回答我的问题,但经过表面阅读后,我尚未确认。
某些背景:Abramsky和Jagadeesan [ 4 ] 提出了“完全完整性”一词,用以描述乘法线性逻辑的博弈语义模型的正确性。
Blute [ 5 ]提供以下定义:
令为自由类别。我们说一个明确的模型 是全面完成 或者说我们有 充分完整性相对于,如果,相对于发电机的一些解释,独特的无仿函数已满。
据我所知,[ 6 ]中的长谷川是第一个采用完全完整性来描述程序翻译而不是分类语义模型的人。在这种情况下,吉拉德从简单类型的Lambda演算转换为线性Lambda演算。后来,在[ 1 ],他定义了CPS翻译的全完整性为:
(其中是线性lambda演算(目标语言)中的基本类型,但不是计算lambda演算(源语言)中的基本类型。)
在我看来,长谷川的定义似乎是完整的,应该真正地将其与完整性结合起来以获得完整。
Egger等。等 [ 3 ]将CPS转换完全完整性定义为(1)完整性和(2)完整性的组合:
(1):如果和然后Θ v | - ⊢ 中号v = β η ñ v:!τ v Θ ⊢ 中号= λ Ç Ñ :τ
(2):如果然后存在一个术语 这样 Θ ⊢ 中号:τ Θ v | - ⊢ 中号v = β η牛逼:!τ v
(其中是的计算方程理论)
[1]“ 线性使用的效果:单子和CPS转换为线性Lambda演算 ”,长谷川2002
[2] 长谷川2004年的“ 线性连续传递名中的语义 ”
[3]“ 丰富效果演算中的线性使用CPS翻译 ”,Egger等。等 2012年
[4]“ 乘积线性逻辑的博弈和完全完备性 ”,Abramsky和Jagadeesan,1992年
[5]“ 线性逻辑学家的分类理论 ”,Blute,2003年
[6]“ 吉拉德翻译和逻辑谓词 ”,长谷川2000
[7]“ 可定义性和完整抽象 ”,居里安,2007年
[8]“ 可定义性和完全完整性公理 ”,阿布拉姆斯基,1999年