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

2024-03-02 14:32
文章标签 形式 语义 程序验证

本文主要是介绍程序验证(八):形式语义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

语义描述方法

如下:

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

引入玩具语言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} B[false]σ=false
  • B [ a 1 = a 2 ] σ = A [ a 1 ] σ = A [ a 2 ] σ B[a_1=a_2]\sigma = A[a_1]\sigma = A[a_2]\sigma B[a1=a2]σ=A[a1]σ=A[a2]σ
  • B [ a 1 ≤ a 2 ] σ = A [ a 1 ] σ ≤ A [ a 2 ] σ B[a_1\le a_2]\sigma = A[a_1]\sigma\le A[a_2]\sigma B[a1a2]σ=A[a1]σA[a2]σ
  • B [ ¬ b ] σ = ¬ B [ b ] σ B[\neg b]\sigma = \neg B[b]\sigma B[¬b]σ=¬B[b]σ
  • B [ b 1 ∧ b 2 ] σ = B [ b 1 ] σ ∧ B [ b 2 ] σ B[b_1\wedge b_2]\sigma = B[b_1]\sigma\wedge B[b_2]\sigma B[b1b2]σ=B[b1]σB[b2]σ

举例

在环境 σ = [ x ↦ 1 , y ↦ 3 ] \sigma = [x\mapsto 1,y\mapsto 3] σ=[x1,y3]下计算表达式 ( x + 2 ) ∗ y (x+2)*y (x+2)y的值
A [ ( x + 2 ) ∗ y ] σ = A [ ( x + 2 ) ] σ ∗ A [ y ] σ = ( A [ x ] σ + A [ 2 ] σ ) ∗ A [ y ] σ = ( 1 + 2 ) ∗ 3 = 9 A[(x+2)*y]\sigma =A[(x+2)]\sigma * A[y]\sigma = (A[x]\sigma +A[2]\sigma) * A[y]\sigma =(1+2)* 3 = 9 A[(x+2)y]σ=A[(x+2)]σA[y]σ=(A[x]σ+A[2]σ)A[y]σ=(1+2)3=9

代入

用算术表达式 a 0 a_0 a0替换算术表达式 a a a中变元 y y y的所有出现得到的算术表达式记为 a [ y ↦ a 0 ] a[y\mapsto a_0] a[ya0]
A [ a [ y ↦ a 0 ] ] σ = A [ a ] ( σ [ y ↦ A [ a 0 ] σ ] ) A[a[y\mapsto a_0]]\sigma = A[a](\sigma [y\mapsto A[a_0]\sigma ]) A[a[ya0]]σ=A[a](σ[yA[a0]σ])
用算术表达式 a 0 a_0 a0替换布尔表达式 b b b中变元 y y y的所有出现得到的布尔表达式记为 b [ y ↦ a 0 ] b[y\mapsto a_0] b[ya0]
B [ b [ y ↦ a 0 ] ] σ = B [ b ] ( σ [ y ↦ A [ a 0 ] σ ] ) B[b[y\mapsto a_0]]\sigma = B[b](\sigma [y\mapsto A[a_0]\sigma]) B[b[ya0]]σ=B[b](σ[yA[a0]σ])

操作语义

概念

包括以下两种:

  • 结构操作语义(小步操作语义):描述执行语句的各步计算如何发生
  • 自然语义(大步操作语义):描述如何得到语句执行终止的最终状态

结构操作语义

结构操作语义强调计算的具体步骤,基于状态之间的迁移关系 → \to 来定义,即
⟨ c , σ ⟩ → ⟨ c ′ , σ ′ ⟩ \langle c,\sigma\rangle\to\langle c',\sigma'\rangle c,σc,σ
意义:语句 c c c从环境 σ \sigma σ执行到中途,这时环境为 σ ′ \sigma' σ,待执行的语句为 c ′ c' c
反复应用上面的迁移关系,直至程序终止状态 ⟨ s k i p , σ ⟩ \langle \mathbf{skip},\sigma\rangle skip,σ
若无状态 ⟨ c ′ , σ ′ ⟩ \langle c',\sigma'\rangle c,σ使得 ⟨ c , σ ⟩ → ⟨ c ′ , σ ′ ⟩ \langle c,\sigma\rangle \to\langle c',\sigma'\rangle c,σc,σ,则称 ⟨ c , σ ⟩ \langle c,\sigma\rangle c,σ是呆滞的(stuck)

Imp的结构操作语义

A s g n : ⟨ x : = a , σ ⟩ → ⟨ s k i p , σ [ x ↦ A [ a ] σ ] ⟩ Asgn:\frac{}{\langle x:=a,\sigma\rangle\to\langle \mathbf{skip},\sigma [x\mapsto A[a]\sigma]\rangle} Asgn:x:=a,σskip,σ[xA[a]σ]
S k i p : n o r u l e Skip:no~rule Skip:no rule
S e q 1 : ⟨ c 1 , σ ⟩ → ⟨ c 1 ′ , σ 1 ′ ⟩ ⟨ c 1 ; c 2 , σ ⟩ → ⟨ c 1 ′ ; c 2 , σ ′ ⟩ Seq1:\frac{\langle c_1,\sigma\rangle\to\langle c'_1,\sigma'_1\rangle}{\langle c_1;c_2,\sigma\rangle\to\langle c'_1;c_2,\sigma'\rangle} Seq1:c1;c2,σc1;c2,σc1,σc1,σ1
S e q 2 : ⟨ s k i p ; c , σ ⟩ → ⟨ c , σ ⟩ Seq2:\frac{}{\langle \mathbf{skip};c,\sigma\rangle\to\langle c,\sigma\rangle} Seq2:skip;c,σc,σ
I f T r u e : ⟨ i f b t h e n c 1 e l s e c 2 , σ ⟩ → ⟨ c 1 , σ ⟩ IfTrue:\frac{}{\langle\mathbf{if}~b~\mathbf{then}~c_1~\mathbf{else}~c_2,\sigma\rangle\to\langle c_1,\sigma\rangle} IfTrue:if b then c1 else c2,σc1,σ
I f F a l s e : ⟨ i f b t h e n c 1 e l s e c 2 , σ ⟩ → ⟨ c 2 , σ ⟩ IfFalse:\frac{}{\langle \mathbf{if}~b~\mathbf{then}~c_1~\mathbf{else}~c_2,\sigma\rangle\to \langle c_2,\sigma\rangle} IfFalse:if b then c1 else c2,σc2,σ
W h i l e : ⟨ w h i l e b d o c , σ ⟩ → ⟨ i f b t h e n ( c ; w h i l e b d o c ) e l s e s k i p , σ While:\frac{}{\langle \mathbf{while}~b~\mathbf{do}~c,\sigma\rangle\to\langle\mathbf{if}~b~\mathbf{then}(c;\mathbf{while}~b~\mathbf{do}~c)\mathbf{else}~\mathbf{skip},\sigma} While:while b do c,σif b then(c;while b do c)else skip,σ

推导序列

语句 c c c从环境 σ \sigma σ开始的推导序列有以下两种形式(记 γ 0 = ⟨ c , σ ⟩ \gamma_0=\langle c,\sigma\rangle γ0=c,σ):

  • 有限状态序列 γ 0 , γ 1 , … , γ k \gamma_0,\gamma_1,\dots ,\gamma_k γ0,γ1,,γk,其中 γ 0 → γ 1 , … , γ k − 1 → γ k \gamma_0\to \gamma_1,\dots,\gamma_{k-1}\to \gamma_k γ0γ1,,γk1γk可以推导得出。 γ k \gamma_k γk的形式为 ⟨ s k i p , σ ′ ⟩ \langle\mathbf{skip},\sigma' \rangle skip,σ或者 γ k \gamma_k γk是呆滞的。
  • 无限状态序列 γ 0 , γ 1 , … \gamma_0,\gamma_1,\dots γ0,γ1,,其中 γ 0 → γ 1 \gamma_0\to \gamma_1 γ0γ1, γ 1 → γ 2 \gamma_1\to\gamma_2 γ1γ2等可以推导得到。
  • γ 0 → γ 1 → ⋯ → γ k \gamma_0\to \gamma_1\to\dots\to\gamma_k γ0γ1γk简记为 γ 0 → ∗ γ k \gamma_0 \to ^{*}\gamma_k γ0γk
确定性

结构操作语义具有确定性:对于任意语句 c c c,从任意环境 σ \sigma σ出发,只要 ⟨ c , σ ⟩ → ⟨ c ′ , σ ′ ⟩ \langle c,\sigma\rangle\to\langle c',\sigma'\rangle c,σc,σ ⟨ c , σ ⟩ → ⟨ c ′ ′ , σ ′ ′ ⟩ \langle c,\sigma\rangle\to\langle c'',\sigma''\rangle c,σc,σ,就有 c ′ = c ′ ′ , σ ′ = σ ′ ′ c'=c'',\sigma'=\sigma'' c=c,σ=σ

终止和循环

若存在从状态 ⟨ c , σ ⟩ \langle c,\sigma\rangle c,σ开始的有限推导序列,则称语句 c c c从环境 σ \sigma σ执行是终止的。
若存在从状态 ⟨ c , σ ⟩ \langle c,\sigma\rangle c,σ开始的无限推导序列,则称语句 c c c从环境 σ \sigma σ执行是循环的。
若语句 c c c从每个环境执行都是终止的,则称语句 c c c总是终止的。
若语句 c c c从每个环境执行都是循环的,则称语句 c c c总是循环的。

语义等价

如果对于任意状态 σ \sigma σ,满足下列条件:

  • 对于任意终止或呆滞格局 ⟨ c ′ , σ ′ ⟩ \langle c',\sigma'\rangle c,σ ⟨ c 1 , σ ⟩ → ∗ ⟨ c ′ , σ ′ ⟩ \langle c_1,\sigma\rangle\to^{*}\langle c',\sigma'\rangle c1,σc,σ,当且仅当 ⟨ c 2 , σ ⟩ → ∗ ⟨ c ′ , σ ′ ⟩ \langle c_2,\sigma\rangle\to^{*}\langle c',\sigma'\rangle c2,σc,σ
  • 存在从 ⟨ c 1 , σ ⟩ \langle c_1,\sigma\rangle c1,σ开始的无限推导序列当且仅当存在从 ⟨ c 2 , σ ⟩ \langle c_2,\sigma\rangle c2,σ开始的无限推导序列
    则称语句 c 1 c_1 c1 c 2 c_2 c2是语义等价的,如语句 c 1 ; ( c 2 ; c 3 ) c_1;(c_2;c_3) c1;(c2;c3)和语句 ( c 1 ; c 2 ) ; c 3 (c_1;c_2);c_3 (c1;c2);c3是语义等价的。
语义函数

可将语句 c c c的意义概括为从 E n v Env Env E n v Env Env的部分函数:
S S O S : C m d → ( E n v ↪ E n v ) S_{SOS} : Cmd\to(Env\hookrightarrow Env) SSOS:Cmd(EnvEnv)
定义 S S O S [ c ] σ = { σ ′ i f ⟨ c , σ ⟩ → ∗ ⟨ s k i p , σ ′ ⟩ u n d e f o t h e r w i s e S_{SOS}[c]\sigma = \begin{cases}\sigma' &if~\langle c,\sigma\rangle\to ^{*}\langle\mathbf{skip}, \sigma'\rangle \\ undef & otherwise \end{cases} SSOS[c]σ={σundefif c,σskip,σotherwise
例如, S S O S [ w h i l e t r u e d o s k i p ] σ = u n d e f S_{SOS}[\mathbf{while}~\mathbf{true}~\mathbf{do}~\mathbf{skip}]\sigma = undef SSOS[while true do skip]σ=undef

自然语义

自然语义关心语句执行对环境的改变。
从环境 σ \sigma σ执行语句 c c c将终止于环境 σ ′ \sigma' σ:
⟨ c , σ ⟩ ⇓ σ ′ \langle c,\sigma\rangle\Downarrow \sigma' c,σσ
规则的一般形式:
⟨ c 1 , σ 1 ⟩ ⇓ σ ′ , … , ⟨ c n , σ n ⟩ ⇓ σ n ′ ⟨ c , σ ⟩ ⇓ σ ′ i f … \frac{\langle c_1,\sigma_1\rangle \Downarrow \sigma',\dots ,\langle c_n,\sigma_n\rangle\Downarrow \sigma'_n}{\langle c,\sigma\rangle \Downarrow \sigma'}if\dots c,σσc1,σ1σ,,cn,σnσnif

Imp的自然语义

B i g A s g n : ⟨ x : = a , σ ⟩ ⇓ σ [ x → A [ a ] σ ] BigAsgn: \frac{}{\langle x:=a,\sigma\rangle \Downarrow \sigma [x\to A[a]\sigma]} BigAsgn:x:=a,σσ[xA[a]σ]
B i g S k i p : ⟨ s k i p , σ ⟩ ⇓ σ BigSkip: \frac{}{\langle \mathbf{skip},\sigma\rangle\Downarrow \sigma} BigSkip:skip,σσ
B i g S e q : ⟨ c 1 , σ 1 ⟩ ⇓ σ 1 ′ ⟨ c 2 , σ 1 ′ ⟩ ⇓ σ 2 ⟨ c 1 ; c 2 , σ 1 ⟩ ⇓ σ 2 BigSeq: \frac{\langle c_1,\sigma_1\rangle\Downarrow \sigma'_1~\langle c_2,\sigma'_1\rangle\Downarrow \sigma_2}{\langle c_1;c_2,\sigma_1\rangle\Downarrow \sigma_2} BigSeq:c1;c2,σ1σ2c1,σ1σ1 c2,σ1σ2
B i g I f T : ⟨ c 1 , σ ⟩ ⇓ σ ′ ⟨ i f b t h e n c 1 e l s e c 2 , σ ⟩ ⇓ σ ′ i f B [ b ] σ = t r u e BigIfT: \frac{\langle c_1,\sigma\rangle \Downarrow \sigma'}{\langle \mathbf{if}~b~\mathbf{then}~c_1~\mathbf{else}~c_2, \sigma\rangle\Downarrow \sigma'} if~B[b]\sigma=\mathbf{true} BigIfT:if b then c1 else c2,σσc1,σσif B[b]σ=true
B i g I f F : ⟨ c 2 , σ ⟩ ⇓ σ ′ ⟨ i f b t h e n c 1 e l s e c 2 , σ ⟩ ⇓ σ ′ i f B [ b ] σ = f a l s e BigIfF: \frac{\langle c_2,\sigma\rangle \Downarrow\sigma'}{\langle\mathbf{if}~b~\mathbf{then}~c_1~\mathbf{else}~c_2,\sigma\rangle\Downarrow\sigma'} if~B[b]\sigma=\mathbf{false} BigIfF:if b then c1 else c2,σσc2,σσif B[b]σ=false
B i g W h i l e F a l s e : ⟨ w h i l e b d o c , σ ⟩ ⇓ σ i f B [ b ] σ = f a l s e BigWhileFalse: \frac{}{\langle\mathbf{while}~b~\mathbf{do}~c,\sigma\rangle\Downarrow\sigma} if~B[b]\sigma=\mathbf{false} BigWhileFalse:while b do c,σσif B[b]σ=false
B i g W h i l e T r u e ⟨ c , σ ⟩ ⇓ σ ′ ⟨ w h i l e b d o c , σ ′ ⟩ ⇓ σ ′ ′ ⟨ w h i l e b d o c , σ ⟩ ⇓ σ ′ ′ i f B [ b ] σ = t r u e BigWhileTrue \frac{\langle c,\sigma\rangle \Downarrow \sigma'~\langle\mathbf{while}~b~\mathbf{do}~c,\sigma'\rangle\Downarrow \sigma''}{\langle\mathbf{while}~b~\mathbf{do}~c,\sigma\rangle\Downarrow \sigma''} if~B[b]\sigma = \mathbf{true} BigWhileTruewhile b do c,σσc,σσ while b do c,σσif B[b]σ=true
每个规则有若干前提和一个结论。称有0个前提的规则为公理,如BigAsgn, BigSkip, BigWhileFalse是公理。
当使用公理和规则得出 ⟨ c , σ ⟩ ⇓ σ ′ \langle c,\sigma\rangle\Downarrow \sigma' c,σσ时,就得到一推导树,树根是 ⟨ c , σ ⟩ ⇓ σ ′ \langle c,\sigma\rangle\Downarrow \sigma' c,σσ,树叶是公理,每个分支点是某规则的结论,而它的儿子是该规则的前提。

终止和循环

若存在环境 σ ′ \sigma' σ使得 ⟨ c , σ ⟩ ⇓ σ ′ \langle c,\sigma\rangle\Downarrow\sigma' c,σσ,则称语句 c c c从环境 σ \sigma σ执行是终止的。
若不存在环境 σ ′ \sigma' σ使得 ⟨ c , σ ⟩ ⇓ σ ′ \langle c,\sigma\rangle\Downarrow \sigma' c,σσ,则称语句 c c c从环境 σ \sigma σ执行是循环的。
若语句 c c c从每个环境执行都是终止的,则称语句 c c c总是终止的。
若语句 c c c从每个环境执行都是循环的,则称语句 c c c总是循环的。

语义等价

如果对于任意环境 σ \sigma σ σ ′ \sigma' σ:
⟨ c 0 , σ ⟩ ⇓ σ ′ ⇔ ⟨ c 1 , σ ⟩ ⇓ σ ′ \langle c_0,\sigma\rangle\Downarrow\sigma' \Leftrightarrow \langle c_1,\sigma\rangle\Downarrow \sigma' c0,σσc1,σσ
则称语句 c 0 c_0 c0 c 1 c_1 c1是语义等价的。

确定性

自然语义具有确定性:对于任意语句 c c c,和任意环境 σ 1 , σ 2 , σ \sigma_1,\sigma_2,\sigma σ1,σ2,σ,只要 ⟨ c , σ ⟩ ⇓ σ 1 \langle c,\sigma \rangle\Downarrow \sigma_1 c,σσ1 ⟨ c , σ ⟩ ⇓ σ 2 \langle c,\sigma\rangle\Downarrow \sigma_2 c,σσ2,就有 σ 1 = σ 2 \sigma_1=\sigma_2 σ1=σ2,即
∀ σ , σ 1 , σ 2 , c . ( ⟨ c , σ ⟩ ⇓ σ 1 ∧ ⟨ c , σ ⟩ ⇓ σ 2 ) → ( σ 1 = σ 2 ) \forall \sigma,\sigma_1,\sigma_2,c.(\langle c,\sigma\rangle\Downarrow\sigma_1\wedge\langle c,\sigma\rangle\Downarrow\sigma_2)\to (\sigma_1 =\sigma_2) σ,σ1,σ2,c.(c,σσ1c,σσ2)(σ1=σ2)

语义函数

可将语句 c c c的意义概括为从 F n v Fnv Fnv E n v Env Env的部分函数:
S n s : C m d → ( E n v ↪ E n v ) S_{ns}: Cmd\to (Env\hookrightarrow Env) Sns:Cmd(EnvEnv)
定义 S n s [ c ] σ = { σ ′ i f ⟨ c , σ ⟩ ⇓ σ ′ u n d e f o t h e r w i s e S_{ns}[c]\sigma =\begin{cases} \sigma' &if~\langle c,\sigma\rangle\Downarrow\sigma'\\undef & otherwise\end{cases} Sns[c]σ={σundefif c,σσotherwise

两种语义的对比

等价性
对于语言Imp的每个语句 c c c,任意环境 σ \sigma σ σ ′ \sigma' σ,若 ⟨ c , σ ⟩ ⇓ σ ′ \langle c,\sigma\rangle\Downarrow \sigma' c,σσ,则 ⟨ c , σ ⟩ → ∗ ⟨ s k i p , σ ′ ⟩ \langle c,\sigma\rangle\to^{*}\langle\mathbf{skip},\sigma'\rangle c,σskip,σ
对于语言Imp的每个语句 c c c,任意环境 σ \sigma σ σ ′ \sigma' σ,若 ⟨ c , σ ⟩ → k ⟨ s k i p , σ ′ ⟩ \langle c,\sigma\rangle\to^k\langle\mathbf{skip},\sigma'\rangle c,σkskip,σ,则 ⟨ c , σ ⟩ ⇓ σ ′ \langle c,\sigma\rangle\Downarrow\sigma' c,σσ
对于语言Imp的每个语句 c c c
S n s [ c ] = S S O S [ c ] S_{ns}[c]=S_{SOS}[c] Sns[c]=SSOS[c]

这篇关于程序验证(八):形式语义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766430

相关文章

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

软文发稿相比其他广告形式有哪些持续性优势?

软文发稿在品牌宣发中具有显著的持续性优势,特别是在与其他广告形式的比较中更能体现这些特点。凭借其潜移默化的影响力、增强品牌权威性和公信力、持续性的曝光优势、精准触达目标受众的能力、强互动性与引导性,以及较高的性价比,已经成为品牌推广不可或缺的手段 一 长期存在与持续曝光 长时间的内容可见性     软文发表后,通常会长时间存在于各种平台上,无论是官网、博客、行业网站还是社交媒体帖子。读

【python 爬虫】python如何以request payload形式发送post请求

普通的http的post请求的请求content-type类型是:Content-Type:application/x-www-form-urlencoded, 而另外一种形式request payload,其Content-Type为application/json import jsonurl = 'https://api.github.com/some/endpoint'payload

C++11 ---- 右值引用和移动语义

文章目录 1 左值引用和右值引用2. 左值引用与右值引用总结3. 右值引用使用场景和意义4. 再谈移动构造函数和移动赋值运算符重载5. 关键字default 和 delete6. move函数7. 完美转发 1 左值引用和右值引用 之前的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以在C++11之前的引用都叫做左值引用。无论左值引用还是右值引用,都是给对

Delphi 中三种回调函数形式解析

Delphi 支持三种形式的回调函数: 全局函数这种方式几乎是所有的语言都支持的,类的静态函数也可以归为此类,它保存的只是一个函数的代码起始地址指针( Pointer )。在 Delphi 中声明一般为: 1 TXXX = procedure / function (参数列表 ) ; 类的成员函数类的成员函数作为回调函数,与全局函数相比,需要关联具体的类的实例,所以它

常见的 Linux 命令大全(表格形式)

常见的 Linux 命令大全 Linux 是一个功能强大的操作系统,其强大的命令行界面(CLI)使得系统管理和操作变得非常灵活和高效。这里将介绍一些常见的 Linux 命令,帮助我们在日常工作中更好地使用和管理 Linux 系统。 命令功能ls列出目录内容cd切换目录cp复制文件或目录mv移动或重命名文件rm删除文件或目录mkdir创建目录rmdir删除空目录touch创建空文件或更新文件时间

app版本更新,通知形式显示安装包下载进度

也是公司的项目需要,就稍微研究了下,参考网上一些不错的思路,但其适用版本都比较早,所以通知做了适配了Android 8.0,及权限问题等问题。 原理;下载apk过程中,发起一个通知,并不断发起最新进度的相同ID的通知,覆盖上一个通知,达到显示当前下载进度的效果。 demo已上传:https://download.csdn.net/download/u013370255/10603681 下面

信息安全发展阶段与形式

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 0x01:信息安全的发展阶段 信息安全的发展阶段可以参照下面的思维导图: 0x02:我国的信息安全形式 2013 年,“棱镜门” 事件在全球持续发酵,隐藏在互联网背后的国家力量和无所不在的 “监控” 之手,引起舆论哗然和网络空间的连锁反应。全球范围内陡然上升的网络攻击威胁,导致各国对信息安全的重视程度急

H264的句法和语义(二)

1.2 句法元素的分层结构 1.2.1 句法元素与变量 编码器将数据编码为句法元素然后依次发送。在解码器端,通常要将句法元素作求值计算,得出一些中间数据,这些中间数据就是H.264定义的变量。 图1 从句法元素解出变量 pic_width_in_mbs_minus1 是解码器直接从码流中提取的句法元素,这个句法元素表征图像的宽度以宏块为单位。我们看到,为了