From 25ae5c39b9f851e867f70755185bd321e81a122c Mon Sep 17 00:00:00 2001
From: Claude Marche <Claude.Marche@inria.fr>
Date: Wed, 1 Apr 2020 09:36:21 +0200
Subject: [PATCH 1/2] cleaning

---
 .gitignore                                 |   3 ++
 bench/ce/jlamp0/why3session.xml            |  45 ----------------
 bench/ce/jlamp0/why3shapes.gz              | Bin 509 -> 0 bytes
 bench/ce/let_constant/why3session.xml      |  18 -------
 bench/ce/let_constant/why3shapes.gz        | Bin 138 -> 0 bytes
 bench/ce/loop_inv.mlw                      |  57 +++++++++++++++++++++
 bench/ce/threshold.mlw                     |  28 ++++++++++
 examples/bts/353.mlw                       |  22 ++++++++
 examples/bts/374_eliminate_if_explodes.mlw |  25 +++++++++
 examples/logic/bvsum.mlw                   |  28 ++++++++++
 examples/logic/bvsum/why3session.xml       |  38 ++++++++++++++
 examples/logic/bvsum/why3shapes.gz         | Bin 0 -> 238 bytes
 examples/times2float.mlw                   |   8 +++
 examples/times2float/why3session.xml       |  18 +++++++
 examples/times2float/why3shapes.gz         | Bin 0 -> 114 bytes
 15 files changed, 227 insertions(+), 63 deletions(-)
 delete mode 100644 bench/ce/jlamp0/why3session.xml
 delete mode 100644 bench/ce/jlamp0/why3shapes.gz
 delete mode 100644 bench/ce/let_constant/why3session.xml
 delete mode 100644 bench/ce/let_constant/why3shapes.gz
 create mode 100644 bench/ce/loop_inv.mlw
 create mode 100644 bench/ce/threshold.mlw
 create mode 100644 examples/bts/353.mlw
 create mode 100644 examples/bts/374_eliminate_if_explodes.mlw
 create mode 100644 examples/logic/bvsum.mlw
 create mode 100644 examples/logic/bvsum/why3session.xml
 create mode 100644 examples/logic/bvsum/why3shapes.gz
 create mode 100644 examples/times2float.mlw
 create mode 100644 examples/times2float/why3session.xml
 create mode 100644 examples/times2float/why3shapes.gz

diff --git a/.gitignore b/.gitignore
index 0cc52d1b74..b92c47765d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -118,6 +118,8 @@ why3.conf
 /doc/_build
 /doc/.doctrees/
 
+/public/
+
 # /lib
 /lib/why3-cpulimit
 /lib/why3-cpulimit.exe
@@ -247,6 +249,7 @@ pvsbin/
 /tests/microc/*/why3shapes.gz
 
 # /examples/
+/examples/use_api/results
 /examples/in_progress/course/
 /examples/in_progress/wcet_hull/
 /examples/in_progress/binary_search2/
diff --git a/bench/ce/jlamp0/why3session.xml b/bench/ce/jlamp0/why3session.xml
deleted file mode 100644
index 35a1e652b9..0000000000
--- a/bench/ce/jlamp0/why3session.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
-"http://why3.lri.fr/why3session.dtd">
-<why3session shape_version="4">
-<prover id="0" name="CVC4" version="1.5" timelimit="5" steplimit="0" memlimit="1000"/>
-<file name="../jlamp0.mlw">
-<theory name="M">
- <goal name="WP_parameter p1" expl="VC for p1">
- <transf name="split_vc" >
-  <goal name="WP_parameter p1.0" expl="assertion">
-  <proof prover="0"><result status="unknown" time="0.01"/></proof>
-  </goal>
-  <goal name="WP_parameter p1.1" expl="postcondition">
-  <proof prover="0"><result status="unknown" time="0.01"/></proof>
-  </goal>
-  <goal name="WP_parameter p1.2" expl="postcondition">
-  <proof prover="0"><result status="unknown" time="0.02"/></proof>
-  </goal>
- </transf>
- </goal>
- <goal name="WP_parameter p2" expl="VC for p2">
- <transf name="split_vc" >
-  <goal name="WP_parameter p2.0" expl="loop invariant init">
-  <proof prover="0"><result status="unknown" time="0.00"/></proof>
-  </goal>
-  <goal name="WP_parameter p2.1" expl="loop invariant init">
-  <proof prover="0"><result status="unknown" time="0.00"/></proof>
-  </goal>
-  <goal name="WP_parameter p2.2" expl="loop invariant preservation">
-  <proof prover="0"><result status="unknown" time="0.01"/></proof>
-  </goal>
-  <goal name="WP_parameter p2.3" expl="loop invariant preservation">
-  <proof prover="0"><result status="unknown" time="0.01"/></proof>
-  </goal>
-  <goal name="WP_parameter p2.4" expl="loop variant decrease">
-  <proof prover="0"><result status="unknown" time="0.00"/></proof>
-  </goal>
-  <goal name="WP_parameter p2.5" expl="postcondition">
-  <proof prover="0"><result status="unknown" time="0.00"/></proof>
-  </goal>
- </transf>
- </goal>
-</theory>
-</file>
-</why3session>
diff --git a/bench/ce/jlamp0/why3shapes.gz b/bench/ce/jlamp0/why3shapes.gz
deleted file mode 100644
index 9111c10989c36406dbd33fe4bca490ec438518a3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 509
zcmb2|=3oGW|5GR5?vgg-X?y=&^VvQTou3N)Z^WDu6XFki-=uQb!P7}-nqA%8Nxo@m
z+n4U$tn=mN7j2`f6HK=mnzdgIobn>;vf$ROcRmH|<9}Nq)o1W|PyXlg4}UIQz;frV
zFQe9vf?xc8|Er95fByFCmZZVmp8Rm79e0fwkFY9>)hOHxuGI{<^W_&uk?nP*6Vp`%
z!#IzK&RDjbEtzMfRzT9#Iocad*iO_kom^`5;b+eB(=|8lE6+4vYG^;P#X*U;aZc*$
zh=cuRK^+0UwmioV|5R$<doKD)TF~65#v4{&TlAcTQ7dAa;LH_iMJiwHbwaqW1({5D
zaMjk#{M;KYbnxQE+U*wq3u{Z_Zx+AIj_55&oVsD&di}(QJxm)4k~;fKkNvg^EU5a^
z{(HZ^#o8qg<EB5&`}AvT&$Y_JTe@FAEr}JAniNnVrr1BjCgRIXx1a|R?egu13uk=K
zubEX@|8o7$PcwGre7Mu7_~qxf6Q|BTUv=-7HLJ5p4(H+fje9bey}z*ZimB9GmG%%x
z&GOiko|7t#&i9!5)n8AleZ1AmZsiou*1Mq@>%6Yjy^2~Nu0KV_{Lh77&mZ_}eY<-6
z)e`gnzh^8mzMzxzLiS14cELT#SD&QRY%6EuJ{^>@_mbhUYge{d&NotQ5irq6H<0dq
U5byt}N^n0zhVDd-cPtDH0BsNd;Q#;t

diff --git a/bench/ce/let_constant/why3session.xml b/bench/ce/let_constant/why3session.xml
deleted file mode 100644
index 124d1cb0ef..0000000000
--- a/bench/ce/let_constant/why3session.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
-"http://why3.lri.fr/why3session.dtd">
-<why3session shape_version="8">
-<prover id="0" name="CVC4" version="1.5" alternative="counterexamples" timelimit="5" steplimit="0" memlimit="1000"/>
-<file>
-<path name=".."/><path name="let_constant.mlw"/>
-<theory name="Let_constant">
- <goal name="VC dummy" expl="VC for dummy">
- <transf name="split_vc" >
-  <goal name="VC dummy.0" expl="assertion">
-  <proof prover="0"><result status="unknown" time="0.01" steps="286"/></proof>
-  </goal>
- </transf>
- </goal>
-</theory>
-</file>
-</why3session>
diff --git a/bench/ce/let_constant/why3shapes.gz b/bench/ce/let_constant/why3shapes.gz
deleted file mode 100644
index e5887072365ca4a372561f2b5754cc2597119061..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 138
zcmb2|=3oGW|GFm(`3@QIFdVqM{=~T?^=;m5n-ms)Xnfaq*@I_k5I6Jw<xV-vH(xxn
zxFPmUiN{e-ft>r#-+qmlzkmLR|K-yB?mG{b@YddSs@6Zve!#%^R>K|5Or=+bPvaKz
s)r19oJ)qk7JnIOrw%PTWN3(k`RSBz_zmrK?*z|$*lyB|ri3|)302y~ckN^Mx

diff --git a/bench/ce/loop_inv.mlw b/bench/ce/loop_inv.mlw
new file mode 100644
index 0000000000..ebf4caf28b
--- /dev/null
+++ b/bench/ce/loop_inv.mlw
@@ -0,0 +1,57 @@
+
+module M
+
+use int.Int
+
+let f () =
+  let ref a = 0 in
+  a <- 1;
+  let ref b = 2 in
+  while b < 10 do
+    invariant { b < a + 5 }
+    b <- a + b
+  done
+
+end
+
+module N
+
+use int.Int
+
+val ref a : int
+
+val ref b : int
+
+let f () : int
+  ensures { result < a }
+  =
+  a <- 1;
+  b <- 2;
+  while b < 10 do
+    invariant { b < a + 5 }
+    b <- a + b
+  done;
+  b
+
+end
+
+module R
+
+use real.Real
+
+val ref a : real
+
+val ref b : real
+
+let f () : real
+  ensures { result < a }
+  =
+  a <- 1.0;
+  b <- 2.0;
+  while b < 10.0 do
+    invariant { b < a + 5.0 }
+    b <- a + b
+  done;
+  b
+
+end
diff --git a/bench/ce/threshold.mlw b/bench/ce/threshold.mlw
new file mode 100644
index 0000000000..17294e4f5a
--- /dev/null
+++ b/bench/ce/threshold.mlw
@@ -0,0 +1,28 @@
+
+module WithInt32
+use int.Int
+use mach.int.Int32
+
+
+let f (n min max:int32) : int32
+   ensures { min <= result <= max }
+=
+  let x = min + max in
+  if n < min then min else if n > max then max else n
+
+end
+
+module WithBV32
+use int.Int
+use bv.BV32
+use mach.bv.BVCheck32
+
+
+let f (n min max:BV32.t) : BV32.t
+   ensures { ule min result /\ ule result max }
+   (* ensures { BV32.t'int min <= BV32.t'int result  <= BV32.t'int max } *)
+=
+  let x = add_check min max in
+  if lt_check n min then min else if gt_check n max then max else n
+
+end
diff --git a/examples/bts/353.mlw b/examples/bts/353.mlw
new file mode 100644
index 0000000000..c15f24772f
--- /dev/null
+++ b/examples/bts/353.mlw
@@ -0,0 +1,22 @@
+
+module M
+
+  use int.Int
+  use ref.Ref
+
+  let f (a: ref int)
+    requires { !a = 42 }
+    ensures { !a = 2 + old !a + result } =
+    a := 0;
+    a := 1;
+    !a+1
+
+  let g (a: ref int)
+    requires { !a = 42 }
+    ensures { !a = 2 + old !a + result } =
+    a := 0;
+    a := 1;
+    let b = !a + !a in
+    b+1
+
+end
\ No newline at end of file
diff --git a/examples/bts/374_eliminate_if_explodes.mlw b/examples/bts/374_eliminate_if_explodes.mlw
new file mode 100644
index 0000000000..e61bbbf0b5
--- /dev/null
+++ b/examples/bts/374_eliminate_if_explodes.mlw
@@ -0,0 +1,25 @@
+module Lexer__read_token__subprogram_def
+ use        "int".Int
+ use bool.Bool
+
+ exception Exc7
+ exception Exc4
+
+ val c     : int 
+
+ let def  ()
+   = 
+     try
+        if c = 40 then ()
+        else if c = 41 then ()
+        else if c = 121 then ()
+        else if c = 35 then ()
+        else if andb (48 <= c) (c <= 57)then ()
+        else if orb (orb (andb (65 <= c) (c <= 90)) (andb (97 <= c) (c <= 122))) (orb (orb (orb (orb (orb (orb (andb (33 <= c) (c <= 33)) (andb (36 <= c) (c <= 38))) (andb (42 <= c) (c <= 43))) (andb (45 <= c) (c <= 47))) (andb (60 <= c) (c <= 64))) (andb (94 <= c) (c <= 95))) (andb (126 <= c) (c <= 126))) then raise Exc7 
+        else if c = 34 then raise Exc4 else ();
+      with
+      | Exc4 -> ()
+      | Exc7 -> ()
+     end;
+    assert { false }
+end
diff --git a/examples/logic/bvsum.mlw b/examples/logic/bvsum.mlw
new file mode 100644
index 0000000000..2eb50694f6
--- /dev/null
+++ b/examples/logic/bvsum.mlw
@@ -0,0 +1,28 @@
+
+module PureBV
+
+use bv.BV32
+
+lemma add_bv : forall x y. add x y = add (bw_and x y) (bw_or x y)
+
+goal g : forall x y z.
+  add (add x y) z = add (bw_and (add (bw_and x y) (bw_or x y)) z) (bw_or (add (bw_and x y) (bw_or x y)) z)
+
+end 
+
+module Mixed
+
+use bv.BV32
+use int.Int
+
+lemma add_bv : forall x y. add x y = add (bw_and x y) (bw_or x y)
+
+lemma add_bv_int : forall x y. to_int x + to_int y = to_int (bw_and x y) + to_int (bw_or x y)
+
+(*
+goal g : forall x y z.
+  to_int x + to_int y + to_int z = (bw_and (add (bw_and x y) (bw_or x y)) z) (bw_or (add (bw_and x y) (bw_or x y)) z)
+*)
+
+end 
+
diff --git a/examples/logic/bvsum/why3session.xml b/examples/logic/bvsum/why3session.xml
new file mode 100644
index 0000000000..126684f6df
--- /dev/null
+++ b/examples/logic/bvsum/why3session.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="6">
+<prover id="0" name="Z3" version="4.8.4" timelimit="10" steplimit="0" memlimit="4000"/>
+<prover id="1" name="CVC4" version="1.6" alternative="counterexamples" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="2" name="Z3" version="4.8.4" alternative="counterexamples" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="3" name="Alt-Ergo" version="2.3.0" timelimit="10" steplimit="0" memlimit="4000"/>
+<prover id="4" name="CVC4" version="1.6" timelimit="1" steplimit="0" memlimit="1000"/>
+<file>
+<path name=".."/><path name="bvsum.mlw"/>
+<theory name="PureBV" proved="true">
+ <goal name="add_bv" proved="true">
+ <proof prover="4"><result status="valid" time="0.05" steps="13986"/></proof>
+ </goal>
+ <goal name="g" proved="true">
+ <proof prover="4"><result status="valid" time="0.08" steps="31108"/></proof>
+ </goal>
+</theory>
+<theory name="Mixed">
+ <goal name="add_bv" proved="true">
+ <proof prover="4"><result status="valid" time="0.03" steps="13986"/></proof>
+ </goal>
+ <goal name="add_bv_int">
+ <proof prover="1"><result status="timeout" time="1.00" steps="258185"/></proof>
+ <proof prover="2"><result status="timeout" time="1.00"/></proof>
+ <proof prover="3" timelimit="1" memlimit="1000"><result status="timeout" time="1.00"/></proof>
+ <transf name="split_vc" >
+  <goal name="add_bv_int.0">
+  <proof prover="0"><result status="timeout" time="10.00"/></proof>
+  <proof prover="3"><result status="timeout" time="10.00"/></proof>
+  <proof prover="4" timelimit="10" memlimit="4000"><result status="timeout" time="10.00" steps="3358556"/></proof>
+  </goal>
+ </transf>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/logic/bvsum/why3shapes.gz b/examples/logic/bvsum/why3shapes.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d6f9d79e156ae1043233936a01f4d25b00b5ccc3
GIT binary patch
literal 238
zcmb2|=3oGW|GoVi^9~#ExRlqre%G7i5&Y@G)feI!rW&0t)+U@$%)bBjZJDg#*1l-6
z-|}+zuJ{?%`ukeGKKW()`C*l5<)4_VPo6y967y`mxn1XD-3_ftjZM36>^pcbk2gH)
zay`T4s6S^;7uMP9)a>g%eR%g-i`m}`)?DtX-F9Sm!~L7N&+K+fO)id9ekx`ukg4?I
zq@C$9HZO({=Nhi{_gt0wSN@XHy5^^4$`=>v&e<Wc%kkod`qET~hg||}8On=<lsXGu
s&s=OK*nGjjOEPHEz0RZG^=8dtx94%#=G~egA@PlQXWaXnhZz|d03DETng9R*

literal 0
HcmV?d00001

diff --git a/examples/times2float.mlw b/examples/times2float.mlw
new file mode 100644
index 0000000000..c86dc5f6c6
--- /dev/null
+++ b/examples/times2float.mlw
@@ -0,0 +1,8 @@
+
+
+use ieee_float.Float32
+
+let f (x: Float32.t) : Float32.t
+   requires { lt (0.0:t) x /\ lt x (1000.0:t) }
+   ensures  { not (eq (add RNE x x) result) }
+ = mul RNE x (2.0:Float32.t)
diff --git a/examples/times2float/why3session.xml b/examples/times2float/why3session.xml
new file mode 100644
index 0000000000..b1fcc983a3
--- /dev/null
+++ b/examples/times2float/why3session.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="6">
+<prover id="0" name="CVC4" version="1.7" alternative="counterexamples" timelimit="5" steplimit="0" memlimit="1000"/>
+<prover id="1" name="Z3" version="4.8.4" alternative="counterexamples" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="3" name="Alt-Ergo" version="2.3.1" timelimit="5" steplimit="0" memlimit="1000"/>
+<file format="whyml">
+<path name=".."/><path name="times2float.mlw"/>
+<theory name="Top">
+ <goal name="f&#39;vc" expl="VC for f">
+ <proof prover="0"><result status="timeout" time="5.00" steps="2009908"/></proof>
+ <proof prover="1"><result status="unknown" time="0.14" steps="387381"/></proof>
+ <proof prover="3"><result status="timeout" time="5.00"/></proof>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/times2float/why3shapes.gz b/examples/times2float/why3shapes.gz
new file mode 100644
index 0000000000000000000000000000000000000000..b0553e5d0d73450924907d79be0b3801550f30a4
GIT binary patch
literal 114
zcmb2|=3oGW|GHhL`5X)c7~cQws%w06YlT&pfS#?zmwnsbc2>0fSKo0q<yhgJna&R`
zZk4n7P;^$FJ53<*aO3mO=C@YV`8?1)e^>MVi!E|inn&3T&5yQB<IvVTmGUV?`RGZG
S+X_<E0p@&4a`O2M3=9B#yfOg*

literal 0
HcmV?d00001

-- 
GitLab


From 00007fd0021a319ab48e876294685b53ae2969dc Mon Sep 17 00:00:00 2001
From: Claude Marche <Claude.Marche@inria.fr>
Date: Thu, 2 Apr 2020 10:55:18 +0200
Subject: [PATCH 2/2] Adding missing oracles for counterexamples

---
 bench/ce/loop_inv.mlw                         |  6 +-
 bench/ce/oracles/loop_inv_CVC4,1.7_SP.oracle  | 89 +++++++++++++++++++
 bench/ce/oracles/loop_inv_CVC4,1.7_WP.oracle  | 89 +++++++++++++++++++
 bench/ce/oracles/loop_inv_Z3,4.8.4_SP.oracle  | 89 +++++++++++++++++++
 bench/ce/oracles/loop_inv_Z3,4.8.4_WP.oracle  | 89 +++++++++++++++++++
 bench/ce/oracles/threshold_CVC4,1.7_SP.oracle | 69 ++++++++++++++
 bench/ce/oracles/threshold_CVC4,1.7_WP.oracle | 69 ++++++++++++++
 bench/ce/oracles/threshold_Z3,4.8.4_SP.oracle | 65 ++++++++++++++
 bench/ce/oracles/threshold_Z3,4.8.4_WP.oracle | 65 ++++++++++++++
 bench/ce/threshold.mlw                        |  4 +-
 10 files changed, 631 insertions(+), 3 deletions(-)
 create mode 100644 bench/ce/oracles/loop_inv_CVC4,1.7_SP.oracle
 create mode 100644 bench/ce/oracles/loop_inv_CVC4,1.7_WP.oracle
 create mode 100644 bench/ce/oracles/loop_inv_Z3,4.8.4_SP.oracle
 create mode 100644 bench/ce/oracles/loop_inv_Z3,4.8.4_WP.oracle
 create mode 100644 bench/ce/oracles/threshold_CVC4,1.7_SP.oracle
 create mode 100644 bench/ce/oracles/threshold_CVC4,1.7_WP.oracle
 create mode 100644 bench/ce/oracles/threshold_Z3,4.8.4_SP.oracle
 create mode 100644 bench/ce/oracles/threshold_Z3,4.8.4_WP.oracle

diff --git a/bench/ce/loop_inv.mlw b/bench/ce/loop_inv.mlw
index ebf4caf28b..ab17db4830 100644
--- a/bench/ce/loop_inv.mlw
+++ b/bench/ce/loop_inv.mlw
@@ -3,7 +3,9 @@ module M
 
 use int.Int
 
-let f () =
+let f () : unit
+  diverges
+  =
   let ref a = 0 in
   a <- 1;
   let ref b = 2 in
@@ -23,6 +25,7 @@ val ref a : int
 val ref b : int
 
 let f () : int
+  diverges
   ensures { result < a }
   =
   a <- 1;
@@ -44,6 +47,7 @@ val ref a : real
 val ref b : real
 
 let f () : real
+  diverges
   ensures { result < a }
   =
   a <- 1.0;
diff --git a/bench/ce/oracles/loop_inv_CVC4,1.7_SP.oracle b/bench/ce/oracles/loop_inv_CVC4,1.7_SP.oracle
new file mode 100644
index 0000000000..e5ab8447a5
--- /dev/null
+++ b/bench/ce/oracles/loop_inv_CVC4,1.7_SP.oracle
@@ -0,0 +1,89 @@
+Strongest Postcondition
+bench/ce/loop_inv.mlw M f'vc: Valid
+bench/ce/loop_inv.mlw M f'vc: Unknown (sat)
+Counter-example model:
+File loop_inv.mlw:
+  Line 10:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 12:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 13:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 14:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw N f'vc: Unknown (sat)
+Counter-example model:
+File loop_inv.mlw:
+  Line 31:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 32:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "2" } }] } }
+  Line 33:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 34:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 35:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 53:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+  Line 54:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "2.0" } }] } }
+  Line 55:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "5.0" } }] } }
+  Line 56:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+  Line 57:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+
+bench/ce/loop_inv.mlw R f'vc: Valid
diff --git a/bench/ce/oracles/loop_inv_CVC4,1.7_WP.oracle b/bench/ce/oracles/loop_inv_CVC4,1.7_WP.oracle
new file mode 100644
index 0000000000..709dae3f34
--- /dev/null
+++ b/bench/ce/oracles/loop_inv_CVC4,1.7_WP.oracle
@@ -0,0 +1,89 @@
+Weakest Precondition
+bench/ce/loop_inv.mlw M f'vc: Valid
+bench/ce/loop_inv.mlw M f'vc: Unknown (sat)
+Counter-example model:
+File loop_inv.mlw:
+  Line 10:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 12:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 13:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 14:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw N f'vc: Unknown (sat)
+Counter-example model:
+File loop_inv.mlw:
+  Line 31:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 32:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "2" } }] } }
+  Line 33:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 34:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 35:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 53:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+  Line 54:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "2.0" } }] } }
+  Line 55:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "5.0" } }] } }
+  Line 56:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+  Line 57:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+
+bench/ce/loop_inv.mlw R f'vc: Valid
diff --git a/bench/ce/oracles/loop_inv_Z3,4.8.4_SP.oracle b/bench/ce/oracles/loop_inv_Z3,4.8.4_SP.oracle
new file mode 100644
index 0000000000..c313de70fc
--- /dev/null
+++ b/bench/ce/oracles/loop_inv_Z3,4.8.4_SP.oracle
@@ -0,0 +1,89 @@
+Strongest Postcondition
+bench/ce/loop_inv.mlw M f'vc: Valid
+bench/ce/loop_inv.mlw M f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 10:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 12:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 13:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 14:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw N f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 31:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 32:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "2" } }] } }
+  Line 33:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 34:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 35:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 53:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+  Line 54:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "2.0" } }] } }
+  Line 55:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "5.0" } }] } }
+  Line 56:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+  Line 57:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+
+bench/ce/loop_inv.mlw R f'vc: Valid
diff --git a/bench/ce/oracles/loop_inv_Z3,4.8.4_WP.oracle b/bench/ce/oracles/loop_inv_Z3,4.8.4_WP.oracle
new file mode 100644
index 0000000000..0b89b34700
--- /dev/null
+++ b/bench/ce/oracles/loop_inv_Z3,4.8.4_WP.oracle
@@ -0,0 +1,89 @@
+Weakest Precondition
+bench/ce/loop_inv.mlw M f'vc: Valid
+bench/ce/loop_inv.mlw M f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 10:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 12:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 13:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 14:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw N f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 31:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+  Line 32:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "2" } }] } }
+  Line 33:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "5" } }] } }
+  Line 34:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+  Line 35:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Integer" , "val" : "6" } }] } }
+
+bench/ce/loop_inv.mlw N f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Valid
+bench/ce/loop_inv.mlw R f'vc: Timeout or Unknown
+Counter-example model:
+File loop_inv.mlw:
+  Line 53:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+  Line 54:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "2.0" } }] } }
+  Line 55:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "5.0" } }] } }
+  Line 56:
+    a, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:a]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "1.0" } }] } }
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents],
+       [@model_trace:b]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+  Line 57:
+    b, [[@mlw:reference_var], [@introduced], [@field:0:contents]] =
+    {"type" : "Record" , "val" : {"Field" : [{"field" : "contents" ,
+    "value" : {"type" : "Decimal" , "val" : "6.0" } }] } }
+
+bench/ce/loop_inv.mlw R f'vc: Valid
diff --git a/bench/ce/oracles/threshold_CVC4,1.7_SP.oracle b/bench/ce/oracles/threshold_CVC4,1.7_SP.oracle
new file mode 100644
index 0000000000..0d8e6346eb
--- /dev/null
+++ b/bench/ce/oracles/threshold_CVC4,1.7_SP.oracle
@@ -0,0 +1,69 @@
+Strongest Postcondition
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1073741825" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1073741825" } }
+    n, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1073741825" } }
+  Line 10:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" ,
+    "val" : "-1073741825" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" ,
+    "val" : "-1073741825" } }
+
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+    n, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+  Line 8:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "0" } }
+    result, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+  Line 10:
+    _x, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "4294967295" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "4294967295" }
+    n, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+  Line 25:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "4294967295" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "4294967295" }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "1" }
+    n, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+  Line 22:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "0" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "1" }
+    result, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+  Line 25:
+    _x, [[@introduced]] = {"type" : "Integer" , "val" : "1" }
+
diff --git a/bench/ce/oracles/threshold_CVC4,1.7_WP.oracle b/bench/ce/oracles/threshold_CVC4,1.7_WP.oracle
new file mode 100644
index 0000000000..532c7db12c
--- /dev/null
+++ b/bench/ce/oracles/threshold_CVC4,1.7_WP.oracle
@@ -0,0 +1,69 @@
+Weakest Precondition
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1073741825" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1073741825" } }
+    n, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1073741825" } }
+  Line 10:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" ,
+    "val" : "-1073741825" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" ,
+    "val" : "-1073741825" } }
+
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+    n, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+  Line 8:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "0" } }
+    result, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+  Line 10:
+    _x, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "4294967295" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "4294967295" }
+    n, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+  Line 25:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "4294967295" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "4294967295" }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "1" }
+    n, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+  Line 22:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "0" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "1" }
+    result, [[@introduced]] = {"type" : "Integer" , "val" : "0" }
+  Line 25:
+    _x, [[@introduced]] = {"type" : "Integer" , "val" : "1" }
+
diff --git a/bench/ce/oracles/threshold_Z3,4.8.4_SP.oracle b/bench/ce/oracles/threshold_Z3,4.8.4_SP.oracle
new file mode 100644
index 0000000000..7d4892186d
--- /dev/null
+++ b/bench/ce/oracles/threshold_Z3,4.8.4_SP.oracle
@@ -0,0 +1,65 @@
+Strongest Postcondition
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "2147483647" } }
+  Line 10:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "1" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" ,
+    "val" : "2147483647" } }
+
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+    n, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+  Line 8:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "0" } }
+    result, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+  Line 10:
+    _x, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "4026531703" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "4116707090" }
+  Line 25:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "4026531703" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "4116707090" }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "1074330528" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "1746500513" }
+    n, [[@introduced]] = {"type" : "Integer" , "val" : "1746795424" }
+  Line 22:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "1074330528" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "1746500513" }
+    result, [[@introduced]] = {"type" : "Integer" , "val" : "1074330528" }
+  Line 25:
+    _x, [[@introduced]] = {"type" : "Integer" , "val" : "2820831041" }
+
diff --git a/bench/ce/oracles/threshold_Z3,4.8.4_WP.oracle b/bench/ce/oracles/threshold_Z3,4.8.4_WP.oracle
new file mode 100644
index 0000000000..6ad0e0aadf
--- /dev/null
+++ b/bench/ce/oracles/threshold_Z3,4.8.4_WP.oracle
@@ -0,0 +1,65 @@
+Weakest Precondition
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "1" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "2147483647" } }
+  Line 10:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "1" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" ,
+    "val" : "2147483647" } }
+
+bench/ce/threshold.mlw WithInt32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 7:
+    max, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+    n, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+  Line 8:
+    max, [[@introduced], [@model_trace:max]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "-1" } }
+    min, [[@introduced], [@model_trace:min]] = {"proj_name" : "int32'int" ,
+    "type" : "Proj" , "value" : {"type" : "Integer" , "val" : "0" } }
+    result, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "0" } }
+  Line 10:
+    _x, [[@introduced]] = {"proj_name" : "int32'int" , "type" : "Proj" ,
+    "value" : {"type" : "Integer" , "val" : "-1" } }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "4026531703" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "4116707090" }
+  Line 25:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "4026531703" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "4116707090" }
+
+bench/ce/threshold.mlw WithBV32 f'vc: Timeout or Unknown
+Counter-example model:
+File threshold.mlw:
+  Line 21:
+    max, [[@introduced]] = {"type" : "Integer" , "val" : "1074330528" }
+    min, [[@introduced]] = {"type" : "Integer" , "val" : "1746500513" }
+    n, [[@introduced]] = {"type" : "Integer" , "val" : "1746795424" }
+  Line 22:
+    max, [[@introduced], [@model_trace:max]] = {"type" : "Integer" ,
+    "val" : "1074330528" }
+    min, [[@introduced], [@model_trace:min]] = {"type" : "Integer" ,
+    "val" : "1746500513" }
+    result, [[@introduced]] = {"type" : "Integer" , "val" : "1074330528" }
+  Line 25:
+    _x, [[@introduced]] = {"type" : "Integer" , "val" : "2820831041" }
+
diff --git a/bench/ce/threshold.mlw b/bench/ce/threshold.mlw
index 17294e4f5a..1f0cc5a93b 100644
--- a/bench/ce/threshold.mlw
+++ b/bench/ce/threshold.mlw
@@ -7,7 +7,7 @@ use mach.int.Int32
 let f (n min max:int32) : int32
    ensures { min <= result <= max }
 =
-  let x = min + max in
+  let _x = min + max in
   if n < min then min else if n > max then max else n
 
 end
@@ -22,7 +22,7 @@ let f (n min max:BV32.t) : BV32.t
    ensures { ule min result /\ ule result max }
    (* ensures { BV32.t'int min <= BV32.t'int result  <= BV32.t'int max } *)
 =
-  let x = add_check min max in
+  let _x = add_check min max in
   if lt_check n min then min else if gt_check n max then max else n
 
 end
-- 
GitLab