我们可以严格区分编程语言中的句法和语义方法吗?


14

虽然讨论了强有力的规范化证明,但该评论将“规范形式模型”与“纯粹的句法方法”进行了对比。

这使我回到一个更基本的问题:面对基于语法的模型,我们仍然可以严格地区分句法和语义结构吗?代数的术语模型,一阶逻辑的Henkin模型呢?那么结构操作语义呢?由于术语模型可以与语法同构,因此很难进行明确区分。

在研究逻辑上的证明论与模型论之间的区别之前,我甚至对“静态类型系统是一种句法方法”的想法感到困惑。归根结底,类型系统会考虑类型,这是程序行为的抽象(对于依赖类型,则是任意精确的类型)。

Answers:


14

不,您不能严格将句法与语义方法区分开来,但是这种区分最终还是有意义的。

  • 结构化操作语义不是定义的,因为它不是将语义赋予编程语言的一种组合方法。

  • 但是,您可以使用可实现性或逻辑关系方法,根据结构性操作语义来构建指称模型。例如,请参见Robert Harper的“基于操作语义构造类型系统”

  • 术语模型是指称的,但语义学家通常对此并不满意。他们通常想要的是一类模型,其中术语模型是初始的,可以用来证明稳健性和完整性。(笛卡尔封闭类别的输入lambda演算的健全性和完整性是范例;请参见Alex Simpson的λ类型分类完整性结果λ演算。对于一些细节)

  • 另一方面,如果您具有定义语义,则可能需要弄清楚它的语法是什么。然后,您要去寻找一种语法和抽象机器,其术语模型可以在适当的模型类别中用作初始对象。

    例如,游戏语义学从一种纯粹的语义结构开始发展,并最终导致了对操作性游戏语义学的研究-最近的一个例子是Alexis Goyet的《 lambda lambda-bar演算:无约束策略的双重演算》

  • 总体而言,您可以将结构化操作语义视为指定抽象机器的一种方式,我们希望该机器易于实现。指称语义给出了一种语言的组成模型,我们希望这种模型易于推理。如果两者兼而有之,那么我们既可以实现语言又可以进行语言推理。

  • 归一化定理是一个有趣的模棱两可的情况。通常,为了证明规范化,您需要一个语义模型(通常是逻辑关系)。但是,一旦知道归一化成立,现在就可以通过归纳正规形式来证明许多属性,这纯粹是句法论证。

    对于弱逻辑(粗略地达到无归纳的一阶逻辑),可以使用遗传替换技术在语法上证明归一化。在这些逻辑中,子公式属性成立,因此您可以通过归纳类型来证明归一化。有关此方法的解释,请参见Frank Pfenning的论文《结构切割消除》。


哇,谢谢您的快速而彻底的回答!
Blaisorblade 2014年

我不同意您给出的操作语义不是指称性的原因。操作语义不是定义的,因为没有为程序分配任何符号。存在使操作语义组成的工作。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.