檢視 Dafny雜記 的原始碼
←
Dafny雜記
跳至導覽
跳至搜尋
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
{{Nav|程式語言、邏輯學}} == 安裝 == # Ubuntu 系Linux:先灌 .NET 6.0 <code>sudo apt install dotnet-sdk-6.0</code> # 下載最新版本,解壓縮 (unzip) 後,dafny/dafny 就是執行檔了。 *註:這東西打包到 appimage 失敗。可能不適合用 appimage 打包成獨立程式檔。 == 測試 == ===Hello World=== hello.dfy <pre> method Main(){ // 記得大寫 var a := 1 + 1; // 局域變數用 := 設定值 print "Hello,汝好\n"; assert a == 2; // 斷言 a == 2,編譯會過 }</pre> 編譯並執行: <pre>dafny/dafny /compile:3 /path/to/hello.dfy</pre> (其中<code>/compile:1</code> 變成 <code>/compile:1</code>是純編譯) 編譯結果,沒有錯誤: <pre> $ dafny/dafny /compile:3 /path/to/hello/a.dfy Dafny program verifier finished with 1 verified, 0 errors Compiled assembly into a.dll Running... Hello,汝好 </pre> ==Án-tsuánn 用 Dafny 做驗證?== 通常驗證tsit 段程式,ē當用 Hoare 邏輯來驗證(通參考[https://flolac.iis.sinica.edu.tw/flolac12/lib/exe/flolac12.pdf 中央研究院ê FLOLAC投影片])。若是驗證一段(tsi̍t tsuā以上)ê程式P,著知影precondition(執行進前ê條件)、postsondition(執行了後ê情況,寫做: {PreCondition}{P}{PostCondition} 例: <pre>{x == old(x)}{x := x + 1}{x > old(x)}</pre> 其中,x == old(x) 是 P ê Precondition,PostCondition sī x > old(x)。 Tsit pîng無講siūnn tsē,只是tsit ê輔助:dafny 驗證ê時陣,著先指定下kha三項假設,koh請程式驗證正確無: # Precondition # Costcondition # Loop Invariant(循環無變式):逐kái執行loop,tī tsit ê loop ê「逐位」lóng無變ê表達式。虛擬碼ê例:<code>for (var i=0 to 4){print(i);};</code>,<code>i<=4 & i>=0</code>就是 loop invatriant。 例: <pre> /* add1ToN(n) = 1 + 2 + ... + n, n>0 */ method add1ToN(n : nat) returns (res: nat) //n : input value; res : return value requires n > 0 // define the precondition ensures res > res - 10// define the postcondition { res := 0; var i : nat := 1; // the item of while // loop while (i < n) // set the invariant of the loop /* bacause when i = n-1 into the loop, it'll become n after Flag A. so the invariant is "1 <= i <= n" */ invariant 1 <= i <= n // the loop expression n-i is decreasing decreases n-i { res := res + i; i := i + 1; // Flag A } res := res + n; return res; // return x }</pre> == 參考 == * https://dafny.org/dafny/Installation * [https://www.cse.unsw.edu.au/~anymeyer/2011/refs/GettingStarted.pdf Tutorial: Making a start in Dafny] by Albert Nymeyer [[category:資訊]]
此頁面使用了以下模板:
模板:Nav
(
檢視原始碼
)
返回到「
Dafny雜記
」。
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
視圖
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
首頁
愛爾蘭語辭典
近期變更
隨機頁面
有關 MediaWiki 的說明
相關網站
總首頁
Blog
舊 blog
現用 blog 備份
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊