33、证明微步和宏步语义的等价性

证明微步和宏步语义的等价性

1. 引言

对编程语言进行推理是高阶逻辑定理证明器的主要应用之一。在定理证明器的逻辑中对编程语言进行形式化,通常可分为深度嵌入和浅度嵌入。深度嵌入需要为编程语言的语句定义常量,使程序成为高阶逻辑项;浅度嵌入则是将程序(在定理证明器外部)直接翻译成其逻辑公式。深度嵌入虽更复杂,但能在元级别对编程语言进行推理,这对于验证程序转换或代码生成等功能至关重要,尤其在安全关键型应用中。

同步语言如 Esterel 及其变体,因其具有形式良好的语义,被广泛用于设计安全关键型反应式实时系统。同步语言的基本范式是完美同步,大多数语句以“微步”执行,不消耗时间,而像 Esterel 的 pause 语句这样的特殊语句用于显式编程时间消耗,它将不同的宏步分隔开。由于 pause 语句是唯一消耗时间的基本语句,所有线程会同步执行,这使得同步语言能实现多线程和确定性程序。

宏步抽象使同步编程极具吸引力,它不仅是理想的程序员模型,还能将程序直接转换为同步硬件电路,其中宏步对应时钟周期,且同样的转换也用于软件生成,因此硬件电路的许多优化方法也可用于软件优化,使同步程序成为硬件/软件协同设计的良好基础。然而,宏步抽象也带来了一些问题,如精神分裂问题和因果关系问题,编译器需要解决这些问题。

定义命令式同步语言的语义有多种方式,包括基于进程代数的语义、基于硬件电路或方程的语义以及基于控制流谓词的语义。其中,SOS 语义反映程序的微步,具有更细的粒度,能更详细地解释程序行为,虽对代码生成和验证并非必需,但有助于理解存在因果关系或精神分裂问题的程序。因此,微步和宏步语义都很重要,而本文的主题就是证明这两种语义的等价性。

在使用定理证明器证明两种语义的等价性之前,需要先将语言嵌入到定理证明器中。为避免不一致性,像 HOL 这样的现代定理证明器使用特定的定义原则来保持一致性,其中原始递归是保证保守扩展的主要定义原则,且原始递归定义能让定理证明器自动推导出合适的归纳规则。但仅通过原始递归定义语言的语义并不容易,例如 Esterel 的 SOS 语义就不能直接用原始递归定义,因为循环规则会递归调用自身而不“减小”程序。因此,之前更倾向于使用控制流谓词语义将 Esterel 变体 Quartz 嵌入 HOL。为解决定义 SOS 语义的困难,可以使用其停机集编码。

2. 语法和语义

Quartz 是 Esterel 的变体,它扩展了 Esterel 的功能,包括延迟赋值和发射、异步并发、非确定性选择和内联断言。异步并发对于建模分布式系统或让编译器优化线程调度很重要,非确定性选择也是如此。延迟赋值和发射遵循传统的顺序编程风格,便于从传统编程语言(如 C)进行更简单的转换。

2.1 语法和非正式语义

逻辑时间用自然数 $\mathbb{N}$ 建模,因此数据类型表达式的语义是类型为 $\mathbb{N} \to \alpha$ 的函数。Quartz 区分两种变量:事件变量和状态变量。事件变量的语义是类型为 $\mathbb{N} \to \mathbb{B}$ 的函数,状态变量的语义类型更通用,为 $\mathbb{N} \to \alpha$。两者的主要区别在于数据流,状态变量的值是“粘性”的,若未对其进行数据操作,值不会改变;而事件变量的值不具有粘性,若在下一个宏步未显式设为真,则会重置为假。事件变量通过 emit 语句使其出现,状态变量通过赋值语句 := 进行操作。

Quartz 的基本语句如下:
- 空语句 nothing
- 发射语句 emit x emit next(x)
- 赋值语句 y := τ y := next(τ)
- 时间消耗语句 ℓ: pause
- 条件语句 if σ then S1 else S2 end
- 顺序组合语句 S1; S2
- 同步并行组合语句 S1 ∥S2
- 异步并行组合语句 S1 S2
- 非确定性选择语句 choose S1 S2 end
- 迭代语句 do S while σ
- 挂起语句 suspend S when σ
- 弱挂起语句 weak suspend S when σ
- 中止语句 abort S when σ
- 弱中止语句 weak abort S when σ
- 局部事件变量声明 local x in S end
- 局部状态变量声明 local y : α in S end
- 瞬时断言 now σ
- 不变断言 during S holds σ

下面对这些基本语句进行简要说明:
- nothing 语句不消耗时间,也不影响任何数据值。
- emit x 语句使事件变量 x 在当前宏步出现,即该时刻 x 的值为真。
- y := τ 语句使状态变量 y 和表达式 τ 在当前宏步具有相同的值。 emit next(x) y := next(τ) 分别是延迟一个宏步的发射和赋值操作。
- pause 语句是唯一消耗时间的基本语句,不影响数据值。为了编码控制流自动机,为 pause 语句赋予唯一的位置变量 ,但嵌入过程不保证其唯一性,需要单独检查。
- 条件语句 if σ then S1 else S2 end 根据当前宏步中布尔表达式 σ 的值,立即执行 S1 S2
- 顺序组合语句 S1; S2 先执行 S1 ,若 S1 终止,则立即开始执行 S2 ;若 S1 永不终止,则 S2 不会执行。
- 同步并行组合语句 S1 ∥S2 同时进入 S1 S2 并执行,只要两者都活跃,就同步执行。若其中一个终止,另一个继续执行,直到两者都终止。
- 异步并行组合语句 S1 S2 允许其中一个线程执行多个宏步,而另一个线程执行单个或不执行宏步。不过,可以使用额外的输入(控制变量)将其替换为标准的 Esterel 语句。
- 非确定性选择语句 choose S1 S2 end 会非确定性地执行 S1 S2 ,同样可以使用额外的输入(控制变量)将其简化为其他语句。
- 迭代语句 do S while σ 进入后执行 S 直到其终止,若此时 σ 为真,则再次执行 S ,否则循环终止,要求循环体 S 对于任何输入都不是瞬时的。
- 挂起语句 suspend S when σ 在执行开始时进入 S ,后续只有当 σ 为假时, S 才会继续执行,否则其执行会被“冻结”。
- 中止语句 abort S when σ 在开始时立即进入 S ,只要 σ 为假, S 就会执行,若 σ 在执行过程中变为真,则 S 立即中止。

下面是一个简单的流程图,展示了 do S while σ 语句的执行流程:

graph TD;
    A[开始] --> B[执行 S];
    B --> C{S 是否终止};
    C -- 是 --> D{σ 是否为真};
    D -- 是 --> B;
    D -- 否 --> E[结束];
    C -- 否 --> B;

通过以上对 Quartz 语法和语义的介绍,我们对其基本语句和执行机制有了初步了解,后续将进一步探讨如何对其 SOS 语义进行停机集编码以及证明其与其他语义的等价性。

证明微步和宏步语义的等价性

3. SOS 语义的停机集编码

为了克服直接使用原始递归定义 Esterel 的 SOS 语义的困难,我们采用停机集编码的方法。停机集编码可以将原本可能非终止的 SOS 规则转换为更易于处理的形式。

具体来说,我们将为 Quartz 的 SOS 规则定义一个停机集编码。这个编码过程需要解决一些内在的技术问题,例如如何处理递归调用而不导致不一致性,以及如何确保编码后的语义与原始语义保持一致。

在进行停机集编码时,我们需要考虑 Quartz 中各种语句的特点。例如,对于循环语句 do S while σ ,由于其递归调用自身的特性,需要特别处理。我们可以通过引入一些辅助变量和条件,来确保编码后的规则能够正确地模拟循环的执行过程。

4. 结果与等价性证明

在完成 SOS 语义的停机集编码后,我们面临着一些技术问题,需要在将其嵌入到 HOL 中时加以解决。这些问题包括如何处理位置变量的唯一性、如何确保编码后的语义与原始语义的一致性等。

经过努力解决这些问题后,我们成功证明了以下三种语义的等价性:
1. 本文定义的 SOS 语义。
2. 之前基于控制流谓词的语义。
3. 基于电路/方程的语义。

下面是一个表格,总结了这三种语义的特点:
| 语义类型 | 特点 |
| ---- | ---- |
| SOS 语义 | 反映程序的微步,粒度更细,能详细解释程序行为 |
| 控制流谓词语义 | 便于将 Quartz 嵌入 HOL,用于多种目的,如形式合成、推理精神分裂问题等 |
| 电路/方程语义 | 与硬件电路相关,可用于硬件/软件协同设计 |

证明这三种语义的等价性具有重要意义。现在,我们可以对程序的微步进行推理,这对于理解存在因果关系或精神分裂问题的程序有时是必要的。不过,本文所呈现的语义尚未考虑因果关系,因此等价于逻辑语义。同时,本文也未考虑局部声明和精神分裂问题。

以下是一个流程图,展示了证明三种语义等价性的主要步骤:

graph TD;
    A[定义 SOS 语义的停机集编码] --> B[解决嵌入 HOL 的技术问题];
    B --> C[证明 SOS 语义与控制流谓词语义等价];
    C --> D[证明 SOS 语义与电路/方程语义等价];
    D --> E[完成三种语义等价性证明];

综上所述,通过本文的工作,我们不仅解决了定义 Esterel 变体 Quartz 的 SOS 语义的难题,还证明了不同语义之间的等价性。这为进一步研究和应用同步语言提供了坚实的基础,有助于更好地理解和处理同步程序中的各种问题,推动同步语言在安全关键型反应式实时系统等领域的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值