< Module lambda_calculus:host.
< Projection_Constraint proj_is : forall E E', |{e}- E ~~> E' -> is_e E -> is_e E'. Proof completed.
< Proj_Rel is_e E. Proof completed.
< Ext_Ind forall E, is_e E. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Subgoal 1: Variables: S IH : forall E, is_e E * -> <is_e {P}> E R : is_e (var S) @ R1 : is_string S ============================ <is_e {P}> (var S)
< search. Subgoal 2: Variables: E1 S IH : forall E, is_e E * -> <is_e {P}> E R : is_e (abs S E1) @ R1 : is_string S R2 : is_e E1 * ============================ <is_e {P}> (abs S E1)
< apply IH to R2. Subgoal 2: Variables: E1 S IH : forall E, is_e E * -> <is_e {P}> E R : is_e (abs S E1) @ R1 : is_string S R2 : is_e E1 * H1 : <is_e {P}> E1 ============================ <is_e {P}> (abs S E1)
< search. Subgoal 3: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (app E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * ============================ <is_e {P}> (app E1 E2)
< apply IH to R1. Subgoal 3: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (app E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * H1 : <is_e {P}> E1 ============================ <is_e {P}> (app E1 E2)
< apply IH to R2. Subgoal 3: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (app E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * H1 : <is_e {P}> E1 H2 : <is_e {P}> E2 ============================ <is_e {P}> (app E1 E2)
< search. Subgoal 4: Variables: I IH : forall E, is_e E * -> <is_e {P}> E R : is_e (intE I) @ R1 : is_integer I ============================ <is_e {P}> (intE I)
< search. Subgoal 5: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (plus E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * ============================ <is_e {P}> (plus E1 E2)
< apply IH to R1. Subgoal 5: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (plus E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * H1 : <is_e {P}> E1 ============================ <is_e {P}> (plus E1 E2)
< apply IH to R2. Subgoal 5: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (plus E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * H1 : <is_e {P}> E1 H2 : <is_e {P}> E2 ============================ <is_e {P}> (plus E1 E2)
< search. Proof completed.
< Projection_Constraint proj_same : forall E E1 E2, |{e}- E ~~> E1 -> |{e}- E ~~> E2 -> E1 = E2. Proof completed.
< Extensible_Theorem subst_exists : forall X R E, IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> exists S, subst X R E S on IsE. Subgoal 1: Variables: X R S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (var S) @ IsX : is_string X IsR : is_e R IsE1 : is_string S ============================ exists S1, subst X R (var S) S1
< Or: apply is_string_eq_or_not to IsX IsE1. Subgoal 1: Variables: X R S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (var S) @ IsX : is_string X IsR : is_e R IsE1 : is_string S Or : X = S \/ (X = S -> false) ============================ exists S1, subst X R (var S) S1
< Eq: case Or. Subgoal 1.1: Variables: R S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (var S) @ IsX : is_string S IsR : is_e R IsE1 : is_string S ============================ exists S1, subst S R (var S) S1
< search. Subgoal 1.2: Variables: X R S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (var S) @ IsX : is_string X IsR : is_e R IsE1 : is_string S Eq : X = S -> false ============================ exists S1, subst X R (var S) S1
< search. Subgoal 2: Variables: X R E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (abs S E1) @ IsX : is_string X IsR : is_e R IsE1 : is_string S IsE2 : is_e E1 * ============================ exists S1, subst X R (abs S E1) S1
< Or: apply is_string_eq_or_not to IsX IsE1. Subgoal 2: Variables: X R E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (abs S E1) @ IsX : is_string X IsR : is_e R IsE1 : is_string S IsE2 : is_e E1 * Or : X = S \/ (X = S -> false) ============================ exists S1, subst X R (abs S E1) S1
< Eq: case Or. Subgoal 2.1: Variables: R E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (abs S E1) @ IsX : is_string S IsR : is_e R IsE1 : is_string S IsE2 : is_e E1 * ============================ exists S1, subst S R (abs S E1) S1
< search. Subgoal 2.2: Variables: X R E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (abs S E1) @ IsX : is_string X IsR : is_e R IsE1 : is_string S IsE2 : is_e E1 * Eq : X = S -> false ============================ exists S1, subst X R (abs S E1) S1
< apply IH to IsE2 IsX IsR. Subgoal 2.2: Variables: X R E1 S S1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (abs S E1) @ IsX : is_string X IsR : is_e R IsE1 : is_string S IsE2 : is_e E1 * Eq : X = S -> false H1 : subst X R E1 S1 ============================ exists S1, subst X R (abs S E1) S1
< search. Subgoal 3: Variables: X R E2 E1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (app E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * ============================ exists S, subst X R (app E1 E2) S
< apply IH to IsE1 IsX IsR. Subgoal 3: Variables: X R E2 E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (app E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * H1 : subst X R E1 S ============================ exists S, subst X R (app E1 E2) S
< apply IH to IsE2 IsX IsR. Subgoal 3: Variables: X R E2 E1 S S1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (app E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * H1 : subst X R E1 S H2 : subst X R E2 S1 ============================ exists S, subst X R (app E1 E2) S
< search. Subgoal 4: Variables: X R I IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (intE I) @ IsX : is_string X IsR : is_e R IsE1 : is_integer I ============================ exists S, subst X R (intE I) S
< search. Subgoal 5: Variables: X R E2 E1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (plus E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * ============================ exists S, subst X R (plus E1 E2) S
< apply IH to IsE1 IsX IsR. Subgoal 5: Variables: X R E2 E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (plus E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * H1 : subst X R E1 S ============================ exists S, subst X R (plus E1 E2) S
< apply IH to IsE2 IsX IsR. Subgoal 5: Variables: X R E2 E1 S S1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (plus E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * H1 : subst X R E1 S H2 : subst X R E2 S1 ============================ exists S, subst X R (plus E1 E2) S
< search. Proof completed.
< Extensible_Theorem subst_is : forall X R E S, IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> S : subst X R E S -> is_e S on S. Subgoal 1: Variables: X S IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (var X) IsX : is_string X IsR : is_e S S : subst X S (var X) S @ ============================ is_e S
< search. Subgoal 2: Variables: X R Y IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (var Y) IsX : is_string X IsR : is_e R S : subst X R (var Y) (var Y) @ S1 : X = Y -> false ============================ is_e (var Y)
< search. Subgoal 3: Variables: X R Body IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (abs X Body) IsX : is_string X IsR : is_e R S : subst X R (abs X Body) (abs X Body) @ ============================ is_e (abs X Body)
< search. Subgoal 4: Variables: X R B Y Body IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (abs Y Body) IsX : is_string X IsR : is_e R S : subst X R (abs Y Body) (abs Y B) @ S1 : X = Y -> false S2 : subst X R Body B * ============================ is_e (abs Y B)
< Is: case IsE. Subgoal 4: Variables: X R B Y Body IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (abs Y Body) (abs Y B) @ S1 : X = Y -> false S2 : subst X R Body B * Is : is_string Y Is1 : is_e Body ============================ is_e (abs Y B)
< apply IH to _ _ _ S2. Subgoal 4: Variables: X R B Y Body IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (abs Y Body) (abs Y B) @ S1 : X = Y -> false S2 : subst X R Body B * Is : is_string Y Is1 : is_e Body H1 : is_e B ============================ is_e (abs Y B)
< search. Subgoal 5: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (app E1 E2) IsX : is_string X IsR : is_e R S : subst X R (app E1 E2) (app S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * ============================ is_e (app S1 S2)
< Is: case IsE. Subgoal 5: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (app E1 E2) (app S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * Is : is_e E1 Is1 : is_e E2 ============================ is_e (app S1 S2)
< apply IH to _ _ _ S1. Subgoal 5: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (app E1 E2) (app S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * Is : is_e E1 Is1 : is_e E2 H1 : is_e S1 ============================ is_e (app S1 S2)
< apply IH to _ _ _ S2. Subgoal 5: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (app E1 E2) (app S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * Is : is_e E1 Is1 : is_e E2 H1 : is_e S1 H2 : is_e S2 ============================ is_e (app S1 S2)
< search. Subgoal 6: Variables: X R I IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (intE I) IsX : is_string X IsR : is_e R S : subst X R (intE I) (intE I) @ ============================ is_e (intE I)
< case IsE. Subgoal 6: Variables: X R I IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (intE I) (intE I) @ H1 : is_integer I ============================ is_e (intE I)
< search. Subgoal 7: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (plus E1 E2) IsX : is_string X IsR : is_e R S : subst X R (plus E1 E2) (plus S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * ============================ is_e (plus S1 S2)
< case IsE. Subgoal 7: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (plus E1 E2) (plus S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * H1 : is_e E1 H2 : is_e E2 ============================ is_e (plus S1 S2)
< apply IH to _ _ _ S1. Subgoal 7: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (plus E1 E2) (plus S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * H1 : is_e E1 H2 : is_e E2 H3 : is_e S1 ============================ is_e (plus S1 S2)
< apply IH to _ _ _ S2. Subgoal 7: Variables: X R S2 S1 E2 E1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (plus E1 E2) (plus S1 S2) @ S1 : subst X R E1 S1 * S2 : subst X R E2 S2 * H1 : is_e E1 H2 : is_e E2 H3 : is_e S1 H4 : is_e S2 ============================ is_e (plus S1 S2)
< search. Proof completed.
< Extensible_Theorem eval_is : forall E V, IsE : is_e E -> Ev : eval E V -> is_e V on Ev. Subgoal 1: Variables: Body X IH : forall E V, is_e E -> eval E V * -> is_e V IsE : is_e (abs X Body) Ev : eval (abs X Body) (abs X Body) @ ============================ is_e (abs X Body)
< search. Subgoal 2: Variables: V X Body V2 B E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V IsE : is_e (app E1 E2) Ev : eval (app E1 E2) V @ Ev1 : eval E1 (abs X Body) * Ev2 : eval E2 V2 * Ev3 : subst X V2 Body B Ev4 : eval B V * ============================ is_e V
< Is: case IsE. Subgoal 2: Variables: V X Body V2 B E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (app E1 E2) V @ Ev1 : eval E1 (abs X Body) * Ev2 : eval E2 V2 * Ev3 : subst X V2 Body B Ev4 : eval B V * Is : is_e E1 Is1 : is_e E2 ============================ is_e V
< IsAbs: apply IH to _ Ev1. Subgoal 2: Variables: V X Body V2 B E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (app E1 E2) V @ Ev1 : eval E1 (abs X Body) * Ev2 : eval E2 V2 * Ev3 : subst X V2 Body B Ev4 : eval B V * Is : is_e E1 Is1 : is_e E2 IsAbs : is_e (abs X Body) ============================ is_e V
< apply IH to _ Ev2. Subgoal 2: Variables: V X Body V2 B E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (app E1 E2) V @ Ev1 : eval E1 (abs X Body) * Ev2 : eval E2 V2 * Ev3 : subst X V2 Body B Ev4 : eval B V * Is : is_e E1 Is1 : is_e E2 IsAbs : is_e (abs X Body) H1 : is_e V2 ============================ is_e V
< case IsAbs. Subgoal 2: Variables: V X Body V2 B E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (app E1 E2) V @ Ev1 : eval E1 (abs X Body) * Ev2 : eval E2 V2 * Ev3 : subst X V2 Body B Ev4 : eval B V * Is : is_e E1 Is1 : is_e E2 H1 : is_e V2 H2 : is_string X H3 : is_e Body ============================ is_e V
< apply subst_is to _ _ _ Ev3. Subgoal 2: Variables: V X Body V2 B E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (app E1 E2) V @ Ev1 : eval E1 (abs X Body) * Ev2 : eval E2 V2 * Ev3 : subst X V2 Body B Ev4 : eval B V * Is : is_e E1 Is1 : is_e E2 H1 : is_e V2 H2 : is_string X H3 : is_e Body H4 : is_e B ============================ is_e V
< apply IH to _ Ev4. Subgoal 2: Variables: V X Body V2 B E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (app E1 E2) V @ Ev1 : eval E1 (abs X Body) * Ev2 : eval E2 V2 * Ev3 : subst X V2 Body B Ev4 : eval B V * Is : is_e E1 Is1 : is_e E2 H1 : is_e V2 H2 : is_string X H3 : is_e Body H4 : is_e B H5 : is_e V ============================ is_e V
< search. Subgoal 3: Variables: I IH : forall E V, is_e E -> eval E V * -> is_e V IsE : is_e (intE I) Ev : eval (intE I) (intE I) @ ============================ is_e (intE I)
< search. Subgoal 4: Variables: I1 I2 I E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V IsE : is_e (plus E1 E2) Ev : eval (plus E1 E2) (intE I) @ Ev1 : eval E1 (intE I1) * Ev2 : eval E2 (intE I2) * Ev3 : I1 + I2 = I ============================ is_e (intE I)
< case IsE. Subgoal 4: Variables: I1 I2 I E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (plus E1 E2) (intE I) @ Ev1 : eval E1 (intE I1) * Ev2 : eval E2 (intE I2) * Ev3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 ============================ is_e (intE I)
< Is1: apply IH to _ Ev1. Subgoal 4: Variables: I1 I2 I E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (plus E1 E2) (intE I) @ Ev1 : eval E1 (intE I1) * Ev2 : eval E2 (intE I2) * Ev3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 Is1 : is_e (intE I1) ============================ is_e (intE I)
< Is2: apply IH to _ Ev2. Subgoal 4: Variables: I1 I2 I E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (plus E1 E2) (intE I) @ Ev1 : eval E1 (intE I1) * Ev2 : eval E2 (intE I2) * Ev3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 Is1 : is_e (intE I1) Is2 : is_e (intE I2) ============================ is_e (intE I)
< case Is1. Subgoal 4: Variables: I1 I2 I E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (plus E1 E2) (intE I) @ Ev1 : eval E1 (intE I1) * Ev2 : eval E2 (intE I2) * Ev3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 Is2 : is_e (intE I2) H3 : is_integer I1 ============================ is_e (intE I)
< case Is2. Subgoal 4: Variables: I1 I2 I E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (plus E1 E2) (intE I) @ Ev1 : eval E1 (intE I1) * Ev2 : eval E2 (intE I2) * Ev3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 H3 : is_integer I1 H4 : is_integer I2 ============================ is_e (intE I)
< apply plus_integer_is_integer to _ _ Ev3. Subgoal 4: Variables: I1 I2 I E2 E1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (plus E1 E2) (intE I) @ Ev1 : eval E1 (intE I1) * Ev2 : eval E2 (intE I2) * Ev3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 H3 : is_integer I1 H4 : is_integer I2 H5 : is_integer I ============================ is_e (intE I)
< search. Proof completed.
< Extensible_Theorem subst_unique : forall X R E SA SB, IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> SA : subst X R E SA -> SB : subst X R E SB -> SA = SB on SA. Subgoal 1: Variables: X SA SB IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (var X) IsX : is_string X IsR : is_e SA SA : subst X SA (var X) SA @ SB : subst X SA (var X) SB ============================ SA = SB
< SB: case SB. Subgoal 1.1: Variables: X SB IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (var X) IsX : is_string X IsR : is_e SB SA : subst X SB (var X) SB @ ============================ SB = SB
< search. Subgoal 1.2: Variables: X SA IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (var X) IsX : is_string X IsR : is_e SA SA : subst X SA (var X) SA @ SB : X = X -> false ============================ SA = var X
< apply SB to _. Subgoal 2: Variables: X R SB Y IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (var Y) IsX : is_string X IsR : is_e R SA : subst X R (var Y) (var Y) @ SB : subst X R (var Y) SB SA1 : X = Y -> false ============================ var Y = SB
< SB: case SB. Subgoal 2.1: Variables: SB Y IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (var Y) IsX : is_string Y IsR : is_e SB SA : subst Y SB (var Y) (var Y) @ SA1 : Y = Y -> false ============================ var Y = SB
< apply SA1 to _. Subgoal 2.2: Variables: X R Y IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (var Y) IsX : is_string X IsR : is_e R SA : subst X R (var Y) (var Y) @ SA1 : X = Y -> false SB : X = Y -> false ============================ var Y = var Y
< search. Subgoal 3: Variables: X R SB Body IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (abs X Body) IsX : is_string X IsR : is_e R SA : subst X R (abs X Body) (abs X Body) @ SB : subst X R (abs X Body) SB ============================ abs X Body = SB
< SB: case SB. Subgoal 3.1: Variables: X R Body IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (abs X Body) IsX : is_string X IsR : is_e R SA : subst X R (abs X Body) (abs X Body) @ ============================ abs X Body = abs X Body
< search. Subgoal 3.2: Variables: X R Body B IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (abs X Body) IsX : is_string X IsR : is_e R SA : subst X R (abs X Body) (abs X Body) @ SB : X = X -> false SB1 : subst X R Body B ============================ abs X Body = abs X B
< apply SB to _. Subgoal 4: Variables: X R SB B Y Body IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (abs Y Body) IsX : is_string X IsR : is_e R SA : subst X R (abs Y Body) (abs Y B) @ SB : subst X R (abs Y Body) SB SA1 : X = Y -> false SA2 : subst X R Body B * ============================ abs Y B = SB
< SB: case SB. Subgoal 4.1: Variables: R B Y Body IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (abs Y Body) IsX : is_string Y IsR : is_e R SA : subst Y R (abs Y Body) (abs Y B) @ SA1 : Y = Y -> false SA2 : subst Y R Body B * ============================ abs Y B = abs Y Body
< apply SA1 to _. Subgoal 4.2: Variables: X R B Y Body B1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (abs Y Body) IsX : is_string X IsR : is_e R SA : subst X R (abs Y Body) (abs Y B) @ SA1 : X = Y -> false SA2 : subst X R Body B * SB : X = Y -> false SB1 : subst X R Body B1 ============================ abs Y B = abs Y B1
< Is: case IsE. Subgoal 4.2: Variables: X R B Y Body B1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (abs Y Body) (abs Y B) @ SA1 : X = Y -> false SA2 : subst X R Body B * SB : X = Y -> false SB1 : subst X R Body B1 Is : is_string Y Is1 : is_e Body ============================ abs Y B = abs Y B1
< apply IH to _ _ _ SA2 SB1. Subgoal 4.2: Variables: X R Y Body B1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (abs Y Body) (abs Y B1) @ SA1 : X = Y -> false SA2 : subst X R Body B1 * SB : X = Y -> false SB1 : subst X R Body B1 Is : is_string Y Is1 : is_e Body ============================ abs Y B1 = abs Y B1
< search. Subgoal 5: Variables: X R SB S2 S1 E2 E1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (app E1 E2) IsX : is_string X IsR : is_e R SA : subst X R (app E1 E2) (app S1 S2) @ SB : subst X R (app E1 E2) SB SA1 : subst X R E1 S1 * SA2 : subst X R E2 S2 * ============================ app S1 S2 = SB
< Is: case IsE. Subgoal 5: Variables: X R SB S2 S1 E2 E1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (app E1 E2) (app S1 S2) @ SB : subst X R (app E1 E2) SB SA1 : subst X R E1 S1 * SA2 : subst X R E2 S2 * Is : is_e E1 Is1 : is_e E2 ============================ app S1 S2 = SB
< SB: case SB. Subgoal 5: Variables: X R S2 S1 E2 E1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (app E1 E2) (app S1 S2) @ SA1 : subst X R E1 S1 * SA2 : subst X R E2 S2 * Is : is_e E1 Is1 : is_e E2 SB : subst X R E1 S3 SB1 : subst X R E2 S4 ============================ app S1 S2 = app S3 S4
< apply IH to _ _ _ SA1 SB. Subgoal 5: Variables: X R S2 E2 E1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (app E1 E2) (app S3 S2) @ SA1 : subst X R E1 S3 * SA2 : subst X R E2 S2 * Is : is_e E1 Is1 : is_e E2 SB : subst X R E1 S3 SB1 : subst X R E2 S4 ============================ app S3 S2 = app S3 S4
< apply IH to _ _ _ SA2 SB1. Subgoal 5: Variables: X R E2 E1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (app E1 E2) (app S3 S4) @ SA1 : subst X R E1 S3 * SA2 : subst X R E2 S4 * Is : is_e E1 Is1 : is_e E2 SB : subst X R E1 S3 SB1 : subst X R E2 S4 ============================ app S3 S4 = app S3 S4
< search. Subgoal 6: Variables: X R SB I IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (intE I) IsX : is_string X IsR : is_e R SA : subst X R (intE I) (intE I) @ SB : subst X R (intE I) SB ============================ intE I = SB
< case SB. Subgoal 6: Variables: X R I IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (intE I) IsX : is_string X IsR : is_e R SA : subst X R (intE I) (intE I) @ ============================ intE I = intE I
< search. Subgoal 7: Variables: X R SB S2 S1 E2 E1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (plus E1 E2) IsX : is_string X IsR : is_e R SA : subst X R (plus E1 E2) (plus S1 S2) @ SB : subst X R (plus E1 E2) SB SA1 : subst X R E1 S1 * SA2 : subst X R E2 S2 * ============================ plus S1 S2 = SB
< case IsE. Subgoal 7: Variables: X R SB S2 S1 E2 E1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (plus E1 E2) (plus S1 S2) @ SB : subst X R (plus E1 E2) SB SA1 : subst X R E1 S1 * SA2 : subst X R E2 S2 * H1 : is_e E1 H2 : is_e E2 ============================ plus S1 S2 = SB
< SB: case SB. Subgoal 7: Variables: X R S2 S1 E2 E1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (plus E1 E2) (plus S1 S2) @ SA1 : subst X R E1 S1 * SA2 : subst X R E2 S2 * H1 : is_e E1 H2 : is_e E2 SB : subst X R E1 S3 SB1 : subst X R E2 S4 ============================ plus S1 S2 = plus S3 S4
< apply IH to _ _ _ SA1 SB. Subgoal 7: Variables: X R S2 E2 E1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (plus E1 E2) (plus S3 S2) @ SA1 : subst X R E1 S3 * SA2 : subst X R E2 S2 * H1 : is_e E1 H2 : is_e E2 SB : subst X R E1 S3 SB1 : subst X R E2 S4 ============================ plus S3 S2 = plus S3 S4
< apply IH to _ _ _ SA2 SB1. Subgoal 7: Variables: X R E2 E1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (plus E1 E2) (plus S3 S4) @ SA1 : subst X R E1 S3 * SA2 : subst X R E2 S4 * H1 : is_e E1 H2 : is_e E2 SB : subst X R E1 S3 SB1 : subst X R E2 S4 ============================ plus S3 S4 = plus S3 S4
< search. Proof completed.
< Extensible_Theorem eval_unique : forall E VA VB, IsE : is_e E -> EvA : eval E VA -> EvB : eval E VB -> VA = VB on EvA. Subgoal 1: Variables: VB Body X IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (abs X Body) EvA : eval (abs X Body) (abs X Body) @ EvB : eval (abs X Body) VB ============================ abs X Body = VB
< EvB: case EvB. Subgoal 1: Variables: Body X IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (abs X Body) EvA : eval (abs X Body) (abs X Body) @ ============================ abs X Body = abs X Body
< search. Subgoal 2: Variables: VA VB X Body V2 B E2 E1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (app E1 E2) EvA : eval (app E1 E2) VA @ EvB : eval (app E1 E2) VB EvA1 : eval E1 (abs X Body) * EvA2 : eval E2 V2 * EvA3 : subst X V2 Body B EvA4 : eval B VA * ============================ VA = VB
< Is: case IsE. Subgoal 2: Variables: VA VB X Body V2 B E2 E1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvB : eval (app E1 E2) VB EvA1 : eval E1 (abs X Body) * EvA2 : eval E2 V2 * EvA3 : subst X V2 Body B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 ============================ VA = VB
< EvB: case EvB. Subgoal 2: Variables: VA VB X Body V2 B E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X Body) * EvA2 : eval E2 V2 * EvA3 : subst X V2 Body B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB ============================ VA = VB
< apply IH to _ EvA1 EvB. Subgoal 2: Variables: VA VB V2 B E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V2 * EvA3 : subst X1 V2 Body1 B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB ============================ VA = VB
< apply IH to _ EvA2 EvB1. Subgoal 2: Variables: VA VB B E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V1 * EvA3 : subst X1 V1 Body1 B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB ============================ VA = VB
< IsAbs: apply eval_is to _ EvA1. Subgoal 2: Variables: VA VB B E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V1 * EvA3 : subst X1 V1 Body1 B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB IsAbs : is_e (abs X1 Body1) ============================ VA = VB
< case IsAbs. Subgoal 2: Variables: VA VB B E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V1 * EvA3 : subst X1 V1 Body1 B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB H1 : is_string X1 H2 : is_e Body1 ============================ VA = VB
< apply eval_is to _ EvA2. Subgoal 2: Variables: VA VB B E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V1 * EvA3 : subst X1 V1 Body1 B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB H1 : is_string X1 H2 : is_e Body1 H3 : is_e V1 ============================ VA = VB
< apply subst_is to _ _ _ EvA3. Subgoal 2: Variables: VA VB B E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V1 * EvA3 : subst X1 V1 Body1 B EvA4 : eval B VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB H1 : is_string X1 H2 : is_e Body1 H3 : is_e V1 H4 : is_e B ============================ VA = VB
< apply subst_unique to _ _ _ EvA3 EvB2. Subgoal 2: Variables: VA VB E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VA @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V1 * EvA3 : subst X1 V1 Body1 B1 EvA4 : eval B1 VA * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB H1 : is_string X1 H2 : is_e Body1 H3 : is_e V1 H4 : is_e B1 ============================ VA = VB
< apply IH to _ EvA4 EvB3. Subgoal 2: Variables: VB E2 E1 X1 Body1 V1 B1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (app E1 E2) VB @ EvA1 : eval E1 (abs X1 Body1) * EvA2 : eval E2 V1 * EvA3 : subst X1 V1 Body1 B1 EvA4 : eval B1 VB * Is : is_e E1 Is1 : is_e E2 EvB : eval E1 (abs X1 Body1) EvB1 : eval E2 V1 EvB2 : subst X1 V1 Body1 B1 EvB3 : eval B1 VB H1 : is_string X1 H2 : is_e Body1 H3 : is_e V1 H4 : is_e B1 ============================ VB = VB
< search. Subgoal 3: Variables: VB I IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (intE I) EvA : eval (intE I) (intE I) @ EvB : eval (intE I) VB ============================ intE I = VB
< case EvB. Subgoal 3: Variables: I IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (intE I) EvA : eval (intE I) (intE I) @ ============================ intE I = intE I
< search. Subgoal 4: Variables: VB I1 I2 I E2 E1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (plus E1 E2) EvA : eval (plus E1 E2) (intE I) @ EvB : eval (plus E1 E2) VB EvA1 : eval E1 (intE I1) * EvA2 : eval E2 (intE I2) * EvA3 : I1 + I2 = I ============================ intE I = VB
< case IsE. Subgoal 4: Variables: VB I1 I2 I E2 E1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (plus E1 E2) (intE I) @ EvB : eval (plus E1 E2) VB EvA1 : eval E1 (intE I1) * EvA2 : eval E2 (intE I2) * EvA3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 ============================ intE I = VB
< EvB: case EvB. Subgoal 4: Variables: I1 I2 I E2 E1 I4 I5 I3 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (plus E1 E2) (intE I) @ EvA1 : eval E1 (intE I1) * EvA2 : eval E2 (intE I2) * EvA3 : I1 + I2 = I H1 : is_e E1 H2 : is_e E2 EvB : eval E1 (intE I4) EvB1 : eval E2 (intE I5) EvB2 : I4 + I5 = I3 ============================ intE I = intE I3
< apply IH to _ EvA1 EvB. Subgoal 4: Variables: I2 I E2 E1 I4 I5 I3 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (plus E1 E2) (intE I) @ EvA1 : eval E1 (intE I4) * EvA2 : eval E2 (intE I2) * EvA3 : I4 + I2 = I H1 : is_e E1 H2 : is_e E2 EvB : eval E1 (intE I4) EvB1 : eval E2 (intE I5) EvB2 : I4 + I5 = I3 ============================ intE I = intE I3
< apply IH to _ EvA2 EvB1. Subgoal 4: Variables: I E2 E1 I4 I5 I3 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (plus E1 E2) (intE I) @ EvA1 : eval E1 (intE I4) * EvA2 : eval E2 (intE I5) * EvA3 : I4 + I5 = I H1 : is_e E1 H2 : is_e E2 EvB : eval E1 (intE I4) EvB1 : eval E2 (intE I5) EvB2 : I4 + I5 = I3 ============================ intE I = intE I3
< apply plus_integer_unique to EvA3 EvB2. Subgoal 4: Variables: E2 E1 I4 I5 I3 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (plus E1 E2) (intE I3) @ EvA1 : eval E1 (intE I4) * EvA2 : eval E2 (intE I5) * EvA3 : I4 + I5 = I3 H1 : is_e E1 H2 : is_e E2 EvB : eval E1 (intE I4) EvB1 : eval E2 (intE I5) EvB2 : I4 + I5 = I3 ============================ intE I3 = intE I3
< search. Proof completed.
< Projection_Constraint proj_subst : forall X R E S E', Proj : |{e}- E ~~> E' -> IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> S : subst X R E S -> exists S', subst X R E' S'. Proof completed.
< Projection_Constraint proj_subst_same : forall X R E S E' S', Proj : |{e}- E ~~> E' -> IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> S : subst X R E S -> S' : subst X R E' S' -> S = S'. Proof completed.
< Projection_Constraint proj_eval : forall E E' V, Proj : |{e}- E ~~> E' -> IsE : is_e E -> Ev : eval E V -> exists V', eval E' V'. Proof completed.
< Projection_Constraint proj_eval_same : forall E E' V V', Proj : |{e}- E ~~> E' -> IsE : is_e E -> Ev : eval E V -> Ev' : eval E' V' -> V = V'. Proof completed.
< Ext_Size eval E V. Proof completed.
< Proj_Rel eval E V. Proof completed.
< Ext_Ind forall E V, eval E V. Subgoal 1: Variables: Body X IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (abs X Body) (abs X Body) 0 @@ Acc : acc 0 @ ============================ <eval {P}> (abs X Body) (abs X Body)
< search. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** ============================ <eval {P}> (app E1 E2) V
< apply ext_size_is_int_eval to R3. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 ============================ <eval {P}> (app E1 E2) V
< apply ext_size_is_int_eval to R4. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 ============================ <eval {P}> (app E1 E2) V
< apply ext_size_is_int_eval to R6. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 ============================ <eval {P}> (app E1 E2) V
< apply ext_size_pos_eval to R3. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 ============================ <eval {P}> (app E1 E2) V
< apply ext_size_pos_eval to R4. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 ============================ <eval {P}> (app E1 E2) V
< apply ext_size_pos_eval to R6. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 ============================ <eval {P}> (app E1 E2) V
< Or2: apply lt_left to R2 _ _. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or2 : N2 < N5 \/ N2 = N5 ============================ <eval {P}> (app E1 E2) V
< Or4: apply lt_right to R2 _ _ _. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or2 : N2 < N5 \/ N2 = N5 Or4 : N4 < N5 \/ N4 = N5 ============================ <eval {P}> (app E1 E2) V
< apply lesseq_integer__add_positive to _ _ R2. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or2 : N2 < N5 \/ N2 = N5 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 ============================ <eval {P}> (app E1 E2) V
< Or3: apply lt_left to R1 _ _. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or2 : N2 < N5 \/ N2 = N5 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N ============================ <eval {P}> (app E1 E2) V
< apply plus_integer_is_integer to _ _ R2. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or2 : N2 < N5 \/ N2 = N5 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 ============================ <eval {P}> (app E1 E2) V
< LeN5: apply lte_right to R1 _ _ _. Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or2 : N2 < N5 \/ N2 = N5 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N ============================ <eval {P}> (app E1 E2) V
< A: case Acc (keep). Subgoal 2: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or2 : N2 < N5 \/ N2 = N5 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (app E1 E2) V
< Or2: case Or2. Subgoal 2.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 ============================ <eval {P}> (app E1 E2) V
< LN2: apply less_lesseq_integer_transitive to Or2 LeN5. Subgoal 2.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N ============================ <eval {P}> (app E1 E2) V
< AN2: apply A to _ LN2. Subgoal 2.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R4 AN2. Subgoal 2.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 ============================ <eval {P}> (app E1 E2) V
< Or4: case Or4. Subgoal 2.1.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 ============================ <eval {P}> (app E1 E2) V
< LN4: apply less_lesseq_integer_transitive to Or4 LeN5. Subgoal 2.1.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N ============================ <eval {P}> (app E1 E2) V
< AN4: apply A to _ LN4. Subgoal 2.1.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R6 AN4. Subgoal 2.1.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< Or3: case Or3. Subgoal 2.1.1.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N ============================ <eval {P}> (app E1 E2) V
< AN3: apply A to _ Or3. Subgoal 2.1.1.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R3 AN3. Subgoal 2.1.1.1: Variables: N V N3 N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.1.1.2: Variables: N V N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R3 Acc. Subgoal 2.1.1.2: Variables: N V N2 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N2 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N H2 : is_integer N2 H3 : is_integer N4 H4 : 0 <= N H5 : 0 <= N2 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.1.2: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 ============================ <eval {P}> (app E1 E2) V
< Or5: apply lesseq_integer_less_or_eq to LeN5. Subgoal 2.1.2: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N \/ N5 = N ============================ <eval {P}> (app E1 E2) V
< Or5: case Or5. Subgoal 2.1.2.1: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N ============================ <eval {P}> (app E1 E2) V
< AN5: apply A to _ Or5. Subgoal 2.1.2.1: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N AN5 : acc N5 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R6 AN5. Subgoal 2.1.2.1: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N AN5 : acc N5 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< Or3: case Or3. Subgoal 2.1.2.1.1: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N AN5 : acc N5 * H10 : <eval {P}> B V Or3 : N3 < N ============================ <eval {P}> (app E1 E2) V
< AN3: apply A to _ Or3. Subgoal 2.1.2.1.1: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N AN5 : acc N5 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R3 AN3. Subgoal 2.1.2.1.1: Variables: N V N3 N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N AN5 : acc N5 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.1.2.1.2: Variables: N V N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N AN5 : acc N5 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R3 Acc. Subgoal 2.1.2.1.2: Variables: N V N2 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N2 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N H2 : is_integer N2 H3 : is_integer N5 H4 : 0 <= N H5 : 0 <= N2 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N5 LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 Or5 : N5 < N AN5 : acc N5 * H10 : <eval {P}> B V H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.1.2.2: Variables: N V N3 N2 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N2 + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R6 Acc. Subgoal 2.1.2.2: Variables: N V N3 N2 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N2 + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< Or3: case Or3. Subgoal 2.1.2.2.1: Variables: N V N3 N2 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N2 + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N ============================ <eval {P}> (app E1 E2) V
< AN3: apply A to _ Or3. Subgoal 2.1.2.2.1: Variables: N V N3 N2 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N2 + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R3 AN3. Subgoal 2.1.2.2.1: Variables: N V N3 N2 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N2 + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N2 H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N2 H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.1.2.2.2: Variables: N V N2 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N = N R2 : N2 + N = N R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N H2 : is_integer N2 H3 : is_integer N H4 : 0 <= N H5 : 0 <= N2 H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R3 Acc. Subgoal 2.1.2.2.2: Variables: N V N2 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N = N R2 : N2 + N = N R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N2 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N H2 : is_integer N2 H3 : is_integer N H4 : 0 <= N H5 : 0 <= N2 H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * Or2 : N2 < N LN2 : N2 < N AN2 : acc N2 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (app E1 E2) V
< Or5: apply lesseq_integer_less_or_eq to LeN5. Subgoal 2.2: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N \/ N5 = N ============================ <eval {P}> (app E1 E2) V
< Or5: case Or5. Subgoal 2.2.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N ============================ <eval {P}> (app E1 E2) V
< AN5: apply A to _ Or5. Subgoal 2.2.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R4 AN5. Subgoal 2.2.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 Or4 : N4 < N5 \/ N4 = N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 ============================ <eval {P}> (app E1 E2) V
< Or4: case Or4. Subgoal 2.2.1.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 ============================ <eval {P}> (app E1 E2) V
< LN4: apply less_integer_transitive to Or4 Or5. Subgoal 2.2.1.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N ============================ <eval {P}> (app E1 E2) V
< AN4: apply A to _ LN4. Subgoal 2.2.1.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R6 AN4. Subgoal 2.2.1.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< Or3: case Or3. Subgoal 2.2.1.1.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N ============================ <eval {P}> (app E1 E2) V
< AN3: apply A to _ Or3. Subgoal 2.2.1.1.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R3 AN3. Subgoal 2.2.1.1.1: Variables: N V N3 N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2.1.1.2: Variables: N V N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R3 Acc. Subgoal 2.2.1.1.2: Variables: N V N4 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N5 + N4 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N H2 : is_integer N5 H3 : is_integer N4 H4 : 0 <= N H5 : 0 <= N5 H6 : 0 <= N4 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 Or4 : N4 < N5 LN4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2.1.2: Variables: N V N3 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 ============================ <eval {P}> (app E1 E2) V
< apply IH to R6 AN5. Subgoal 2.2.1.2: Variables: N V N3 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N5 H7 : 0 <= N5 Or3 : N3 < N \/ N3 = N H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< Or3: case Or3. Subgoal 2.2.1.2.1: Variables: N V N3 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N ============================ <eval {P}> (app E1 E2) V
< AN3: apply A to _ Or3. Subgoal 2.2.1.2.1: Variables: N V N3 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R3 AN3. Subgoal 2.2.1.2.1: Variables: N V N3 N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N5 = N R2 : N5 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N3 H2 : is_integer N5 H3 : is_integer N5 H4 : 0 <= N3 H5 : 0 <= N5 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2.1.2.2: Variables: N V N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N5 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N H2 : is_integer N5 H3 : is_integer N5 H4 : 0 <= N H5 : 0 <= N5 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R3 Acc. Subgoal 2.2.1.2.2: Variables: N V N5 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N5 = N R2 : N5 + N5 = N5 R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N5 ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N5 ** H1 : is_integer N H2 : is_integer N5 H3 : is_integer N5 H4 : 0 <= N H5 : 0 <= N5 H6 : 0 <= N5 H7 : 0 <= N5 H8 : is_integer N5 LeN5 : N5 <= N A : forall M, 0 <= M -> M < N -> acc M * Or5 : N5 < N AN5 : acc N5 * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2.2: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 Or4 : N4 < N \/ N4 = N H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R4 Acc. Subgoal 2.2.2: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 Or4 : N4 < N \/ N4 = N H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 ============================ <eval {P}> (app E1 E2) V
< Or4: case Or4. Subgoal 2.2.2.1: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N ============================ <eval {P}> (app E1 E2) V
< AN4: apply A to _ Or4. Subgoal 2.2.2.1: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N AN4 : acc N4 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R6 AN4. Subgoal 2.2.2.1: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< Or3: case Or3. Subgoal 2.2.2.1.1: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N ============================ <eval {P}> (app E1 E2) V
< AN3: apply A to _ Or3. Subgoal 2.2.2.1.1: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R3 AN3. Subgoal 2.2.2.1.1: Variables: N V N3 N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2.2.1.2: Variables: N V N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R3 Acc. Subgoal 2.2.2.1.2: Variables: N V N4 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N = N R2 : N + N4 = N R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N4 ** H1 : is_integer N H2 : is_integer N H3 : is_integer N4 H4 : 0 <= N H5 : 0 <= N H6 : 0 <= N4 H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 Or4 : N4 < N AN4 : acc N4 * H10 : <eval {P}> B V H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2.2.2: Variables: N V N3 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R6 Acc. Subgoal 2.2.2.2: Variables: N V N3 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N H7 : 0 <= N Or3 : N3 < N \/ N3 = N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< Or3: case Or3. Subgoal 2.2.2.2.1: Variables: N V N3 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N ============================ <eval {P}> (app E1 E2) V
< AN3: apply A to _ Or3. Subgoal 2.2.2.2.1: Variables: N V N3 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * ============================ <eval {P}> (app E1 E2) V
< apply IH to R3 AN3. Subgoal 2.2.2.2.1: Variables: N V N3 X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N3 + N = N R2 : N + N = N R3 : <eval {ES}> E1 (abs X Body) N3 ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N3 H2 : is_integer N H3 : is_integer N H4 : 0 <= N3 H5 : 0 <= N H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V Or3 : N3 < N AN3 : acc N3 * H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 2.2.2.2.2: Variables: N V X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N = N R2 : N + N = N R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N H2 : is_integer N H3 : is_integer N H4 : 0 <= N H5 : 0 <= N H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V ============================ <eval {P}> (app E1 E2) V
< apply IH1 to R3 Acc. Subgoal 2.2.2.2.2: Variables: N V X Body V2 B E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (app E1 E2) V N @@ Acc : acc N @ R1 : N + N = N R2 : N + N = N R3 : <eval {ES}> E1 (abs X Body) N ** R4 : <eval {ES}> E2 V2 N ** R5 : subst X V2 Body B R6 : <eval {ES}> B V N ** H1 : is_integer N H2 : is_integer N H3 : is_integer N H4 : 0 <= N H5 : 0 <= N H6 : 0 <= N H7 : 0 <= N H8 : is_integer N LeN5 : N <= N A : forall M, 0 <= M -> M < N -> acc M * H9 : <eval {P}> E2 V2 H10 : <eval {P}> B V H11 : <eval {P}> E1 (abs X Body) ============================ <eval {P}> (app E1 E2) V
< search. Subgoal 3: Variables: I IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (intE I) (intE I) 0 @@ Acc : acc 0 @ ============================ <eval {P}> (intE I) (intE I)
< search. Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I ============================ <eval {P}> (plus E1 E2) (intE I)
< apply ext_size_is_int_eval to R2. Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 ============================ <eval {P}> (plus E1 E2) (intE I)
< apply ext_size_is_int_eval to R3. Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 ============================ <eval {P}> (plus E1 E2) (intE I)
< apply ext_size_pos_eval to R2. Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 ============================ <eval {P}> (plus E1 E2) (intE I)
< apply ext_size_pos_eval to R3. Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 ============================ <eval {P}> (plus E1 E2) (intE I)
< Or2: apply lt_left to R1 _ _. Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Or2 : N2 < N \/ N2 = N ============================ <eval {P}> (plus E1 E2) (intE I)
< Or3: apply lt_right to R1 _ _ _. Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Or2 : N2 < N \/ N2 = N Or3 : N3 < N \/ N3 = N ============================ <eval {P}> (plus E1 E2) (intE I)
< Acc': case Acc (keep). Subgoal 4: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Or2 : N2 < N \/ N2 = N Or3 : N3 < N \/ N3 = N Acc' : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (plus E1 E2) (intE I)
< L2: case Or2. Subgoal 4.1: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Or3 : N3 < N \/ N3 = N Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N ============================ <eval {P}> (plus E1 E2) (intE I)
< A2: apply Acc' to _ L2. Subgoal 4.1: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Or3 : N3 < N \/ N3 = N Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N A2 : acc N2 * ============================ <eval {P}> (plus E1 E2) (intE I)
< apply IH to R2 A2. Subgoal 4.1: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Or3 : N3 < N \/ N3 = N Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N A2 : acc N2 * H5 : <eval {P}> E1 (intE I1) ============================ <eval {P}> (plus E1 E2) (intE I)
< L3: case Or3. Subgoal 4.1.1: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N A2 : acc N2 * H5 : <eval {P}> E1 (intE I1) L3 : N3 < N ============================ <eval {P}> (plus E1 E2) (intE I)
< A3: apply Acc' to _ L3. Subgoal 4.1.1: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N A2 : acc N2 * H5 : <eval {P}> E1 (intE I1) L3 : N3 < N A3 : acc N3 * ============================ <eval {P}> (plus E1 E2) (intE I)
< apply IH to R3 A3. Subgoal 4.1.1: Variables: N N2 N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N3 = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N3 H3 : 0 <= N2 H4 : 0 <= N3 Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N A2 : acc N2 * H5 : <eval {P}> E1 (intE I1) L3 : N3 < N A3 : acc N3 * H6 : <eval {P}> E2 (intE I2) ============================ <eval {P}> (plus E1 E2) (intE I)
< search. Subgoal 4.1.2: Variables: N N2 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N H3 : 0 <= N2 H4 : 0 <= N Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N A2 : acc N2 * H5 : <eval {P}> E1 (intE I1) ============================ <eval {P}> (plus E1 E2) (intE I)
< apply IH1 to R3 Acc. Subgoal 4.1.2: Variables: N N2 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N2 + N = N R2 : <eval {ES}> E1 (intE I1) N2 ** R3 : <eval {ES}> E2 (intE I2) N ** R4 : I1 + I2 = I H1 : is_integer N2 H2 : is_integer N H3 : 0 <= N2 H4 : 0 <= N Acc' : forall M, 0 <= M -> M < N -> acc M * L2 : N2 < N A2 : acc N2 * H5 : <eval {P}> E1 (intE I1) H6 : <eval {P}> E2 (intE I2) ============================ <eval {P}> (plus E1 E2) (intE I)
< search. Subgoal 4.2: Variables: N N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N + N3 = N R2 : <eval {ES}> E1 (intE I1) N ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N H2 : is_integer N3 H3 : 0 <= N H4 : 0 <= N3 Or3 : N3 < N \/ N3 = N Acc' : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (plus E1 E2) (intE I)
< apply IH1 to R2 Acc. Subgoal 4.2: Variables: N N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N + N3 = N R2 : <eval {ES}> E1 (intE I1) N ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N H2 : is_integer N3 H3 : 0 <= N H4 : 0 <= N3 Or3 : N3 < N \/ N3 = N Acc' : forall M, 0 <= M -> M < N -> acc M * H5 : <eval {P}> E1 (intE I1) ============================ <eval {P}> (plus E1 E2) (intE I)
< L3: case Or3. Subgoal 4.2.1: Variables: N N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N + N3 = N R2 : <eval {ES}> E1 (intE I1) N ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N H2 : is_integer N3 H3 : 0 <= N H4 : 0 <= N3 Acc' : forall M, 0 <= M -> M < N -> acc M * H5 : <eval {P}> E1 (intE I1) L3 : N3 < N ============================ <eval {P}> (plus E1 E2) (intE I)
< A3: apply Acc' to _ L3. Subgoal 4.2.1: Variables: N N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N + N3 = N R2 : <eval {ES}> E1 (intE I1) N ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N H2 : is_integer N3 H3 : 0 <= N H4 : 0 <= N3 Acc' : forall M, 0 <= M -> M < N -> acc M * H5 : <eval {P}> E1 (intE I1) L3 : N3 < N A3 : acc N3 * ============================ <eval {P}> (plus E1 E2) (intE I)
< apply IH to R3 A3. Subgoal 4.2.1: Variables: N N3 I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N + N3 = N R2 : <eval {ES}> E1 (intE I1) N ** R3 : <eval {ES}> E2 (intE I2) N3 ** R4 : I1 + I2 = I H1 : is_integer N H2 : is_integer N3 H3 : 0 <= N H4 : 0 <= N3 Acc' : forall M, 0 <= M -> M < N -> acc M * H5 : <eval {P}> E1 (intE I1) L3 : N3 < N A3 : acc N3 * H6 : <eval {P}> E2 (intE I2) ============================ <eval {P}> (plus E1 E2) (intE I)
< search. Subgoal 4.2.2: Variables: N I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N + N = N R2 : <eval {ES}> E1 (intE I1) N ** R3 : <eval {ES}> E2 (intE I2) N ** R4 : I1 + I2 = I H1 : is_integer N H2 : is_integer N H3 : 0 <= N H4 : 0 <= N Acc' : forall M, 0 <= M -> M < N -> acc M * H5 : <eval {P}> E1 (intE I1) ============================ <eval {P}> (plus E1 E2) (intE I)
< apply IH1 to R3 Acc. Subgoal 4.2.2: Variables: N I1 I2 I E2 E1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (plus E1 E2) (intE I) N @@ Acc : acc N @ R1 : N + N = N R2 : <eval {ES}> E1 (intE I1) N ** R3 : <eval {ES}> E2 (intE I2) N ** R4 : I1 + I2 = I H1 : is_integer N H2 : is_integer N H3 : 0 <= N H4 : 0 <= N Acc' : forall M, 0 <= M -> M < N -> acc M * H5 : <eval {P}> E1 (intE I1) H6 : <eval {P}> E2 (intE I2) ============================ <eval {P}> (plus E1 E2) (intE I)
< search. Proof completed.