Maram proof files index


module CiseAnalysis

 use export why3.BuiltIn.BuiltIn
 use export why3.Bool.Bool
 use export why3.Unit.Unit
 use export tree.Tree
 use export why3.Tuple2.Tuple2
 use export int.Int
 use import map.Map as M
 use import set.Fset as F
 use seq.Seq, seq.Mem, seq.Distinct

predicate same_ext (m1 m2: 'a -> 'b) = forall x: 'a. m1 x = m2 x

val equal_elt (e1 e2 : elt) : bool
 ensures {result <-> e1 = e2}

let ghost predicate state_equality (s1 s2 : state)
 =
   same_ext s1.parent s2.parent &&
   equal_elt s1.root s2.root &&
   F.(==) s1.nodes s2.nodes

let ghost move_move_analysis (ghost _:()) : (state, state)
   ensures  { match result with
		| x1, x2 -> state_equality x1 x2
		end }  =
   let ghost c1 = any elt in
   let ghost np1 = any elt in
   let ghost state1 = any state in
   let ghost c2 = any elt in
   let ghost np2 = any elt in
   let ghost state2 = any state in
   assume { (F.mem np1 state1.nodes) /\
	    (F.mem np2 state2.nodes) /\
	    (F.mem c1 state1.nodes) /\
	    (F.mem c2 state2.nodes) /\
	    (not (reachability state1.parent np1 c1)) /\
	    (not (reachability state2.parent np2 c2)) /\
	    (c1 <> state1.root) /\
	    (c2 <> state2.root) /\
	    (c1 <> np1) /\
	    (c2 <> np2) /\
	    state_equality state1 state2 };
  move c1 np1 state1;
  move c2 np2 state1;
  move c2 np2 state2;
  move c1 np1 state2;
  (state1, state2)

let ghost remove_remove_analysis (ghost _:()) : (state, state)
   ensures  { match result with
		| x1, x2 -> state_equality x1 x2
		end } =
   let ghost n1 = any elt in
   let ghost state1 = any state in
   let ghost n2 = any elt in
   let ghost state2 = any state in
   assume { (F.mem n1 state1.nodes) /\
	    (F.mem n2 state2.nodes) /\
	    (forall x. state1.parent x <> n1 ) /\
	    (forall x. state2.parent x <> n2 ) /\
	    (n1 <> state1.root) /\
	    (n2 <> state2.root) /\
	   state_equality state1 state2 };
   remove n2 state1;
   remove n1 state1;
   remove n1 state2;
   remove n2 state2;
   (state1, state2)

let ghost add_add_analysis (ghost _:()) : (state, state)
   ensures  { match result with
		| x1, x2 -> state_equality x1 x2
		end } =
   let ghost n1 = any elt in
   let ghost p1 = any elt in
   let ghost state1 = any state in
   let ghost n2 = any elt in
   let ghost p2 = any elt in
   let ghost state2 = any state in
   assume { ((not F.mem n1 (nodes state1) /\ F.mem p1 (nodes state1)) /\
	    not F.mem n2 (nodes state2) /\ F.mem p2 (nodes state2)) /\
	    state_equality state1 state2 };
   add n1 p1 state1;
   add n2 p2 state1;
   add n2 p2 state2;
   add n1 p1 state2;
   (state1, state2)

let ghost remove_move_analysis (ghost _:()) : (state, state)
   ensures  { match result with
		| x1, x2 -> state_equality x1 x2
		end } =
   let ghost n1 = any elt in
   let ghost state1 = any state in
   let ghost c2 = any elt in
   let ghost np2 = any elt in
   let ghost state2 = any state in
   assume { (forall x. state1.parent x <> n1 ) /\
	    (n1 <> state1.root) /\
	    (F.mem np2 state2.nodes) /\
	    (F.mem c2 state2.nodes) /\
	    (not (reachability state2.parent np2 c2)) /\
	    (c2 <> state2.root) /\
	    (c2 <> np2) /\
	    state_equality state1 state2 };
   move c2 np2 state1;
   remove n1 state1;
   remove n1 state2;
   move c2 np2 state2;
   (state1, state2)

let ghost add_move_analysis (ghost _:()) : (state, state)
   ensures  { match result with
		| x1, x2 -> state_equality x1 x2
		end } =
   let ghost n1 = any elt in
   let ghost p1 = any elt in
   let ghost state1 = any state in
   let ghost c2 = any elt in
   let ghost np2 = any elt in
   let ghost state2 = any state in
   assume { (not F.mem n1 (nodes state1) /\ F.mem p1 (nodes state1)) /\
	    (F.mem np2 state2.nodes) /\
	    (F.mem c2 state2.nodes) /\
	    (not (reachability state2.parent np2 c2)) /\
	    (not (reachability state1.parent np2 c2)) /\
	    (c2 <> state2.root) /\
	     (c2 <> np2) /\
	    state_equality state1 state2 };
   add n1 p1 state1;
   move c2 np2 state1;
   move c2 np2 state2;
   add n1 p1 state2;
   (state1, state2)

let ghost add_remove_analysis (ghost _:()) : (state, state)
   ensures  { match result with
		| x1, x2 -> state_equality x1 x2
		end } =
   let ghost n1 = any elt in
   let ghost p1 = any elt in
   let ghost state1 = any state in
   let ghost n2 = any elt in
   let ghost state2 = any state in
   assume { (not F.mem n1 (nodes state1) /\ F.mem p1 (nodes state1)) /\
	    (forall x. state2.parent x <> n2 ) /\
	    (n2 <> state2.root) /\
	    state_equality state1 state2 };
   remove n2 state1;
   add n1 p1 state1;
   add n1 p1 state2;
   remove n2 state2;
   (state1, state2)

end

Why3 Proof Results for Project "tree__cise"

ObligationsAlt-Ergo 2.0.0CVC4 1.6
VC for move_move_analysis
split_vc
pre_move1---0.07
pre_move2---0.12
pre_move3Timeout (1s) (obsolete)0.09
pre_move4---0.15
pre_move5Timeout (1s) (obsolete)0.06
pre_move1Timeout (1s) (obsolete)0.20
pre_move2---0.21
pre_move3High FailureTimeout (1s)
pre_move4---0.18
pre_move5---0.12
pre_move1---0.19
pre_move2---0.12
pre_move3Timeout (1s) (obsolete)0.08
pre_move4Timeout (1s) (obsolete)0.07
pre_move5---0.13
pre_move1---0.08
pre_move2---0.15
pre_move3High FailureTimeout (1s)
pre_move4---0.08
pre_move5---0.12
postconditionHigh FailureTimeout (1s)
VC for remove_remove_analysis
split_vc
pre_remove1---0.16
pre_remove2---0.18
pre_remove1---0.11
pre_remove2---0.18
pre_remove1---0.20
pre_remove2---0.10
pre_remove1---0.11
pre_remove2---0.10
postcondition
unfold state_equality
VC for remove_remove_analysis------
split_vc
VC for remove_remove_analysis---0.11
VC for remove_remove_analysis---0.12
VC for remove_remove_analysis---0.22
VC for add_add_analysis
split_vc
pre_add1---0.15
pre_add2---0.11
pre_add1High FailureTimeout (1s)
pre_add2---0.13
pre_add1Timeout (1s) (obsolete)0.09
pre_add2---0.07
pre_add1High FailureTimeout (1s)
pre_add2---0.13
postcondition
unfold state_equality
VC for add_add_analysis------
split_vc
VC for add_add_analysisHigh FailureTimeout (1s)
VC for add_add_analysis---0.12
VC for add_add_analysis---0.33
VC for remove_move_analysis
split_vc
pre_move1
unfold state_equality
pre_move1------
split_vc
pre_move1Timeout (1s) (obsolete)0.19
pre_move2---0.20
pre_move3---0.39
pre_move4---0.18
pre_move5---0.09
pre_remove1High FailureTimeout (1s)
pre_remove2---0.11
pre_remove1---0.18
pre_remove2---0.12
pre_move1---0.26
pre_move2High FailureTimeout (1s)
pre_move3---0.13
pre_move4---0.12
pre_move5Timeout (1s) (obsolete)0.08
postcondition
unfold state_equality
VC for remove_move_analysis------
split_vc
VC for remove_move_analysis---0.15
VC for remove_move_analysis---0.09
VC for remove_move_analysis---0.14
VC for add_move_analysis
split_vc
pre_add1---0.16
pre_add2---0.09
pre_move1---0.16
pre_move2---0.17
pre_move3High Failure (obsolete)0.09
pre_move4---0.11
pre_move5---0.10
pre_move1---0.09
pre_move20.68 (obsolete)0.10
pre_move3---0.09
pre_move4---0.09
pre_move5---0.10
pre_add1---0.20
pre_add2---0.20
postcondition
unfold state_equality
VC for add_move_analysis------
split_vc
VC for add_move_analysis---0.16
VC for add_move_analysis---0.10
VC for add_move_analysis---0.16
VC for add_remove_analysis------
split_vc
pre_remove1---0.17
pre_remove2---0.16
pre_add1---0.14
pre_add2High FailureTimeout (1s)
pre_add1---0.14
pre_add2---0.21
pre_remove1---0.24
pre_remove2---0.11
postcondition
unfold state_equality
VC for add_remove_analysis------
split_vc
VC for add_remove_analysis---0.20
VC for add_remove_analysis---0.12
VC for add_remove_analysisHigh FailureTimeout (1s)

Generated by why3doc 1.3.1+git