证明微步和宏步语义的等价性
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 语义的难题,还证明了不同语义之间的等价性。这为进一步研究和应用同步语言提供了坚实的基础,有助于更好地理解和处理同步程序中的各种问题,推动同步语言在安全关键型反应式实时系统等领域的应用。
超级会员免费看

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



