< 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.