小步语义格局变换练习


小步语义格局变换练习

在小步语义中,我们关注程序执行的每一步演化。一个格局通常表示为 $\langle c, \sigma \rangle$(命令与状态对)或直接是一个状态 $\sigma$(在非变种语义中表示终止)。

以下是针对不同表达式和语句的格局变换练习汇总。


一、 算术表达式 Aexp 与布尔表达式 Bexp

题目 1:算术表达式 Aexp 归约

题目:假设 $\sigma(X) = 4$,写出 $\langle (X + 2) \times (3 - 1), \sigma \rangle$ 的小步语义格局变换。

答案
$\langle (X + 2) \times (3 - 1), \sigma \rangle$
$\to_1 \langle (4 + 2) \times (3 - 1), \sigma \rangle$ (变量替换)
$\to_1 \langle 6 \times (3 - 1), \sigma \rangle$ (计算左侧括号)
$\to_1 \langle 6 \times 2, \sigma \rangle$ (计算右侧括号)
$\to_1 \langle 12, \sigma \rangle$ (最终求值)


题目 2:Bexp 独立归约过程

题目:假设 $\sigma(X) = 3, \sigma(Y) = 5$,写出布尔表达式 $\neg(X < 2) \wedge (Y = 5)$ 的小步语义格局变换。

答案
$\langle \neg(X < 2) \wedge (Y = 5), \sigma \rangle$
$\to_1 \langle \neg(3 < 2) \wedge (Y = 5), \sigma \rangle$ (变量替换 X)
$\to_1 \langle \neg \text{false} \wedge (Y = 5), \sigma \rangle$ (计算比较运算)
$\to_1 \langle \text{true} \wedge (Y = 5), \sigma \rangle$ (处理否定 $\neg$)
$\to_1 \langle \text{true} \wedge (5 = 5), \sigma \rangle$ (变量替换 Y)
$\to_1 \langle \text{true} \wedge \text{true}, \sigma \rangle$ (计算等于运算)
$\to_1 \text{true}$ (最终 Bexp 的值)


二、 命令语句 Com(非变种模式)

注:非变种模式下,赋值语句的最后一步直接归约至状态 $\sigma$。

题目 1:基础顺序执行

题目:设 $\sigma$ 为初始状态,写出命令 $X := 1 + 2; Y := X \times 2$ 的小步语义格局变换。

答案
$\langle X := 1 + 2; Y := X \times 2, \sigma \rangle$
$\to_1 \langle X := 3; Y := X \times 2, \sigma \rangle$ (计算第一个赋值右侧)
$\to_1 \langle Y := X \times 2, \sigma[3/X] \rangle$ (非变种:完成第一个赋值,进入下一条命令)
$\to_1 \langle Y := 3 \times 2, \sigma[3/X] \rangle$ (变量替换)
$\to_1 \langle Y := 6, \sigma[3/X] \rangle$ (计算第二个赋值右侧)
$\to_1 \sigma[3/X][6/Y]$ (最终终止状态为 $\sigma$)


题目 2:带有复杂计算的顺序执行

题目:设 $\sigma(X) = 0$,写出 $X := X + 1; X := X + 2$ 的非变种小步语义格局变换。

答案
$\langle X := X + 1; X := X + 2, \sigma \rangle$
$\to_1 \langle X := 0 + 1; X := X + 2, \sigma \rangle$
$\to_1 \langle X := 1; X := X + 2, \sigma \rangle$
$\to_1 \langle X := X + 2, \sigma[1/X] \rangle$
$\to_1 \langle X := 1 + 2, \sigma[1/X] \rangle$
$\to_1 \langle X := 3, \sigma[1/X] \rangle$
$\to_1 \sigma[1/X][3/X]$ (也可写为 $\sigma[3/X]$)


三、 命令语句 Com(变种模式)

注:变种模式下,所有命令最终都归约至 $\langle \text{skip}, \sigma \rangle$。

题目 1:基础赋值变换

题目:设 $\sigma$ 为初始状态,写出命令 $X := 5; Y := 1$ 的变种小步语义格局变换。

答案
$\langle X := 5; Y := 1, \sigma \rangle$
$\to_1 \langle \text{skip}; Y := 1, \sigma[5/X] \rangle$ (变种:赋值先产生 skip)
$\to_1 \langle Y := 1, \sigma[5/X] \rangle$ (skip 规则:消除序列左侧的 skip)
$\to_1 \langle \text{skip}, \sigma[5/X][1/Y] \rangle$ (最终终止于 $\langle \text{skip}, \sigma \rangle$)


题目 2:If 分支语句(变种模式)

题目:假设 $\sigma(X) = 2$,写出命令 $\text{if } X > 1 \text{ then } Y := 1 \text{ else } Y := 0$ 的变种变换。

答案
$\langle \text{if } X > 1 \text{ then } Y := 1 \text{ else } Y := 0, \sigma \rangle$
$\to_1 \langle \text{if } 2 > 1 \text{ then } Y := 1 \text{ else } Y := 0, \sigma \rangle$ (变量替换)
$\to_1 \langle \text{if true then } Y := 1 \text{ else } Y := 0, \sigma \rangle$ (布尔求值)
$\to_1 \langle Y := 1, \sigma \rangle$ (If-True 选择分支)
$\to_1 \langle \text{skip}, \sigma[1/Y] \rangle$ (变种赋值终止)


题目 3:While 循环的展开(变种模式)

题目:假设 $\sigma(X) = 2$,写出命令 $\text{while } X = 2 \text{ do } X := 0$ 的变换前几步。
注意:While 的第一步是展开为 If 语句。

答案
$\langle \text{while } X = 2 \text{ do } X := 0, \sigma \rangle$
$\to_1 \langle \text{if } X = 2 \text{ then } (X := 0; \text{while } X = 2 \text{ do } X := 0) \text{ else skip}, \sigma \rangle$ (While 展开规则)
$\to_1 \langle \text{if } 2 = 2 \text{ then } (X := 0; \text{while } X = 2 \text{ do } X := 0) \text{ else skip}, \sigma \rangle$ (变量替换)
$\to_1 \langle \text{if true then } (X := 0; \text{while } X = 2 \text{ do } X := 0) \text{ else skip}, \sigma \rangle$ (Bexp 求值)
$\to_1 \langle X := 0; \text{while } X = 2 \text{ do } X := 0, \sigma \rangle$ (If-True 选择)
$\to_1 \langle \text{skip}; \text{while } X = 2 \text{ do } X := 0, \sigma[0/X] \rangle$ (赋值产生 skip)
$\to_1 \langle \text{while } X = 2 \text{ do } X := 0, \sigma[0/X] \rangle$ (消除序列开头的 skip)
(后续会再次进入 While 展开,并因为 $0 = 2$ 为 false 而终止)


四、 综合复杂练习

多变量与逻辑与(非变种模式)

题目:设 $\sigma = \sigma_{init}[2/X][2/Y]$,写出命令 $Z := 0; \text{if } X = Y \wedge Y = 2 \text{ then } Z := 1$ 的变换过程。

答案
$\langle Z := 0; \text{if } X = Y \wedge Y = 2 \text{ then } Z := 1, \sigma \rangle$
$\to_1 \langle \text{if } X = Y \wedge Y = 2 \text{ then } Z := 1, \sigma[0/Z] \rangle$ (完成第一个赋值)
$\to_1 \langle \text{if } 2 = Y \wedge Y = 2 \text{ then } Z := 1, \sigma[0/Z] \rangle$ (If 条件内部:替换 X)
$\to_1 \langle \text{if } 2 = 2 \wedge Y = 2 \text{ then } Z := 1, \sigma[0/Z] \rangle$ (If 条件内部:替换 Y)
$\to_1 \langle \text{if true} \wedge Y = 2 \text{ then } Z := 1, \sigma[0/Z] \rangle$ (计算第一个等于)
$\to_1 \langle \text{if true} \wedge 2 = 2 \text{ then } Z := 1, \sigma[0/Z] \rangle$ (继续替换 Y)
$\to_1 \langle \text{if true} \wedge \text{true then } Z := 1, \sigma[0/Z] \rangle$ (计算第二个等于)
$\to_1 \langle \text{if true then } Z := 1, \sigma[0/Z] \rangle$ (逻辑与计算)
$\to_1 \langle Z := 1, \sigma[0/Z] \rangle$ (If-True 选择)
$\to_1 \sigma[0/Z][1/Z]$ (最终终止状态)


👉 点击这里阅读下一篇:《等价性证明练习》


Author: linda1729
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source linda1729 !
评论
  TOC