Formal validation 笔记 - building boolean formula

Formal Model

state:状态,系统在某一时刻的变量的值。
transition: 变迁(转移),给定状态下,行为发生前后的变化。
computation:计算,无限状态序列变迁的过程。
Kripke structure (KS):先把程序转化成一阶逻辑公式,再转换成KS(4-tuple),定义 M = ( S , S 0 , R , L ) M=(S, S0, R, L) M=(S,S0,R,L),其中
A P AP AP: (atomic propositions)原子命题的集合。
S S S: 状态的有限集合。
S 0 ⊆ S S_0\sube S S0S: 初始状态集合。
R ⊆ S × S R\sube S\times S RS×S (笛卡尔乘积的)子集,一个total的变迁
(Total定义:每个 s ∈ S,存在 s’ ∈ S,如此的R(s,s’))
L : S → 2 A P L: S\to 2^{AP} L:S2AP 标签函数,标识某状态下的。

举例:
在这里插入图片描述
A P = { a , b , c } AP=\{ a,b,c \} AP={a,b,c} (所有)
S = { s 0 , s 1 , s 2 } S=\{s0, s1,s2\} S={s0,s1,s2} (图中圆圈所示)
s 0 = { a , b } s_0=\{a,b\} s0={a,b}(图中s0)
R ( s 0 , s 1 ) = 箭 头 1 , R ( s 0 , s 2 ) = 箭 头 2 , R ( s 1 , s 2 ) = 箭 头 3 , R ( s 2 , s 0 ) = 箭 头 4 R(s_0,s_1)=箭头1,R(s_0,s_2)=箭头2,R(s_1,s_2)=箭头3,R(s_2,s_0)=箭头4 R(s0,s1)=1R(s0,s2)=2R(s1,s2)=3R(s2,s0)=4
L ( s 0 ) = { a , b } , L ( s 1 ) = { a , c } , L ( s 2 ) = { b } L(s_0)=\{a,b\},L(s_1)=\{a,c\},L(s_2)=\{b\} L(s0)={a,b}L(s1)={a,c}L(s2)={b}

一阶逻辑公式

  • V = { v 1 , … , v n } V=\{v_1,…,v_n\} V={v1,,vn}是变量的集合,如: < v 1 ← 2 , v 2 ← 3 , v 3 ← 5 > <v_1\larr2, v_2\larr3, v_3\leftarrow5> <v12,v23,v35>,将其公式化: ( v 1 = 2 ) ∧ ( v 2 = 3 ) ∧ ( v 3 = 5 ) (v_1=2) \land(v_2=3) \land (v_3=5) (v1=2)(v2=3)(v3=5)
  • V ′ = { < v 1 ← 1 , v 2 ← 5 , v 3 ← 4 > } V'=\{<v_1\larr 1, v_2\larr 5, v_3\leftarrow 4>\} V={<v11,v25,v34>},公式化为 ( v 1 ′ = 1 ) ∧ ( v 2 ′ = 5 ) ∧ ( v 3 ′ = 4 ) (v_1'=1 ) \land (v_2'= 5) \land (v_3'= 4) (v1=1)(v2=5)(v3=4)
  • 那么,其变迁为表示为: R ( V , V ′ ) ≡ ( v 1 = 2 ∧ v 2 = 3 ∧ v 3 = 5 ) ∧ ( v 1 ′ = 1 ∧ v 2 ′ = 5 ∧ v 3 ′ = 4 ) R(V, V' )\equiv (v_1=2 \land v_2=3 \land v_3=5) \land(v_1' = 1 \land v_2'= 5 \land v_3'= 4) R(V,V)(v1=2v2=3v3=5)(v1=1v2=5v3=4)
  • 注:其真值不一定为真。

一阶逻辑公式的KS

直接举例:
V = { x , y } , 值 域 为 { 0 , 1 } V=\{x,y\} , 值域为 \{0,1\} V={x,y},{0,1}
S 0 ( x , y ) ≡ x = 1 ∧ y = 1 S_0(x,y)\equiv x=1\land y=1 S0(x,y)x=1y=1
Transition: R ( x , y , x ′ , y ′ ) ≡ x ′ = ( x + y ) m o d 2 ∧ y ′ = y R(x,y,x',y')\equiv x'=(x+y) mod 2 \land y'=y R(x,y,x,y)x=(x+y)mod2y=y
K S = ( S , S 0 , R , L ) ? KS=(S,S_0,R,L)? KS=(S,S0,R,L)

题中S集合有:
S 0 ( x , y ) ≡ x = 1 ∧ y = 1 S_0(x,y)\equiv x=1\land y=1 S0(x,y)x=1y=1
S 1 ( x , y ) ≡ x ′ = 0 ∧ y = 1 S_1(x,y)\equiv x'=0 \land y=1 S1(x,y)x=0y=1
S 2 ( x , y ) ≡ x ′ = 0 ∧ y = 0 S_2(x,y)\equiv x'=0 \land y=0 S2(x,y)x=0y=0
S 3 ( x , y ) ≡ x ′ = 1 ∧ y = 0 S_3(x,y)\equiv x'=1 \land y=0 S3(x,y)x=1y=0
题中的变迁有:
S0–>S1
S1–>S0
S2–>S2
S3–>S3

KS图:(flowchart画的不好)

s0: x=1,y=1
s1: x=0,y=1
s2: x=1,y=0
s3: x=0,y=1

注意:

  1. 状态变迁时,其中一个子变量的变迁,用函数表示为: v i → v i ′ = f i ( V ) v_i \to v_i' = f_i(V) vivi=fi(V)
  2. R i ( V , V ′ ) ≡ f i ( V ) R_i(V, V') \equiv f_i(V) Ri(V,V)fi(V)
  3. R ( V , V ’ ) ≡ R 0 ( V , V ′ ) ∧ R 1 ( V , V ′ ) ∧ … ∧ R n − 1 ( V , V ′ ) R(V, V’) \equiv R_0(V, V') \land R_1(V, V') \land… \land R_{n-1}(V, V') R(V,V)R0(V,V)R1(V,V)Rn1(V,V)

代码的状态变迁

对于一段代码,我们用 P L P^L PL进行标记:

  1. 简单语句(如赋值;skip;wait,lock,unlock等), P L = P P^L=P PL=P
    assignment:
    C ( l , v ← e , l ′ ) ≡ p c = l ∧ p c ′ = l ′ ∧ v ′ = e ∧ s a m e ( V { v } ) C (l, v\leftarrow e, l' )\equiv pc=l \land pc'=l' \land v'=e \land same(V\{v\}) C(l,ve,l)pc=lpc=lv=esame(V{v})
    解释:从 l l l 跳到 l ′ l' l, v v v赋值变成了 v ′ v' v, 可以表示为: 执行前 p c pc pc l l l,执行后 p c ′ pc' pc l ′ l' l v v v变成了 e e e V V V中除了 v v v,其他不变.
    skip:
    C ( l , s k i p , l ′ ) ≡ p c = l ∧ p c ′ = l ′ ∧ s a m e ( V ) C (l, skip, l' )\equiv pc=l \land pc'=l' \land same(V) C(l,skip,l)pc=lpc=lsame(V)
    解释:skip语句前后没什么变化,只是语句从 l l l跳到了 l ′ l' l.

  2. 复合多条语句( P 1 ; P 2 P_1;P_2 P1;P2), P L = P 1 L ; l ′ ′ : P 2 L P^L=P_1^L; l'' : P_2^L PL=P1L;l:P2L
    Sequential composition :
    C ( l , P 1 ; l ′ ′ : P 2 , l ′ ) ≡ C ( l , P 1 , l ′ ′ ) ∨ C ( l ′ ′ , P 2 , l ′ ) C (l,P_1; l'':P_2, l' )\equiv C (l, P_1, l'') \lor C (l'',P_2, l' ) C(l,P1;l:P2,l)C(l,P1,l)C(l,P2,l)

  3. 条件语句( i f   b   t h e n   P 1   e l s e   P 2   e n d i f if\ b\ then\ P_1\ else\ P_2\ endif if b then P1 else P2 endif),
    P L = i f   b   t h e n   l 1 : P 1 L   e l s e   l 2 : P 2 L   e n d i f P^L=if\ b\ then\ l_1: P_1^L\ else\ l_2:P_2^L\ endif PL=if b then l1:P1L else l2:P2L endif
    conditional:
    C ( l , i f   b   t h e n   l 1 : P 1   e l s e   l 2 : P 2   e n d i f , l ′ ) C (l, if\ b\ then\ l_1 : P_1\ else\ l_2:P_2\ endif, l') C(l,if b then l1:P1 else l2:P2 endif,l)
    转化为如下四条语句:
    b 真: p c = l ∧ p c ′ = l 1 ∧ b ∧ s a m e ( V ) pc=l \land pc'=l_1 \land b \land same(V) pc=lpc=l1bsame(V)
    b 假: p c = l ∧ p c ′ = l 1 ∧ ¬ b ∧ s a m e ( V ) pc=l \land pc'=l_1 \land \neg b \land same(V) pc=lpc=l1¬bsame(V)
    b 真则执行: C ( l 1 , P 1 , l ′ ) C (l_1, P_1, l') C(l1,P1,l)
    b 假则执行: C ( l 2 , P 2 , l ′ ) C (l_2, P_2, l' ) C(l2,P2,l)

  4. 循环语句(while b do P 1 P_1 P1 endwhile),
    P 1 P_1 P1 前标记为 l 1 l_1 l1
    C ( l , w h i l e   b   d o   l 1 : P 1   e n d w h i l e , l ′ ) C (l, while\ b\ do\ l_1: P_1\ endwhile, l' ) C(l,while b do l1:P1 endwhile,l)
    转化为如下3条语句:
    b真则 l → l 1 l \to l_1 ll1:① p c = l ∧ p c ′ = l 1 ∧ b ∧ s a m e ( V ) pc=l \land pc'=l_1 \land b \land same(V) pc=lpc=l1bsame(V)
    b假则跳出循环 l → l ′ l \to l' ll: ② p c = l 1 ∧ p c ′ = l ′ ∧ ¬ b ∧ s a m e ( V ) pc=l_1 \land pc'=l ' \land \neg b \land same(V) pc=l1pc=l¬bsame(V)
    唯一的一个Transition procedure ,是 P 1 P_1 P1执行前 l 1 l_1 l1到执行后 l l l(因为执行完会回到while去判断真假):③ C ( l 1 , P 1 , l ) C (l_1, P_1, l ) C(l1,P1,l)

题目:

building boolean formula for the following program, while
V = { x , y , z } ,   i n i t i a l   v a l u e : x = y = z = 0 V=\{x,y,z\},\ initial\ value: x=y=z=0 V={x,y,z}, initial value:x=y=z=0
Program
x = y + 1 ; z = z + 2 ; x=y+1; z=z+2; x=y+1;z=z+2;
f o r ( y ; y < = 3 ; y + + ) for(y; y<=3; y++) for(y;y<=3;y++)
    i f   x < y   t h e n   x + + ;   e l s e   y + + ; if\ x<y\ then\ x++;\ else\ y++; if x<y then x++; else y++;

三句话分别为:
C ( l , x ′ = y + 1 , l 1 ) ∨ C ( l 1 , z ′ = z + 2 , l 2 ) C (l, x'=y+1, l_1) \lor C (l_1, z'=z+2, l_2) C(l,x=y+1,l1)C(l1,z=z+2,l2)
② for循环转化为while语句: C ( l 2 , w h i l e   ( y < = 3 )   d o   l 3 ; l 4 : y + + ;   e n d w h i l e , l ′ ) C (l_2, while\ (y<=3)\ do\ l_3; l_4: y++; \ endwhile, l' ) C(l2,while (y<=3) do l3;l4:y++; endwhile,l)
C ( l 3 , i f   ( x < y )   t h e n   l 5 : ( x + + ) ;   e l s e   l 6 : ( y + + ) ; e n d i f , l 4 ) C( l_3, if\ (x<y)\ then\ l_5:(x++);\ else\ l_6:(y++);endif, l_4) C(l3,if (x<y) then l5:(x++); else l6:(y++);endif,l4)

答案:

p c = l ∧ p c ’ = l 1 ∧ x ’ = y + 1 ∧ s a m e ( V / { x } ) pc= l ∧ pc’=l_1 ∧ x’=y+1 ∧ same(V/\{x\}) pc=lpc=l1x=y+1same(V/{x})

p c = l 1 ∧ p c ’ = l 2 ∧ z ’ = z + 2 ∧ s a m e ( V / { z } ) pc= l_1 ∧ pc’=l_2 ∧ z’=z+2 ∧ same(V/\{z\}) pc=l1pc=l2z=z+2same(V/{z})

p c = l 2 ∧ p c ’ = l 3 ∧ y < = 3 ∧ s a m e ( V ) pc= l_2 ∧ pc’=l_3 ∧ y<=3 ∧ same(V) pc=l2pc=l3y<=3same(V)

p c = l 2 ∧ p c ’ = l ’ ∧ ¬ y < = 3 ∧ s a m e ( V ) pc= l_2 ∧ pc’=l’ ∧ \neg y<=3 ∧ same(V) pc=l2pc=l¬y<=3same(V)【⭐️ end】

p c = l 3 ∧ p c ′ = l 5 ∧ x < y ∧ s a m e ( V ) pc=l_3 ∧ pc'=l_5 ∧x<y ∧same(V) pc=l3pc=l5x<ysame(V)

p c = l 3 ∧ p c ′ = l 6 ∧ ¬ x < y ∧ s a m e ( V ) pc=l_3 ∧ pc'=l_6 ∧ \neg x<y ∧same(V) pc=l3pc=l6¬x<ysame(V)

p c = l 5 ∧ p c ′ = l 4 ∧ x ’ = x + 1 ∧ s a m e ( V / { x } ) pc=l_5∧ pc'=l_4 ∧x’=x+1 ∧same(V/\{x\}) pc=l5pc=l4x=x+1same(V/{x})

p c = l 6 ∧ p c ′ = l 4 ∧ y ’ = y + 1 ∧ s a m e ( V / { y } ) pc=l_6∧ pc'=l_4 ∧y’=y+1 ∧same(V/\{y\}) pc=l6pc=l4y=y+1same(V/{y})

p c = l 4 ∧ p c ’ = l 2 ∧ y ’ = y + 1 ∧ s a m e ( V / { y } ) pc= l_4 ∧ pc’=l_2 ∧ y’=y+1 ∧ same(V/\{y\}) pc=l4pc=l2y=y+1same(V/{y}) 【⭐️ 循环中y++】

——未完待续——

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值