From 5155cf7ef514101e0915e4e41f5c7c8bf59f4ea3 Mon Sep 17 00:00:00 2001
From: Jean-Christophe Filliatre <Jean-Christophe.Filliatre@lri.fr>
Date: Wed, 12 Oct 2011 11:38:22 +0200
Subject: [PATCH] new examples: generate all trees

---
 examples/programs/generate_all_trees.mlw      |  90 +++
 ..._trees_WP_GenerateAllTrees_all_trees_0_1.v | 156 +++++
 ..._trees_WP_GenerateAllTrees_size_nonneg_1.v | 147 +++++
 .../generate_all_trees/why3session.xml        | 545 ++++++++++++++++++
 4 files changed, 938 insertions(+)
 create mode 100644 examples/programs/generate_all_trees.mlw
 create mode 100644 examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_all_trees_0_1.v
 create mode 100644 examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_size_nonneg_1.v
 create mode 100644 examples/programs/generate_all_trees/why3session.xml

diff --git a/examples/programs/generate_all_trees.mlw b/examples/programs/generate_all_trees.mlw
new file mode 100644
index 0000000000..33d2800024
--- /dev/null
+++ b/examples/programs/generate_all_trees.mlw
@@ -0,0 +1,90 @@
+
+(*
+   Generate all binary trees of size n.
+
+   Given n, the program return an array a of size n+1 such that
+   a[i] contains the list of all binary trees of size i.
+
+   TODO: - show that there is no duplicate in a[i]
+         - tail-recursive version of combine
+*)
+
+module GenerateAllTrees
+
+  use import int.Int
+  use import list.List
+  use import list.Mem
+  use import list.Append
+  use import module array.Array
+
+  type tree = Empty | Node tree tree
+
+  function size (t: tree) : int = match t with
+    | Empty    -> 0
+    | Node l r -> 1 + size l + size r
+  end
+
+  lemma size_nonneg: forall t: tree. size t >= 0
+
+  lemma size_left:
+    forall t: tree. size t > 0 ->
+    exists l r: tree. t = Node l r /\ size l < size t
+
+  predicate all_trees (n: int) (l: list tree) =
+    forall t: tree. size t = n <-> mem t l
+
+  lemma all_trees_0: all_trees 0 (Cons Empty Nil)
+
+  (* combines two lists of trees l1 and l2 into the list of trees
+     with a left sub-tree from l1 and a right sub-tree from l2 *)
+  let combine (i1: int) (l1: list tree) (i2: int) (l2: list tree) =
+    { 0 <= i1 /\ all_trees i1 l1 /\ 0 <= i2 /\ all_trees i2 l2 }
+    let rec loop1 (l1: list tree) : list tree =
+      { }
+      match l1 with
+      | Nil -> Nil
+      | Cons t1 l1 ->
+          let rec loop2 (l2: list tree) : list tree =
+            {}
+            match l2 with
+            | Nil -> Nil
+            | Cons t2 l2 -> Cons (Node t1 t2) (loop2 l2)
+            end
+            { forall t:tree. mem t result <->
+              (exists r: tree. t = Node t1 r /\ mem r l2) }
+         in
+         loop2 l2 ++ loop1 l1
+      end
+      { forall t:tree. mem t result <->
+        (exists l r: tree. t = Node l r /\ mem l l1 /\ mem r l2) }
+    in
+    loop1 l1
+    { forall t:tree. mem t result <->
+      (exists l r: tree. t = Node l r /\ size l = i1 /\ size r = i2) }
+
+  let all_trees (n: int) =
+    { n >= 0 }
+    let a = make (n+1) Nil in
+    a[0] <- Cons Empty Nil;
+    for i = 1 to n do
+      invariant { (forall k: int. 0 <= k < i -> all_trees k a[k]) }
+      a[i] <- Nil;
+      for j = 0 to i-1 do
+        invariant {
+          (forall k: int. 0 <= k < i -> all_trees k a[k]) /\
+          (forall t: tree. mem t a[i] <->
+           exists l r: tree. t = Node l r /\ size t = i /\ size l < j) }
+        a[i] <- (combine j a[j] (i-1-j) a[i-1-j]) ++ a[i]
+      done
+    done;
+    a
+    { forall i: int. 0 <= i <= n -> all_trees i result[i] }
+
+end
+
+(*
+Local Variables:
+compile-command: "unset LANG; make -C ../.. examples/programs/generate_all_trees.gui"
+End:
+*)
+
diff --git a/examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_all_trees_0_1.v b/examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_all_trees_0_1.v
new file mode 100644
index 0000000000..c31dac1622
--- /dev/null
+++ b/examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_all_trees_0_1.v
@@ -0,0 +1,156 @@
+(* This file is generated by Why3's Coq driver *)
+(* Beware! Only edit allowed sections below    *)
+Require Import ZArith.
+Require Import Rbase.
+Definition unit  := unit.
+
+Parameter qtmark : Type.
+
+Parameter at1: forall (a:Type), a -> qtmark -> a.
+
+Implicit Arguments at1.
+
+Parameter old: forall (a:Type), a -> a.
+
+Implicit Arguments old.
+
+Inductive list (a:Type) :=
+  | Nil : list a
+  | Cons : a -> (list a) -> list a.
+Set Contextual Implicit.
+Implicit Arguments Nil.
+Unset Contextual Implicit.
+Implicit Arguments Cons.
+
+Set Implicit Arguments.
+Fixpoint mem (a:Type)(x:a) (l:(list a)) {struct l}: Prop :=
+  match l with
+  | Nil => False
+  | (Cons y r) => (x = y) \/ (mem x r)
+  end.
+Unset Implicit Arguments.
+
+Set Implicit Arguments.
+Fixpoint infix_plpl (a:Type)(l1:(list a)) (l2:(list a)) {struct l1}: (list
+  a) :=
+  match l1 with
+  | Nil => l2
+  | (Cons x1 r1) => (Cons x1 (infix_plpl r1 l2))
+  end.
+Unset Implicit Arguments.
+
+Axiom Append_assoc : forall (a:Type), forall (l1:(list a)) (l2:(list a))
+  (l3:(list a)), ((infix_plpl l1 (infix_plpl l2
+  l3)) = (infix_plpl (infix_plpl l1 l2) l3)).
+
+Axiom Append_l_nil : forall (a:Type), forall (l:(list a)), ((infix_plpl l
+  (Nil:(list a))) = l).
+
+Set Implicit Arguments.
+Fixpoint length (a:Type)(l:(list a)) {struct l}: Z :=
+  match l with
+  | Nil => 0%Z
+  | (Cons _ r) => (1%Z + (length r))%Z
+  end.
+Unset Implicit Arguments.
+
+Axiom Length_nonnegative : forall (a:Type), forall (l:(list a)),
+  (0%Z <= (length l))%Z.
+
+Axiom Length_nil : forall (a:Type), forall (l:(list a)),
+  ((length l) = 0%Z) <-> (l = (Nil:(list a))).
+
+Axiom Append_length : forall (a:Type), forall (l1:(list a)) (l2:(list a)),
+  ((length (infix_plpl l1 l2)) = ((length l1) + (length l2))%Z).
+
+Axiom mem_append : forall (a:Type), forall (x:a) (l1:(list a)) (l2:(list a)),
+  (mem x (infix_plpl l1 l2)) <-> ((mem x l1) \/ (mem x l2)).
+
+Axiom mem_decomp : forall (a:Type), forall (x:a) (l:(list a)), (mem x l) ->
+  exists l1:(list a), exists l2:(list a), (l = (infix_plpl l1 (Cons x l2))).
+
+Parameter map : forall (a:Type) (b:Type), Type.
+
+Parameter get: forall (a:Type) (b:Type), (map a b) -> a -> b.
+
+Implicit Arguments get.
+
+Parameter set: forall (a:Type) (b:Type), (map a b) -> a -> b -> (map a b).
+
+Implicit Arguments set.
+
+Axiom Select_eq : forall (a:Type) (b:Type), forall (m:(map a b)),
+  forall (a1:a) (a2:a), forall (b1:b), (a1 = a2) -> ((get (set m a1 b1)
+  a2) = b1).
+
+Axiom Select_neq : forall (a:Type) (b:Type), forall (m:(map a b)),
+  forall (a1:a) (a2:a), forall (b1:b), (~ (a1 = a2)) -> ((get (set m a1 b1)
+  a2) = (get m a2)).
+
+Parameter const: forall (b:Type) (a:Type), b -> (map a b).
+
+Set Contextual Implicit.
+Implicit Arguments const.
+Unset Contextual Implicit.
+
+Axiom Const : forall (b:Type) (a:Type), forall (b1:b) (a1:a), ((get (const(
+  b1):(map a b)) a1) = b1).
+
+Inductive array (a:Type) :=
+  | mk_array : Z -> (map Z a) -> array a.
+Implicit Arguments mk_array.
+
+Definition elts (a:Type)(u:(array a)): (map Z a) :=
+  match u with
+  | (mk_array _ elts1) => elts1
+  end.
+Implicit Arguments elts.
+
+Definition length1 (a:Type)(u:(array a)): Z :=
+  match u with
+  | (mk_array length2 _) => length2
+  end.
+Implicit Arguments length1.
+
+Definition get1 (a:Type)(a1:(array a)) (i:Z): a := (get (elts a1) i).
+Implicit Arguments get1.
+
+Definition set1 (a:Type)(a1:(array a)) (i:Z) (v:a): (array a) :=
+  match a1 with
+  | (mk_array xcl0 _) => (mk_array xcl0 (set (elts a1) i v))
+  end.
+Implicit Arguments set1.
+
+Inductive tree  :=
+  | Empty : tree 
+  | Node : tree -> tree -> tree .
+
+Set Implicit Arguments.
+Fixpoint size(t:tree) {struct t}: Z :=
+  match t with
+  | Empty => 0%Z
+  | (Node l r) => ((1%Z + (size l))%Z + (size r))%Z
+  end.
+Unset Implicit Arguments.
+
+Axiom size_nonneg : forall (t:tree), (0%Z <= (size t))%Z.
+
+Definition all_trees(n:Z) (l:(list tree)): Prop := forall (t:tree),
+  ((size t) = n) <-> (mem t l).
+
+(* YOU MAY EDIT THE CONTEXT BELOW *)
+
+(* DO NOT EDIT BELOW *)
+
+Theorem all_trees_0 : (all_trees 0%Z (Cons Empty (Nil:(list tree)))).
+(* YOU MAY EDIT THE PROOF BELOW *)
+red; intuition.
+destruct t; simpl; auto.
+unfold size in H; fold size in H.
+right; generalize (size_nonneg t1); generalize (size_nonneg t2); omega.
+simpl in H; destruct H; intuition.
+subst; simpl; auto.
+Qed.
+(* DO NOT EDIT BELOW *)
+
+
diff --git a/examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_size_nonneg_1.v b/examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_size_nonneg_1.v
new file mode 100644
index 0000000000..b781d10a12
--- /dev/null
+++ b/examples/programs/generate_all_trees/generate_all_trees_WP_GenerateAllTrees_size_nonneg_1.v
@@ -0,0 +1,147 @@
+(* This file is generated by Why3's Coq driver *)
+(* Beware! Only edit allowed sections below    *)
+Require Import ZArith.
+Require Import Rbase.
+Definition unit  := unit.
+
+Parameter qtmark : Type.
+
+Parameter at1: forall (a:Type), a -> qtmark -> a.
+
+Implicit Arguments at1.
+
+Parameter old: forall (a:Type), a -> a.
+
+Implicit Arguments old.
+
+Inductive list (a:Type) :=
+  | Nil : list a
+  | Cons : a -> (list a) -> list a.
+Set Contextual Implicit.
+Implicit Arguments Nil.
+Unset Contextual Implicit.
+Implicit Arguments Cons.
+
+Set Implicit Arguments.
+Fixpoint mem (a:Type)(x:a) (l:(list a)) {struct l}: Prop :=
+  match l with
+  | Nil => False
+  | (Cons y r) => (x = y) \/ (mem x r)
+  end.
+Unset Implicit Arguments.
+
+Set Implicit Arguments.
+Fixpoint infix_plpl (a:Type)(l1:(list a)) (l2:(list a)) {struct l1}: (list
+  a) :=
+  match l1 with
+  | Nil => l2
+  | (Cons x1 r1) => (Cons x1 (infix_plpl r1 l2))
+  end.
+Unset Implicit Arguments.
+
+Axiom Append_assoc : forall (a:Type), forall (l1:(list a)) (l2:(list a))
+  (l3:(list a)), ((infix_plpl l1 (infix_plpl l2
+  l3)) = (infix_plpl (infix_plpl l1 l2) l3)).
+
+Axiom Append_l_nil : forall (a:Type), forall (l:(list a)), ((infix_plpl l
+  (Nil:(list a))) = l).
+
+Set Implicit Arguments.
+Fixpoint length (a:Type)(l:(list a)) {struct l}: Z :=
+  match l with
+  | Nil => 0%Z
+  | (Cons _ r) => (1%Z + (length r))%Z
+  end.
+Unset Implicit Arguments.
+
+Axiom Length_nonnegative : forall (a:Type), forall (l:(list a)),
+  (0%Z <= (length l))%Z.
+
+Axiom Length_nil : forall (a:Type), forall (l:(list a)),
+  ((length l) = 0%Z) <-> (l = (Nil:(list a))).
+
+Axiom Append_length : forall (a:Type), forall (l1:(list a)) (l2:(list a)),
+  ((length (infix_plpl l1 l2)) = ((length l1) + (length l2))%Z).
+
+Axiom mem_append : forall (a:Type), forall (x:a) (l1:(list a)) (l2:(list a)),
+  (mem x (infix_plpl l1 l2)) <-> ((mem x l1) \/ (mem x l2)).
+
+Axiom mem_decomp : forall (a:Type), forall (x:a) (l:(list a)), (mem x l) ->
+  exists l1:(list a), exists l2:(list a), (l = (infix_plpl l1 (Cons x l2))).
+
+Parameter map : forall (a:Type) (b:Type), Type.
+
+Parameter get: forall (a:Type) (b:Type), (map a b) -> a -> b.
+
+Implicit Arguments get.
+
+Parameter set: forall (a:Type) (b:Type), (map a b) -> a -> b -> (map a b).
+
+Implicit Arguments set.
+
+Axiom Select_eq : forall (a:Type) (b:Type), forall (m:(map a b)),
+  forall (a1:a) (a2:a), forall (b1:b), (a1 = a2) -> ((get (set m a1 b1)
+  a2) = b1).
+
+Axiom Select_neq : forall (a:Type) (b:Type), forall (m:(map a b)),
+  forall (a1:a) (a2:a), forall (b1:b), (~ (a1 = a2)) -> ((get (set m a1 b1)
+  a2) = (get m a2)).
+
+Parameter const: forall (b:Type) (a:Type), b -> (map a b).
+
+Set Contextual Implicit.
+Implicit Arguments const.
+Unset Contextual Implicit.
+
+Axiom Const : forall (b:Type) (a:Type), forall (b1:b) (a1:a), ((get (const(
+  b1):(map a b)) a1) = b1).
+
+Inductive array (a:Type) :=
+  | mk_array : Z -> (map Z a) -> array a.
+Implicit Arguments mk_array.
+
+Definition elts (a:Type)(u:(array a)): (map Z a) :=
+  match u with
+  | (mk_array _ elts1) => elts1
+  end.
+Implicit Arguments elts.
+
+Definition length1 (a:Type)(u:(array a)): Z :=
+  match u with
+  | (mk_array length2 _) => length2
+  end.
+Implicit Arguments length1.
+
+Definition get1 (a:Type)(a1:(array a)) (i:Z): a := (get (elts a1) i).
+Implicit Arguments get1.
+
+Definition set1 (a:Type)(a1:(array a)) (i:Z) (v:a): (array a) :=
+  match a1 with
+  | (mk_array xcl0 _) => (mk_array xcl0 (set (elts a1) i v))
+  end.
+Implicit Arguments set1.
+
+Inductive tree  :=
+  | Empty : tree 
+  | Node : tree -> tree -> tree .
+
+Set Implicit Arguments.
+Fixpoint size(t:tree) {struct t}: Z :=
+  match t with
+  | Empty => 0%Z
+  | (Node l r) => ((1%Z + (size l))%Z + (size r))%Z
+  end.
+Unset Implicit Arguments.
+
+(* YOU MAY EDIT THE CONTEXT BELOW *)
+
+(* DO NOT EDIT BELOW *)
+
+Theorem size_nonneg : forall (t:tree), (0%Z <= (size t))%Z.
+(* YOU MAY EDIT THE PROOF BELOW *)
+induction t; intuition.
+unfold size; fold size; omega.
+Qed.
+(* DO NOT EDIT BELOW *)
+
+
diff --git a/examples/programs/generate_all_trees/why3session.xml b/examples/programs/generate_all_trees/why3session.xml
new file mode 100644
index 0000000000..3f850f5e43
--- /dev/null
+++ b/examples/programs/generate_all_trees/why3session.xml
@@ -0,0 +1,545 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE why3session SYSTEM "why3session.dtd">
+<why3session
+ name="examples/programs/generate_all_trees/why3session.xml">
+ <prover
+  id="alt-ergo"
+  name="Alt-Ergo"
+  version="0.93"/>
+ <prover
+  id="coq"
+  name="Coq"
+  version="8.3pl2"/>
+ <prover
+  id="cvc3"
+  name="CVC3"
+  version="2.2"/>
+ <prover
+  id="simplify"
+  name="Simplify"
+  version="1.5.4"/>
+ <prover
+  id="yices"
+  name="Yices"
+  version="1.0.27"/>
+ <prover
+  id="z3"
+  name="Z3"
+  version="2.19"/>
+ <file
+  name="../generate_all_trees.mlw"
+  verified="true"
+  expanded="true">
+  <theory
+   name="WP GenerateAllTrees"
+   verified="true"
+   expanded="true">
+   <goal
+    name="size_nonneg"
+    sum="156445ef5ef8c4b3be9028fb0a504302"
+    proved="true"
+    expanded="true"
+    shape="ainfix >=asizeV0c0F">
+    <proof
+     prover="coq"
+     timelimit="10"
+     edited="generate_all_trees_WP_GenerateAllTrees_size_nonneg_1.v"
+     obsolete="false">
+     <result status="valid" time="0.47"/>
+    </proof>
+   </goal>
+   <goal
+    name="size_left"
+    sum="391c3e8fcb36f33bfc7f2cafbad2ff8e"
+    proved="true"
+    expanded="true"
+    shape="ainfix <asizeV1asizeV0Aainfix =V0aNodeV1V2EIainfix >asizeV0c0F">
+    <proof
+     prover="cvc3"
+     timelimit="10"
+     edited=""
+     obsolete="false">
+     <result status="valid" time="0.02"/>
+    </proof>
+   </goal>
+   <goal
+    name="all_trees_0"
+    sum="163ba1acf3e63b8095ef53144b7c3b3e"
+    proved="true"
+    expanded="true"
+    shape="aall_treesc0aConsaEmptyaNil">
+    <proof
+     prover="coq"
+     timelimit="10"
+     edited="generate_all_trees_WP_GenerateAllTrees_all_trees_0_1.v"
+     obsolete="false">
+     <result status="valid" time="0.48"/>
+    </proof>
+   </goal>
+   <goal
+    name="WP_parameter combine"
+    expl="parameter combine"
+    sum="d406394db26b8e2560a451321b056992"
+    proved="true"
+    expanded="true"
+    shape="CV4aNilamemV7V3AamemV6V4Aainfix =V5aNodeV6V7EqamemV5aNilFaConsVVCV10aNilamemV12V10Aainfix =V11aNodeV8V12EqamemV11aNilFaConsVVamemV17V10Aainfix =V16aNodeV8V17EqamemV16aConsaNodeV8V13V15FIamemV19V14Aainfix =V18aNodeV8V19EqamemV18V15FFFAamemV24V3AamemV23V4Aainfix =V22aNodeV23V24EqamemV22ainfix ++V20V21FIamemV27V3AamemV26V9Aainfix =V25aNodeV26V27EqamemV25V21FFIamemV29V3Aainfix =V28aNodeV8V29EqamemV28V20FFFAainfix =asizeV33V2Aainfix =asizeV32V0Aainfix =V31aNodeV32V33EqamemV31V30FIamemV36V3AamemV35V1Aainfix =V34aNodeV35V36EqamemV34V30FFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+    <transf
+     name="split_goal"
+     proved="true"
+     expanded="true">
+     <goal
+      name="WP_parameter combine.1"
+      expl="normal postcondition"
+      sum="affcd1a759f2503ee334d059ebc1eb75"
+      proved="true"
+      expanded="true"
+      shape="ainfix =asizeV7V2Aainfix =asizeV6V0Aainfix =V5aNodeV6V7EqamemV5V4FIamemV10V3AamemV9V1Aainfix =V8aNodeV9V10EqamemV8V4FFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="0.03"/>
+      </proof>
+     </goal>
+     <goal
+      name="WP_parameter combine.2"
+      expl="parameter combine"
+      sum="d6be72ec59c784189250c702db80561b"
+      proved="true"
+      expanded="true"
+      shape="CV4aNilamemV7V3AamemV6V4Aainfix =V5aNodeV6V7EqamemV5aNilFaConsVVtFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="0.04"/>
+      </proof>
+     </goal>
+     <goal
+      name="WP_parameter combine.3"
+      expl="parameter combine"
+      sum="57848e3c5a069d2e362706c1f4b9b0a3"
+      proved="true"
+      expanded="true"
+      shape="CV4aNiltaConsVVamemV11V3AamemV10V4Aainfix =V9aNodeV10V11EqamemV9ainfix ++V7V8FIamemV14V3AamemV13V6Aainfix =V12aNodeV13V14EqamemV12V8FFIamemV16V3Aainfix =V15aNodeV5V16EqamemV15V7FFFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+      <transf
+       name="split_goal"
+       proved="true"
+       expanded="true">
+       <goal
+        name="WP_parameter combine.3.1"
+        expl="parameter combine"
+        sum="bb429c722ed4a2354f2f11d1a4f43f4c"
+        proved="true"
+        expanded="true"
+        shape="CV4aNiltaConsVVamemV11V3AamemV10V4Aainfix =V9aNodeV10V11EIamemV9ainfix ++V7V8FIamemV14V3AamemV13V6Aainfix =V12aNodeV13V14EqamemV12V8FFIamemV16V3Aainfix =V15aNodeV5V16EqamemV15V7FFFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+        <proof
+         prover="cvc3"
+         timelimit="10"
+         edited=""
+         obsolete="false">
+         <result status="valid" time="0.38"/>
+        </proof>
+       </goal>
+       <goal
+        name="WP_parameter combine.3.2"
+        expl="parameter combine"
+        sum="64d22eed0b3456d8b81661a943cce110"
+        proved="true"
+        expanded="true"
+        shape="CV4aNiltaConsVVamemV9ainfix ++V7V8IamemV11V3AamemV10V4Aainfix =V9aNodeV10V11EFIamemV14V3AamemV13V6Aainfix =V12aNodeV13V14EqamemV12V8FFIamemV16V3Aainfix =V15aNodeV5V16EqamemV15V7FFFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+        <proof
+         prover="alt-ergo"
+         timelimit="10"
+         edited=""
+         obsolete="false">
+         <result status="valid" time="0.10"/>
+        </proof>
+       </goal>
+      </transf>
+     </goal>
+     <goal
+      name="WP_parameter combine.4"
+      expl="parameter combine"
+      sum="ad04c73961725f5865b00b397164991f"
+      proved="true"
+      expanded="true"
+      shape="CV4aNiltaConsVVCV7aNilamemV9V7Aainfix =V8aNodeV5V9EqamemV8aNilFaConsVVtFFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="0.03"/>
+      </proof>
+     </goal>
+     <goal
+      name="WP_parameter combine.5"
+      expl="parameter combine"
+      sum="f24a85046e19e3820a3d69ffae3ee960"
+      proved="true"
+      expanded="true"
+      shape="CV4aNiltaConsVVCV7aNiltaConsVVamemV12V7Aainfix =V11aNodeV5V12EqamemV11aConsaNodeV5V8V10FIamemV14V9Aainfix =V13aNodeV5V14EqamemV13V10FFFFIaall_treesV2V3Aainfix <=c0V2Aaall_treesV0V1Aainfix <=c0V0FFFF">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="2.80"/>
+      </proof>
+     </goal>
+    </transf>
+   </goal>
+   <goal
+    name="WP_parameter all_trees"
+    expl="parameter all_trees"
+    sum="dfe06fca72b52a7052a6848a5de4bbd0"
+    proved="true"
+    expanded="true"
+    shape="aall_treesV3agetV2V3Iainfix <=V3V0Aainfix <=c0V3FIaall_treesV4agetV2V4Iainfix <V4ainfix +V0c1Aainfix <=c0V4FAaall_treesV8agetV7V8Iainfix <V8ainfix +V5c1Aainfix <=c0V8FIainfix <asizeV10ainfix +ainfix -V5c1c1Aainfix =asizeV9V5Aainfix =V9aNodeV10V11EqamemV9agetV7V5FAaall_treesV12agetV7V12Iainfix <V12V5Aainfix <=c0V12FAainfix <asizeV17ainfix +V13c1Aainfix =asizeV16V5Aainfix =V16aNodeV17V18EqamemV16agetV15V5FAaall_treesV19agetV15V19Iainfix <V19V5Aainfix <=c0V19FIainfix =V15asetV7V5ainfix ++V14agetV7V5FAainfix <V5ainfix +V0c1Aainfix <=c0V5Aainfix <V5ainfix +V0c1Aainfix <=c0V5Iainfix =asizeV22ainfix -ainfix -V5c1V13Aainfix =asizeV21V13Aainfix =V20aNodeV21V22EqamemV20V14FFAaall_treesainfix -ainfix -V5c1V13agetV7ainfix -ainfix -V5c1V13Aainfix <=c0ainfix -ainfix -V5c1V13Aaall_treesV13agetV7V13Aainfix <=c0V13Aainfix <ainfix -ainfix -V5c1V13ainfix +V0c1Aainfix <=c0ainfix -ainfix -V5c1V13Aainfix <V13ainfix +V0c1Aainfix <=c0V13Iainfix <asizeV24V13Aainfix =asizeV23V5Aainfix =V23aNodeV24V25EqamemV23agetV7V5FAaall_treesV26agetV7V26Iainfix <V26V5Aainfix <=c0V26FIainfix <=V13ainfix -V5c1Aainfix <=c0V13FFAainfix <asizeV28c0Aainfix =asizeV27V5Aainfix =V27aNodeV28V29EqamemV27agetV6V5FAaall_treesV30agetV6V30Iainfix <V30V5Aainfix <=c0V30FIainfix <=c0ainfix -V5c1Aaall_treesV31agetV6V31Iainfix <V31ainfix +V5c1Aainfix <=c0V31FIainfix >c0ainfix -V5c1Iainfix =V6asetV2V5aNilFAainfix <V5ainfix +V0c1Aainfix <=c0V5Iaall_treesV32agetV2V32Iainfix <V32V5Aainfix <=c0V32FIainfix <=V5V0Aainfix <=c1V5FFAaall_treesV33agetV1V33Iainfix <V33c1Aainfix <=c0V33FIainfix <=c1V0Aaall_treesV34agetV1V34Iainfix <=V34V0Aainfix <=c0V34FIainfix >c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFAainfix <c0ainfix +V0c1Aainfix <=c0c0Aainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+    <transf
+     name="split_goal"
+     proved="true"
+     expanded="true">
+     <goal
+      name="WP_parameter all_trees.1"
+      expl="precondition"
+      sum="261c17a3be210b33387cef4e0d569ef9"
+      proved="true"
+      expanded="true"
+      shape="ainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="0.02"/>
+      </proof>
+     </goal>
+     <goal
+      name="WP_parameter all_trees.2"
+      expl="precondition"
+      sum="8bcccd583cd98d9d75561ac24fe5f798"
+      proved="true"
+      expanded="true"
+      shape="ainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="0.02"/>
+      </proof>
+     </goal>
+     <goal
+      name="WP_parameter all_trees.3"
+      expl="normal postcondition"
+      sum="ecef785e4268c5cd2b35ca3ed1e46a3c"
+      proved="true"
+      expanded="true"
+      shape="aall_treesV2agetV1V2Iainfix <=V2V0Aainfix <=c0V2FIainfix >c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="0.02"/>
+      </proof>
+     </goal>
+     <goal
+      name="WP_parameter all_trees.4"
+      expl="for loop initialization"
+      sum="acbf4ab5105bcd9a1e679105e3ba530d"
+      proved="true"
+      expanded="true"
+      shape="aall_treesV2agetV1V2Iainfix <V2c1Aainfix <=c0V2FIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+      <transf
+       name="split_goal"
+       proved="true"
+       expanded="true">
+       <goal
+        name="WP_parameter all_trees.4.1"
+        expl="for loop initialization"
+        sum="acbf4ab5105bcd9a1e679105e3ba530d"
+        proved="true"
+        expanded="true"
+        shape="aall_treesV2agetV1V2Iainfix <V2c1Aainfix <=c0V2FIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+        <proof
+         prover="alt-ergo"
+         timelimit="10"
+         edited=""
+         obsolete="false">
+         <result status="valid" time="0.03"/>
+        </proof>
+       </goal>
+      </transf>
+     </goal>
+     <goal
+      name="WP_parameter all_trees.5"
+      expl="for loop preservation"
+      sum="e730432ba8b9b0a74dd9ed72d0b4de66"
+      proved="true"
+      expanded="true"
+      shape="aall_treesV6agetV5V6Iainfix <V6ainfix +V3c1Aainfix <=c0V6FIainfix <asizeV8ainfix +ainfix -V3c1c1Aainfix =asizeV7V3Aainfix =V7aNodeV8V9EqamemV7agetV5V3FAaall_treesV10agetV5V10Iainfix <V10V3Aainfix <=c0V10FAainfix <asizeV15ainfix +V11c1Aainfix =asizeV14V3Aainfix =V14aNodeV15V16EqamemV14agetV13V3FAaall_treesV17agetV13V17Iainfix <V17V3Aainfix <=c0V17FIainfix =V13asetV5V3ainfix ++V12agetV5V3FAainfix <V3ainfix +V0c1Aainfix <=c0V3Aainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix =asizeV20ainfix -ainfix -V3c1V11Aainfix =asizeV19V11Aainfix =V18aNodeV19V20EqamemV18V12FFAaall_treesainfix -ainfix -V3c1V11agetV5ainfix -ainfix -V3c1V11Aainfix <=c0ainfix -ainfix -V3c1V11Aaall_treesV11agetV5V11Aainfix <=c0V11Aainfix <ainfix -ainfix -V3c1V11ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V11Aainfix <V11ainfix +V0c1Aainfix <=c0V11Iainfix <asizeV22V11Aainfix =asizeV21V3Aainfix =V21aNodeV22V23EqamemV21agetV5V3FAaall_treesV24agetV5V24Iainfix <V24V3Aainfix <=c0V24FIainfix <=V11ainfix -V3c1Aainfix <=c0V11FFAainfix <asizeV26c0Aainfix =asizeV25V3Aainfix =V25aNodeV26V27EqamemV25agetV4V3FAaall_treesV28agetV4V28Iainfix <V28V3Aainfix <=c0V28FIainfix <=c0ainfix -V3c1Aaall_treesV29agetV4V29Iainfix <V29ainfix +V3c1Aainfix <=c0V29FIainfix >c0ainfix -V3c1Iainfix =V4asetV2V3aNilFAainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV30agetV2V30Iainfix <V30V3Aainfix <=c0V30FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+      <transf
+       name="split_goal"
+       proved="true"
+       expanded="true">
+       <goal
+        name="WP_parameter all_trees.5.1"
+        expl="for loop preservation"
+        sum="5de38c3a5b4782ba42257cd89dbc5a75"
+        proved="true"
+        expanded="true"
+        shape="ainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV4agetV2V4Iainfix <V4V3Aainfix <=c0V4FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+        <proof
+         prover="alt-ergo"
+         timelimit="10"
+         edited=""
+         obsolete="false">
+         <result status="valid" time="0.02"/>
+        </proof>
+       </goal>
+       <goal
+        name="WP_parameter all_trees.5.2"
+        expl="for loop preservation"
+        sum="987ce4578e2107026e6c49f6060465c2"
+        proved="true"
+        expanded="true"
+        shape="aall_treesV5agetV4V5Iainfix <V5ainfix +V3c1Aainfix <=c0V5FIainfix >c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV6agetV2V6Iainfix <V6V3Aainfix <=c0V6FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+        <proof
+         prover="alt-ergo"
+         timelimit="10"
+         edited=""
+         obsolete="false">
+         <result status="valid" time="0.01"/>
+        </proof>
+       </goal>
+       <goal
+        name="WP_parameter all_trees.5.3"
+        expl="for loop preservation"
+        sum="7a6ad17e60a79b330cf3501964bb14d1"
+        proved="true"
+        expanded="true"
+        shape="ainfix <asizeV6c0Aainfix =asizeV5V3Aainfix =V5aNodeV6V7EqamemV5agetV4V3FAaall_treesV8agetV4V8Iainfix <V8V3Aainfix <=c0V8FIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV9agetV2V9Iainfix <V9V3Aainfix <=c0V9FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+        <proof
+         prover="alt-ergo"
+         timelimit="10"
+         edited=""
+         obsolete="false">
+         <result status="valid" time="0.04"/>
+        </proof>
+       </goal>
+       <goal
+        name="WP_parameter all_trees.5.4"
+        expl="for loop preservation"
+        sum="25f866ace24daea6a781fd8f7953f2e7"
+        proved="true"
+        expanded="true"
+        shape="ainfix <asizeV10ainfix +V6c1Aainfix =asizeV9V3Aainfix =V9aNodeV10V11EqamemV9agetV8V3FAaall_treesV12agetV8V12Iainfix <V12V3Aainfix <=c0V12FIainfix =V8asetV5V3ainfix ++V7agetV5V3FAainfix <V3ainfix +V0c1Aainfix <=c0V3Aainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix =asizeV15ainfix -ainfix -V3c1V6Aainfix =asizeV14V6Aainfix =V13aNodeV14V15EqamemV13V7FFAaall_treesainfix -ainfix -V3c1V6agetV5ainfix -ainfix -V3c1V6Aainfix <=c0ainfix -ainfix -V3c1V6Aaall_treesV6agetV5V6Aainfix <=c0V6Aainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Aainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV17V6Aainfix =asizeV16V3Aainfix =V16aNodeV17V18EqamemV16agetV5V3FAaall_treesV19agetV5V19Iainfix <V19V3Aainfix <=c0V19FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV20agetV2V20Iainfix <V20V3Aainfix <=c0V20FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+        <transf
+         name="split_goal"
+         proved="true"
+         expanded="true">
+         <goal
+          name="WP_parameter all_trees.5.4.1"
+          expl="for loop preservation"
+          sum="2e7f986966f9fef1aa63db54fd10133a"
+          proved="true"
+          expanded="true"
+          shape="ainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV8V6Aainfix =asizeV7V3Aainfix =V7aNodeV8V9EqamemV7agetV5V3FAaall_treesV10agetV5V10Iainfix <V10V3Aainfix <=c0V10FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV11agetV2V11Iainfix <V11V3Aainfix <=c0V11FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="alt-ergo"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.03"/>
+          </proof>
+         </goal>
+         <goal
+          name="WP_parameter all_trees.5.4.2"
+          expl="for loop preservation"
+          sum="cbf5b2f4c709af666b6eea9e00969823"
+          proved="true"
+          expanded="true"
+          shape="ainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Iainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV8V6Aainfix =asizeV7V3Aainfix =V7aNodeV8V9EqamemV7agetV5V3FAaall_treesV10agetV5V10Iainfix <V10V3Aainfix <=c0V10FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV11agetV2V11Iainfix <V11V3Aainfix <=c0V11FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="alt-ergo"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.01"/>
+          </proof>
+         </goal>
+         <goal
+          name="WP_parameter all_trees.5.4.3"
+          expl="for loop preservation"
+          sum="317e8a177847381c23eaa2db9ba5aac6"
+          proved="true"
+          expanded="true"
+          shape="aall_treesainfix -ainfix -V3c1V6agetV5ainfix -ainfix -V3c1V6Aainfix <=c0ainfix -ainfix -V3c1V6Aaall_treesV6agetV5V6Aainfix <=c0V6Iainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Iainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV8V6Aainfix =asizeV7V3Aainfix =V7aNodeV8V9EqamemV7agetV5V3FAaall_treesV10agetV5V10Iainfix <V10V3Aainfix <=c0V10FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV11agetV2V11Iainfix <V11V3Aainfix <=c0V11FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="alt-ergo"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.04"/>
+          </proof>
+         </goal>
+         <goal
+          name="WP_parameter all_trees.5.4.4"
+          expl="for loop preservation"
+          sum="f703fc63f619690aa34ea03b9f1db5f6"
+          proved="true"
+          expanded="true"
+          shape="ainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix =asizeV10ainfix -ainfix -V3c1V6Aainfix =asizeV9V6Aainfix =V8aNodeV9V10EqamemV8V7FFIaall_treesainfix -ainfix -V3c1V6agetV5ainfix -ainfix -V3c1V6Aainfix <=c0ainfix -ainfix -V3c1V6Aaall_treesV6agetV5V6Aainfix <=c0V6Iainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Iainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV12V6Aainfix =asizeV11V3Aainfix =V11aNodeV12V13EqamemV11agetV5V3FAaall_treesV14agetV5V14Iainfix <V14V3Aainfix <=c0V14FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV15agetV2V15Iainfix <V15V3Aainfix <=c0V15FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="alt-ergo"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.03"/>
+          </proof>
+         </goal>
+         <goal
+          name="WP_parameter all_trees.5.4.5"
+          expl="for loop preservation"
+          sum="242f2d548655fbf812b7bfe9bde3bda0"
+          proved="true"
+          expanded="true"
+          shape="ainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix =asizeV10ainfix -ainfix -V3c1V6Aainfix =asizeV9V6Aainfix =V8aNodeV9V10EqamemV8V7FFIaall_treesainfix -ainfix -V3c1V6agetV5ainfix -ainfix -V3c1V6Aainfix <=c0ainfix -ainfix -V3c1V6Aaall_treesV6agetV5V6Aainfix <=c0V6Iainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Iainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV12V6Aainfix =asizeV11V3Aainfix =V11aNodeV12V13EqamemV11agetV5V3FAaall_treesV14agetV5V14Iainfix <V14V3Aainfix <=c0V14FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV15agetV2V15Iainfix <V15V3Aainfix <=c0V15FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="alt-ergo"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.04"/>
+          </proof>
+         </goal>
+         <goal
+          name="WP_parameter all_trees.5.4.6"
+          expl="for loop preservation"
+          sum="42cdb70f0b2b02a3093c8cdb9c3004e1"
+          proved="true"
+          expanded="true"
+          shape="aall_treesV9agetV8V9Iainfix <V9V3Aainfix <=c0V9FIainfix =V8asetV5V3ainfix ++V7agetV5V3FIainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix =asizeV12ainfix -ainfix -V3c1V6Aainfix =asizeV11V6Aainfix =V10aNodeV11V12EqamemV10V7FFIaall_treesainfix -ainfix -V3c1V6agetV5ainfix -ainfix -V3c1V6Aainfix <=c0ainfix -ainfix -V3c1V6Aaall_treesV6agetV5V6Aainfix <=c0V6Iainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Iainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV14V6Aainfix =asizeV13V3Aainfix =V13aNodeV14V15EqamemV13agetV5V3FAaall_treesV16agetV5V16Iainfix <V16V3Aainfix <=c0V16FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV17agetV2V17Iainfix <V17V3Aainfix <=c0V17FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="alt-ergo"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.04"/>
+          </proof>
+         </goal>
+         <goal
+          name="WP_parameter all_trees.5.4.7"
+          expl="for loop preservation"
+          sum="5dee8bf6ca5eea991ab5ea83c687b885"
+          proved="true"
+          expanded="true"
+          shape="ainfix <asizeV10ainfix +V6c1Aainfix =asizeV9V3Aainfix =V9aNodeV10V11EIamemV9agetV8V3FIainfix =V8asetV5V3ainfix ++V7agetV5V3FIainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix =asizeV14ainfix -ainfix -V3c1V6Aainfix =asizeV13V6Aainfix =V12aNodeV13V14EqamemV12V7FFIaall_treesainfix -ainfix -V3c1V6agetV5ainfix -ainfix -V3c1V6Aainfix <=c0ainfix -ainfix -V3c1V6Aaall_treesV6agetV5V6Aainfix <=c0V6Iainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Iainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV16V6Aainfix =asizeV15V3Aainfix =V15aNodeV16V17EqamemV15agetV5V3FAaall_treesV18agetV5V18Iainfix <V18V3Aainfix <=c0V18FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV19agetV2V19Iainfix <V19V3Aainfix <=c0V19FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="cvc3"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.34"/>
+          </proof>
+         </goal>
+         <goal
+          name="WP_parameter all_trees.5.4.8"
+          expl="for loop preservation"
+          sum="1560e2e78fd1fbb495d64b4ef9785cb3"
+          proved="true"
+          expanded="true"
+          shape="amemV9agetV8V3Iainfix <asizeV10ainfix +V6c1Aainfix =asizeV9V3Aainfix =V9aNodeV10V11EFIainfix =V8asetV5V3ainfix ++V7agetV5V3FIainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix <V3ainfix +V0c1Aainfix <=c0V3Iainfix =asizeV14ainfix -ainfix -V3c1V6Aainfix =asizeV13V6Aainfix =V12aNodeV13V14EqamemV12V7FFIaall_treesainfix -ainfix -V3c1V6agetV5ainfix -ainfix -V3c1V6Aainfix <=c0ainfix -ainfix -V3c1V6Aaall_treesV6agetV5V6Aainfix <=c0V6Iainfix <ainfix -ainfix -V3c1V6ainfix +V0c1Aainfix <=c0ainfix -ainfix -V3c1V6Iainfix <V6ainfix +V0c1Aainfix <=c0V6Iainfix <asizeV16V6Aainfix =asizeV15V3Aainfix =V15aNodeV16V17EqamemV15agetV5V3FAaall_treesV18agetV5V18Iainfix <V18V3Aainfix <=c0V18FIainfix <=V6ainfix -V3c1Aainfix <=c0V6FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV19agetV2V19Iainfix <V19V3Aainfix <=c0V19FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+          <proof
+           prover="alt-ergo"
+           timelimit="10"
+           edited=""
+           obsolete="false">
+           <result status="valid" time="0.63"/>
+          </proof>
+         </goal>
+        </transf>
+       </goal>
+       <goal
+        name="WP_parameter all_trees.5.5"
+        expl="for loop preservation"
+        sum="29bd050a93bd98d7844e51a30b5b4e29"
+        proved="true"
+        expanded="true"
+        shape="aall_treesV6agetV5V6Iainfix <V6ainfix +V3c1Aainfix <=c0V6FIainfix <asizeV8ainfix +ainfix -V3c1c1Aainfix =asizeV7V3Aainfix =V7aNodeV8V9EqamemV7agetV5V3FAaall_treesV10agetV5V10Iainfix <V10V3Aainfix <=c0V10FFIainfix <=c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix <=c0V3Iaall_treesV11agetV2V11Iainfix <V11V3Aainfix <=c0V11FIainfix <=V3V0Aainfix <=c1V3FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+        <transf
+         name="inline_goal"
+         proved="true"
+         expanded="true">
+         <goal
+          name="WP_parameter all_trees.5.5.1"
+          expl="for loop preservation"
+          sum="f3dbc405c6622e2cf894c5063338901d"
+          proved="true"
+          expanded="true"
+          shape="amemV7agetV5V6qainfix =asizeV7V6FIainfix <V6ainfix +V3c1Aainfix =c0V6Oainfix <c0V6FIainfix <asizeV9ainfix +ainfix -V3c1c1Aainfix =asizeV8V3Aainfix =V8aNodeV9V10EqamemV8agetV5V3FAamemV12agetV5V11qainfix =asizeV12V11FIainfix <V11V3Aainfix =c0V11Oainfix <c0V11FFIainfix =c0ainfix -V3c1Oainfix <c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix =c0V3Oainfix <c0V3IamemV14agetV2V13qainfix =asizeV14V13FIainfix <V13V3Aainfix =c0V13Oainfix <c0V13FIainfix =V3V0Oainfix <V3V0Aainfix =c1V3Oainfix <c1V3FFIainfix =c1V0Oainfix <c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix =c0c0Oainfix <c0c0Iainfix <=c0ainfix +V0c1Iainfix <=c0V0F">
+          <transf
+           name="split_goal"
+           proved="true"
+           expanded="true">
+           <goal
+            name="WP_parameter all_trees.5.5.1.1"
+            expl="for loop preservation"
+            sum="090c5b2866056a70c45edbf4b40caf42"
+            proved="true"
+            expanded="true"
+            shape="amemV7agetV5V6Iainfix =asizeV7V6FIainfix <V6ainfix +V3c1Aainfix =c0V6Oainfix <c0V6FIainfix <asizeV9ainfix +ainfix -V3c1c1Aainfix =asizeV8V3Aainfix =V8aNodeV9V10EqamemV8agetV5V3FAamemV12agetV5V11qainfix =asizeV12V11FIainfix <V11V3Aainfix =c0V11Oainfix <c0V11FFIainfix =c0ainfix -V3c1Oainfix <c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix =c0V3Oainfix <c0V3IamemV14agetV2V13qainfix =asizeV14V13FIainfix <V13V3Aainfix =c0V13Oainfix <c0V13FIainfix =V3V0Oainfix <V3V0Aainfix =c1V3Oainfix <c1V3FFIainfix =c1V0Oainfix <c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix =c0c0Oainfix <c0c0Iainfix <=c0ainfix +V0c1Iainfix <=c0V0F">
+            <proof
+             prover="alt-ergo"
+             timelimit="10"
+             edited=""
+             obsolete="false">
+             <result status="valid" time="0.10"/>
+            </proof>
+           </goal>
+           <goal
+            name="WP_parameter all_trees.5.5.1.2"
+            expl="for loop preservation"
+            sum="73e58cc7820a18c65629719cc22e74ed"
+            proved="true"
+            expanded="true"
+            shape="ainfix =asizeV7V6IamemV7agetV5V6FIainfix <V6ainfix +V3c1Aainfix =c0V6Oainfix <c0V6FIainfix <asizeV9ainfix +ainfix -V3c1c1Aainfix =asizeV8V3Aainfix =V8aNodeV9V10EqamemV8agetV5V3FAamemV12agetV5V11qainfix =asizeV12V11FIainfix <V11V3Aainfix =c0V11Oainfix <c0V11FFIainfix =c0ainfix -V3c1Oainfix <c0ainfix -V3c1Iainfix =V4asetV2V3aNilFIainfix <V3ainfix +V0c1Aainfix =c0V3Oainfix <c0V3IamemV14agetV2V13qainfix =asizeV14V13FIainfix <V13V3Aainfix =c0V13Oainfix <c0V13FIainfix =V3V0Oainfix <V3V0Aainfix =c1V3Oainfix <c1V3FFIainfix =c1V0Oainfix <c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix =c0c0Oainfix <c0c0Iainfix <=c0ainfix +V0c1Iainfix <=c0V0F">
+            <proof
+             prover="alt-ergo"
+             timelimit="10"
+             edited=""
+             obsolete="false">
+             <result status="valid" time="0.72"/>
+            </proof>
+           </goal>
+          </transf>
+         </goal>
+        </transf>
+       </goal>
+      </transf>
+     </goal>
+     <goal
+      name="WP_parameter all_trees.6"
+      expl="normal postcondition"
+      sum="36486cd8ada89c3937c7c6586e4ab698"
+      proved="true"
+      expanded="true"
+      shape="aall_treesV3agetV2V3Iainfix <=V3V0Aainfix <=c0V3FIaall_treesV4agetV2V4Iainfix <V4ainfix +V0c1Aainfix <=c0V4FFIainfix <=c1V0Iainfix =V1asetaconstaNilc0aConsaEmptyaNilFIainfix <c0ainfix +V0c1Aainfix <=c0c0Iainfix >=ainfix +V0c1c0Iainfix >=V0c0F">
+      <proof
+       prover="alt-ergo"
+       timelimit="10"
+       edited=""
+       obsolete="false">
+       <result status="valid" time="0.01"/>
+      </proof>
+     </goal>
+    </transf>
+   </goal>
+  </theory>
+ </file>
+</why3session>
-- 
GitLab