版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
應用部分程序正確性證明第一頁,共四十二頁,2022年,8月28日2.數(shù)理邏輯的理論和方法在計算機理論中有如下幾方
面應用。
1)準確的理解程序
2)容易的構造程序
3)證明程序的正確性
4)測試系統(tǒng)的可靠性
5)檢測程序中的錯誤
6)提高程序的運行效率
例如:信息奇偶檢測法就是數(shù)理邏輯學中完成的。
3.編譯程序中,語法上的正確及語義上的正確,
但不能保證程序的完全正確。主要原因是邏輯
上的錯誤,而邏輯錯誤用調試的方法是不能解
決的。第二頁,共四十二頁,2022年,8月28日例如:百雞百錢問題
為代碼流程
FORX=0到19
FORY=0到33
判別5X+3Y+Z=100
若滿足判別條件則打印一組X、Y、Z然后繼續(xù)循環(huán)
若不滿足判別條件則不打印該組X、Y、Z然后繼續(xù)
循環(huán)第三頁,共四十二頁,2022年,8月28日程序如下:
Main()
{Intx,y,z;
For(x=0;x?=19;x++)
{For(y=0;y?=33;y++)
{Z=100-x-y;
If(((5*x)+(3*y)+(*z)==100Printf(“%d%d%d“,x,y,z);
}}}
結果為公母小
02575418788118112484分析程序在語法語義均為正確而0、25、75顯然不對分析原因是邏輯錯誤第四頁,共四十二頁,2022年,8月28日解決此問題方法1
將該語句If(((5*x)+(3*y)+(*z)==100移到
For(y=0;y?=33;y++)之前
解決此問題方法2
在Printf(“%d%d%d“,x,y,z);語句前加
If(x*y*z)==0語句若滿足判別條件則不打印繼續(xù)循環(huán)
解決此問題方法3
將For(x=0;x?=19;x++)語句x=0改為x=1,x?=19改為x?=20
For(y=0;y?=33;y++)語句y=0改為y=1,y?=33改為y?=33第五頁,共四十二頁,2022年,8月28日4.現(xiàn)在也有一些實驗程序的驗證系統(tǒng),有許多問題還
沒有解決,有待于研究。
例如:計算機的自然語言翻譯系統(tǒng)等。
5.1)程序的正確性是指:給定任何的合法輸入→程
序最終要停止并要輸出結果正確。
2)前者稱為終止性問題,后者稱為程序的部分正
確性問題。我們只討論程序的正確性(部分)第六頁,共四十二頁,2022年,8月28日6.我們知道任何一個程序都是對一組數(shù)據(jù)的加工I/O
(入/出)
7.定義:設P是一個程序:
1)x1…xn
(記為x)是程序輸入數(shù)據(jù)
2)y1…yn
(記為y)是程序輸出數(shù)據(jù)
3)BODY是該程序的程序行
則可以表示為:
ProgramP:程序整體的描述(開始)
Read(x);數(shù)據(jù)輸入部分
BODYP;程序體(數(shù)據(jù)加工部分)
Write(y);數(shù)據(jù)輸出部分
EndP;程序整體的結束第七頁,共四十二頁,2022年,8月28日8.定義:輸入數(shù)據(jù)必須滿足的條件稱為程序的輸入條
件。即:輸入斷言(記為INAP(x))
9.定義:同理數(shù)據(jù)必須滿足的條件稱為程序的輸出條
件。即:輸出斷言
(記為OUAP(X,Y,Z))其中z是程序的中間數(shù)據(jù),中間數(shù)據(jù)不是最終結果。
例:計算1+2+3+……+100就有最終結果,與中間
結果。(三角數(shù))第八頁,共四十二頁,2022年,8月28日根據(jù)定義程序可以描述如下:
Programp;:程序整體描述
Read(x);:數(shù)據(jù)輸入部分
{INAP(x);}:程序P的輸入斷言(非執(zhí)行語句)
BODYP;:程序體
OUTAP{(x,y,z)}:程序P的輸出斷言
Write():程序結果輸出部分(非執(zhí)行語句)
Endp:程序P的整體結束第九頁,共四十二頁,2022年,8月28日
NOTE:在數(shù)理邏輯中應當理解斷言部分。
即:{INAP(x);}與OUTAP{(x,y,z)}
目的是驗證I/0數(shù)據(jù)是否正確,即用來證明程序的
正確性,為了區(qū)別我們用花括號括起來。第十頁,共四十二頁,2022年,8月28日10.程序的部分正確性證明問題可以描述為:
{INAP(x);}BODYPOUTAP{(x,y,z)}
11.注意:用數(shù)理邏輯描述,對于任何x,任何y和任
何z,如果執(zhí)行BODYP(程序體)前INAP
(x)真,且BODYP執(zhí)行一定終止,則執(zhí)行
BODYP后OUTAP{(x,y,z)}真。
12.我們把程序的第三行與第五行為驗證公式(程序
段)第十一頁,共四十二頁,2022年,8月28日13.設P是程序,A與B是兩個斷言語句,則公式可表示為:
{A}P{B}其它略
含義為:如果A執(zhí)行P前A真且P的執(zhí)行一定終止執(zhí)行P→則
執(zhí)行P后B真。
14.舉例:計算兩個非負且不同時為零的整數(shù)x1和x2的最大公
約數(shù)Y的程序
ProgramGCD整體程序
Read(x1,X2);讀入X1,X2
(Z1,Z2):=(X1,X2);賦值Z1,,Z2
WriteZ1≠0doZ1不等于零做
IfZ2≥Z1thenZ1=Z2-Z1else(Z1,Z2):=(Z2,Z1)
od其它
Y:=Z2
;
Write(y)
endGCD結束第十二頁,共四十二頁,2022年,8月28日NOTE:(Z1,Z2):=(X1,X2);表示將X1,
X2同時賦給Z1,Z2
(Z1,Z2):=(X2,X1);表示交換Z1和
Z2
NOTE:X1≥0∧X2≥0∧(X1≠0∨X2≠0)題意要
求
NOTE:程序中y應當是X1與X2的最大公約數(shù)
NOTE:e1≒e2表示e1除盡e2
NOTE:MAXua(u)表示使得a(u)成立的一切u
中的最大者
根據(jù)上述約定有:第十三頁,共四十二頁,2022年,8月28日Y=MAXu(u≒X1,∧u≒X2)
推出:輸入輸出斷言的該程序是:
ProgramGCP;
Read(X1,X2)
←A點
{X1≥0∧X2≥0∧(X1≠0∨X2≠0)}輸入斷言
(Z1,Z2):=(X1,X2)
←B點
WhileZ1≠0do
Do其它
←C點
Y:=Z2;
{y=Y=MAXu(u≒X1∧u≒X2)}
輸出斷言
Write(y)
EndGCD
NOTE:紅筆部分為該程序I/O斷言
NOTE:程序流程如下:第十四頁,共四十二頁,2022年,8月28日
A點
A、B之間為第一段
B點
開始Read(X1,X2)(Z1,Z2):=(X1,X2);第十五頁,共四十二頁,2022年,8月28日↑→→→→→→C點
↑↓
↑判別Z1≥0嗎
↑←←←←↓→→→C、C1之間為第二段
↑↓↓
↑C1點↓
↑↓↓
↑IfZ2≥Z1thenZ2:=Z2—Z1
↑Else(Z1,Z2):=(Z2,Z1)
↑↓↓
↑↓↓
←←←←↓第十六頁,共四十二頁,2022年,8月28日
D點
↓
Y:=Z2
↓D、E之間為第三段
E點
↓
Write(y)
↓
結束
該圖為最大公約數(shù)的流程圖第十七頁,共四十二頁,2022年,8月28日下面分三段證明
分析:1)控制達到A點時→輸入斷言成立
2)控制達到E點時→輸出斷言成立
3)問題如下:(更進一步分析)
控制達到B點、C點、D點時成立否?
(1)當控制由A點達到B點時Z1,Z2最大公約
數(shù)也是X1,X2的最大公約數(shù)且Z1,Z2也
不同時為零的非負數(shù)(根據(jù)題義)→B點應
有如下斷言:
Z1≥0∧Z2≥0∧(Z1≠0∨Z2≠0)
∧MAXu(u≒Z1,∧u≒Z2)
=MAXu(u≒X1,∧u≒X2)第十八頁,共四十二頁,2022年,8月28日(2)C點:
1.可由B點到達C點
2.可由C點經(jīng)過C1點(可循環(huán)多次)在循環(huán)的過
程中Z1,Z2的值不斷變化但控制達到C點時
Z1,Z2的最大公約數(shù)一直不變且正好是X1,
X2的最大公約數(shù)也是Z1,Z2仍然不同時為零
的非負整數(shù)→C點和B點處的斷言為:
Z1≥0∧Z2≥0∧(Z1≠0∨Z2≠0)
∧MAXu(u≒Z1∧u≒Z2)
=MAXu(u≒X1∧u≒X2)第十九頁,共四十二頁,2022年,8月28日(3)D點:
當控制達到D點時,循環(huán)已經(jīng)結束→Z2值應為X1,
X2的最大公約數(shù)→D點斷言為:
Z2=MAXu(u≒X1∧u≒X2)
Note:B,C,D為程序中間,稱為中間斷言
Note:C點是循環(huán)語句內(nèi)部(循環(huán)體內(nèi)部)且C點處
斷言在循環(huán)中不變,稱為不變斷言,也稱為不
變式。第二十頁,共四十二頁,2022年,8月28日
可進一步改為:
{X1≥0∧X2≥0∧(X1≠0∨X2≠0)}
A、B(Z1,Z2):=(X1,X2);
{Z1≥0∧Z2≥0∧(Z1≠0∨Z2≠0)∧
MAXu(u≒Z1∧u≒Z2)=MAXu
(u≒X1∧u≒X2)}
要注意:“e1≒e2”為二元謂詞表示e1
除盡e2
MAXua(u)表示“使得a(u)成立的一切
u中最大者。”第二十一頁,共四十二頁,2022年,8月28日While{Z1≥0∧Z2≥0∧(Z1≠0∨Z2≠0)∧
MAXu(u≒Z1∧u≒Z2)
=MAXu(u≒X1∧u≒X2)}
B、DZ1≠0do
IfZ2≥Z1thenZ2:=Z2—Z1else(Z1,
Z2):=(Z2,Z1)
od
{Z2=MAXu(u≒X1∧u≒X2)}D、Ey:=Z2
{y=MAXu(u≒X1∧u≒X2)}
第二十二頁,共四十二頁,2022年,8月28日從流程圖分為三段來證明:
我們可以將(3)式分解為(4)(5)(6)來證
明,即:證明(AB)段(BD)段(DE)段(4){X1≥0∧X2≥0∧(X1≠0∨X2≠0)}
(Z1,Z2):=(X1,X2);
{Z1≥0∧Z2≥0∧(Z1≠0∨Z2≠0)∧
MAXu(u≒Z1∧u≒Z2)=MAXu(u≒X1
∧u≒X2)}
這就是流程圖中(AB)段的情形第二十三頁,共四十二頁,2022年,8月28日(5){Z1≥0∧Z2≥0∧(Z1≠0∨Z2≠0)∧MAXu
(u≒Z1∧u≒Z2)=MAXu(u≒X1∧u≒X2)
while{Z1≥0∧Z2≥0∧(Z1≠0∨Z2≠0)∧MAXu
(u≒Z1∧u≒Z2)=MAXu(u≒X1∧u≒X2)}
Z1≠0do
IfZ2≥Z1thenZ2:=Z2—Z1else(Z1,Z2):=
(Z2,Z1)
od
{Z2=MAXu(u≒X1∧u≒X2)}
這就是流程圖中(BD)段的情形
(6){Z2=MAXu(u≒X1∧u≒X2)}
y:=Z2
{y=MAXu(u≒X1∧u≒X2)}
這就是流程圖中(DE)段的情形第二十四頁,共四十二頁,2022年,8月28日(7)下面證明公式(4)即:要證明輸入斷言(A,B)段
證:驗證公式(4)的含義是:“如果A點處的輸入斷言
真,且Z1,Z2是執(zhí)行(Z1,Z2):=(x1,x2)的結
果,則B點處的斷言真,”因為賦值語句把x1→Z1中與
x2→Z2中所以(4)式可寫成:
(X1≥0∧X2≥0∧(X1≠0∨X2≠0))→((X1≥0
∧X2≥0)∧(X1≠0∨X2≠0)∧MAXu(u≒X1
∧u≒X2))=MAXu(u≒X1∧u≒X2)
在(7)中的蘊涵式中的后件是由B點處的中間斷言中x1
→Z1及x2→Z2所得到的.
故這個公式當然永真。
證畢。
第二十五頁,共四十二頁,2022年,8月28日下面證明公式(6)證明輸出斷言(D,E)段
證:(6)式的含義是:Z2=MAXu(u≒X1
∧u≒X2)∧y是執(zhí)行y:=Z2的結
果)→
y=MAXu(u≒X1∧u≒X2))因為執(zhí)
行y:=Z2后值就是Z2,以這個式可寫
成:第二十六頁,共四十二頁,2022年,8月28日(8)Z2=MAXu(u≒X1∧u≒X2))→MAXu
(u≒X1∧u≒X2)
其中的蘊涵式中的后件是由E點處的輸出
斷言中的y換成X2
的結果,這個邏輯公式
當然永真。
證畢。
下面證明公式(5)循環(huán)語句不變斷言即:(BD)段
(BC),(C1C),(CD)三段。該斷言可分解為:(BC)段,故相應的(5)式也可以分解為
三個式子
證:由流程圖得到(9)式均真第二十七頁,共四十二頁,2022年,8月28日(9)(Z1≥0∧Z2≥0)∧(Z1≠0∨Z2≠0)∧
MAXu(u≒Z1∧u≒Z2)=MAXu(u≒X1
∧u≒X2))→((Z1≥0∧Z2≥0∧(Z1≠0
∨Z2≠0))∧MAXu(u≒Z1∧u≒Z2)=
MAXu(u≒X1∧u≒X2)
證畢。(這是流程圖中循環(huán)體中的判別部分)
(10)證:(c1c)段即:循環(huán)語句不變斷言。
((Z1≥0∧Z2≥0)∧(Z1≠0
∨Z2≠0))∧MAXu(u≒Z1∧u≒Z2)
=MAXu(u≒X1∧u≒X2)∧Z1≠0)→(執(zhí)
行條件語句)第二十八頁,共四十二頁,2022年,8月28日
IfZ2≥Z1thenZ2:=Z2—Z1else(Z1,Z2):=(Z2,Z1)
后c處的斷言為:
(Z1≥0∧Z2≥0)∧(Z1≠0∨Z2≠0)∧MAXu(u≒Z1∧u≒Z2)
=MAXu(u≒X1∧u≒X2)
根據(jù)流程圖分析Z2≥Z1
有兩種情形即Z2≥Z1和Z1
>Z2對于Z2≥Z1執(zhí)行語句Z2:=Z2—Z1
執(zhí)行該語句
后Z2的值Z2:=Z2—Z1所以我們有:第二十九頁,共四十二頁,2022年,8月28日
(10’)
(Z1≥0∧Z2≥0)∧(Z1≠0∨Z1≠0)∧
MAXu(u≒Z1∧u≒Z2)
=MAXu(u≒X1∧u≒X2)∧
Z1≠0∧Z2≥Z1
)→(Z1≥0∧(Z2—Z1)
≥0)Z1≠0∨(Z2—Z1)≠0)∧MAXu
(u≒Z1∧u≒Z2)=MAXu(u≒X1∧u≒X2)
因為Z1≠0→(Z1≠0∨(Z2
-Z1)≠0)永真
所以Z2≥Z1→Z2—Z1≥0永真
證畢第三十頁,共四十二頁,2022年,8月28日(10``)證Z2<Z1的情形
(Z1≥0∧Z2≥0)∧(Z1≠0∨Z2≠0)∧
MAXu(u≒Z1∧u≒Z2)
=MAXu(u≒X1∧u≒X2)∧
(Z1≠0∧Z2﹤Z1
)→
(Z2≥0∧Z1≥0∧(Z2≠0∨Z1≠0)∧MAX
u(u≒Z2∧u≒Z1)
=MAXu(u≒X1∧u≒X2)
因為當Z2≥Z1,該條件語句執(zhí)行賦值語句
(Z1,Z2):=(Z2,Z1)
即Z1,Z2互換,所以(10``)為真,又跟據(jù)(10’)
與(10``)均為真所以(10)為真。
證畢第三十一頁,共四十二頁,2022年,8月28日(11)
證:
Z1=0,MAXu(u≒Z1∧u≒Z2)
=MAXu(u≒X1∧u≒X2),Z2>0
├MAXu(u≒0∧u≒Z2)
=MAXu(u≒X1∧u≒X2)
├MAXu(u≒Z2)
=MAXu(u≒X1∧u≒X2)
├Z2=MAXu(u≒X1∧u≒X2)
所以(11)永真。
全部證畢。第三十二頁,共四十二頁,2022年,8月28日程序正確性方法的總結(部分)
總結:1)要將程序分段證明給出中間斷言
2)給出輸入輸出斷言
3)給出循環(huán)不變式
4)產(chǎn)生相應的斷言語句并證明真假
5)要嚴格的邏輯推理
6)對所要證明的對象要深刻理解
7)將程序的斷言點要合理
若證明出有一個斷言為假,則程序是不正確的。第三十三頁,共四十二頁,2022年,8月28日Note1:由為對循環(huán)次數(shù)不確定的證明方法目前有大
量沒有解決,這需要幾代人的努力。
Note2:目前在此領域較先進的是:美國、印度等。
Note3:這個領域研究進展不大。第三十四頁,共四十二頁,2022年,8月28日舉例:判別程序正確性
計算三角形面積C語言程序如下:
我們知道三角形面積公式為:
S=(s×s(s-a)×(s-b)×(s-c))1/2
其中s=
第三十五頁,共四十二頁,2022年,8月28日
#include?math。h?
#include?stodio。h?
Main()
{
Floata,b,c,s,area;
Scanf(“%f,%f,%f”&a,&b,&c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年四川三河職業(yè)學院高職單招職業(yè)適應性測試模擬試題及答案詳細解析
- 2026年撫州幼兒師范高等??茖W校單招綜合素質考試參考題庫含詳細答案解析
- 2026廣西南寧市興寧區(qū)第一初級中學招聘教師考試重點題庫及答案解析
- 2026年南通科技職業(yè)學院單招職業(yè)技能考試備考題庫含詳細答案解析
- 2026年山西旅游職業(yè)學院高職單招職業(yè)適應性測試備考題庫及答案詳細解析
- 2026年山東科技職業(yè)學院單招綜合素質考試模擬試題含詳細答案解析
- 律師制講座課件供電局法
- 開幕詞、歡迎詞、課件
- 2026年歷史研究生入學考試全科題庫歷史事件核心考點詳解
- 2026年網(wǎng)絡安全法與個人信息保護考試題庫
- 冷庫安全生產(chǎn)責任制制度
- 陜西省西安市高新一中、交大附中、師大附中2026屆高二生物第一學期期末調研模擬試題含解析
- 2025兒童心肺復蘇與急救指南詳解課件
- 大推力液體火箭發(fā)動機綜合測試中心建設項目可行性研究報告模板立項申批備案
- 湖北中煙2024年招聘考試真題(含答案解析)
- 初中物理八年級下冊第十一章《功和機械能》測試題(有答案解析)
- 廣東省佛山市2023-2024學年高一上學期期末考試物理試題(含答案)
- DL∕T 5157-2012 電力系統(tǒng)調度通信交換網(wǎng)設計技術規(guī)程
- 【人效】人效儀表盤
- 未成年人侵害強制報告制度
- GLB-2防孤島保護裝置試驗報告
評論
0/150
提交評論