Commit 4bd34e25 authored by Raphael Rieu-Helft's avatar Raphael Rieu-Helft
Browse files

Support subtraction in exponents, two long division reflection examples

parent 49a49ca1
......@@ -1091,7 +1091,8 @@ use import debug.Debug
type evars = int -> int
type exp = Lit int | Var int | Plus exp exp | Minus exp
type exp = Lit int | Var int | Plus exp exp | Minus exp | Sub exp exp
type t = (Q.t, exp)
let constant mzero = (Q.rzero, Lit 0)
......@@ -1109,6 +1110,7 @@ function interp_exp (e:exp) (y:evars) : int
| Lit n -> n
| Var v -> y v
| Plus e1 e2 -> interp_exp e1 y + interp_exp e2 y
| Sub e1 e2 -> interp_exp e1 y - interp_exp e2 y
| Minus e' -> - (interp_exp e' y)
end
(*
......@@ -1126,56 +1128,101 @@ function minterp (t:t) (y:evars) : real
exception Unknown
let rec opp_exp (e:exp)
ensures { forall y. interp_exp result y = - interp_exp e y }
variant { e }
= match e with
| Lit n -> Lit (-n)
| Minus e' -> e'
| Plus e1 e2 -> Plus (opp_exp e1) (opp_exp e2)
| Sub e1 e2 -> Sub e2 e1
| Var _ -> Minus e
end
let rec add_exp (e1 e2:exp)
ensures { forall y. interp_exp result y = interp_exp e1 y + interp_exp e2 y }
let rec add_sub_exp (e1 e2:exp) (s:bool) : exp
ensures { forall y.
if s
then interp_exp result y = interp_exp e1 y + interp_exp e2 y
else interp_exp result y = interp_exp e1 y - interp_exp e2 y }
raises { Unknown -> true }
variant { e2, e1 }
=
let rec add_atom (e a:exp) : (exp, bool)
returns { r, b -> forall y. interp_exp r y = interp_exp e y + interp_exp a y }
let rec add_atom (e a:exp) (s:bool) : (exp, bool)
returns { r, b -> forall y.
if s then interp_exp r y = interp_exp e y + interp_exp a y
else interp_exp r y = interp_exp e y - interp_exp a y }
raises { Unknown -> true }
variant { e }
= match (e,a) with
| Lit n1, Lit n2 -> (Lit (n1+n2), true)
| Lit n, Var i | Var i, Lit n
-> if n = 0 then (Var i, true) else (Plus e a, False)
| Lit n, Minus e' | Minus e', Lit n ->
if n = 0 then Minus e', True else Plus e a, False
| Lit n1, Lit n2 -> (if s then Lit (n1+n2) else Lit (n1-n2)), true
| Lit n, Var i
-> if n = 0 then (if s then Var i else Minus (Var i)), true
else (if s then Plus e a else Sub e a), False
| Var i, Lit n
-> if n = 0 then Var i, true
else (if s then Plus e a else Sub e a), False
| Lit n, Minus e' ->
if n = 0 then (if s then Minus e' else e'), True
else (if s then Plus e a else Sub e a), False
| Minus e', Lit n ->
if n = 0 then Minus e', True
else (if s then Plus e a else Sub e a), False
| Var i, Minus (Var j) | Minus (Var j), Var i ->
if i = j then (Lit 0, true) else (Plus e a, False)
| Var _, Var _ -> Plus e a, False
| Minus _, Minus _ -> Plus e a, False
if s && (i = j) then (Lit 0, true)
else (if s then Plus e a else Sub e a), False
| Var i, Var j -> if s then Plus e a, False
else
if i = j then Lit 0, True
else Sub e a, False
| Minus _, Minus _ -> (if s then Plus e a else Sub e a), False
| Plus e1 e2, _ ->
let r, b = add_atom e1 a in
let r, b = add_atom e1 a s in
if b then
match r with
| Lit n -> if n = 0 then e2, True else Plus r e2, True
| _ -> Plus r e2, True
end
else let r, b = add_atom e2 a in Plus e1 r, b
else let r, b = add_atom e2 a s in Plus e1 r, b
| Sub e1 e2, _ ->
let r, b = add_atom e1 a s in
if b then
match r with
| Lit n -> if n = 0 then opp_exp e2, True else Sub r e2, True
| _ -> Sub r e2, True
end
else let r, b = add_atom e2 a (not s) in
if b then Sub e1 r, True
else if s then Sub (Plus e1 a) e2, False
else Sub e1 (Plus e2 a), False
| _ -> raise Unknown
end
in
match e2 with
| Plus e1' e2' ->
let r = add_exp e1 e1' in
let r = add_sub_exp e1 e1' s in
match r with
| Lit n -> if n = 0 then e2' else add_exp r e2'
| _ -> add_exp r e2'
| Lit n -> if n = 0
then (if s then e2' else opp_exp e2')
else add_sub_exp r e2' s
| _ -> add_sub_exp r e2' s
end
| _ -> let r, _ = add_atom e1 e2 in r
| Sub e1' e2' ->
let r = add_sub_exp e1 e1' s in
match r with
| Lit n -> if n = 0
then (if s then opp_exp e2' else e2')
else add_sub_exp r e2' (not s)
| _ -> add_sub_exp r e2' (not s)
end
let rec opp_exp (e:exp)
ensures { forall y. interp_exp result y = - interp_exp e y }
variant { e }
= match e with
| Lit n -> Lit (-n)
| Minus e' -> e'
| Plus e1 e2 -> Plus (opp_exp e1) (opp_exp e2)
| Var _ -> Minus e
| _ -> let r, _ = add_atom e1 e2 s in r
end
let add_exp (e1 e2:exp) : exp
ensures { forall y. interp_exp result y = interp_exp e1 y + interp_exp e2 y }
raises { Unknown -> True }
= add_sub_exp e1 e2 True
let rec zero_exp (e:exp) : bool
ensures { result -> forall y. interp_exp e y = 0 }
variant { e }
......@@ -1189,6 +1236,7 @@ let rec zero_exp (e:exp) : bool
| Var _ -> false
| Minus e -> all_zero e
| Plus e1 e2 -> all_zero e1 && all_zero e2
| Sub e1 e2 -> all_zero e1 && all_zero e2
end
in
let e' = add_exp (Lit 0) e in (* simplifies exp *)
......
......@@ -532,15 +532,10 @@
<goal name="VC add_expr" expl="VC for add_expr" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_expr.0" expl="postcondition" proved="true">
<proof prover="0"><result status="timeout" time="1.00"/></proof>
<proof prover="1"><result status="unknown" time="1.86"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
<proof prover="3"><result status="valid" time="0.32"/></proof>
</goal>
<goal name="VC add_expr.1" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="15"/></proof>
<proof prover="1" obsolete="true"><result status="unknown" time="1.88"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC add_expr.2" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
......@@ -556,9 +551,6 @@
</transf>
</goal>
<goal name="VC add_expr.4" expl="postcondition" proved="true">
<proof prover="0"><result status="timeout" time="1.00"/></proof>
<proof prover="1"><result status="timeout" time="2.00"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
<proof prover="3"><result status="valid" time="0.22"/></proof>
</goal>
<goal name="VC add_expr.5" expl="variant decrease" proved="true">
......@@ -598,9 +590,6 @@
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_expr.17" expl="postcondition" proved="true">
<proof prover="0"><result status="timeout" time="0.98"/></proof>
<proof prover="1"><result status="timeout" time="2.00"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
<proof prover="3"><result status="valid" time="0.32"/></proof>
</goal>
<goal name="VC add_expr.18" expl="variant decrease" proved="true">
......@@ -611,7 +600,6 @@
</goal>
<goal name="VC add_expr.20" expl="assertion" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="50"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC add_expr.21" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.20" steps="209"/></proof>
......@@ -624,7 +612,6 @@
</goal>
<goal name="VC add_expr.24" expl="assertion" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="50"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC add_expr.25" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.35" steps="391"/></proof>
......@@ -846,7 +833,6 @@
</goal>
<goal name="VC print_lc" expl="VC for print_lc" proved="true">
<proof prover="0"><result status="valid" time="0.01" steps="30"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC check_combination" expl="VC for check_combination" proved="true">
<transf name="split_goal_wp" proved="true" >
......@@ -915,9 +901,7 @@
<proof prover="0"><result status="valid" time="0.02" steps="6"/></proof>
</goal>
<goal name="VC check_combination.18" expl="postcondition" proved="true">
<proof prover="0"><result status="unknown" time="0.02"/></proof>
<proof prover="1"><result status="valid" time="0.21"/></proof>
<proof prover="2"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC check_combination.19" expl="postcondition" proved="true">
<proof prover="1"><result status="valid" time="0.02"/></proof>
......@@ -1966,7 +1950,7 @@
</transf>
</goal>
</theory>
<theory name="MP64Coeffs" proved="true" sum="8b9a452f172ba77815a2f8394b0aab35">
<theory name="MP64Coeffs" proved="true" sum="40b2cdc253d809f5f63e5451e3f7a21b">
<goal name="VC mzero" expl="VC for mzero" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof>
</goal>
......@@ -1977,177 +1961,363 @@
<transf name="compute_in_goal" proved="true" >
</transf>
</goal>
<goal name="VC add_exp" expl="VC for add_exp" proved="true">
<goal name="VC opp_exp" expl="VC for opp_exp" proved="true">
<proof prover="0"><result status="valid" time="0.05" steps="196"/></proof>
</goal>
<goal name="VC add_sub_exp" expl="VC for add_sub_exp" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_exp.0" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="9"/></proof>
<goal name="VC add_sub_exp.0" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.01" steps="36"/></proof>
</goal>
<goal name="VC add_exp.1" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="12"/></proof>
<goal name="VC add_sub_exp.1" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="22"/></proof>
</goal>
<goal name="VC add_exp.2" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="12"/></proof>
<goal name="VC add_sub_exp.2" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.01" steps="22"/></proof>
</goal>
<goal name="VC add_sub_exp.3" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_exp.3" expl="variant decrease" proved="true">
<goal name="VC add_sub_exp.4" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.09" steps="349"/></proof>
</goal>
<goal name="VC add_sub_exp.5" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC add_exp.4" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="111"/></proof>
<goal name="VC add_sub_exp.6" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="61"/></proof>
</goal>
<goal name="VC add_sub_exp.7" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.8" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_exp.5" expl="variant decrease" proved="true">
<goal name="VC add_sub_exp.9" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC add_exp.6" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="17"/></proof>
<goal name="VC add_sub_exp.10" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="356"/></proof>
</goal>
<goal name="VC add_sub_exp.11" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_sub_exp.12" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="122"/></proof>
</goal>
<goal name="VC add_exp.7" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.13" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_exp.8" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof>
<goal name="VC add_sub_exp.14" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_exp.9" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.05" steps="12"/></proof>
<goal name="VC add_sub_exp.15" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="50"/></proof>
</goal>
<goal name="VC add_exp.10" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="35"/></proof>
<goal name="VC add_sub_exp.16" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="48"/></proof>
</goal>
<goal name="VC add_exp.11" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.17" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_exp.12" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="9"/></proof>
<goal name="VC add_sub_exp.18" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.01" steps="40"/></proof>
</goal>
<goal name="VC add_sub_exp.19" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_sub_exp.20" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.06" steps="353"/></proof>
</goal>
<goal name="VC add_sub_exp.21" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC add_sub_exp.22" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="61"/></proof>
</goal>
<goal name="VC add_exp.13" expl="variant decrease" proved="true">
<goal name="VC add_sub_exp.23" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.24" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.25" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_sub_exp.26" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="360"/></proof>
</goal>
<goal name="VC add_sub_exp.27" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.05"/></proof>
</goal>
<goal name="VC add_exp.14" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="112"/></proof>
<goal name="VC add_sub_exp.28" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="122"/></proof>
</goal>
<goal name="VC add_sub_exp.29" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.30" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.31" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="29"/></proof>
</goal>
<goal name="VC add_exp.15" expl="variant decrease" proved="true">
<goal name="VC add_sub_exp.32" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="50"/></proof>
</goal>
<goal name="VC add_sub_exp.33" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.01" steps="17"/></proof>
</goal>
<goal name="VC add_sub_exp.34" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_exp.16" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="17"/></proof>
<goal name="VC add_sub_exp.35" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.06" steps="398"/></proof>
</goal>
<goal name="VC add_sub_exp.36" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC add_sub_exp.37" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="68"/></proof>
</goal>
<goal name="VC add_exp.17" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.38" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_exp.18" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.39" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC add_exp.19" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="13"/></proof>
<goal name="VC add_sub_exp.40" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC add_exp.20" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.05" steps="36"/></proof>
<goal name="VC add_sub_exp.41" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.05" steps="405"/></proof>
</goal>
<goal name="VC add_exp.21" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="10"/></proof>
<goal name="VC add_sub_exp.42" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_exp.22" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
<goal name="VC add_sub_exp.43" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="135"/></proof>
</goal>
<goal name="VC add_sub_exp.44" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.45" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.46" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="29"/></proof>
</goal>
<goal name="VC add_sub_exp.47" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="17"/></proof>
</goal>
<goal name="VC add_sub_exp.48" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_exp.23" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.05" steps="126"/></proof>
<goal name="VC add_sub_exp.49" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.24" steps="1648"/></proof>
</goal>
<goal name="VC add_exp.24" expl="variant decrease" proved="true">
<goal name="VC add_sub_exp.50" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_sub_exp.51" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="152"/></proof>
</goal>
<goal name="VC add_sub_exp.52" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.53" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.54" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC add_exp.25" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="18"/></proof>
<goal name="VC add_sub_exp.55" expl="postcondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_sub_exp.55.0" expl="postcondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_sub_exp.55.0.0" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="121"/></proof>
</goal>
<goal name="VC add_exp.26" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.55.0.1" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="122"/></proof>
</goal>
<goal name="VC add_sub_exp.55.0.2" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="481"/></proof>
</goal>
</transf>
</goal>
<goal name="VC add_sub_exp.55.1" expl="postcondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_sub_exp.55.1.0" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="40"/></proof>
</goal>
<goal name="VC add_sub_exp.55.1.1" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="43"/></proof>
</goal>
<goal name="VC add_sub_exp.55.1.2" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="43"/></proof>
</goal>
</transf>
</goal>
</transf>
</goal>
<goal name="VC add_sub_exp.56" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_sub_exp.57" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.10" steps="430"/></proof>
</goal>
<goal name="VC add_sub_exp.58" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_exp.27" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.59" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC add_exp.28" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="13"/></proof>
<goal name="VC add_sub_exp.60" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC add_exp.29" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="9"/></proof>
<goal name="VC add_sub_exp.61" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_exp.30" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.05"/></proof>
<goal name="VC add_sub_exp.62" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.06" steps="344"/></proof>
</goal>
<goal name="VC add_exp.31" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="128"/></proof>
<goal name="VC add_sub_exp.63" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_exp.32" expl="variant decrease" proved="true">
<goal name="VC add_sub_exp.64" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="97"/></proof>
</goal>
<goal name="VC add_sub_exp.65" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC add_sub_exp.66" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_sub_exp.67" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC add_exp.33" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="18"/></proof>
<goal name="VC add_sub_exp.68" expl="postcondition" proved="true">
<transf name="eliminate_if" proved="true" >
<goal name="VC add_sub_exp.68.0" expl="postcondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_sub_exp.68.0.0" expl="postcondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_sub_exp.68.0.0.0" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="38"/></proof>
</goal>
<goal name="VC add_sub_exp.68.0.0.1" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="17"/></proof>
</goal>
<goal name="VC add_sub_exp.68.0.0.2" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="15"/></proof>
</goal>
</transf>
</goal>
<goal name="VC add_sub_exp.68.0.1" expl="postcondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC add_sub_exp.68.0.1.0" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="19"/></proof>
</goal>
<goal name="VC add_sub_exp.68.0.1.1" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.01" steps="17"/></proof>
</goal>
<goal name="VC add_sub_exp.68.0.1.2" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="15"/></proof>
</goal>
</transf>
</goal>
</transf>
</goal>
</transf>
</goal>
<goal name="VC add_sub_exp.69" expl="variant decrease" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC add_sub_exp.70" expl="postcondition" proved="true">
<proof prover="0"><result status="valid" time="0.05" steps="213"/></proof>
</goal>
<goal name="VC add_exp.34" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.71" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC add_exp.35" expl="exceptional postcondition" proved="true">
<goal name="VC add_sub_exp.72" expl="exceptional postcondition" proved="true">