diff --git a/examples/compiler_noproof.mlw b/examples/compiler_noproof.mlw
new file mode 100644
index 0000000000000000000000000000000000000000..cdf47dc105f9722d4626614e131b0266f8f28c10
--- /dev/null
+++ b/examples/compiler_noproof.mlw
@@ -0,0 +1,168 @@
+
+
+(*Imp to Vm compiler *)
+(**************************************************************************)
+
+(* Compiler for arithmetic expressions *)
+module Compile_aexpr
+
+  use int.Int
+  use list.List
+  use list.Length
+  use list.Append
+  use imp_per.Imp
+  use vm_per.Vm
+  use state.State
+
+  function compile_aexpr (a:aexpr) : code =
+  match a with
+  | Anum n     -> iconst n
+  | Avar x     -> ivar x
+  | Aadd a1 a2 -> compile_aexpr a1 ++ compile_aexpr a2 ++ iadd 
+  | Asub a1 a2 -> compile_aexpr a1 ++ compile_aexpr a2 ++ isub 
+  end
+
+  goal g_2_1 : (* 2 + 1 *)
+    let c_imp = Aadd (Anum 2) (Anum 1) in
+    let c_out = compile_aexpr c_imp in
+    c_out = iconst 2 ++ iconst 1 ++ iadd
+
+  goal g_a_1 : (* a + 1 *)
+    let c_imp = Aadd (Avar (Id 1)) (Anum 1) in
+    let c_out = compile_aexpr c_imp in
+    c_out = ivar (Id 1) ++ iconst 1 ++ iadd
+
+end
+
+
+(* Compiler for boolean expressions. *)
+module Compile_bexpr
+
+  use int.Int
+  use list.List
+  use list.Length
+  use list.Append
+  use imp_per.Imp
+  use vm_per.Vm
+  use state.State
+  use Compile_aexpr
+
+  function compile_bexpr (b:bexpr) (cond:bool) (ofs:ofs) :  code =
+  match b with
+  | Btrue      -> if cond then ibranch ofs else Nil
+  | Bfalse     -> if cond then Nil else ibranch ofs
+  | Bnot b1    -> compile_bexpr b1 (not cond) ofs
+  | Band b1 b2 ->
+    let c2  = compile_bexpr b2 cond ofs in
+    let ofs = if cond then length c2 else ofs + length c2 in
+    compile_bexpr b1 false ofs ++ c2
+
+  | Beq a1 a2  -> compile_aexpr a1 ++ compile_aexpr a2 ++
+                  if cond then ibeq ofs else ibne ofs
+  | Ble a1 a2  -> compile_aexpr a1 ++ compile_aexpr a2 ++
+                  if cond then ible ofs else ibgt ofs 
+  end 
+end
+
+module Compile_com
+
+  use int.Int
+  use list.List
+  use list.Length
+  use list.Append
+  use imp_per.Imp
+  use vm_per.Vm
+  use state.State
+  use Compile_aexpr
+  use Compile_bexpr
+
+  function compile_com (cmd: com) : code =
+  match cmd with
+  | Cskip              -> Nil
+  | Cassign x a        -> compile_aexpr a ++ isetvar x
+  | Cseq cmd1 cmd2     -> compile_com cmd1 ++ compile_com cmd2
+  | Cif bexpr cmd1 cmd2 ->
+    let code_false = compile_com cmd2 in
+    let code_true  = compile_com cmd1 ++ ibranch (length code_false) in
+    compile_bexpr bexpr false (length code_true) ++ 
+    code_true ++ 
+    code_false 
+  | Cwhile test body   ->
+    let code_body   = compile_com body in
+    let body_length = length code_body + 1 in
+    let code_test   = compile_bexpr test false body_length in
+    let ofs = length code_test + body_length in
+    code_test ++ code_body ++ ibranch (- ofs)
+  end
+
+  function compile_program (prog : com) : code =
+    compile_com prog ++ ihalt
+
+  goal g1 : (* a := 2 + 1 *)
+    let c_in  = Cassign (Id 1) (Aadd (Anum 2) (Anum 1)) in
+    let c_out =
+      iconst 2       ++
+      iconst 1       ++
+      iadd           ++
+      isetvar (Id 1) ++
+      ihalt in
+    compile_program c_in = c_out
+
+  goal g2 : (* IF TRUE THEN a := 1 ELSE a := 2 END *)
+    let c_in  = Cif Btrue (Cassign (Id 1) (Anum 1)) (Cassign (Id 1) (Anum 2)) in
+    let c_out =
+                        (* <-- condition trivial true *)
+      iconst 1       ++ (* <-- then branch *)
+      isetvar (Id 1) ++
+      ibranch 2      ++
+      iconst 2       ++ (* <-- else branch *)
+      isetvar (Id 1) ++
+      ihalt
+      in
+    compile_program c_in = c_out
+
+  goal g3 : (* IF NOT TRUE THEN a := 1 ELSE a := 2 END *)
+    let c_in  = Cif (Bnot Btrue) (Cassign (Id 1) (Anum 1)) (Cassign (Id 1) (Anum 2)) in
+    let c_out =
+      ibranch 3      ++ (* <-- condition trivial false *)
+      iconst 1       ++ (* <-- then branch *)
+      isetvar (Id 1) ++
+      ibranch 2      ++
+      iconst 2       ++ (* <-- else branch *)
+      isetvar (Id 1) ++
+      ihalt
+      in
+    compile_program c_in = c_out
+
+ goal g4 : (* IF a <= 0 THEN a := 1 ELSE a := 2 END *)
+    let c_in  = Cif (Ble (Avar (Id 1)) (Anum 0)) (Cassign (Id 1) (Anum 1)) (Cassign (Id 1) (Anum 2)) in
+    let c_out =
+      ivar (Id 1)    ++ (* <-- a <= 0 condition *)
+      iconst 0       ++
+      ibgt 3         ++ 
+      iconst 1       ++ (* <-- then branch *)
+      isetvar (Id 1) ++
+      ibranch 2      ++
+      iconst 2       ++ (* <-- else branch *)
+      isetvar (Id 1) ++
+      ihalt
+      in
+    compile_program c_in = c_out
+
+  (* simple sum program : *)
+  goal g5 : (* X := 1; WHILE NOT (Y <= 0) DO X := X + Y; Y := Y - 1 DONE *)
+    let x = Id 0 in 
+    let y = Id 1 in
+    let cond = Bnot (Ble (Avar y) (Anum 0)) in
+    let body1 = Cassign x (Aadd (Avar x) (Avar y)) in
+    let body2 = Cassign y (Asub (Avar y) (Anum 1)) in
+    let lp = Cwhile cond (Cseq body1 body2) in
+    let code = Cseq (Cassign x (Anum 1)) lp in
+        
+    let c_out =
+      (* your code here *)
+      ihalt in
+    compile_program code = c_out
+
+end
+
diff --git a/examples/compiler_noproof/why3session.xml b/examples/compiler_noproof/why3session.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a96c43a7e5379301bfd85388fc04a46a17510c4e
--- /dev/null
+++ b/examples/compiler_noproof/why3session.xml
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="5">
+<prover id="0" name="Z3" version="4.7.1" alternative="counterexamples" timelimit="10" steplimit="0" memlimit="1000"/>
+<prover id="1" name="Eprover" version="2.0" timelimit="10" steplimit="0" memlimit="1000"/>
+<prover id="2" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="3" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/>
+<file name="../imp_per.mlw" proved="true">
+<theory name="Imp" proved="true">
+ <goal name="ceval_deterministic_aux" proved="true">
+ <transf name="induction_pr" proved="true" >
+  <goal name="ceval_deterministic_aux.0" proved="true">
+  <proof prover="3"><result status="valid" time="0.01" steps="42"/></proof>
+  </goal>
+  <goal name="ceval_deterministic_aux.1" proved="true">
+  <proof prover="3"><result status="valid" time="0.02" steps="79"/></proof>
+  </goal>
+  <goal name="ceval_deterministic_aux.2" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.2.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="15"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.2" proved="true">
+   <proof prover="2"><result status="valid" time="0.08"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.3" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.4" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.6" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+  </transf>
+  </goal>
+  <goal name="ceval_deterministic_aux.3" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.3.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="15"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.2" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.3" proved="true">
+   <proof prover="2"><result status="valid" time="0.04"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.4" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.6" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+  </transf>
+  </goal>
+  <goal name="ceval_deterministic_aux.4" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.4.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="15"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.2" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.3" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.4" proved="true">
+   <proof prover="2"><result status="valid" time="0.04"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.6" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+  </transf>
+  </goal>
+  <goal name="ceval_deterministic_aux.5" proved="true">
+  <proof prover="3"><result status="valid" time="0.01" steps="47"/></proof>
+  </goal>
+  <goal name="ceval_deterministic_aux.6" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.6.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.2" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.3" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.4" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.6" proved="true">
+   <proof prover="2"><result status="valid" time="0.08"/></proof>
+   </goal>
+  </transf>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="ceval_deterministic" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="25"/></proof>
+ </goal>
+</theory>
+</file>
+<file name="../compiler_noproof.mlw">
+<theory name="Compile_aexpr" proved="true">
+ <goal name="g_2_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="30"/></proof>
+ <transf name="compute_in_goal" proved="true" >
+ </transf>
+ </goal>
+ <goal name="g_a_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="30"/></proof>
+ </goal>
+</theory>
+<theory name="Compile_com">
+ <goal name="g1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="44"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+ </transf>
+ </goal>
+ <goal name="g3" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+ </transf>
+ </goal>
+ <goal name="g4" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="g4.0" proved="true">
+  <proof prover="3"><result status="valid" time="0.01" steps="9"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="g5">
+ <proof prover="2"><result status="timeout" time="1.00"/></proof>
+ <proof prover="3"><result status="timeout" time="1.00"/></proof>
+ <transf name="compute_in_goal" >
+  <goal name="g5.0">
+  </goal>
+ </transf>
+ </goal>
+</theory>
+</file>
+<file name="../vm_per.mlw" proved="true">
+<theory name="ReflTransClosure" proved="true">
+ <goal name="transition_star_one" proved="true">
+ <proof prover="1"><result status="valid" time="0.01"/></proof>
+ </goal>
+ <goal name="transition_star_transitive" proved="true">
+ <transf name="induction_pr" proved="true" >
+  <goal name="transition_star_transitive.0" proved="true">
+  <proof prover="3"><result status="valid" time="0.00" steps="5"/></proof>
+  </goal>
+  <goal name="transition_star_transitive.1" proved="true">
+  <proof prover="3"><result status="valid" time="0.00" steps="11"/></proof>
+  </goal>
+ </transf>
+ </goal>
+</theory>
+<theory name="Vm" proved="true">
+ <goal name="codeseq_at_app_right" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="30"/></proof>
+ </goal>
+ <goal name="codeseq_at_app_left" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="59"/></proof>
+ </goal>
+</theory>
+<theory name="Vm_test" proved="true">
+ <goal name="cs_0" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_0.0" proved="true">
+  <proof prover="2"><result status="valid" time="0.13"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="cs_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="27"/></proof>
+ </goal>
+ <goal name="cs_2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="90"/></proof>
+ </goal>
+ <goal name="cs_3" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_3.0" proved="true">
+  <proof prover="0"><result status="valid" time="2.72"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.03"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="56"/></proof>
+ </goal>
+ <goal name="g2_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="155"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="3"><result status="valid" time="0.04" steps="68"/></proof>
+ </goal>
+ <goal name="g3_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.07" steps="183"/></proof>
+ </goal>
+ <goal name="g_term" proved="true">
+ <proof prover="3"><result status="valid" time="0.07" steps="193"/></proof>
+ </goal>
+</theory>
+<theory name="Vm_test2" proved="true">
+ <goal name="cs_0" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_0.0" proved="true">
+  <proof prover="0"><result status="valid" time="0.04"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="cs_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="30"/></proof>
+ </goal>
+ <goal name="cs_2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="110"/></proof>
+ </goal>
+ <goal name="cs_3" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="263"/></proof>
+ </goal>
+ <goal name="cs_4" proved="true">
+ <proof prover="0"><result status="valid" time="0.14"/></proof>
+ </goal>
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.04"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="62"/></proof>
+ </goal>
+ <goal name="g2_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.06" steps="187"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="74"/></proof>
+ </goal>
+ <goal name="g3_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.09" steps="215"/></proof>
+ </goal>
+ <goal name="g4" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="77"/></proof>
+ </goal>
+ <goal name="g4_trans" proved="true">
+ <proof prover="2"><result status="valid" time="0.24"/></proof>
+ </goal>
+ <goal name="g_term" proved="true">
+ <proof prover="2"><result status="valid" time="0.21"/></proof>
+ </goal>
+</theory>
+<theory name="Vm_test3" proved="true">
+ <goal name="cs_0" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_0.0" proved="true">
+  <proof prover="0"><result status="valid" time="0.03"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="cs_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="20"/></proof>
+ </goal>
+ <goal name="cs_2" proved="true">
+ <proof prover="0"><result status="valid" time="0.04"/></proof>
+ </goal>
+ <goal name="g1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="29"/></proof>
+ </goal>
+ <goal name="g_term" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="23"/></proof>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/compiler_noproof/why3session.xml.bak b/examples/compiler_noproof/why3session.xml.bak
new file mode 100644
index 0000000000000000000000000000000000000000..36d5bc922ccfef269f36ce160cf0553cadf10a2b
--- /dev/null
+++ b/examples/compiler_noproof/why3session.xml.bak
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="5">
+<prover id="0" name="Z3" version="4.7.1" alternative="counterexamples" timelimit="10" steplimit="0" memlimit="1000"/>
+<prover id="1" name="Eprover" version="2.0" timelimit="10" steplimit="0" memlimit="1000"/>
+<prover id="2" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="3" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/>
+<file name="../imp_per.mlw" proved="true">
+<theory name="Imp" proved="true">
+ <goal name="ceval_deterministic_aux" proved="true">
+ <transf name="induction_pr" proved="true" >
+  <goal name="ceval_deterministic_aux.0" proved="true">
+  <proof prover="3"><result status="valid" time="0.01" steps="42"/></proof>
+  </goal>
+  <goal name="ceval_deterministic_aux.1" proved="true">
+  <proof prover="3"><result status="valid" time="0.02" steps="79"/></proof>
+  </goal>
+  <goal name="ceval_deterministic_aux.2" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.2.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="15"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.2" proved="true">
+   <proof prover="2"><result status="valid" time="0.08"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.3" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.4" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.2.6" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+  </transf>
+  </goal>
+  <goal name="ceval_deterministic_aux.3" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.3.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="15"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.2" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.3" proved="true">
+   <proof prover="2"><result status="valid" time="0.04"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.4" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.3.6" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+  </transf>
+  </goal>
+  <goal name="ceval_deterministic_aux.4" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.4.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="15"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.2" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.3" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.4" proved="true">
+   <proof prover="2"><result status="valid" time="0.04"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.4.6" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+  </transf>
+  </goal>
+  <goal name="ceval_deterministic_aux.5" proved="true">
+  <proof prover="3"><result status="valid" time="0.01" steps="47"/></proof>
+  </goal>
+  <goal name="ceval_deterministic_aux.6" proved="true">
+  <transf name="induction_pr" proved="true" >
+   <goal name="ceval_deterministic_aux.6.0" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="16"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.1" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.2" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.3" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.4" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="18"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.5" proved="true">
+   <proof prover="3"><result status="valid" time="0.01" steps="17"/></proof>
+   </goal>
+   <goal name="ceval_deterministic_aux.6.6" proved="true">
+   <proof prover="2"><result status="valid" time="0.08"/></proof>
+   </goal>
+  </transf>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="ceval_deterministic" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="25"/></proof>
+ </goal>
+</theory>
+</file>
+<file name="../compiler_noproof.mlw">
+<theory name="Compile_aexpr" proved="true">
+ <goal name="g_2_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="30"/></proof>
+ </goal>
+ <goal name="g_a_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="30"/></proof>
+ </goal>
+</theory>
+<theory name="Compile_com">
+ <goal name="g1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="44"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+ </transf>
+ </goal>
+ <goal name="g3" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+ </transf>
+ </goal>
+ <goal name="g4" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="g4.0" proved="true">
+  <proof prover="3"><result status="valid" time="0.01" steps="9"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="g5">
+ <proof prover="2"><result status="timeout" time="1.00"/></proof>
+ <proof prover="3"><result status="timeout" time="1.00"/></proof>
+ <transf name="compute_in_goal" >
+  <goal name="g5.0">
+  </goal>
+ </transf>
+ </goal>
+</theory>
+</file>
+<file name="../vm_per.mlw" proved="true">
+<theory name="ReflTransClosure" proved="true">
+ <goal name="transition_star_one" proved="true">
+ <proof prover="1"><result status="valid" time="0.01"/></proof>
+ </goal>
+ <goal name="transition_star_transitive" proved="true">
+ <transf name="induction_pr" proved="true" >
+  <goal name="transition_star_transitive.0" proved="true">
+  <proof prover="3"><result status="valid" time="0.00" steps="5"/></proof>
+  </goal>
+  <goal name="transition_star_transitive.1" proved="true">
+  <proof prover="3"><result status="valid" time="0.00" steps="11"/></proof>
+  </goal>
+ </transf>
+ </goal>
+</theory>
+<theory name="Vm" proved="true">
+ <goal name="codeseq_at_app_right" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="30"/></proof>
+ </goal>
+ <goal name="codeseq_at_app_left" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="59"/></proof>
+ </goal>
+</theory>
+<theory name="Vm_test" proved="true">
+ <goal name="cs_0" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_0.0" proved="true">
+  <proof prover="2"><result status="valid" time="0.13"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="cs_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="27"/></proof>
+ </goal>
+ <goal name="cs_2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="90"/></proof>
+ </goal>
+ <goal name="cs_3" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_3.0" proved="true">
+  <proof prover="0"><result status="valid" time="2.72"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.03"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="56"/></proof>
+ </goal>
+ <goal name="g2_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="155"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="3"><result status="valid" time="0.04" steps="68"/></proof>
+ </goal>
+ <goal name="g3_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.07" steps="183"/></proof>
+ </goal>
+ <goal name="g_term" proved="true">
+ <proof prover="3"><result status="valid" time="0.07" steps="193"/></proof>
+ </goal>
+</theory>
+<theory name="Vm_test2" proved="true">
+ <goal name="cs_0" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_0.0" proved="true">
+  <proof prover="0"><result status="valid" time="0.04"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="cs_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="30"/></proof>
+ </goal>
+ <goal name="cs_2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="110"/></proof>
+ </goal>
+ <goal name="cs_3" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="263"/></proof>
+ </goal>
+ <goal name="cs_4" proved="true">
+ <proof prover="0"><result status="valid" time="0.14"/></proof>
+ </goal>
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.04"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="3"><result status="valid" time="0.03" steps="62"/></proof>
+ </goal>
+ <goal name="g2_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.06" steps="187"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="74"/></proof>
+ </goal>
+ <goal name="g3_trans" proved="true">
+ <proof prover="3"><result status="valid" time="0.09" steps="215"/></proof>
+ </goal>
+ <goal name="g4" proved="true">
+ <proof prover="3"><result status="valid" time="0.05" steps="77"/></proof>
+ </goal>
+ <goal name="g4_trans" proved="true">
+ <proof prover="2"><result status="valid" time="0.24"/></proof>
+ </goal>
+ <goal name="g_term" proved="true">
+ <proof prover="2"><result status="valid" time="0.21"/></proof>
+ </goal>
+</theory>
+<theory name="Vm_test3" proved="true">
+ <goal name="cs_0" proved="true">
+ <transf name="compute_in_goal" proved="true" >
+  <goal name="cs_0.0" proved="true">
+  <proof prover="0"><result status="valid" time="0.03"/></proof>
+  </goal>
+ </transf>
+ </goal>
+ <goal name="cs_1" proved="true">
+ <proof prover="3"><result status="valid" time="0.01" steps="20"/></proof>
+ </goal>
+ <goal name="cs_2" proved="true">
+ <proof prover="0"><result status="valid" time="0.04"/></proof>
+ </goal>
+ <goal name="g1" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="29"/></proof>
+ </goal>
+ <goal name="g_term" proved="true">
+ <proof prover="3"><result status="valid" time="0.02" steps="23"/></proof>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/compiler_noproof/why3shapes.gz b/examples/compiler_noproof/why3shapes.gz
new file mode 100644
index 0000000000000000000000000000000000000000..897e5bf6906611286c7048c79c74f76b21d628e6
Binary files /dev/null and b/examples/compiler_noproof/why3shapes.gz differ
diff --git a/examples/compiler_noproof/why3shapes.gz.bak b/examples/compiler_noproof/why3shapes.gz.bak
new file mode 100644
index 0000000000000000000000000000000000000000..897e5bf6906611286c7048c79c74f76b21d628e6
Binary files /dev/null and b/examples/compiler_noproof/why3shapes.gz.bak differ
diff --git a/examples/imp_per.mlw b/examples/imp_per.mlw
new file mode 100644
index 0000000000000000000000000000000000000000..52ce429feaccd38c0be2427f2009416ebfcd980e
--- /dev/null
+++ b/examples/imp_per.mlw
@@ -0,0 +1,86 @@
+theory Imp
+
+  use state.State
+  use bool.Bool
+  use int.Int
+  
+
+  (* ************************ SYNTAX ************************ *)
+  type aexpr =
+    | Anum int
+    | Avar id
+    | Aadd aexpr aexpr 
+    | Asub aexpr aexpr
+  
+  type bexpr =
+    | Btrue
+    | Bfalse
+    | Bnot bexpr
+    | Beq aexpr aexpr
+    | Ble aexpr aexpr
+    | Band bexpr bexpr
+    
+  type com =
+    | Cskip
+    | Cassign id aexpr
+    | Cseq com com
+    | Cif bexpr com com
+    | Cwhile bexpr com
+
+
+  (* ************************  SEMANTICS ************************ *)
+  function aeval  (st:state) (e:aexpr) : int =
+    match e with
+      | Anum n      -> n
+      | Avar x      -> st[x]
+      | Aadd e1 e2  -> aeval st e1 + aeval st e2
+      | Asub e1 e2  -> aeval st e1 - aeval st e2
+    end
+
+  function beval (st:state) (b:bexpr) : bool =
+    match b with
+      | Btrue      -> true
+      | Bfalse     -> false
+      | Bnot b'    -> notb (beval st b')
+      | Beq a1 a2  -> aeval st a1 = aeval st a2
+      | Ble a1 a2  -> aeval st a1 <= aeval st a2  
+      | Band b1 b2 -> andb (beval st b1) (beval st b2)
+      
+    end
+
+  inductive ceval state com state =
+    (* skip *)
+    | E_Skip : forall m. ceval m Cskip m
+
+    (* assignement *)
+    | E_Ass  : forall m a x. ceval m (Cassign x a) m[x <- aeval m a]
+
+    (* sequence *)
+    | E_Seq : forall cmd1 cmd2 m0 m1 m2.
+        ceval m0 cmd1 m1 -> ceval m1 cmd2 m2 -> ceval m0 (Cseq cmd1 cmd2) m2
+
+    (* if then else *)
+    | E_IfTrue : forall m0 m1 cond cmd1 cmd2. beval m0 cond ->
+        ceval m0 cmd1 m1 -> ceval m0 (Cif cond cmd1 cmd2) m1
+
+    | E_IfFalse : forall m0 m1 cond cmd1 cmd2. not beval m0 cond ->
+        ceval m0 cmd2 m1 -> ceval m0 (Cif cond cmd1 cmd2) m1
+
+    (* while *)
+    | E_WhileEnd : forall cond m body. not beval m cond ->
+        ceval m (Cwhile cond body) m
+
+    | E_WhileLoop : forall mi mj mf cond body. beval mi cond ->
+        ceval mi body mj -> ceval mj (Cwhile cond body) mf ->
+          ceval mi (Cwhile cond body) mf
+
+
+  (* Determinstic semantics *)
+  lemma ceval_deterministic_aux : forall c mi mf1. ceval mi c mf1 ->
+      forall mf2. ([@inversion] ceval mi c mf2) -> mf1 = mf2
+
+  lemma ceval_deterministic : forall c mi mf1 mf2.
+      ceval mi c mf1 ->  ceval mi c mf2 -> mf1 = mf2
+
+end
+
diff --git a/examples/state.mlw b/examples/state.mlw
new file mode 100644
index 0000000000000000000000000000000000000000..a65547711f8bfaa9ba5d0541b7d91f58d53f1207
--- /dev/null
+++ b/examples/state.mlw
@@ -0,0 +1,45 @@
+
+module State
+
+  use int.Int
+  
+  type id = Id int
+  type state = id -> int
+
+  let function get (f: state) (x: id) = f x
+
+  let function set (f: state) (x: id) (v: int) : state =
+    fun (y: id) -> 
+      match (x, y) with
+      | (Id xv, Id yv) -> if xv = yv then v else (f y) 
+      end
+  meta rewrite_def function set
+
+  let function ([]) f x = f x
+  let function ([<-]) f x v = set f x v
+  
+  let function const (v: int) : state
+    ensures { forall x. result[x] = v }
+  = fun _ -> v
+
+end
+
+module Reg
+
+  use int.Int
+  
+  type idr = int
+  type regs = idr -> int
+
+  let function read (f: regs) (x: idr) = f x
+
+  let function write (f: regs) (x: idr) (v: int) : regs =
+    fun (y: idr) -> if x = y then v else (f y) 
+      
+  meta rewrite_def function write
+  
+  let function const (v: int) : regs
+    ensures { forall x. read result x = v }
+  = fun _ -> v
+
+end
\ No newline at end of file
diff --git a/examples/vm_ind.mlw b/examples/vm_ind.mlw
new file mode 100644
index 0000000000000000000000000000000000000000..752c229551c81ce568f1e45726874d1d462ba940
--- /dev/null
+++ b/examples/vm_ind.mlw
@@ -0,0 +1,110 @@
+module ReflTransClosure
+
+  type parameter
+  type state
+  predicate transition parameter state state
+
+  inductive transition_star parameter (x y : state) =
+    | Refl_ : forall p x. transition_star p x x
+    | Step: forall p x y z.
+        transition p x y -> transition_star p y z -> transition_star p x z
+
+  lemma transition_star_one: forall p s1 s2.
+    transition p s1 s2 -> transition_star p s1 s2
+
+  lemma transition_star_transitive: forall p s1 s2 s3.
+    transition_star p s1 s2 -> transition_star p s2 s3 ->
+      transition_star p s1 s3
+
+end
+
+
+theory VM_ind
+
+  use export int.Int
+  use export list.List
+  use export list.NthNoOpt
+  use export state.State
+  
+  type stack = list int
+  type pos = int
+  type machine_state = (pos, stack, state)
+  
+  type instr =
+    | Iconst int   (*   push n on stack                               *)
+    | Ivar id      (*   push the value of variable                    *)
+    | Iadd         (*   pop two values, push their sum                *)
+    | Isub         (*   pop two values, push their difference         *)
+    | Ihalt        (*   end of program                                *)
+    
+  type code = list instr
+  
+  function pop (st : stack) : (int, stack) =
+  match st with
+  | Nil        -> (0, st)
+  | Cons c st' -> (c, st')
+  end
+
+  function push (v : int) (st : stack) : stack = Cons v st
+
+  inductive transition code machine_state machine_state =
+  | trans_const:  forall c p n. nth p c = (Iconst n) ->
+    forall s m. transition c (p, s, m) (p + 1, push n s, m)
+
+  | trans_var:  forall c p id. nth p c = (Ivar id) ->
+    forall s m. transition c (p, s, m) (p + 1, push m[id] s, m)
+
+  | trans_add:  forall c p. nth p c = (Iadd) ->
+    forall n1 n2 s m. transition c (p, push n2 (push n1 s), m) (p + 1, push (n1 + n2) s, m)
+
+  | trans_sub:  forall c p. nth p c = (Isub) ->
+    forall n1 n2 s m. transition c (p, push n2 (push n1 s), m) (p + 1, push (n1 - n2) s, m)
+
+
+   clone export ReflTransClosure with type parameter = code,
+     type state = machine_state, predicate transition = transition
+
+   predicate vm_terminates (c:code) (mi mf:state) =
+     exists p. nth p c = Ihalt /\
+       transition_star c (0, Nil, mi) (p, Nil, mf)
+
+   predicate vm_terminates_non_empty (c:code) (mi mf:state) =
+     exists p s. nth p c = Ihalt /\
+       transition_star c (0, Nil, mi) (p, s, mf)
+
+end
+
+theory VM_ind_test
+
+  use VM_ind
+  use map.Const
+  
+  function (::) (i : 'a) (l : list 'a) : list 'a = Cons i l
+
+  constant m0 : state = (const 0)[Id 1 <- 2]
+  constant c : code = (Ivar (Id 1) :: (Iconst 1 :: (Iadd :: (Ihalt :: Nil))))
+
+  lemma c0 : nth 0 c = Ivar (Id 1)
+  lemma c1 : nth 1 c = Iconst 1
+  lemma c2 : nth 2 c = Iadd
+  lemma c3 : nth 3 c = Ihalt
+
+  lemma g1 : (* 2 + 1 = 3, step one *)
+    transition c (0, Nil, m0) (1, 2 :: Nil, m0)
+
+  lemma g2 : (* 2 + 1 = 3, step two *)
+    transition c (1, 2 :: Nil, m0) (2, 1 :: (2 :: Nil), m0)
+
+  lemma g3 : (* 2 + 1 = 3, step three *)
+    transition c (2, 1 :: (2 :: Nil), m0) (3, 3 :: Nil, m0)
+
+  lemma g3_trans : (* 2 + 1 = 3, multiple steps *)
+    transition_star c (0, Nil, m0) (3, 3 :: Nil, m0)
+
+  goal g_term : (* 2 + 1 = 3, terminates with non-empty stack *)
+    vm_terminates_non_empty  c m0 m0
+
+end
+
+
+  
diff --git a/examples/vm_mem.mlw b/examples/vm_mem.mlw
new file mode 100644
index 0000000000000000000000000000000000000000..25ac783e84c51c9e062f66785e5c63904972dc56
--- /dev/null
+++ b/examples/vm_mem.mlw
@@ -0,0 +1,103 @@
+theory VM_mem
+
+  use export int.Int
+  use export list.List
+  use export state.State
+  
+  type stack = list int
+  type machine_state = (stack, state)
+  
+  type instr =
+    | Iconst int   (*   push n on stack                               *)
+    | Ivar id      (*   push the value of variable                    *)
+    | Iadd         (*   pop two values, push their sum                *)
+    | Isub         (*   pop two values, push their difference         *)
+
+  function pop (st : stack) : (int, stack) =
+  match st with
+  | Nil        -> (0, st)
+  | Cons c st' -> (c, st')
+  end
+
+
+  function push (v : int) (st : stack) : stack = Cons v st
+
+  function fconst (v : int) (m : machine_state) : machine_state =
+    let (stack, state) = m in (push v stack, state)
+   
+  function fvar (id : id) (m : machine_state) : machine_state = 
+    let (stack, state) = m in (push state[id] stack, state)
+
+
+  function fadd (m : machine_state) : machine_state =
+    let (stack, state) = m in
+    let (a1, st1) = pop stack in
+    let (a2, st2) = pop st1 in
+    (push (a1 + a2) st2, state)
+
+  function fsub (m : machine_state) : machine_state =
+    let (stack, state) = m in
+    let (a1, st1) = pop stack in
+    let (a2, st2) = pop st1 in
+    (push (a2 - a1) st2, state)
+
+end
+
+
+theory VM_mem_test
+
+  use VM_mem
+  
+  goal g1 : (* 2 + 1 = 3 *)
+    forall state.
+    fadd (fconst 1 (fconst 2 (Nil, state))) = (Cons 3 Nil, state)
+
+  constant s0 : state = (const 0)[Id 1 <- 2]
+  constant m0 : machine_state = (Nil, s0)
+  
+  goal g2 : (* a + 1 = 3, state[a] = 2 *)
+    fadd (fconst 1 (fvar (Id 1) m0)) = (Cons 3 Nil, s0)
+
+end
+
+
+theory VM_mem_list
+
+  use export VM_mem
+
+  function vm_i (i : instr) (m : machine_state) : machine_state =
+  match i with
+  | Iconst v  -> fconst v m
+  | Ivar id   -> fvar id m
+  | Iadd      -> fadd m
+  | Isub      -> fsub m
+  end
+  
+  function vm (il : list instr) (m : machine_state) : machine_state =
+  match il with
+  | Nil        -> m
+  | Cons i il' -> vm il' (vm_i i m)
+  end
+  
+end
+
+theory VM_mem_list_test
+
+  use VM_mem_list
+  
+  function (::) (i : 'a) (l : list 'a) : list 'a = Cons i l
+
+  constant s0 : state = (const 0)[Id 1 <- 2]
+  constant m0 : machine_state = (Nil, s0)
+
+  goal g1 : (* 2 + 1 = 3 *)
+    vm (Iconst 2 :: (Iconst 1 :: (Iadd :: Nil))) m0 = (3 :: Nil, s0)
+
+  goal g2 : (* a + 1 = 3 *)
+    vm (Ivar (Id 1) :: (Iconst 1 :: (Iadd :: Nil))) m0 = (3 :: Nil, s0)
+
+
+end
+
+
+  
diff --git a/examples/vm_mem/why3session.xml b/examples/vm_mem/why3session.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a1422bd9d0c936e66827fa92d8bea04a8e3f611
--- /dev/null
+++ b/examples/vm_mem/why3session.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="5">
+<prover id="0" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="1" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="2" name="Z3" version="4.7.1" alternative="counterexamples" timelimit="10" steplimit="0" memlimit="1000"/>
+<file name="../vm_mem.mlw">
+<theory name="VM_mem_test">
+ <goal name="g1">
+ <proof prover="0"><result status="unknown" time="0.06"/></proof>
+ <proof prover="1"><result status="timeout" time="1.00"/></proof>
+ <proof prover="2"><result status="timeout" time="10.00"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="32"/></proof>
+ </goal>
+</theory>
+<theory name="VM_mem_list_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.04" steps="138"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.04" steps="137"/></proof>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/vm_mem/why3session.xml.bak b/examples/vm_mem/why3session.xml.bak
new file mode 100644
index 0000000000000000000000000000000000000000..1e7e84676d17432efa719ad004318d485477361e
--- /dev/null
+++ b/examples/vm_mem/why3session.xml.bak
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="5">
+<prover id="0" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="1" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/>
+<file name="../vm_mem.mlw">
+<theory name="VM_mem_test">
+ <goal name="g1">
+ <proof prover="0"><result status="unknown" time="0.06"/></proof>
+ <proof prover="1"><result status="timeout" time="1.00"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="32"/></proof>
+ </goal>
+</theory>
+<theory name="VM_mem_list_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.04" steps="138"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.04" steps="137"/></proof>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/vm_mem/why3shapes.gz b/examples/vm_mem/why3shapes.gz
new file mode 100644
index 0000000000000000000000000000000000000000..7861f4e60dd895c80d51205854aebe7f33b1657d
Binary files /dev/null and b/examples/vm_mem/why3shapes.gz differ
diff --git a/examples/vm_mem/why3shapes.gz.bak b/examples/vm_mem/why3shapes.gz.bak
new file mode 100644
index 0000000000000000000000000000000000000000..7861f4e60dd895c80d51205854aebe7f33b1657d
Binary files /dev/null and b/examples/vm_mem/why3shapes.gz.bak differ
diff --git a/examples/vm_per.mlw b/examples/vm_per.mlw
new file mode 100644
index 0000000000000000000000000000000000000000..7928a575225babdd6a4cd1fb3913d3cc2f22d124
--- /dev/null
+++ b/examples/vm_per.mlw
@@ -0,0 +1,254 @@
+
+(* Utility module: reflexive transitive closure of a parameterized
+   relation. *)
+module ReflTransClosure
+
+  type parameter
+  type state
+  predicate transition parameter state state
+
+  inductive transition_star parameter (x y:state) =
+    | Refl_: forall p x. transition_star p x x
+    | Step: forall p x y z.
+        transition p x y -> transition_star p y z -> transition_star p x z
+
+  lemma transition_star_one: forall p s1 s2.
+    transition p s1 s2 -> transition_star p s1 s2
+
+  lemma transition_star_transitive: forall p s1 s2 s3.
+    transition_star p s1 s2 -> transition_star p s2 s3 ->
+      transition_star p s1 s3
+
+end
+
+
+(******************************************************************************)
+
+(* The machine operates on a code c (a fixed list of instructions)
+   and three variable components:
+    - a program counter, denoting a position in c
+    - a state assigning integer values to variables
+    - an evaluation stack, containing integers.
+*)
+
+theory Vm 
+
+  use export state.State
+  use export int.Int
+  use export list.List
+  use export list.Length
+  use export list.Append
+  use export int.EuclideanDivision 
+
+  type pos = int                           (* read position on stack        *)
+  type stack = list int                    (* stack contains just integers  *)
+  type machine_state = VMS pos stack state (* virtual machine configuration *)
+
+
+  type ofs = int
+  (* The instruction set of the machine.  *)
+  type instr =
+    | Iconst int   (*   push n on stack                               *)
+    | Ivar id      (*   push the value of variable                    *)
+    | Isetvar id   (*   pop an integer, assign it to variable         *)
+    | Ibranch ofs  (*   skip ofs instructions                         *)
+    | Iadd         (*   pop two values, push their sum                *)
+    | Isub         (*   pop two values, push their difference         *)
+    | Imul         (*   pop two values, push their product            *)
+    | Ibeq ofs     (*   pop n2, pop n1, skip ofs forward if n1 =  n2  *)
+    | Ibne ofs     (*   pop n2, pop n1, skip ofs forward if n1 <> n2  *)
+    | Ible ofs     (*   pop n2, pop n1, skip ofs forward if n1 <= n2  *)
+    | Ibgt ofs     (*   pop n2, pop n1, skip ofs forward if n1 >  n2  *)
+    | Ihalt        (*   end of program                                *)
+
+  type code = list instr
+
+  (* Read pointer to code *)
+  inductive codeseq_at code pos code =
+    | codeseq_at_intro : forall c1 c2 c3.
+        codeseq_at (c1 ++ c2 ++ c3) (length c1) c2
+
+
+  lemma codeseq_at_app_right: forall c c1 c2 p.
+    codeseq_at c p (c1 ++ c2) -> codeseq_at c (p + length c1) c2
+
+
+  lemma codeseq_at_app_left: forall c c1 c2 p.
+    codeseq_at c p (c1 ++ c2) -> codeseq_at c p c1
+
+  function push (n:int) (s:stack) : stack = Cons n s
+  function iconst (n:int) : code = Cons (Iconst n) Nil
+  function ivar (x:id) : code  = Cons (Ivar x) Nil
+  function isetvar (x:id) : code = Cons (Isetvar x) Nil
+  constant iadd : code = Cons Iadd Nil
+  constant isub : code = Cons Isub Nil
+  constant imul : code = Cons Imul Nil
+  function ibeq (ofs:ofs) : code = Cons (Ibeq ofs) Nil
+  function ible (ofs:ofs) : code = Cons (Ible ofs) Nil
+  function ibne (ofs:ofs) : code = Cons (Ibne ofs) Nil
+  function ibgt (ofs:ofs) : code = Cons (Ibgt ofs) Nil
+  function ibranch (ofs:ofs) : code = Cons (Ibranch ofs) Nil
+  constant ihalt : code = (Cons Ihalt Nil)
+
+  (* The semantics of the virtual machine is given in small-step style,
+     as a transition relation between machine states: triples (program
+     counter, evaluation stack, variable state). The transition relation is
+     parameterized by the code c. There is one transition rule for each
+     kind of instruction, except Ihalt, which has no transition. *)
+
+  inductive transition code machine_state machine_state =
+    | trans_const : forall c p n. codeseq_at c p (iconst n) ->
+        forall s m. transition c (VMS p s m) (VMS (p + 1) (push n s) m)
+
+    | trans_var : forall c p x. codeseq_at c p (ivar x) ->
+        forall s m. transition c (VMS p s m) (VMS (p + 1) (push m[x] s) m)
+
+    | trans_set_var: forall c p x. codeseq_at c p (isetvar x) ->
+        forall n s m. transition c (VMS p (push n s) m) (VMS (p + 1) s m[x<-n])
+
+    | trans_add : forall c p. codeseq_at c p iadd ->
+        forall n1 n2 s m. transition c (VMS p (push n2 (push n1 s)) m)
+                                    (VMS (p + 1) (push (n1 + n2) s) m)
+
+    | trans_sub : forall c p. codeseq_at c p isub ->
+        forall n1 n2 s m. transition c (VMS p (push n2 (push n1 s)) m)
+                                    (VMS (p + 1) (push (n1 - n2) s) m)
+
+    | trans_mul : forall c p. codeseq_at c p imul ->
+        forall n1 n2 s m. transition c (VMS p (push n2 (push n1 s)) m)
+                                    (VMS (p + 1) (push (n1 * n2) s) m)
+
+    | trans_beq: forall c p1 ofs. codeseq_at c p1 (ibeq ofs) ->
+        forall s m n1 n2. transition c (VMS p1 (push n2 (push n1 s)) m)
+                   (VMS (if n1 = n2 then p1 + 1 + ofs else p1 + 1) s m)
+
+    | trans_bne: forall c p1 ofs. codeseq_at c p1 (ibne ofs) ->
+        forall s m n1 n2. transition c (VMS p1 (push n2 (push n1 s)) m)
+                  (VMS (if n1 = n2 then p1 + 1 else p1 + 1 + ofs) s  m)
+
+    | trans_ble: forall c p1 ofs. codeseq_at c p1 (ible ofs) ->
+        forall s m n1 n2. transition c (VMS p1 (push n2 (push n1 s)) m)
+                 (VMS (if n1 <= n2 then p1 + 1 + ofs else p1 + 1)  s m)
+
+    | trans_bgt: forall c p1 ofs. codeseq_at c p1 (ibgt ofs) ->
+        forall s m n1 n2. transition c (VMS p1 (push n2 (push n1 s)) m)
+                 (VMS (if n1 <= n2 then p1 + 1 else p1 + 1 + ofs) s  m)
+
+    | trans_branch: forall c p ofs. codeseq_at c p (ibranch ofs) ->
+        forall s m. transition c (VMS p s m) (VMS (p + 1 + ofs) s m)
+
+  (* As usual with small-step semantics, we form sequences of machine
+     transitions to define the behavior of a code. We always start with pc
+     = 0 and an empty evaluation stack. We stop successfully if pc points
+     to an Ihalt instruction and the evaluation stack is empty. *)
+
+   clone export ReflTransClosure with type parameter = code,
+     type state = machine_state, predicate transition = transition
+
+   predicate vm_terminates (c:code) (mi mf:state) =
+     exists p. codeseq_at c p ihalt /\
+       transition_star c (VMS 0 Nil mi) (VMS p Nil mf)
+
+   predicate vm_terminates_non_empty (c:code) (mi mf:state) =
+     exists p s. codeseq_at c p ihalt /\
+       transition_star c (VMS 0 Nil mi) (VMS p s mf)
+
+end
+
+theory Vm_test
+
+  use Vm
+  
+  constant m0 : state = (const 0)[Id 1 <- 2]
+  constant c : code = ivar (Id 1) ++ (iconst 1 ++ (iadd ++ ihalt))
+  
+  function (::) (i : 'a) (l : list 'a) : list 'a = Cons i l
+
+  lemma cs_0 : codeseq_at c 0 (ivar (Id 1))  
+  lemma cs_1 : codeseq_at c 1 (iconst 1)
+  lemma cs_2 : codeseq_at c 2 iadd
+  lemma cs_3 : codeseq_at c 3 ihalt      
+
+  lemma g1 : (* 0 -> 1 *)
+    transition c (VMS 0 Nil m0) (VMS 1 (2 :: Nil) m0)
+
+  lemma g2 : (* 1 -> 2 *)
+    transition c (VMS 1 (2::Nil) m0) (VMS 2 (1::(2 :: Nil)) m0)
+
+  lemma g2_trans : (* 0 -> 2 *) 
+    transition_star c (VMS 0 Nil m0) (VMS 2 (1::(2 :: Nil)) m0)
+
+  lemma g3 : (* 2 -> 3 *)
+    transition c (VMS 2 (1::(2::Nil)) m0) (VMS 3 (3::Nil) m0)
+
+  goal g3_trans : (* 0 -> 3 *)
+    transition_star c (VMS 0 Nil m0) (VMS 3 (3::Nil) m0)
+
+  goal g_term : 
+    vm_terminates_non_empty c m0 m0
+    
+end
+
+
+theory Vm_test2
+
+  use Vm
+  
+  constant m0 : state = (const 0)[Id 1 <- 2]
+  constant c : code = ivar (Id 1) ++ (iconst 1 ++ (iadd ++ (isetvar (Id 2) ++ (ihalt))))
+  
+  function (::) (i : 'a) (l : list 'a) : list 'a = Cons i l
+
+  lemma cs_0 : codeseq_at c 0 (ivar (Id 1))
+  lemma cs_1 : codeseq_at c 1 (iconst 1)
+  lemma cs_2 : codeseq_at c 2 iadd
+  lemma cs_3 : codeseq_at c 3 (isetvar (Id 2))
+  lemma cs_4 : codeseq_at c 4 ihalt      
+  
+  lemma g1 : 
+    transition c (VMS 0 Nil m0) (VMS 1 (2 :: Nil) m0)
+
+  lemma g2 : 
+    transition c (VMS 1 (2::Nil) m0) (VMS 2 (1::(2 :: Nil)) m0)
+
+  lemma g2_trans : 
+    transition_star c (VMS 0 Nil m0) (VMS 2 (1::(2 :: Nil)) m0)
+
+  lemma g3 : 
+    transition c (VMS 2 (1::(2::Nil)) m0) (VMS 3 (3::Nil) m0)
+
+  goal g3_trans : 
+    transition_star c (VMS 0 Nil m0) (VMS 3 (3::Nil) m0)
+
+  lemma g4 : 
+    transition c (VMS 3 (3::Nil) m0) (VMS 4 Nil m0[Id 2<-3])
+
+  goal g4_trans : 
+    transition_star c (VMS 0 Nil m0) (VMS 4 Nil m0[Id 2<-3])
+
+  goal g_term : 
+    vm_terminates c m0 m0[Id 2<-3]
+    
+end
+
+theory Vm_test3
+
+  use Vm
+  
+  constant m0 : state = (const 0)[Id 1 <- 2]
+  constant c : code = ibranch 1 ++ (iconst 1 ++ ihalt)
+  
+  function (::) (i : 'a) (l : list 'a) : list 'a = Cons i l
+
+  lemma cs_0 : codeseq_at c 0 (ibranch 1)
+  lemma cs_1 : codeseq_at c 1 (iconst 1)
+  lemma cs_2 : codeseq_at c 2 ihalt
+  
+  lemma g1 : 
+    transition c (VMS 0 Nil m0) (VMS 2 Nil m0)
+
+  goal g_term : 
+    vm_terminates_non_empty c m0 m0
+    
+end
+
diff --git a/examples/vm_simple.mlw b/examples/vm_simple.mlw
new file mode 100644
index 0000000000000000000000000000000000000000..d6898b21cb0605d3bee1bb6928c3240761aa2fc1
--- /dev/null
+++ b/examples/vm_simple.mlw
@@ -0,0 +1,95 @@
+theory VM_simple
+
+  use export int.Int
+  use export list.List
+  
+  type stack = list int
+  
+  type instr =
+    | Iconst int   (*   push n on stack                               *)
+    | Iadd         (*   pop two values, push their sum                *)
+    | Isub         (*   pop two values, push their difference         *)
+
+  function pop (st : stack) : (int, stack) =
+  match st with
+  | Nil        -> (0, st)
+  | Cons c st' -> (c, st')
+  end
+
+  function push (v : int) (st : stack) : stack = Cons v st
+
+  function fconst (v : int) (st : stack) : stack = push v st
+  
+  function fadd (st : stack) : stack =
+    let (a1, st1) = pop st in
+    let (a2, st2) = pop st1 in
+    push (a1 + a2) st2
+
+  function fsub (st : stack) : stack =
+    let (a1, st1) = pop st in
+    let (a2, st2) = pop st1 in
+    push (a2 - a1) st2
+
+end
+
+theory VM_simple_test
+
+  use VM_simple
+  
+  goal g1 : (* 1 + 2 = 3 *)
+    fadd (fconst 2 (fconst 1 Nil)) = Cons 3 Nil
+
+  goal g2 : (* 2 - 1 = 1 *)
+    fsub (fconst 1 (fconst 2 Nil)) = Cons 1 Nil
+
+  goal g3 : (* 3 - (1 + 2) = 0 *)
+    fsub (fadd (fconst 2 (fconst 1 (fconst 3 Nil)))) = Cons 0 Nil
+
+  goal g4 : (* (3 - 1) + 2 = 4 *)
+    fadd (fconst 2 (fsub (fconst 1 (fconst 3 Nil)))) = Cons 4 Nil
+    
+end
+
+
+theory VM_simple_list
+
+  use export VM_simple
+
+  function vm_i (i : instr) (st : stack) : stack =
+  match i with
+  | Iconst v  -> fconst v st
+  | Iadd      -> fadd st
+  | Isub      -> fsub st
+  end
+  
+  function vm (il : list instr) (st : stack) : stack =
+  match il with
+  | Nil        -> st
+  | Cons i il' -> vm il' (vm_i i st )
+  end
+  
+end
+
+theory VM_simple_list_test
+
+  use VM_simple_list
+  function (::) (i : 'a) (l : list 'a) : list 'a = Cons i l
+
+  goal g1 : (* 1 + 2 = 3 *)
+    vm (Iconst 1 :: (Iconst 2 :: (Iadd :: Nil))) Nil = 3 :: Nil
+
+  goal g2 : (* 2 - 1 = 1 *)
+    vm (Iconst 2 :: (Iconst 1 :: (Isub :: Nil))) Nil = 1 :: Nil
+
+  goal g3 : (* 3 - (1 + 2) = 0 *)
+    vm (Iconst 3 :: (Iconst 1 :: (Iconst 2 :: (Iadd :: (Isub :: Nil))))) Nil
+    = 0 :: Nil
+
+  goal g4 : (* (3 - 1) + 2 = 4 *)
+    vm (Iconst 3 :: (Iconst 1 :: (Isub :: (Iconst 2 :: (Iadd :: Nil))))) Nil
+    = 4 :: Nil
+
+end
+
+
+  
diff --git a/examples/vm_simple/why3session.xml b/examples/vm_simple/why3session.xml
new file mode 100644
index 0000000000000000000000000000000000000000..83ad4d685f4cde2c4f651eead921b1760335720c
--- /dev/null
+++ b/examples/vm_simple/why3session.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="5">
+<prover id="0" name="Alt-Ergo" version="2.0.0" timelimit="10" steplimit="0" memlimit="1000"/>
+<prover id="1" name="Z3" version="4.7.1" alternative="counterexamples" timelimit="10" steplimit="0" memlimit="1000"/>
+<prover id="2" name="Eprover" version="2.0" timelimit="10" steplimit="0" memlimit="1000"/>
+<file name="../vm_ind.mlw" proved="true">
+<theory name="ReflTransClosure" proved="true">
+ <goal name="transition_star_one" proved="true">
+ <proof prover="2"><result status="valid" time="0.01"/></proof>
+ </goal>
+ <goal name="transition_star_transitive" proved="true">
+ <transf name="induction_pr" proved="true" >
+  <goal name="transition_star_transitive.0" proved="true">
+  <proof prover="0"><result status="valid" time="0.00" steps="5"/></proof>
+  </goal>
+  <goal name="transition_star_transitive.1" proved="true">
+  <proof prover="0"><result status="valid" time="0.00" steps="11"/></proof>
+  </goal>
+ </transf>
+ </goal>
+</theory>
+<theory name="VM_ind_test" proved="true">
+ <goal name="c0" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="5"/></proof>
+ </goal>
+ <goal name="c1" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="10"/></proof>
+ </goal>
+ <goal name="c2" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="31"/></proof>
+ </goal>
+ <goal name="c3" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="41"/></proof>
+ </goal>
+ <goal name="g1" proved="true">
+ <proof prover="1"><result status="valid" time="0.02"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.02" steps="55"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="0"><result status="valid" time="0.02" steps="64"/></proof>
+ </goal>
+ <goal name="g3_trans" proved="true">
+ <proof prover="0"><result status="valid" time="0.07" steps="185"/></proof>
+ </goal>
+ <goal name="g_term" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="46"/></proof>
+ </goal>
+</theory>
+</file>
+<file name="../state.mlw" proved="true">
+<theory name="State" proved="true">
+ <goal name="VC get" expl="VC for get" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="1"/></proof>
+ </goal>
+ <goal name="VC set" expl="VC for set" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="1"/></proof>
+ </goal>
+ <goal name="VC mixfix []" expl="VC for mixfix []" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="1"/></proof>
+ </goal>
+ <goal name="VC mixfix [&lt;-]" expl="VC for mixfix [<-]" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="1"/></proof>
+ </goal>
+ <goal name="VC const" expl="VC for const" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="2"/></proof>
+ </goal>
+</theory>
+<theory name="Reg" proved="true">
+ <goal name="VC read" expl="VC for read" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="1"/></proof>
+ </goal>
+ <goal name="VC write" expl="VC for write" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="1"/></proof>
+ </goal>
+ <goal name="VC const" expl="VC for const" proved="true">
+ <proof prover="0"><result status="valid" time="0.00" steps="2"/></proof>
+ </goal>
+</theory>
+</file>
+<file name="../vm_mem.mlw" proved="true">
+<theory name="VM_mem_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="29"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="32"/></proof>
+ </goal>
+</theory>
+<theory name="VM_mem_list_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.04" steps="138"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.03" steps="137"/></proof>
+ </goal>
+</theory>
+</file>
+<file name="../vm_simple.mlw" proved="true">
+<theory name="VM_simple_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.01" steps="21"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.01" steps="21"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.02" steps="44"/></proof>
+ </goal>
+ <goal name="g4" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.01" steps="31"/></proof>
+ </goal>
+</theory>
+<theory name="VM_simple_list_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.03" steps="113"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.03" steps="113"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.07" steps="224"/></proof>
+ </goal>
+ <goal name="g4" proved="true">
+ <proof prover="0" timelimit="1"><result status="valid" time="0.07" steps="227"/></proof>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/vm_simple/why3session.xml.bak b/examples/vm_simple/why3session.xml.bak
new file mode 100644
index 0000000000000000000000000000000000000000..fd93fcb0c57cb03ec55483fa0b59804a633070b0
--- /dev/null
+++ b/examples/vm_simple/why3session.xml.bak
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
+"http://why3.lri.fr/why3session.dtd">
+<why3session shape_version="5">
+<prover id="0" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/>
+<file name="../vm_simple.mlw" proved="true">
+<theory name="VM_simple_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="21"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="21"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="0"><result status="valid" time="0.02" steps="44"/></proof>
+ </goal>
+ <goal name="g4" proved="true">
+ <proof prover="0"><result status="valid" time="0.01" steps="31"/></proof>
+ </goal>
+</theory>
+<theory name="VM_simple_list_test" proved="true">
+ <goal name="g1" proved="true">
+ <proof prover="0"><result status="valid" time="0.03" steps="113"/></proof>
+ </goal>
+ <goal name="g2" proved="true">
+ <proof prover="0"><result status="valid" time="0.03" steps="113"/></proof>
+ </goal>
+ <goal name="g3" proved="true">
+ <proof prover="0"><result status="valid" time="0.07" steps="224"/></proof>
+ </goal>
+ <goal name="g4" proved="true">
+ <proof prover="0"><result status="valid" time="0.07" steps="227"/></proof>
+ </goal>
+</theory>
+</file>
+</why3session>
diff --git a/examples/vm_simple/why3shapes.gz b/examples/vm_simple/why3shapes.gz
new file mode 100644
index 0000000000000000000000000000000000000000..7899402116a3e26b0ad9aca419da93ef5386d71e
Binary files /dev/null and b/examples/vm_simple/why3shapes.gz differ
diff --git a/examples/vm_simple/why3shapes.gz.bak b/examples/vm_simple/why3shapes.gz.bak
new file mode 100644
index 0000000000000000000000000000000000000000..1e48fe050851d7d73db8b72fee23aaac8079dfc0
Binary files /dev/null and b/examples/vm_simple/why3shapes.gz.bak differ