簡體   English   中英

如何在Frama-C GUI中使用Why3證明?

[英]How to use Why3 proofs in Frama-C GUI?

這聽起來像一個愚蠢的問題,但我很困惑。 我正在嘗試使用Frama-C Sodium和Why3 0.86.1(均通過OPAM安裝)來證明一些簡單的屬性。 考慮以下程序( toy.c ):

int main(void) {
    char *hello = "hello world!";
    /*@ assert \valid_read(hello+(0..11)); */
    return 0;
}

我想使用Frama-C GUI和Why3證明這一斷言。 因此,我運行frama-c-gui toy.c ,選擇“ Why3(ide)”作為證明者,並在主要功能上運行“通過WP證明功能注釋”。 (或者:我導航到“ WP Goals”選項卡,然后從那里運行Why3 IDE。)Why3出現,我呼叫我選擇的證明者將所有內容變為綠色,保存會話並退出Why3,然后在Frama中什么也沒有發生-C GUI:該屬性仍標記為橙色/“試圖驗證但無法確定”。

我如何告訴Frama-C實際使用Why3產生的證明? 證據本身肯定存在:如果再次打開Why3,一切仍然是綠色的,因此會話已正確保存。 另外,Frama-C知道發生了一些事情:打開Why3 IDE時,WP目標選項卡中會出現一個小齒輪符號,當我關閉Why3時,該符號會消失。

(我意識到可以通過Alt-Ergo證明此特殊屬性,而無需涉及Why3,但對於更困難的問題,我確實需要Why3。)

對我自己的初步答案:看起來Frama-C的Why3會話XML文件解析器與Why3 0.86.1生成的XML不匹配。 此補丁似乎可以解決此問題:

diff -ur frama-c-Sodium-20150201/src/wp/why3_session.ml frama-c-Sodium-20150201-hacked/src/wp/why3_session.ml
--- frama-c-Sodium-20150201/src/wp/why3_session.ml  2015-03-06 16:28:27.000000000 +0100
+++ frama-c-Sodium-20150201-hacked/src/wp/why3_session.ml   2015-09-17 21:35:30.717409735 +0200
@@ -160,6 +160,20 @@
   let name = string_attribute "name" elt in
   name

+let load_result parent_goal r =
+  match r.Xml.name with
+  | "result" ->
+      let status = string_attribute "status" r in
+      assert (parent_goal.goal_verified = false);
+      parent_goal.goal_verified <- (status = "valid")
+  | _ -> ()
+
+let load_proof parent p =
+  match p.Xml.name with
+  | "proof" ->
+      List.iter (load_result parent) p.Xml.elements
+  | _ -> ()
+
 let rec load_goal parent g =
   match g.Xml.name with
   | "goal" ->
@@ -168,7 +182,9 @@
       let mg =
         raw_add_no_task parent gname
       in
-      mg.goal_verified <- verified
+      mg.goal_verified <- verified;
+      (* hack for different(?) session file format *)
+      List.iter (load_proof mg) g.Xml.elements
   | "label" -> ()
   | s ->
       Wp_parameters.debug

無法保證這將對其他任何人都有效(即使我確實如此,也不能保證它對我自己的用途是正確的)。

這里有任何Frama-C開發人員,誰能發表評論?

感謝您報告錯誤。 建議的修復程序似乎有效。

但是,我們希望與Why-3會話更緊密地集成在一起,並導入到Frama-C,證明者將履行每項證明義務。 實際上,我們將在重構期間修復該錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM