8Hoare的公理化方法.docx
- 文档编号:24649608
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:10
- 大小:36.84KB
8Hoare的公理化方法.docx
《8Hoare的公理化方法.docx》由会员分享,可在线阅读,更多相关《8Hoare的公理化方法.docx(10页珍藏版)》请在冰豆网上搜索。
8Hoare的公理化方法
8.Hoare的公理化方法
该方法的主要思想是给出公理系统,包含赋值公理规则、复合推理规则、条件推理规则、循环推理规则和推论规则。
8.1Hoare逻辑和Hoare演算
定义8.1(Hoare逻辑的语法)
令B是谓词逻辑的基,B上的Hoare公式是形如{p}S{q}的表达式,其中p,qWFFB是谓词逻辑里的公式,SL2B是一个循环程序。
基B上的Hoare公式全体记为HFB。
定义8.2(Hoare逻辑的语义)
给定谓词逻辑的基B,令I是B的一个解释,是相应的状态集合。
每个Hoare公式{p}S{q}HFB都被一语义范函,亦记为I,映射成一个函数:
I({p}S{q}):
Bool,此函数定义为:
对于,
I({p}S{q})()=true当且仅当
若I(p)()=true且MI(S)()有定义,则有I(q)(MI(S)())=true。
RMK.
(1)每当I(p)()为假或MI(S)()没定义,I({p}S{q})()就为真。
这就是说,“Hoare公式{p}S{q}在某解释下恒真”恰恰就是说“S关于公式p和q是部分正确的”。
(2)程序的含义MI(S)有操作语义和指称语义之分。
与谓词逻辑类似,有以下符号记法:
⊨I{p}S{q}“Hoare公式在解释I下恒真”
⊨{p}S{q}“Hoare公式在解释I下逻辑恒真”
W⊨{p}S{q}“Hoare公式是公式集合WWFFB的逻辑结果”
例8.3
(1)在通常的解释I下,Hoare公式{x5}x:
=2*x{x20}成真的条件是什么?
对于某状态,I({x5}x:
=2*x{x20})()=true
iffI({x5}()=false,或I({x20}(MI(x:
=2*x)())=true
iff(x)5,或MI(x:
=2*x)()(x)20
iff(x)5,或()(x)10
(2)证明:
在通常的解释I下,⊨I{true}whilex10dox:
=x+1od{x=10}。
令whilex10dox:
=x+1od是循环程序S。
根据Hoare公式的语义定义,只需证得:
对于任意状态,或MI(S)()没定义,或I({p}S{q})()为真,就足够了。
显然要么(x)10,要么(x)10。
若(x)10则MI(S)()没定义;若(x)10则MI(S)()(x)=10。
(3)证明:
{y+1y}⊨{true}x:
=y+1{xy}
对于任意解释I和任意状态,
I(xy)(MI(x:
=y+1)())=true
iffI(xy)([x/I(y+1)()])=true
iffI(y+1y)()=true(根据代入定理)iffI是{y+1y}的模型。
8.1.1Hoare演算
我们知道,演算的含义就是从已知的恒真公式(如公理)推出更多的结论(如定理)。
一、赋值公理
现在要研究的是形如{p}x:
=t{q}的Hoare公式,具体要研究其中的公式p和q之间有何关系?
赋值公理就是给出它们之间的具体关系。
作为例子我们来考虑{x0}x:
=x+1{x1}。
为了便于讨论,不妨把变量x的旧值(执行前)表示为x,把新值表示为x。
现在可把本例的Hoare公式视为如下公式:
x0x=x+1x1
注意,该逻辑式由三部分组成,其一是前置条件x0,其二是变量的新老值间的关系式,其三是后置条件x1,并且前置条件只含老值x,而后置条件只含新值x。
新旧关系式中即包含新值也包含旧值。
从上述分析不难看到,如果从新老值的关系式求出新值,并将它代入到后置条件里,x+11,则会得到只由老值组成的前置条件;同样,如果从新老值的关系式中求出老值,并将它代入到前置条件中,x10,则会得到只由新值组成的后置条件式。
这就是从前置条件求后置条件和从后置条件求前置条件的问题。
这里的一个关键问题是,如何从新老值的等式求出新值或老值。
显然,求新值是非常简单的事情,因此,从后置条件求前置条件是较容易的事情;但想从前置条件求后置条件,有时并不那么容易,因为这时需要通过求反函数的方法来求老值。
如果反函数是容易求到的,那么从前置条件求后置条件也变成容易的事情。
据上述讨论,我们不难理解所给出的下面赋值公理。
(i)赋值公理
{pxt}x:
=t{p}对于所有pWFFB,xV,tTB。
这条公理正是采用了从后置条件求前置条件的思路。
考虑下面几个验证公式:
1){x=0}x:
=x+1{x=1}
2){x0}x:
=x+1{x1}
3){x0}x:
=x+1{x0}
4){x0}y:
=x+1{x0y1}
它们都是恒真的Hoare公式,即前面均可带上“⊨”。
但它们并不都可从赋值公理直接导出(其中的公式3)不能从赋值公理直接导出)。
二、复合语句规则
考虑形如{p}S1;S2{q}的验证公式。
显然,如果存在某个r,使公式{p}S1{r}和{r}S2{q}成立,则在S1的入口处p的成立,能保证在S2的出口处q的成立。
故复合语句的规则可如下:
(ii)复合语句规则
{p}S1{r},{r}S2{q}对于所有p,q,rWFFB,S1,S2L2B
{p}S1;S2{q}
三、条件语句规则
考虑形如{p}ifethenS1elseS2fi{q}的Hoare公式。
条件语句将产生一条相应的推理规则,称之为条件规则。
从条件语句的入口到出口的路有两条,一是条件表达式e为真的路,一是e为假的路。
经过这两条路的条件分别为pe和pe。
故如果有:
peq和peq
则在出口处q自然成立。
(iii)条件语句规则
{pe}S1{q},{pe}S2{q}对于所有p,qWFFB,eQFFB,S1,S2L2B
{p}ifethenS1elseS2fi{q}
四、循环语句规则
最后考虑循环语句的规则。
假设有循环语句whileedoSod,令当前状态为,则循环的执行过程是:
(用)计算e的值;检查它是否为真?
若为真则执行S并重复执行上述过程;若为假,则循环将终止。
由此可知在循环的出口处条件e一定满足,即它是后置条件中的一部分。
另外我们还能注意到,如果有一断言p满足“在执行循环体之前p成立,则执行S后p仍然成立”,即有性质{pe}S{p},则在循环的出口处p也成立。
p
e
pe
pe
S
根据上述讨论,可给出下面所示的循环语句规则。
(iv)循环语句规则
{pe}S{p}对于所有pWFFB,eQFFB,SL2B
{p}whileedoSod{pe}
五、推论规则
假设已知公式{p}S{q}成立,并且有qq,pp,即可以强化前置条件,或可以弱化后置条件,则新的公式{p}S{q}更应该成立。
于是可给出下面所示的一条推论规则。
(v)推论规则
pp,{p}S{q},qq对于所有p,q,p,qWFFB,SL2B
{p}S{q}
派生规则(derivedrule):
若存在从谓词逻辑所有的逻辑恒真公式和{s1,…,sn}到s的一个演绎,则称是一条
派生规则。
(I)对于所有p,qWFFB,xV,tTB,
pqxt
{p}x:
=t{q}
(II)对于所有p0,…,pnWFFB,S1,…,SnL2B(n2)
{p0}S1{p1},{p1}S2{p2},…,{pn-1}Sn{pn}
{p0}S1;…;Sn{pn}
(III)对于所有p,q,rWFFB,eQFFB,SL2B
pr,{re}S{r},(re)q
{p}whileedoSod{q}
定义(循环不变式)
设whileedoSod是循环语句,eQFFB,且有⊨{re}S{r}
则称r为该循环语句的不变式(invariant)。
定理(循环不变式的合取式也是一个循环不变式)
若r和r是whileedoSod的循环不变式,则rr是循环不变式。
证明:
只需证明⊨{rre}S{rr}。
(这是比较直观的问题,但又不是显然的问题,这需要证明,因为在强化前置条件的同时强化了后置条件)。
具体证明:
任一不等于的都使下式成立:
I(rre)I(rr)(MI(S)())
RMK.
这里要注意的有两点:
一是循环不变式并不保证执行循环体之前一定成立,它只保证“如果在执行循环体之前成立,则执行后也成立”。
二是循环不变式可有无穷多个。
当证明程序时需要找够证明程序正确性的合适的循环不变式,当然不一定唯一。
定义(合适循环不变式)
设r是循环语句whileedoSod的一个循环不变式。
如若还满足条件pr和req,则称r为公式{p}whileedoSod{q}的合适循环不变式。
RMK.
其中第一条表示入口处若p成立,则r也成立;第二条表示r要强到re能蕴含q的程度。
定义(Hoare公理系统)
由以上赋值公理、复合推理规则、条件推理规则、循环推理规则和推论规则所组成的公理系统称之为Hoare公理系统。
8.2可靠性与相对完备性
定理8.5(可靠性,soundness)
令B是谓词逻辑的基。
对于任意公式集WWFFB和HFB中的任意公式{p}S{q}(满足p,qWFFB和SL2B),
若W⊢{p}S{q},则有W|={p}S{q}。
证明:
(使用循环程序的指称语义)
1)赋值公理(略)。
2)复合语句规则(略)。
3)条件语句规则。
假设|=I{pe}S1{q}和|=I{pe}S2{q}。
为了要证明|=I{p}ifethenS1elseS2fi{q},令是任意一个不同于的状态,且满足I(p)()=true。
根据定义5.17和定义5.19,MI(ifethenS1elseS2fi)()=if-then-else(I(e)(),MI(S1)(),MI(S2)()),若MI(ifethenS1elseS2fi)()没有定义,则结论得证;否则,分成两种情况:
(1)I(e)()=true且MI(ifethenS1elseS2fi)()=MI(S1)()。
(2)I(e)()=false且MI(ifethenS1elseS2fi)()=MI(S2)()。
对于情况
(1),I(pe)()=true。
又根据已知|=I{pe}S1{q},所以I(q)(MI(S1)())=true。
对于情况
(2),I(pe)()=true。
又根据已知|=I{pe}S2{q},所以I(q)(MI(S2)())=true。
4)循环语句规则。
假设|=I{pe}S{p}
(1)
往证|=I{p}whileedoSod{pe};或等价地说,对于所有的状态,
(2)
若I(p)()=true,且MI(whileedoSod)()有定义,
则有I(pe)(MI(whileedoSod)())=true。
根据定义5.17,MI(whileedoSod)是如下定义的范函:
[][]的最小不动点,
if-then-else(I(e)(),f(MI(S1)(),))若
(f)()=
若=
要证性质
(2)成立,就要保证最小不动点是一个可纳谓词。
为此需要如下这样一个引理:
引理8.6(部分正确性是可纳谓词)
令,:
Bool是谓词。
那么如下定义的谓词:
()Bool是可纳的(admissible):
(f)=trueiff对于所有的状态,
若()=true且f()则(f())=true。
证明:
令S是[]中的一条链,满足,对于S中的所有函数f,都有(f)=true。
为了证明(⊔S)=true,令状态满足()=true和(⊔S)()=。
因为根据定理4.3,(⊔S)()=⊔S(),容易得到()=true。
又因为是一个平完全半序集,一定有,S中至少存在一个函数f满足f()=。
因(f)=true,()=true,所以(⊔S)=true。
下面继续循环规则的证明。
令如引理8.6所定义的一样,令=I(p)且=I(pe),于是要证明的性质
(2)就变成了(3)
()=true(3)
根据引理8.6我们可以使用Scott归纳原理(即不动点定理中所使用的归纳法):
(归纳基础)()=true
(归纳步)假设对于所有的函数g[]都满足(g)=true。
令某函数f[]满足(f)=true。
为了证明((f))=true,令0满足下面的条件(4)和(5):
I(p)(0)=true(4)
和
(f)(0)(5)
有必要证得,I(pe)((f)(0))(6)
情况
(1):
I(e)(0)=true。
那么(f)(0)=f(MI(S1)(0)),结合(5)就有f(MI(S1)())(7)
(1.1)MI(S1)(0)。
由
(1)和(4)可得
I(p)(MI(S1)(0))=true(8)
根据归纳假设、(8)和(7)可得(6)。
(1.2)MI(S1)(0)=。
(7)导致f()。
由于f是单调的,是一平完全半序集,于是f是一个常量函数,因此有
f(0)=f(MI(S1)(0))(10)
根据归纳假设、(4)和(10)可得(6)。
情况
(2):
I(e)(0)=false。
那么(f)(0)=0,由(4)就可得到(6)。
5)推论规则(略)。
Hoare公理系统是可靠而不完备的公理系统。
作业:
ex8.2-1(
)
1.证明,在通常解释下,⊨I{x10}x:
=2*x{x20}。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hoare 公理化 方法