From 8de4abbc2ed966355fbcd4d479734d13538f7685 Mon Sep 17 00:00:00 2001
From: Patrick Baudin <patrick.baudin@cea.fr>
Date: Wed, 26 Jun 2019 09:22:59 +0200
Subject: [PATCH] [wp] set add bonus into Cint simplifier as it should be

---
 src/plugins/wp/Cint.ml                        |  3 +-
 .../frama_c_exo1_solved.res.oracle            |  4 +-
 .../wp_typed/oracle/user_init.0.res.oracle    | 70 ++++++++-----------
 .../wp_typed/oracle/user_init.1.res.oracle    | 70 ++++++++-----------
 4 files changed, 66 insertions(+), 81 deletions(-)

diff --git a/src/plugins/wp/Cint.ml b/src/plugins/wp/Cint.ml
index 44615afda69..2772546a63e 100644
--- a/src/plugins/wp/Cint.ml
+++ b/src/plugins/wp/Cint.ml
@@ -836,7 +836,8 @@ let reduce_bound v tv dom t : term =
       with Exc.Unknown i -> i in
     (** we try to reduce the bounds of the domains, when trivially false *)
     let dom_red = Ival.inject_range (Some min_bound) (Some max_bound) in
-    if not (Ival.equal dom_red dom) && Ival.is_included dom_red dom
+    assert ( Ival.is_included dom_red dom);
+    if Ival.equal dom_red dom
     then t
     else
         (e_imply [e_leq (e_zint min_bound) tv;
diff --git a/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_exo1_solved.res.oracle b/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_exo1_solved.res.oracle
index d7e1a7f9702..04777edf3a4 100644
--- a/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_exo1_solved.res.oracle
+++ b/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_exo1_solved.res.oracle
@@ -21,7 +21,7 @@
 [wp] Report out: 'tests/wp_gallery/result_qualif/frama_c_exo1_solved.0.report.json'
 -------------------------------------------------------------
 Functions           WP     Alt-Ergo        Total   Success
-exo1                 6      4 (176..200)    10       100%
+exo1                 6      4 (176..224)    10       100%
 -------------------------------------------------------------
 [wp] Running WP plugin...
 [rte] annotating function exo1
@@ -48,5 +48,5 @@ exo1                 6      4 (176..200)    10       100%
 [wp] Report out: 'tests/wp_gallery/result_qualif/frama_c_exo1_solved.0.report.json'
 -------------------------------------------------------------
 Functions           WP     Alt-Ergo        Total   Success
-exo1                 6      9 (176..200)    15       100%
+exo1                 6      9 (176..224)    15       100%
 -------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle b/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle
index 7c9323b15bd..466000394e6 100644
--- a/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle
+++ b/src/plugins/wp/tests/wp_typed/oracle/user_init.0.res.oracle
@@ -367,15 +367,13 @@ Assume {
       (havoc(Mint_undef_0, Mint_1, shift_sint32(a_1, 0), 20)
          [shift_sint32(a_1, i_3)] = v))).
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -423,8 +421,8 @@ Assume {
   Have: i_2 <= 9.
   Have: i_3 <= 19.
   Have: 0 <= i.
-  Have: i <= 9.
   Have: 0 <= i_1.
+  Have: i <= 9.
   Have: i_1 <= 19.
   (* Loop assigns 'lack,Zone' *)
   Have: forall a : addr.
@@ -458,8 +456,8 @@ Assume {
   Have: i_2 <= 9.
   Have: i_3 <= 19.
   Have: 0 <= i.
-  Have: i <= 9.
   Have: 0 <= i_1.
+  Have: i <= 9.
   Have: i_1 <= 19.
   (* Loop assigns 'lack,Zone' *)
   Have: forall a : addr.
@@ -1051,15 +1049,13 @@ Assume {
   (* Invariant 'Partial_j' *)
   Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))).
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -1092,15 +1088,13 @@ Assume {
   (* Invariant 'Partial_j' *)
   Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))).
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -1142,15 +1136,13 @@ Assume {
   (* Then *)
   Have: j <= 19.
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -1202,8 +1194,8 @@ Assume {
   Have: i_2 <= 9.
   Have: i_3 <= 19.
   Have: 0 <= i.
-  Have: i <= 9.
   Have: 0 <= i_1.
+  Have: i <= 9.
   Have: i_1 <= 19.
   (* Loop assigns 'lack,Zone_i' *)
   Have: forall i_5,i_4 : Z. ((0 <= i_5) -> ((0 <= i_4) -> ((i_5 <= 9) ->
diff --git a/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle b/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle
index b48ff1d096a..d91b34a47a4 100644
--- a/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle
+++ b/src/plugins/wp/tests/wp_typed/oracle/user_init.1.res.oracle
@@ -367,15 +367,13 @@ Assume {
       (havoc(Mint_undef_0, Mint_1, shift_sint32(a_1, 0), 20)
          [shift_sint32(a_1, i_3)] = v))).
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -423,8 +421,8 @@ Assume {
   Have: i_2 <= 9.
   Have: i_3 <= 19.
   Have: 0 <= i.
-  Have: i <= 9.
   Have: 0 <= i_1.
+  Have: i <= 9.
   Have: i_1 <= 19.
   (* Loop assigns 'lack,Zone' *)
   Have: forall a : addr.
@@ -458,8 +456,8 @@ Assume {
   Have: i_2 <= 9.
   Have: i_3 <= 19.
   Have: 0 <= i.
-  Have: i <= 9.
   Have: 0 <= i_1.
+  Have: i <= 9.
   Have: i_1 <= 19.
   (* Loop assigns 'lack,Zone' *)
   Have: forall a : addr.
@@ -1051,15 +1049,13 @@ Assume {
   (* Invariant 'Partial_j' *)
   Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))).
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -1092,15 +1088,13 @@ Assume {
   (* Invariant 'Partial_j' *)
   Have: forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 19) -> (t2_2[i][i_3] = v))).
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -1142,15 +1136,13 @@ Assume {
   (* Then *)
   Have: j <= 19.
 }
-Prove: (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-        (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-         ((i_4 <= 19) -> false)))))))) \/
-    (forall i_3 : Z. ((0 <= i_3) -> ((i_3 <= 9) ->
-     (forall i_4 : Z. ((0 <= i_3) -> ((0 <= i_4) -> ((i_3 <= 9) ->
-      ((i_4 <= 19) ->
-      (exists i_6,i_5 : Z. (i_6 <= i_3) /\ (i_5 <= i_4) /\ (0 <= i_6) /\
-       (i_3 <= i_6) /\ (0 <= i_5) /\ (i_4 <= i_5) /\ (i_6 <= 9) /\
-       (i_5 <= 19)))))))))).
+Prove: (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+        ((i_3 <= 19) -> false))))) \/
+    (forall i_4,i_3 : Z. ((0 <= i_4) -> ((0 <= i_3) -> ((i_4 <= 9) ->
+     ((i_3 <= 19) ->
+     (exists i_6,i_5 : Z. (i_6 <= i_4) /\ (i_5 <= i_3) /\ (0 <= i_6) /\
+      (i_4 <= i_6) /\ (0 <= i_5) /\ (i_3 <= i_5) /\ (i_6 <= 9) /\
+      (i_5 <= 19))))))).
 
 ------------------------------------------------------------
 
@@ -1202,8 +1194,8 @@ Assume {
   Have: i_2 <= 9.
   Have: i_3 <= 19.
   Have: 0 <= i.
-  Have: i <= 9.
   Have: 0 <= i_1.
+  Have: i <= 9.
   Have: i_1 <= 19.
   (* Loop assigns 'lack,Zone_i' *)
   Have: forall i_5,i_4 : Z. ((0 <= i_5) -> ((0 <= i_4) -> ((i_5 <= 9) ->
-- 
GitLab