Commit f0547868 authored by Clément Fumex's avatar Clément Fumex

Add the ability to

* declare range types and float types,
* use integer (resp. real) literals for those types through casting,
* specify how to print them in drivers.

Change in syntax
* use

  type t = < range 1 2 >   (* integers from 1 to 2 *)
  type t' = < float 4 12 > (* float with 4 bits in exponent and 12 in mantissa *)

  the two projections :
  t'int
  t''real

  and the predicate :
  t''isFinite

* Restrict the use of "'" in whyml:
  Users are not allowed to introduce names where a quote symbol
  is followed by a letter. Thus, the following identifiers are
  valid:

  t'
  toto'0''
  toto'_phi

  whereas toto'phi is not.

Note: we do not yet support negative numbers in range declaration
and casting of a literal.
parent 0026440d
...@@ -181,8 +181,7 @@ LIB_MLW = ity expr dexpr pdecl pmodule ...@@ -181,8 +181,7 @@ LIB_MLW = ity expr dexpr pdecl pmodule
LIB_PARSER = ptree glob parser typing lexer LIB_PARSER = ptree glob parser typing lexer
LIB_TRANSFORM = simplify_formula inlining split_goal induction \ LIB_TRANSFORM = simplify_formula inlining split_goal induction \
detect_polymorphism \ detect_polymorphism reduction_engine compute \
reduction_engine compute \
eliminate_definition eliminate_algebraic \ eliminate_definition eliminate_algebraic \
eliminate_inductive eliminate_let eliminate_if \ eliminate_inductive eliminate_let eliminate_if \
libencoding discriminate encoding encoding_select \ libencoding discriminate encoding encoding_select \
...@@ -193,7 +192,7 @@ LIB_TRANSFORM = simplify_formula inlining split_goal induction \ ...@@ -193,7 +192,7 @@ LIB_TRANSFORM = simplify_formula inlining split_goal induction \
eliminate_epsilon intro_projections_counterexmp \ eliminate_epsilon intro_projections_counterexmp \
intro_vc_vars_counterexmp prepare_for_counterexmp \ intro_vc_vars_counterexmp prepare_for_counterexmp \
eval_match instantiate_predicate smoke_detector \ eval_match instantiate_predicate smoke_detector \
induction_pr prop_curry induction_pr prop_curry eliminate_literal
LIB_PRINTER = cntexmp_printer alt_ergo why3printer smtv1 smtv2 coq pvs isabelle \ LIB_PRINTER = cntexmp_printer alt_ergo why3printer smtv1 smtv2 coq pvs isabelle \
simplify gappa cvc3 yices mathematica simplify gappa cvc3 yices mathematica
......
...@@ -20,13 +20,13 @@ steps "Valid (\\([0-9]+.?[0-9]*\\)) (\\([0-9]+.?[0-9]*\\))" 2 ...@@ -20,13 +20,13 @@ steps "Valid (\\([0-9]+.?[0-9]*\\)) (\\([0-9]+.?[0-9]*\\))" 2
steps "Valid (\\([0-9]+.?[0-9]*\\)) (\\([0-9]+.?[0-9]*\\) steps)" 2 steps "Valid (\\([0-9]+.?[0-9]*\\)) (\\([0-9]+.?[0-9]*\\) steps)" 2
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
(* À discuter *)
transformation "inline_trivial" transformation "inline_trivial"
transformation "eliminate_builtin" transformation "eliminate_builtin"
transformation "eliminate_recursion" transformation "eliminate_recursion"
transformation "eliminate_inductive" transformation "eliminate_inductive"
transformation "eliminate_algebraic" transformation "eliminate_algebraic"
transformation "eliminate_literal"
transformation "eliminate_epsilon" transformation "eliminate_epsilon"
transformation "eliminate_if" transformation "eliminate_if"
transformation "eliminate_let" transformation "eliminate_let"
......
...@@ -4,9 +4,9 @@ unknown "Error: \\(.*\\)$" "\\1" ...@@ -4,9 +4,9 @@ unknown "Error: \\(.*\\)$" "\\1"
fail "Syntax error: \\(.*\\)$" "\\1" fail "Syntax error: \\(.*\\)$" "\\1"
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
(* À discuter *)
transformation "eliminate_non_struct_recursion" transformation "eliminate_non_struct_recursion"
transformation "eliminate_if" transformation "eliminate_if"
transformation "eliminate_literal"
transformation "eliminate_non_lambda_set_epsilon" transformation "eliminate_non_lambda_set_epsilon"
transformation "eliminate_projections" transformation "eliminate_projections"
......
...@@ -14,13 +14,12 @@ outofmemory "Out of memory\\|std::bad_alloc\\|GNU MP: Cannot allocate memory" ...@@ -14,13 +14,12 @@ outofmemory "Out of memory\\|std::bad_alloc\\|GNU MP: Cannot allocate memory"
timeout "self-timeout" timeout "self-timeout"
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
(* À discuter *)
transformation "inline_trivial" transformation "inline_trivial"
transformation "eliminate_builtin" transformation "eliminate_builtin"
transformation "eliminate_definition" transformation "eliminate_definition"
transformation "eliminate_inductive" transformation "eliminate_inductive"
transformation "eliminate_algebraic" transformation "eliminate_algebraic"
transformation "eliminate_literal"
transformation "eliminate_epsilon" transformation "eliminate_epsilon"
transformation "simplify_formula" transformation "simplify_formula"
......
...@@ -16,6 +16,7 @@ transformation "eliminate_builtin" ...@@ -16,6 +16,7 @@ transformation "eliminate_builtin"
transformation "eliminate_definition" transformation "eliminate_definition"
transformation "eliminate_inductive" transformation "eliminate_inductive"
transformation "eliminate_algebraic" transformation "eliminate_algebraic"
transformation "eliminate_literal"
transformation "eliminate_epsilon" transformation "eliminate_epsilon"
transformation "simplify_formula" transformation "simplify_formula"
......
...@@ -27,6 +27,7 @@ transformation "eliminate_definition" ...@@ -27,6 +27,7 @@ transformation "eliminate_definition"
*) *)
transformation "eliminate_inductive" transformation "eliminate_inductive"
transformation "eliminate_algebraic_if_poly" transformation "eliminate_algebraic_if_poly"
transformation "eliminate_literal"
transformation "eliminate_epsilon" transformation "eliminate_epsilon"
transformation "simplify_formula" transformation "simplify_formula"
......
...@@ -3,20 +3,20 @@ ...@@ -3,20 +3,20 @@
theory bv.BV64 theory bv.BV64
syntax converter of_int "(_ bv%1 64)" syntax converter of_int "(_ bv%1 64)"
syntax function to_uint "(bv2nat %1)" syntax function t'int "(bv2nat %1)"
end end
theory bv.BV32 theory bv.BV32
syntax converter of_int "(_ bv%1 32)" syntax converter of_int "(_ bv%1 32)"
syntax function to_uint "(bv2nat %1)" syntax function t'int "(bv2nat %1)"
end end
theory bv.BV16 theory bv.BV16
syntax converter of_int "(_ bv%1 16)" syntax converter of_int "(_ bv%1 16)"
syntax function to_uint "(bv2nat %1)" syntax function t'int "(bv2nat %1)"
end end
theory bv.BV8 theory bv.BV8
syntax converter of_int "(_ bv%1 8)" syntax converter of_int "(_ bv%1 8)"
syntax function to_uint "(bv2nat %1)" syntax function t'int "(bv2nat %1)"
end end
...@@ -6,6 +6,7 @@ valid "Finished Why3 theory" ...@@ -6,6 +6,7 @@ valid "Finished Why3 theory"
fail "\\*\\*\\* \\(.*\\)$" "\\1" fail "\\*\\*\\* \\(.*\\)$" "\\1"
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
transformation "eliminate_literal"
transformation "eliminate_epsilon" transformation "eliminate_epsilon"
transformation "eliminate_if_fmla" transformation "eliminate_if_fmla"
transformation "eliminate_let_fmla" transformation "eliminate_let_fmla"
......
...@@ -12,9 +12,7 @@ outofmemory "(error \".*out of memory\")\\|Cannot allocate memory" ...@@ -12,9 +12,7 @@ outofmemory "(error \".*out of memory\")\\|Cannot allocate memory"
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
(* À discuter *)
transformation "inline_trivial" transformation "inline_trivial"
transformation "eliminate_builtin" transformation "eliminate_builtin"
transformation "eliminate_definition" transformation "eliminate_definition"
transformation "eliminate_inductive" transformation "eliminate_inductive"
......
...@@ -10,9 +10,7 @@ invalid "^NOT PROVABLE" ...@@ -10,9 +10,7 @@ invalid "^NOT PROVABLE"
timeout "interrupted by timeout" timeout "interrupted by timeout"
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
(* À discuter *)
transformation "inline_trivial" transformation "inline_trivial"
transformation "eliminate_builtin" transformation "eliminate_builtin"
transformation "eliminate_definition" transformation "eliminate_definition"
transformation "eliminate_inductive" transformation "eliminate_inductive"
......
...@@ -62,8 +62,10 @@ theory bv.BV_Gen ...@@ -62,8 +62,10 @@ theory bv.BV_Gen
remove prop to_uint_bounds remove prop to_uint_bounds
remove prop to_uint_of_int remove prop to_uint_of_int
remove prop Of_int_zeros remove prop to_uint_size_bv
remove prop Of_int_ones remove prop to_uint_zeros
remove prop to_uint_ones
remove prop to_uint_one
(** Arithmetic operators *) (** Arithmetic operators *)
......
...@@ -48,8 +48,10 @@ theory bv.BV_Gen ...@@ -48,8 +48,10 @@ theory bv.BV_Gen
remove prop to_uint_bounds remove prop to_uint_bounds
remove prop to_int_extensionality remove prop to_int_extensionality
remove prop Of_int_zeros remove prop to_uint_size_bv
remove prop Of_int_ones remove prop to_uint_zeros
remove prop to_uint_ones
remove prop to_uint_one
remove prop to_uint_add remove prop to_uint_add
remove prop to_uint_add_bounded remove prop to_uint_add_bounded
...@@ -76,40 +78,60 @@ theory bv.BV_Gen ...@@ -76,40 +78,60 @@ theory bv.BV_Gen
end end
theory bv.BV64 theory bv.BV64
meta "literal:keep" type t
syntax literal t "#x%16x"
syntax type t "(_ BitVec 64)" syntax type t "(_ BitVec 64)"
syntax function zeros "#x0000000000000000" syntax function zeros "#x0000000000000000"
syntax function ones "#xFFFFFFFFFFFFFFFF" syntax function one "#x0000000000000001"
syntax function ones "#xFFFFFFFFFFFFFFFF"
syntax function size_bv "(_ bv64 64)"
syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv64 64))) (bvlshr %1 (bvsub (_ bv64 64) (bvurem %2 (_ bv64 64)))))" syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv64 64))) (bvlshr %1 (bvsub (_ bv64 64) (bvurem %2 (_ bv64 64)))))"
syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv64 64))) (bvshl %1 (bvsub (_ bv64 64) (bvurem %2 (_ bv64 64)))))" syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv64 64))) (bvshl %1 (bvsub (_ bv64 64) (bvurem %2 (_ bv64 64)))))"
end end
theory bv.BV32 theory bv.BV32
meta "literal:keep" type t
syntax literal t "#x%8x"
syntax type t "(_ BitVec 32)" syntax type t "(_ BitVec 32)"
syntax function zeros "#x00000000" syntax function zeros "#x00000000"
syntax function ones "#xFFFFFFFF" syntax function one "#x00000001"
syntax function ones "#xFFFFFFFF"
syntax function size_bv "(_ bv32 32)"
syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv32 32))) (bvlshr %1 (bvsub (_ bv32 32) (bvurem %2 (_ bv32 32)))))" syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv32 32))) (bvlshr %1 (bvsub (_ bv32 32) (bvurem %2 (_ bv32 32)))))"
syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv32 32))) (bvshl %1 (bvsub (_ bv32 32) (bvurem %2 (_ bv32 32)))))" syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv32 32))) (bvshl %1 (bvsub (_ bv32 32) (bvurem %2 (_ bv32 32)))))"
end end
theory bv.BV16 theory bv.BV16
meta "literal:keep" type t
syntax literal t "#x%4x"
syntax type t "(_ BitVec 16)" syntax type t "(_ BitVec 16)"
syntax function zeros "#x0000" syntax function zeros "#x0000"
syntax function ones "#xFFFF" syntax function one "#x0001"
syntax function ones "#xFFFF"
syntax function size_bv "(_ bv16 16)"
syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv16 16))) (bvlshr %1 (bvsub (_ bv16 16) (bvurem %2 (_ bv16 16)))))" syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv16 16))) (bvlshr %1 (bvsub (_ bv16 16) (bvurem %2 (_ bv16 16)))))"
syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv16 16))) (bvshl %1 (bvsub (_ bv16 16) (bvurem %2 (_ bv16 16)))))" syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv16 16))) (bvshl %1 (bvsub (_ bv16 16) (bvurem %2 (_ bv16 16)))))"
end end
theory bv.BV8 theory bv.BV8
meta "literal:keep" type t
syntax literal t (* "#b%8b" *) "#x%2x"
syntax type t "(_ BitVec 8)" syntax type t "(_ BitVec 8)"
syntax function zeros "#x00" syntax function zeros "#x00"
syntax function ones "#xFF" syntax function one "#x01"
syntax function ones "#xFF"
syntax function size_bv "(_ bv8 8)"
syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv8 8))) (bvlshr %1 (bvsub (_ bv8 8) (bvurem %2 (_ bv8 8)))))" syntax function rotate_left_bv "(bvor (bvshl %1 (bvurem %2 (_ bv8 8))) (bvlshr %1 (bvsub (_ bv8 8) (bvurem %2 (_ bv8 8)))))"
syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv8 8))) (bvshl %1 (bvsub (_ bv8 8) (bvurem %2 (_ bv8 8)))))" syntax function rotate_right_bv "(bvor (bvlshr %1 (bvurem %2 (_ bv8 8))) (bvshl %1 (bvsub (_ bv8 8) (bvurem %2 (_ bv8 8)))))"
......
...@@ -11,9 +11,7 @@ unknown "\\bunknown\\b\\|\\bsat\\b" "" ...@@ -11,9 +11,7 @@ unknown "\\bunknown\\b\\|\\bsat\\b" ""
unknown "feature not supported: non linear problem" "non linear arith" unknown "feature not supported: non linear problem" "non linear arith"
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
(* À discuter *)
transformation "inline_trivial" transformation "inline_trivial"
transformation "eliminate_builtin" transformation "eliminate_builtin"
transformation "eliminate_definition" transformation "eliminate_definition"
transformation "eliminate_inductive" transformation "eliminate_inductive"
......
(** Why3 driver for Z3 >= 4.3.2 *)
(* Do not set any logic, let z3 choose by itself
prelude "(set-logic AUFNIRA)"
*)
(* Counterexamples: set model parser *)
model_parser "smtv2"
import "smt-libv2.drv"
import "smt-libv2-bv-realization.gen"
import "discrimination.gen"
transformation "inline_trivial"
transformation "eliminate_builtin"
transformation "detect_polymorphism"
transformation "eliminate_definition"
(* We could keep more definitions by using
transformation "eliminate_definition_if_poly"
instead, but some proofs are lost
(examples/logic/triangle_inequality.why)
*)
transformation "eliminate_inductive"
transformation "eliminate_algebraic_if_poly"
transformation "eliminate_epsilon"
transformation "simplify_formula"
(*transformation "simplify_trivial_quantification"*)
(* Prepare for counter-example query: get rid of some quantifiers (makes it
possible to query model values of the variables in premises) and introduce
counter-example projections *)
transformation "prepare_for_counterexmp"
transformation "discriminate_if_poly"
transformation "encoding_smt_if_poly"
(** Error messages specific to Z3 *)
outofmemory "(error \".*out of memory\")\\|Cannot allocate memory"
timeout "interrupted by timeout"
(** Extra theories supported by Z3 *)
(* div/mod of Z3 seems to be Euclidean Division *)
theory int.EuclideanDivision
syntax function div "(div %1 %2)"
syntax function mod "(mod %1 %2)"
remove prop Mod_bound
remove prop Div_mod
remove prop Mod_1
remove prop Div_1
end
theory real.FromInt
syntax function from_int "(to_real %1)"
remove prop Zero
remove prop One
remove prop Add
remove prop Sub
remove prop Mul
remove prop Neg
end
(* does not work: Z3 segfaults
theory real.Trigonometry
syntax function cos "(cos %1)"
syntax function sin "(sin %1)"
syntax function pi "pi"
syntax function tan "(tan %1)"
syntax function atan "(atan %1)"
end
*)
(* bitvector modules, is not in smt-libv2.drv since cvc4 and z3 don't
have the same name for the function to_uint *)
theory bv.BV64
syntax converter of_int "((_ int2bv 64) %1)"
syntax function to_uint "(bv2int %1)"
end
theory bv.BV32
syntax converter of_int "((_ int2bv 32) %1)"
syntax function to_uint "(bv2int %1)"
end
theory bv.BV16
syntax converter of_int "((_ int2bv 16) %1)"
syntax function to_uint "(bv2int %1)"
end
theory bv.BV8
syntax converter of_int "((_ int2bv 8) %1)"
syntax function to_uint "(bv2int %1)"
end
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
(* Counterexamples: set model parser *) (* Counterexamples: set model parser *)
model_parser "smtv2" model_parser "smtv2"
import "smt-libv2.drv" import "smt-libv2.drv"
import "no-bv.gen" import "no-bv.gen"
import "discrimination.gen" import "discrimination.gen"
...@@ -23,6 +22,7 @@ transformation "eliminate_definition" ...@@ -23,6 +22,7 @@ transformation "eliminate_definition"
*) *)
transformation "eliminate_inductive" transformation "eliminate_inductive"
transformation "eliminate_algebraic_if_poly" transformation "eliminate_algebraic_if_poly"
transformation "eliminate_literal"
transformation "eliminate_epsilon" transformation "eliminate_epsilon"
transformation "simplify_formula" transformation "simplify_formula"
......
...@@ -23,6 +23,7 @@ transformation "eliminate_definition" ...@@ -23,6 +23,7 @@ transformation "eliminate_definition"
*) *)
transformation "eliminate_inductive" transformation "eliminate_inductive"
transformation "eliminate_algebraic_if_poly" transformation "eliminate_algebraic_if_poly"
transformation "eliminate_literal"
transformation "eliminate_epsilon" transformation "eliminate_epsilon"
transformation "simplify_formula" transformation "simplify_formula"
...@@ -81,7 +82,7 @@ end ...@@ -81,7 +82,7 @@ end
have the same name for the function to_uint *) have the same name for the function to_uint *)
theory bv.BV64 theory bv.BV64
syntax converter of_int "((_ int2bv 64) %1)" syntax converter of_int "((_ int2bv 64) %1)"
syntax function to_uint "(bv2int %1)" syntax function t'int "(bv2int %1)"
remove prop Nth_bv_is_nth remove prop Nth_bv_is_nth
remove prop Nth_bv_is_nth2 remove prop Nth_bv_is_nth2
...@@ -89,7 +90,7 @@ end ...@@ -89,7 +90,7 @@ end
theory bv.BV32 theory bv.BV32
syntax converter of_int "((_ int2bv 32) %1)" syntax converter of_int "((_ int2bv 32) %1)"
syntax function to_uint "(bv2int %1)" syntax function t'int "(bv2int %1)"
remove prop Nth_bv_is_nth remove prop Nth_bv_is_nth
remove prop Nth_bv_is_nth2 remove prop Nth_bv_is_nth2
...@@ -97,7 +98,7 @@ end ...@@ -97,7 +98,7 @@ end
theory bv.BV16 theory bv.BV16
syntax converter of_int "((_ int2bv 16) %1)" syntax converter of_int "((_ int2bv 16) %1)"
syntax function to_uint "(bv2int %1)" syntax function t'int "(bv2int %1)"
remove prop Nth_bv_is_nth remove prop Nth_bv_is_nth
remove prop Nth_bv_is_nth2 remove prop Nth_bv_is_nth2
...@@ -105,7 +106,7 @@ end ...@@ -105,7 +106,7 @@ end
theory bv.BV8 theory bv.BV8
syntax converter of_int "((_ int2bv 8) %1)" syntax converter of_int "((_ int2bv 8) %1)"
syntax function to_uint "(bv2int %1)" syntax function t'int "(bv2int %1)"
remove prop Nth_bv_is_nth remove prop Nth_bv_is_nth
remove prop Nth_bv_is_nth2 remove prop Nth_bv_is_nth2
......
...@@ -10,9 +10,7 @@ unknown "^\\(unknown\\|sat\\|Fail\\)" "" ...@@ -10,9 +10,7 @@ unknown "^\\(unknown\\|sat\\|Fail\\)" ""
time "why3cpulimit time : %s s" time "why3cpulimit time : %s s"
(* À discuter *)
transformation "inline_trivial" transformation "inline_trivial"
transformation "eliminate_builtin" transformation "eliminate_builtin"
transformation "eliminate_definition" transformation "eliminate_definition"
transformation "eliminate_inductive" transformation "eliminate_inductive"
......
...@@ -21,87 +21,87 @@ ...@@ -21,87 +21,87 @@
<proof prover="5" timelimit="10"><result status="valid" time="0.02" steps="44"/></proof> <proof prover="5" timelimit="10"><result status="valid" time="0.02" steps="44"/></proof>
</goal> </goal>
</theory> </theory>
<theory name="BinarySearchInt32" sum="e1d44ffe67ec79d3738d89b5a90b5f4e" expanded="true"> <theory name="BinarySearchInt32" sum="f5215003128fd45477d65ffa703ca26d" expanded="true">
<goal name="WP_parameter binary_search" expl="VC for binary_search" expanded="true"> <goal name="WP_parameter binary_search" expl="VC for binary_search" expanded="true">
<transf name="split_goal_wp" expanded="true"> <transf name="split_goal_wp" expanded="true">
<goal name="WP_parameter binary_search.1" expl="1. integer overflow"> <goal name="WP_parameter binary_search.1" expl="1. integer overflow">
<proof prover="5"><result status="valid" time="0.02" steps="69"/></proof> <proof prover="5"><result status="valid" time="0.02" steps="71"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.2" expl="2. integer overflow"> <goal name="WP_parameter binary_search.2" expl="2. integer overflow">
<proof prover="5"><result status="valid" time="0.01" steps="73"/></proof> <proof prover="5"><result status="valid" time="0.01" steps="75"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.3" expl="3. integer overflow"> <goal name="WP_parameter binary_search.3" expl="3. integer overflow">
<proof prover="5"><result status="valid" time="0.12" steps="93"/></proof> <proof prover="5"><result status="valid" time="0.12" steps="105"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.4" expl="4. loop invariant init"> <goal name="WP_parameter binary_search.4" expl="4. loop invariant init">
<proof prover="5"><result status="valid" time="0.01" steps="74"/></proof> <proof prover="5"><result status="valid" time="0.01" steps="76"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.5" expl="5. loop invariant init"> <goal name="WP_parameter binary_search.5" expl="5. loop invariant init">
<proof prover="5"><result status="valid" time="0.01" steps="77"/></proof> <proof prover="5"><result status="valid" time="0.01" steps="79"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.6" expl="6. integer overflow"> <goal name="WP_parameter binary_search.6" expl="6. integer overflow">
<proof prover="5"><result status="valid" time="0.02" steps="85"/></proof> <proof prover="5"><result status="valid" time="0.02" steps="87"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.7" expl="7. integer overflow"> <goal name="WP_parameter binary_search.7" expl="7. integer overflow">
<proof prover="5"><result status="valid" time="0.02" steps="89"/></proof> <proof prover="5"><result status="valid" time="0.02" steps="91"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.8" expl="8. division by zero"> <goal name="WP_parameter binary_search.8" expl="8. division by zero">
<proof prover="5"><result status="valid" time="0.01" steps="82"/></proof> <proof prover="5"><result status="valid" time="0.01" steps="84"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.9" expl="9. integer overflow"> <goal name="WP_parameter binary_search.9" expl="9. integer overflow">
<proof prover="5"><result status="valid" time="0.04" steps="97"/></proof> <proof prover="5"><result status="valid" time="0.04" steps="99"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.10" expl="10. integer overflow"> <goal name="WP_parameter binary_search.10" expl="10. integer overflow">
<proof prover="5"><result status="valid" time="0.11" steps="113"/></proof> <proof prover="5"><result status="valid" time="0.11" steps="127"/></proof>
</goal> </goal>
<goal name="WP_parameter binary_search.11" expl="11. assertion">