指称语义可以回答哪些问题而操作语义不能回答?


14

我熟悉用于定义编程语言的操作语义(小步骤和大步骤)。我也对学习指称语义感兴趣,但是我不确定这样做是否值得。我会只是从不同的角度学习相同的材料,还是只有通过理解指称语义才能获得见识?

Answers:


11

有什么特点指称语义(也看不出有什么真正的协议,文章),但它必须是成分。这意味着,如果是语义函数,将程序映射到它们的含义,对于所有 n元程序构造函数 f和所有程序 M 1,..., M n(隐式假定类型正确),都必须执行以下操作:[[]]nfM1Mn

[[f(M1,...,Mn)]]=trans(f)([[M1]],...,[[Mn]])

这里,是语义域中与f对应的构造函数。组成性类似于代数中的同构概念。trans(f)f

从这个意义上说,操作语义不是组合的。从历史上看,指称语义学的发展部分是因为操作语义学不是组成性的。遵循D.Scott 突破性的演算的阶理论的指称语义,大多数指称语义曾经是阶理论。我想,除了纯粹的智力兴趣外,名词指称语义主要是因为(1960年代)发明的:λ

  1. 过去很难对操作语义进行推理。
  2. 过去常常给非平凡的语言赋予公理语义。

问题的部分原因是程序平等的概念没有像现在这样被很好地理解。我认为这两个问题都得到了很大程度的改善,(1)例如来自过程理论(可以看作是操作语义的一种特定形式)的基于双歧化的技术,或者例如Pitts致力于操作语义和程序等价,以及(2)通过分离逻辑或Hoare逻辑的发展,这些逻辑是通过在类型π演算中进行编程语言嵌入而衍生为Hennessy-Milner逻辑的类型化版本的。请注意,程序逻辑(=公理语义)也是组合的。

另一种看待指称语义的方式是,有许多编程语言,并且它们看起来都差不多,因此也许我们可以找到一种简单而通用的元语言,然后将所有编程语言以组合方式映射到该元语言。语言。在1960年代,人们认为某种类型的微积分就是这种元语言。图片可能说出1000多个字:λ

在此处输入图片说明

这种方法的优势是什么?从经济观点来看也许是有意义的。如果我们想证明有关一类目标程序的有趣信息,我们有两个选择。

  • 直接在对象级别上进行证明。

  • 证明向元级别(和向后)的转换会“保留”该属性,然后在元级别对其进行证明,然后将结果推回到对象级别。

后者的合并成本可能高于前者的成本,但是证明翻译的成本可以在所有未来使用中摊销,而证明元级别的属性的成本比证明的成本小得多。在对象级别上。

迄今为止,用于指称语义的原始顺序理论方法还没有兑现这一承诺,因为尚未为复杂的语言功能(例如面向对象,并发和分布式计算)提供精确的顺序理论语义。“精确”是指与此类语言的自然操作语义相匹配的语义。


值得学习指称语义吗?如果您是指代指称语义的顺序理论方法,那么可能不是这样,除非您想研究编程语言理论并且需要了解较早的论文。学习指称语义的顺序理论方法的另一个原因是这种方法的优点。


4

O(p,σ)σp,σσD(p)pO(p,σ)=D(p)(σ)S(p)σO(p,σ)D(p)

C:XXS(C(p))=S(p)pσO(C(p),σ)=O(p,σ)pD(C(p))=D(p)σ

愚蠢的例子:

C(p)=(q;q)(skip;q;skip;q;skip)

pC

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.