程序验证(八):形式语义

本文深入探讨了程序验证中的形式语义,通过介绍玩具语言Imp的语法和语义,阐述了操作语义(包括结构操作语义和自然语义)的概念、特点和等价性,并提供了具体的例子和推导规则,展示了不同语义描述方法在理解程序执行效果中的作用。
摘要由CSDN通过智能技术生成

程序验证(八):形式语义

语义描述方法

如下:

  • 操作语义:用抽象机描述程序执行引起的状态改变,关心状态改变是怎样产生的,与语言的实现关系紧密。
  • 指称语义:使程序执行的效果对应数学对象,只关心程序执行的效果,不关心其是怎样产生的。
  • 公理语义:将程序的语义性质表示为命题,采用数理逻辑的方法研究。

引入玩具语言Imp

语法范畴

如下:

  • 数字集 N u m Num Num,用 n n n表示数字
  • 变元集 V a r Var Var,用 x x x表示变元
  • 算术表达式集 A e x p Aexp Aexp,用 a a a表示算术表达式
  • 布尔表达式集 B e x p Bexp Bexp,用 b b b表示布尔表达式
  • 语句集 C o m Com Com,用 c c c表示语句

语法

如下:
a ∈ A E x p : : = n ∈ Z ∣ x ∈ V a r ∣ a 1 + a 2 ∣ a 1 ∗ a 2 ∣ a 1 − a 2 a\in AExp::=n\in \mathbb{Z} |x\in Var|a_1+a_2|a_1*a_2|a_1-a_2 aAExp::=nZxVara1+a2a1a2a1a2
b ∈ B E x p : : = t r u e ∣ f a l s e ∣ a 1 = a 2 ∣ a 1 ≤ a 2 ∣ ¬ b ∣ b 1 ∧ b 2 b\in BExp::=\mathbf{true}|\mathbf{false}|a_1=a_2|a_1\le a_2|\neg b|b_1\wedge b_2 bBExp::=truefalsea1=a2a1a2¬bb1b2
c ∈ C o m : : = s k i p ∣ x : = a ∣ c 1 ; c 2 ∣ i f   b   t h e n   c 1   e l s e   c 2 ∣ w h i l e   b   d o   c c\in Com::=\mathbf{skip}|x:=a|c_1;c_2|\mathbf{if}~b~\mathbf{then}~c_1~\mathbf{else}~c_2|\mathbf{while}~b~\mathbf{do}~c cCom::=skipx:=ac1;c2if b then c1 else c2while b do c

表达式语义

表达式的语义

采用二进制 n : : = 0 ∣ 1 ∣ n 0 ∣ n 1 n::=0|1|n0|n1 n::=01n0n1
语义函数 N : N u m → Z N: Num\to\mathbb{Z} N:NumZ

  • N [ 0 ] = 0 N[0]=0 N[0]=0
  • N [ 1 ] = 1 N[1]=1 N[1]=1
  • N [ n 0 ] = 2 ∗ N [ 0 ] N[n0]=2*N[0] N[n0]=2N[0]
  • N [ n 1 ] = 2 ∗ N [ n ] + 1 N[n1]=2*N[n]+1 N[n1]=2N[n]+1

状态

环境是从变元集到整数集的函数 E n v = V a r → Z Env=Var\to \mathbb{Z} Env=VarZ

  • σ = [ x ↦ 5 , y ↦ 7 , z ↦ 0 ] \sigma = [x\mapsto 5,y\mapsto 7,z\mapsto 0] σ=[x5,y7,z0],即 σ x = 5 , σ y = 7 , σ z = 0 \sigma x=5,\sigma y=7,\sigma z=0 σx=5,σy=7,σz=0
  • σ ′ = σ [ x ↦ 7 ] \sigma' =\sigma [x\mapsto 7] σ=σ[x7],则 σ ′ x = 7 \sigma' x=7 σx=7,对于不同于 x x x的变元 y y y σ ′ y = σ y \sigma' y=\sigma y σy=σy
    状态是一个二元组 ⟨ c , σ ⟩ \langle c,\sigma\rangle c,σ,其中 σ \sigma σ是当前变量的赋值, c c c为下一条被执行的语句。

算术表达式的语义

语义函数 A : A e x p → ( E n v → Z ) A: Aexp\to (Env\to \mathbb{Z}) A:Aexp(EnvZ):

  • A [ n ] σ = N [ n ] A[n]\sigma = N[n] A[n]σ=N[n]
  • A [ x ] σ = σ x A[x]\sigma = \sigma x A[x]σ=σx
  • A [ a 1 + a 2 ] σ = A [ a 1 ] σ + A [ a 2 ] σ A[a_1+a_2]\sigma = A[a_1]\sigma +A[a_2]\sigma A[a1+a2]σ=A[a1]σ+A[a2]σ
  • A [ a 1 ∗ a 2 ] σ = A [ a 1 ] σ ∗ A [ a 2 ] σ A[a_1*a_2]\sigma = A[a_1]\sigma *A[a_2]\sigma A[a1a2]σ=A[a1]σA[a2]σ
  • A [ a 1 − a 2 ] σ = A [ a 1 ] σ − A [ a 2 ] σ A[a_1-a_2]\sigma = A[a_1]\sigma -A[a_2]\sigma A[a1a2]σ=A[a1]σA[a2]σ

布尔表达式的语义

语义函数 B : B e x p → ( E n v → T ) B:Bexp\to (Env\to T) B:Bexp(EnvT)

  • B [ t r u e ] σ = t r u e B[true]\sigma = \mathbf{true} B[true]σ=true
  • B [ f a l s e ] σ = f a l s e B[false]\sigma = \mathbf{false}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值