Reasoning Details

 < 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.
Back to example home