函数式大步语义:原理、应用与优势
1. 终止性证明与语义表示
在语义分析中,终止性证明是一个重要的问题。对于 sem_t 函数,我们通过提供一个良基度量来证明其终止性,即时钟值和被评估语句大小的字典序排序。这一方法可行的原因在于时钟值不会增加,并且在每次递归调用中,若时钟未递减,被评估语句的大小会减小。
与关系型大步语义不同,函数式大步语义需要进行终止性证明,这是其一个缺点。但函数式表示也带来了一些直接的好处,例如语义是全函数(根据定义)且具有确定性。而这些属性对于关系型定义来说,可能需要繁琐的证明。
1.1 终止和非终止评估的语义
sem_t 函数对所有输入都会终止,但同时它能为终止和非终止(发散)评估提供语义。具体来说:
- 若存在某个时钟初始值,使得 sem_t 返回 Rval ,则评估终止。
- 若对于所有时钟初始值, sem_t 都返回 Rtimeout ,则评估非终止。
- 在其他情况下,语义失败。
顶层语义正式定义如下,有三种可观察的结果: Terminate 、 Diverge 和 Crash 。
semantics t =
if ∃c v s. sem_t (s_with_clock c) t = (Rval v,s) then Term
超级会员免费看
订阅专栏 解锁全文
2858

被折叠的 条评论
为什么被折叠?



