Welcome to Abella 2.0.5-dev
Abella < Specification "trans".
Reading specification "/home/fac05/gopalan/test/sparrow/compiler-correctness/website/wang-phd-thesis/code/./trans" (from "/home/fac05/gopalan/test/sparrow/compiler-correctness/website/wang-phd-thesis/code/.")

Abella < Import "eval".
Importing from /home/fac05/gopalan/test/sparrow/compiler-correctness/website/wang-phd-thesis/code/./eval

Abella < Import "subst".
Importing from /home/fac05/gopalan/test/sparrow/compiler-correctness/website/wang-phd-thesis/code/./subst

Abella < Define sim : ty -> nat -> tm' -> (tm' -> tm') -> state -> tm' -> prop,	
equiv : ty -> nat -> tm' -> state -> tm' -> prop by 
sim T I M K S M' := forall J V, le J I -> {nstep' J M V} -> {val' V} ->
  (exists N V' S' N', {nstep'' N' S M' S' (K V')} /\ {add J N I} /\
       equiv T N V S' V');
equiv tnat I (nat' N) S (nat' N);
equiv tunit I unit' S unit';
equiv (prod T1 T2) I (pair' V1 V2) (st N H) (loc' L) := exists V1' V2', {lookup_heap H L (pair' V1' V2')} /\
  equiv T1 I V1 (st N H) V1' /\ equiv T2 I V2 (st N H) V2' /\ {tm' V1} /\
  {tm' V2} /\ {tm' V1'} /\ {tm' V2'};
equiv (arr' T1 T2) z (abs' R) S (abs' R') := {tm' (abs' R)} /\ {tm' (abs' R')};
equiv (arr' T1 T2) (s K) (abs' R) S (abs' R') := equiv (arr' T1 T2) K (abs' R) S (abs' R') /\
  (forall V V', equiv T1 K V S V' -> sim T2 K (R V) x\x S (R' V'));
equiv (arr T1 T2) z (clos' (abs' R) VE) (st N H) (loc' L) := exists R' VE', {lookup_heap H L (pair' (abs' R') VE')} /\
  {tm' (clos' (abs' R) VE)} /\ {tm' (pair' (abs' R') VE')} /\ {val' VE} /\
  {val' VE'};
equiv (arr T1 T2) (s K) (clos' (abs' R) VE) (st N H) (loc' L) := equiv (arr T1 T2) K (clos' (abs' R) VE) (st N H) (loc' L) /\
  (exists R' VE', {lookup_heap H L (pair' (abs' R') VE')} /\
       (forall V1 V1' V2 V2', equiv T1 K V1 (st N H) V1' ->
            equiv (arr T1 T2) K V2 (st N H) V2' ->
            sim T2 K (R (pair' V2 (pair' V1 VE))) x\x (st N H)
              (R' (pair' V2' (pair' V1' VE'))))).
Warning: Definition might not be stratified
 ("equiv" occurs to the left of ->)
Warning: Definition might not be stratified
 ("equiv" occurs to the left of ->)

Abella < Define cg_ctx : (list o) -> prop by 
cg_ctx nil;
nabla x, cg_ctx (pi k\cgen x k (k x) :: L) := cg_ctx L.

Abella < Define vars_of_cg_ctx : (list o) -> (list tm') -> prop by 
vars_of_cg_ctx nil nil;
nabla x, vars_of_cg_ctx (pi k\cgen x k (k x) :: L) (x :: L') := vars_of_cg_ctx L L'.

Abella < Define step* : tm -> tm -> prop by 
step* M M' := exists N, {nstep N M M'}.

Abella < Theorem step*_trans : 
forall M1 M2 M3, step* M1 M2 -> step* M2 M3 -> step* M1 M3.


============================
 forall M1 M2 M3, step* M1 M2 -> step* M2 M3 -> step* M1 M3

step*_trans < intros.

Variables: M1 M2 M3
H1 : step* M1 M2
H2 : step* M2 M3
============================
 step* M1 M3

step*_trans < case H1.

Variables: M1 M2 M3 N
H2 : step* M2 M3
H3 : {nstep N M1 M2}
============================
 step* M1 M3

step*_trans < case H2.

Variables: M1 M2 M3 N N1
H3 : {nstep N M1 M2}
H4 : {nstep N1 M2 M3}
============================
 step* M1 M3

step*_trans < apply nstep_trans to H3 H4.

Variables: M1 M2 M3 N N1 N2
H3 : {nstep N M1 M2}
H4 : {nstep N1 M2 M3}
H5 : {add N N1 N2}
H6 : {nstep N2 M1 M3}
============================
 step* M1 M3

step*_trans < search.
Proof completed.
Abella < Theorem step*_inst : 
forall M1 M2 M, nabla x, step* (M1 x) (M2 x) -> step* (M1 M) (M2 M).


============================
 forall M1 M2 M, nabla x, step* (M1 x) (M2 x) -> step* (M1 M) (M2 M)

step*_inst < intros.

Variables: M1 M2 M
H1 : step* (M1 n1) (M2 n1)
============================
 step* (M1 M) (M2 M)

step*_inst < case H1.

Variables: M1 M2 M N
H2 : {nstep N (M1 n1) (M2 n1)}
============================
 step* (M1 M) (M2 M)

step*_inst <  inst H2 with n1 = M.

Variables: M1 M2 M N
H2 : {nstep N (M1 n1) (M2 n1)}
H3 : {nstep N (M1 M) (M2 M)}
============================
 step* (M1 M) (M2 M)

step*_inst < search.
Proof completed.
Abella < Define sim_cps : ty -> nat -> tm -> (tm -> tm) -> tm -> prop,	
equiv_cps : ty -> nat -> tm -> tm -> prop by 
sim_cps T I M K M' := forall J V, le J I -> {nstep J M V} -> {val V} ->
  (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T N V V');
equiv_cps tnat I (nat N) (nat N);
equiv_cps tunit I unit unit;
equiv_cps (prod T1 T2) I (pair V1 V2) (pair V1' V2') := equiv_cps T1 I V1 V1' /\ equiv_cps T2 I V2 V2' /\ {tm V1} /\ {tm V2} /\
  {tm V1'} /\ {tm V2'};
equiv_cps (arr T1 T2) z (fix (f\x\R f x)) (fix (f\p\R' f p)) := {tm (fix R)} /\ {tm (fix R')};
equiv_cps (arr T1 T2) (s I) (fix (f\x\R f x)) (fix (f\p\R' f p)) := equiv_cps (arr T1 T2) I (fix (f\x\R f x)) (fix (f\p\R' f p)) /\
  (forall V1 V1' V2 V2' K, equiv_cps T1 I V1 V1' ->
       equiv_cps (arr T1 T2) I V2 V2' ->
       sim_cps T2 I (R V2 V1) K (R' V2' (pair (fix f\K) V1'))).
Warning: Definition might not be stratified
 ("equiv_cps" occurs to the left of ->)

Abella < Theorem equiv_cps_val1 : 
forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {val V}.


============================
 forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {val V}

equiv_cps_val1 < induction on 1.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv_cps T K V V' -> {val V}

equiv_cps_val1 < induction on 2.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv_cps T K V V' ->
   {val V}

equiv_cps_val1 < intros.

Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv_cps T K V V'
============================
 {val V}

equiv_cps_val1 < case H1 (keep).
Subgoal 1:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv_cps tnat K V V'
============================
 {val V}

Subgoal 2 is:
 {val V}

Subgoal 3 is:
 {val V}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < case H3.
Subgoal 1:

Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
============================
 {val (nat N)}

Subgoal 2 is:
 {val V}

Subgoal 3 is:
 {val V}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < search.
Subgoal 2:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv_cps tunit K V V'
============================
 {val V}

Subgoal 3 is:
 {val V}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < case H3.
Subgoal 2:

Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
============================
 {val unit}

Subgoal 3 is:
 {val V}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < search.
Subgoal 3:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {val V}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < case H3.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
============================
 {val (pair V1 V2)}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < apply IH to H4 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {val V1}
============================
 {val (pair V1 V2)}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < apply IH to H5 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {val V1}
H13 : {val V2}
============================
 {val (pair V1 V2)}

Subgoal 4 is:
 {val V}

equiv_cps_val1 < search.
Subgoal 4:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {val V}

equiv_cps_val1 < case H2.
Subgoal 4.1:

Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {val V}

Subgoal 4.2 is:
 {val V}

equiv_cps_val1 < case H3.
Subgoal 4.1:

Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {tm (fix R)}
H7 : {tm (fix R')}
============================
 {val (fix (f\x\R f x))}

Subgoal 4.2 is:
 {val V}

equiv_cps_val1 < search.
Subgoal 4.2:

Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
 {val V}

equiv_cps_val1 < case H3.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 {val (fix (f\x\R f x))}

equiv_cps_val1 < apply IH1 to H1 H6 H7.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
H9 : {val (fix (f\x\R f x))}
============================
 {val (fix (f\x\R f x))}

equiv_cps_val1 < search.
Proof completed.
Abella < Theorem equiv_cps_val2 : 
forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {val V'}.


============================
 forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {val V'}

equiv_cps_val2 < induction on 1.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv_cps T K V V' -> {val V'}

equiv_cps_val2 < induction on 2.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv_cps T K V V' ->
   {val V'}

equiv_cps_val2 < intros.

Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv_cps T K V V'
============================
 {val V'}

equiv_cps_val2 < case H1 (keep).
Subgoal 1:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv_cps tnat K V V'
============================
 {val V'}

Subgoal 2 is:
 {val V'}

Subgoal 3 is:
 {val V'}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < case H3.
Subgoal 1:

Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
============================
 {val (nat N)}

Subgoal 2 is:
 {val V'}

Subgoal 3 is:
 {val V'}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < search.
Subgoal 2:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv_cps tunit K V V'
============================
 {val V'}

Subgoal 3 is:
 {val V'}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < case H3.
Subgoal 2:

Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
============================
 {val unit}

Subgoal 3 is:
 {val V'}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < search.
Subgoal 3:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {val V'}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < case H3.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
============================
 {val (pair V1' V2')}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < apply IH to H4 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {val V1'}
============================
 {val (pair V1' V2')}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < apply IH to H5 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {val V1'}
H13 : {val V2'}
============================
 {val (pair V1' V2')}

Subgoal 4 is:
 {val V'}

equiv_cps_val2 < search.
Subgoal 4:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {val V'}

equiv_cps_val2 < case H2.
Subgoal 4.1:

Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {val V'}

Subgoal 4.2 is:
 {val V'}

equiv_cps_val2 < case H3.
Subgoal 4.1:

Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {tm (fix R)}
H7 : {tm (fix R')}
============================
 {val (fix (f\p\R' f p))}

Subgoal 4.2 is:
 {val V'}

equiv_cps_val2 < search.
Subgoal 4.2:

Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
 {val V'}

equiv_cps_val2 < case H3.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 {val (fix (f\p\R' f p))}

equiv_cps_val2 < apply IH1 to H1 H6 H7.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {val V'}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
H9 : {val (fix (f\p\R' f p))}
============================
 {val (fix (f\p\R' f p))}

equiv_cps_val2 < search.
Proof completed.
Abella < Theorem equiv_cps_tm1 : 
forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {tm V}.


============================
 forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {tm V}

equiv_cps_tm1 < induction on 1.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv_cps T K V V' -> {tm V}

equiv_cps_tm1 < induction on 2.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv_cps T K V V' -> {tm V}

equiv_cps_tm1 < intros.

Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv_cps T K V V'
============================
 {tm V}

equiv_cps_tm1 < case H1 (keep).
Subgoal 1:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv_cps tnat K V V'
============================
 {tm V}

Subgoal 2 is:
 {tm V}

Subgoal 3 is:
 {tm V}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < case H3.
Subgoal 1:

Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
============================
 {tm (nat N)}

Subgoal 2 is:
 {tm V}

Subgoal 3 is:
 {tm V}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < search.
Subgoal 2:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv_cps tunit K V V'
============================
 {tm V}

Subgoal 3 is:
 {tm V}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < case H3.
Subgoal 2:

Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
============================
 {tm unit}

Subgoal 3 is:
 {tm V}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < search.
Subgoal 3:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {tm V}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < case H3.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
============================
 {tm (pair V1 V2)}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < apply IH to H4 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {tm V1}
============================
 {tm (pair V1 V2)}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < apply IH to H5 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {tm V1}
H13 : {tm V2}
============================
 {tm (pair V1 V2)}

Subgoal 4 is:
 {tm V}

equiv_cps_tm1 < search.
Subgoal 4:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {tm V}

equiv_cps_tm1 < case H2.
Subgoal 4.1:

Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {tm V}

Subgoal 4.2 is:
 {tm V}

equiv_cps_tm1 < case H3.
Subgoal 4.1:

Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {tm (fix R)}
H7 : {tm (fix R')}
============================
 {tm (fix (f\x\R f x))}

Subgoal 4.2 is:
 {tm V}

equiv_cps_tm1 < search.
Subgoal 4.2:

Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
 {tm V}

equiv_cps_tm1 < case H3.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 {tm (fix (f\x\R f x))}

equiv_cps_tm1 < apply IH1 to H1 H6 H7.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
H9 : {tm (fix (f\x\R f x))}
============================
 {tm (fix (f\x\R f x))}

equiv_cps_tm1 < search.
Proof completed.
Abella < Theorem equiv_cps_tm2 : 
forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {tm V'}.


============================
 forall T K V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' -> {tm V'}

equiv_cps_tm2 < induction on 1.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv_cps T K V V' -> {tm V'}

equiv_cps_tm2 < induction on 2.

IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
============================
 forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv_cps T K V V' ->
   {tm V'}

equiv_cps_tm2 < intros.

Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv_cps T K V V'
============================
 {tm V'}

equiv_cps_tm2 < case H1 (keep).
Subgoal 1:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv_cps tnat K V V'
============================
 {tm V'}

Subgoal 2 is:
 {tm V'}

Subgoal 3 is:
 {tm V'}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < case H3.
Subgoal 1:

Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
============================
 {tm (nat N)}

Subgoal 2 is:
 {tm V'}

Subgoal 3 is:
 {tm V'}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < search.
Subgoal 2:

Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv_cps tunit K V V'
============================
 {tm V'}

Subgoal 3 is:
 {tm V'}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < case H3.
Subgoal 2:

Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
============================
 {tm unit}

Subgoal 3 is:
 {tm V'}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < search.
Subgoal 3:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {tm V'}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < case H3.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
============================
 {tm (pair V1' V2')}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < apply IH to H4 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {tm V1'}
============================
 {tm (pair V1' V2')}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < apply IH to H5 H2 _.
Subgoal 3:

Variables: K T2 T1 V2' V1' V2 V1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : equiv_cps T1 K V1 V1'
H7 : equiv_cps T2 K V2 V2'
H8 : {tm V1}
H9 : {tm V2}
H10 : {tm V1'}
H11 : {tm V2'}
H12 : {tm V1'}
H13 : {tm V2'}
============================
 {tm (pair V1' V2')}

Subgoal 4 is:
 {tm V'}

equiv_cps_tm2 < search.
Subgoal 4:

Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {tm V'}

equiv_cps_tm2 < case H2.
Subgoal 4.1:

Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
 {tm V'}

Subgoal 4.2 is:
 {tm V'}

equiv_cps_tm2 < case H3.
Subgoal 4.1:

Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {tm (fix R)}
H7 : {tm (fix R')}
============================
 {tm (fix (f\p\R' f p))}

Subgoal 4.2 is:
 {tm V'}

equiv_cps_tm2 < search.
Subgoal 4.2:

Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv_cps (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
 {tm V'}

equiv_cps_tm2 < case H3.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 {tm (fix (f\p\R' f p))}

equiv_cps_tm2 < apply IH1 to H1 H6 H7.
Subgoal 4.2:

Variables: T2 T1 N R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        {tm V'}
H1 : {is_sty (arr T1 T2)}@
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
H7 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T2) N V2 V2' ->
       sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
H9 : {tm (fix (f\p\R' f p))}
============================
 {tm (fix (f\p\R' f p))}

equiv_cps_tm2 < search.
Proof completed.
Abella < Theorem equiv_cps_arr_val2 : 
forall T1 T K R V, {is_nat K} -> equiv_cps (arr T1 T) K (fix R) V ->
  (exists R', V = fix R').


============================
 forall T1 T K R V, {is_nat K} -> equiv_cps (arr T1 T) K (fix R) V ->
   (exists R', V = fix R')

equiv_cps_arr_val2 < induction on 1.

IH : forall T1 T K R V, {is_nat K}* -> equiv_cps (arr T1 T) K (fix R) V ->
       (exists R', V = fix R')
============================
 forall T1 T K R V, {is_nat K}@ -> equiv_cps (arr T1 T) K (fix R) V ->
   (exists R', V = fix R')

equiv_cps_arr_val2 < intros.

Variables: T1 T K R V
IH : forall T1 T K R V, {is_nat K}* -> equiv_cps (arr T1 T) K (fix R) V ->
       (exists R', V = fix R')
H1 : {is_nat K}@
H2 : equiv_cps (arr T1 T) K (fix R) V
============================
 exists R', V = fix R'

equiv_cps_arr_val2 < case H1.
Subgoal 1:

Variables: T1 T R V
IH : forall T1 T K R V, {is_nat K}* -> equiv_cps (arr T1 T) K (fix R) V ->
       (exists R', V = fix R')
H2 : equiv_cps (arr T1 T) z (fix R) V
============================
 exists R', V = fix R'

Subgoal 2 is:
 exists R', V = fix R'

equiv_cps_arr_val2 < case H2.
Subgoal 1:

Variables: T1 T R' R1
IH : forall T1 T K R V, {is_nat K}* -> equiv_cps (arr T1 T) K (fix R) V ->
       (exists R', V = fix R')
H3 : {tm (fix R1)}
H4 : {tm (fix R')}
============================
 exists R'1, fix (f\p\R' f p) = fix R'1

Subgoal 2 is:
 exists R', V = fix R'

equiv_cps_arr_val2 < search.
Subgoal 2:

Variables: T1 T R V N
IH : forall T1 T K R V, {is_nat K}* -> equiv_cps (arr T1 T) K (fix R) V ->
       (exists R', V = fix R')
H2 : equiv_cps (arr T1 T) (s N) (fix R) V
H3 : {is_nat N}*
============================
 exists R', V = fix R'

equiv_cps_arr_val2 < case H2.
Subgoal 2:

Variables: T1 T N R' R1
IH : forall T1 T K R V, {is_nat K}* -> equiv_cps (arr T1 T) K (fix R) V ->
       (exists R', V = fix R')
H3 : {is_nat N}*
H4 : equiv_cps (arr T1 T) N (fix (f\x\R1 f x)) (fix (f\p\R' f p))
H5 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
       equiv_cps (arr T1 T) N V2 V2' ->
       sim_cps T N (R1 V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 exists R'1, fix (f\p\R' f p) = fix R'1

equiv_cps_arr_val2 < backchain IH.
Proof completed.
Abella < Theorem equiv_cps_closed : 
forall T K J V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' ->
  le J K -> equiv_cps T J V V'.


============================
 forall T K J V V', {is_sty T} -> {is_nat K} -> equiv_cps T K V V' ->
   le J K -> equiv_cps T J V V'

equiv_cps_closed < induction on 1.

IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
============================
 forall T K J V V', {is_sty T}@ -> {is_nat K} -> equiv_cps T K V V' ->
   le J K -> equiv_cps T J V V'

equiv_cps_closed < induction on 2.

IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
============================
 forall T K J V V', {is_sty T}@ -> {is_nat K}@@ -> equiv_cps T K V V' ->
   le J K -> equiv_cps T J V V'

equiv_cps_closed < intros.

Variables: T K J V V'
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv_cps T K V V'
H4 : le J K
============================
 equiv_cps T J V V'

equiv_cps_closed < case H1 (keep).
Subgoal 1:

Variables: K J V V'
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv_cps tnat K V V'
H4 : le J K
============================
 equiv_cps tnat J V V'

Subgoal 2 is:
 equiv_cps tunit J V V'

Subgoal 3 is:
 equiv_cps (prod T1 T2) J V V'

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < case H3.
Subgoal 1:

Variables: K J N
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H4 : le J K
============================
 equiv_cps tnat J (nat N) (nat N)

Subgoal 2 is:
 equiv_cps tunit J V V'

Subgoal 3 is:
 equiv_cps (prod T1 T2) J V V'

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < search.
Subgoal 2:

Variables: K J V V'
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv_cps tunit K V V'
H4 : le J K
============================
 equiv_cps tunit J V V'

Subgoal 3 is:
 equiv_cps (prod T1 T2) J V V'

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < case H3.
Subgoal 2:

Variables: K J
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H4 : le J K
============================
 equiv_cps tunit J unit unit

Subgoal 3 is:
 equiv_cps (prod T1 T2) J V V'

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < search.
Subgoal 3:

Variables: K J V V' T2 T1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (prod T1 T2) K V V'
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
============================
 equiv_cps (prod T1 T2) J V V'

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < case H3.
Subgoal 3:

Variables: K J T2 T1 V2' V1' V2 V1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : equiv_cps T1 K V1 V1'
H8 : equiv_cps T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
 equiv_cps (prod T1 T2) J (pair V1 V2) (pair V1' V2')

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < unfold.
Subgoal 3.1:

Variables: K J T2 T1 V2' V1' V2 V1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : equiv_cps T1 K V1 V1'
H8 : equiv_cps T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
 equiv_cps T1 J V1 V1'

Subgoal 3.2 is:
 equiv_cps T2 J V2 V2'

Subgoal 3.3 is:
 {tm V1}

Subgoal 3.4 is:
 {tm V2}

Subgoal 3.5 is:
 {tm V1'}

Subgoal 3.6 is:
 {tm V2'}

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < backchain IH.
Subgoal 3.2:

Variables: K J T2 T1 V2' V1' V2 V1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : equiv_cps T1 K V1 V1'
H8 : equiv_cps T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
 equiv_cps T2 J V2 V2'

Subgoal 3.3 is:
 {tm V1}

Subgoal 3.4 is:
 {tm V2}

Subgoal 3.5 is:
 {tm V1'}

Subgoal 3.6 is:
 {tm V2'}

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < backchain IH.
Subgoal 3.3:

Variables: K J T2 T1 V2' V1' V2 V1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : equiv_cps T1 K V1 V1'
H8 : equiv_cps T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
 {tm V1}

Subgoal 3.4 is:
 {tm V2}

Subgoal 3.5 is:
 {tm V1'}

Subgoal 3.6 is:
 {tm V2'}

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < search.
Subgoal 3.4:

Variables: K J T2 T1 V2' V1' V2 V1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : equiv_cps T1 K V1 V1'
H8 : equiv_cps T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
 {tm V2}

Subgoal 3.5 is:
 {tm V1'}

Subgoal 3.6 is:
 {tm V2'}

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < search.
Subgoal 3.5:

Variables: K J T2 T1 V2' V1' V2 V1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : equiv_cps T1 K V1 V1'
H8 : equiv_cps T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
 {tm V1'}

Subgoal 3.6 is:
 {tm V2'}

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < search.
Subgoal 3.6:

Variables: K J T2 T1 V2' V1' V2 V1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : equiv_cps T1 K V1 V1'
H8 : equiv_cps T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
 {tm V2'}

Subgoal 4 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < search.
Subgoal 4:

Variables: K J V V' T2 T1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
============================
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < apply le_to_lt to _ H4.
Subgoal 4:

Variables: K J V V' T2 T1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H7 : J = K \/ lt J K
============================
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < case H7.
Subgoal 4.1:

Variables: K V V' T2 T1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : le K K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
============================
 equiv_cps (arr T1 T2) K V V'

Subgoal 4.2 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < search.
Subgoal 4.2:

Variables: K J V V' T2 T1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv_cps (arr T1 T2) K V V'
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J K
============================
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < case H2 (keep).
Subgoal 4.2.1:

Variables: J V V' T2 T1
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat z}@@
H3 : equiv_cps (arr T1 T2) z V V'
H4 : le J z
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J z
============================
 equiv_cps (arr T1 T2) J V V'

Subgoal 4.2.2 is:
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < apply lt_z_absurd to H8.
Subgoal 4.2.2:

Variables: J V V' T2 T1 N
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat (s N)}@@
H3 : equiv_cps (arr T1 T2) (s N) V V'
H4 : le J (s N)
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J (s N)
H9 : {is_nat N}**
============================
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < apply lt_pred_le to _ H8.
Subgoal 4.2.2:

Variables: J V V' T2 T1 N
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat (s N)}@@
H3 : equiv_cps (arr T1 T2) (s N) V V'
H4 : le J (s N)
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J (s N)
H9 : {is_nat N}**
H10 : le J N
============================
 equiv_cps (arr T1 T2) J V V'

equiv_cps_closed < case H3.
Subgoal 4.2.2:

Variables: J T2 T1 N R' R
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat (s N)}@@
H4 : le J (s N)
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J (s N)
H9 : {is_nat N}**
H10 : le J N
H11 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H12 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
        equiv_cps (arr T1 T2) N V2 V2' ->
        sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 equiv_cps (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))

equiv_cps_closed < apply IH1 to H1 H9 H11 H10.
Subgoal 4.2.2:

Variables: J T2 T1 N R' R
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv_cps T K V V' ->
       le J K -> equiv_cps T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv_cps T K V V' ->
        le J K -> equiv_cps T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat (s N)}@@
H4 : le J (s N)
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J (s N)
H9 : {is_nat N}**
H10 : le J N
H11 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H12 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
        equiv_cps (arr T1 T2) N V2 V2' ->
        sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
H13 : equiv_cps (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))
============================
 equiv_cps (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))

equiv_cps_closed < search.
Proof completed.
Abella < Define equiv_cps_arr : ty -> nat -> tm -> tm -> prop by 
equiv_cps_arr (arr T1 T2) I (fix (f\x\R f x)) (fix (f\p\R' f p)) := {tm (fix R)} /\ {tm (fix R')} /\
  (forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))).

Abella < Theorem equiv_cps_arr_closed : 
forall J K T M M', {is_nat K} -> le J K -> equiv_cps_arr T K M M' ->
  equiv_cps_arr T J M M'.


============================
 forall J K T M M', {is_nat K} -> le J K -> equiv_cps_arr T K M M' ->
   equiv_cps_arr T J M M'

equiv_cps_arr_closed < intros.

Variables: J K T M M'
H1 : {is_nat K}
H2 : le J K
H3 : equiv_cps_arr T K M M'
============================
 equiv_cps_arr T J M M'

equiv_cps_arr_closed < case H3.

Variables: J K R' R T2 T1
H1 : {is_nat K}
H2 : le J K
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
 equiv_cps_arr (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))

equiv_cps_arr_closed < unfold.
Subgoal 1:

Variables: J K R' R T2 T1
H1 : {is_nat K}
H2 : le J K
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
 {tm (fix (z1\z2\R z1 z2))}

Subgoal 2 is:
 {tm (fix (z1\z2\R' z1 z2))}

Subgoal 3 is:
 forall J1 V1 V1' V2 V2' K, lt J1 J -> equiv_cps T1 J1 V1 V1' ->
   equiv_cps (arr T1 T2) J1 V2 V2' ->
   sim_cps T2 J1 (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_closed < search.
Subgoal 2:

Variables: J K R' R T2 T1
H1 : {is_nat K}
H2 : le J K
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
 {tm (fix (z1\z2\R' z1 z2))}

Subgoal 3 is:
 forall J1 V1 V1' V2 V2' K, lt J1 J -> equiv_cps T1 J1 V1 V1' ->
   equiv_cps (arr T1 T2) J1 V2 V2' ->
   sim_cps T2 J1 (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_closed < search.
Subgoal 3:

Variables: J K R' R T2 T1
H1 : {is_nat K}
H2 : le J K
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
 forall J1 V1 V1' V2 V2' K, lt J1 J -> equiv_cps T1 J1 V1 V1' ->
   equiv_cps (arr T1 T2) J1 V2 V2' ->
   sim_cps T2 J1 (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_closed < intros.
Subgoal 3:

Variables: J K R' R T2 T1 J1 V1 V1' V2 V2' K1
H1 : {is_nat K}
H2 : le J K
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : lt J1 J
H8 : equiv_cps T1 J1 V1 V1'
H9 : equiv_cps (arr T1 T2) J1 V2 V2'
============================
 sim_cps T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))

equiv_cps_arr_closed < apply lt_le_compose to H7 H2.
Subgoal 3:

Variables: J K R' R T2 T1 J1 V1 V1' V2 V2' K1
H1 : {is_nat K}
H2 : le J K
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : lt J1 J
H8 : equiv_cps T1 J1 V1 V1'
H9 : equiv_cps (arr T1 T2) J1 V2 V2'
H10 : lt J1 K
============================
 sim_cps T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))

equiv_cps_arr_closed < apply H6 to _ H8 H9 with K1 = K1.
Subgoal 3:

Variables: J K R' R T2 T1 J1 V1 V1' V2 V2' K1
H1 : {is_nat K}
H2 : le J K
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : lt J1 J
H8 : equiv_cps T1 J1 V1 V1'
H9 : equiv_cps (arr T1 T2) J1 V2 V2'
H10 : lt J1 K
H11 : sim_cps T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
 sim_cps T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))

equiv_cps_arr_closed < search.
Proof completed.
Abella < Theorem equiv_cps_arr_to_equiv_cps : 
forall T K M M', {is_nat K} -> {is_sty T} -> equiv_cps_arr T K M M' ->
  equiv_cps T K M M'.


============================
 forall T K M M', {is_nat K} -> {is_sty T} -> equiv_cps_arr T K M M' ->
   equiv_cps T K M M'

equiv_cps_arr_to_equiv_cps < induction on 1.

IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
============================
 forall T K M M', {is_nat K}@ -> {is_sty T} -> equiv_cps_arr T K M M' ->
   equiv_cps T K M M'

equiv_cps_arr_to_equiv_cps < intros.

Variables: T K M M'
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H1 : {is_nat K}@
H2 : {is_sty T}
H3 : equiv_cps_arr T K M M'
============================
 equiv_cps T K M M'

equiv_cps_arr_to_equiv_cps < case H3 (keep).

Variables: K R' R T2 T1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H1 : {is_nat K}@
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) K (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J K -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
 equiv_cps (arr T1 T2) K (fix (f\x\R f x)) (fix (f\p\R' f p))

equiv_cps_arr_to_equiv_cps < case H1.
Subgoal 1:

Variables: R' R T2 T1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) z (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J z -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
 equiv_cps (arr T1 T2) z (fix (f\x\R f x)) (fix (f\p\R' f p))

Subgoal 2 is:
 equiv_cps (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))

equiv_cps_arr_to_equiv_cps < search.
Subgoal 2:

Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
 equiv_cps (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))

equiv_cps_arr_to_equiv_cps < unfold.
Subgoal 2.1:

Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
 equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))

Subgoal 2.2 is:
 forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
   equiv_cps (arr T1 T2) N V2 V2' ->
   sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_to_equiv_cps < apply equiv_cps_arr_closed to _ _ H3 with J = N.
Subgoal 2.1.1:

Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
 le N (s N)

Subgoal 2.1 is:
 equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))

Subgoal 2.2 is:
 forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
   equiv_cps (arr T1 T2) N V2 V2' ->
   sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_to_equiv_cps < backchain le_succ.
Subgoal 2.1.1:

Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
 le N N

Subgoal 2.1 is:
 equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))

Subgoal 2.2 is:
 forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
   equiv_cps (arr T1 T2) N V2 V2' ->
   sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_to_equiv_cps < backchain le_refl.
Subgoal 2.1:

Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_cps_arr (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
============================
 equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))

Subgoal 2.2 is:
 forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
   equiv_cps (arr T1 T2) N V2 V2' ->
   sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_to_equiv_cps < apply IH to H7 _ H8.
Subgoal 2.1:

Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_cps_arr (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H9 : equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
============================
 equiv_cps (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))

Subgoal 2.2 is:
 forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
   equiv_cps (arr T1 T2) N V2 V2' ->
   sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_to_equiv_cps < search.
Subgoal 2.2:

Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
 forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
   equiv_cps (arr T1 T2) N V2 V2' ->
   sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_to_equiv_cps < intros.
Subgoal 2.2:

Variables: R' R T2 T1 N V1 V1' V2 V2' K1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_cps T1 N V1 V1'
H9 : equiv_cps (arr T1 T2) N V2 V2'
============================
 sim_cps T2 N (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))

equiv_cps_arr_to_equiv_cps < backchain H6.
Subgoal 2.2:

Variables: R' R T2 T1 N V1 V1' V2 V2' K1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_cps T1 N V1 V1'
H9 : equiv_cps (arr T1 T2) N V2 V2'
============================
 lt N (s N)

equiv_cps_arr_to_equiv_cps < unfold.
Subgoal 2.2:

Variables: R' R T2 T1 N V1 V1' V2 V2' K1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_cps T1 N V1 V1'
H9 : equiv_cps (arr T1 T2) N V2 V2'
============================
 exists N1, {add N (s N1) (s N)}

equiv_cps_arr_to_equiv_cps < exists z.
Subgoal 2.2:

Variables: R' R T2 T1 N V1 V1' V2 V2' K1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_cps_arr T K M M' ->
       equiv_cps T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_cps_arr (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
H4 : {tm (fix R)}
H5 : {tm (fix R')}
H6 : forall J V1 V1' V2 V2' K1, lt J (s N) -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_cps T1 N V1 V1'
H9 : equiv_cps (arr T1 T2) N V2 V2'
============================
 {add N (s z) (s N)}

equiv_cps_arr_to_equiv_cps < backchain add_comm.
Proof completed.
Abella < Theorem equiv_cps_arr_cond : 
forall I T1 T2 R R' K, {is_nat I} ->
  equiv_cps (arr T1 T2) I (fix R) (fix R') ->
  (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
       equiv_cps (arr T1 T2) J V2 V2' ->
       sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))).


============================
 forall I T1 T2 R R' K, {is_nat I} ->
   equiv_cps (arr T1 T2) I (fix R) (fix R') ->
   (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T2) J V2 V2' ->
        sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))

equiv_cps_arr_cond < induction on 1.

IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
============================
 forall I T1 T2 R R' K, {is_nat I}@ ->
   equiv_cps (arr T1 T2) I (fix R) (fix R') ->
   (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T2) J V2 V2' ->
        sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))

equiv_cps_arr_cond < intros.

Variables: I T1 T2 R R' K J V1 V1' V2 V2'
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H1 : {is_nat I}@
H2 : equiv_cps (arr T1 T2) I (fix R) (fix R')
H3 : lt J I
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
============================
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < case H1.
Subgoal 1:

Variables: T1 T2 R R' K J V1 V1' V2 V2'
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv_cps (arr T1 T2) z (fix R) (fix R')
H3 : lt J z
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
============================
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

Subgoal 2 is:
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < apply lt_z_absurd to H3.
Subgoal 2:

Variables: T1 T2 R R' K J V1 V1' V2 V2' N
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv_cps (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
============================
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < apply lt_pred_le to _ H3.
Subgoal 2:

Variables: T1 T2 R R' K J V1 V1' V2 V2' N
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv_cps (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
============================
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < apply le_to_lt to _ H7.
Subgoal 2:

Variables: T1 T2 R R' K J V1 V1' V2 V2' N
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv_cps (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H8 : J = N \/ lt J N
============================
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < case H8.
Subgoal 2.1:

Variables: T1 T2 R R' K V1 V1' V2 V2' N
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv_cps (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt N (s N)
H4 : equiv_cps T1 N V1 V1'
H5 : equiv_cps (arr T1 T2) N V2 V2'
H6 : {is_nat N}*
H7 : le N N
============================
 sim_cps T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

Subgoal 2.2 is:
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < case H2.
Subgoal 2.1:

Variables: T1 T2 K V1 V1' V2 V2' N R'1 R1
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H3 : lt N (s N)
H4 : equiv_cps T1 N V1 V1'
H5 : equiv_cps (arr T1 T2) N V2 V2'
H6 : {is_nat N}*
H7 : le N N
H9 : equiv_cps (arr T1 T2) N (fix (f\x\R1 f x)) (fix (f\p\R'1 f p))
H10 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
        equiv_cps (arr T1 T2) N V2 V2' ->
        sim_cps T2 N (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
============================
 sim_cps T2 N (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))

Subgoal 2.2 is:
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < backchain H10.
Subgoal 2.2:

Variables: T1 T2 R R' K J V1 V1' V2 V2' N
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv_cps (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H9 : lt J N
============================
 sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < case H2.
Subgoal 2.2:

Variables: T1 T2 K J V1 V1' V2 V2' N R'1 R1
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H3 : lt J (s N)
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H9 : lt J N
H10 : equiv_cps (arr T1 T2) N (fix (f\x\R1 f x)) (fix (f\p\R'1 f p))
H11 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
        equiv_cps (arr T1 T2) N V2 V2' ->
        sim_cps T2 N (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
============================
 sim_cps T2 J (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < apply IH to H6 H10 with K = K.
Subgoal 2.2:

Variables: T1 T2 K J V1 V1' V2 V2' N R'1 R1
IH : forall I T1 T2 R R' K, {is_nat I}* ->
       equiv_cps (arr T1 T2) I (fix R) (fix R') ->
       (forall J V1 V1' V2 V2', lt J I -> equiv_cps T1 J V1 V1' ->
            equiv_cps (arr T1 T2) J V2 V2' ->
            sim_cps T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H3 : lt J (s N)
H4 : equiv_cps T1 J V1 V1'
H5 : equiv_cps (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H9 : lt J N
H10 : equiv_cps (arr T1 T2) N (fix (f\x\R1 f x)) (fix (f\p\R'1 f p))
H11 : forall V1 V1' V2 V2' K, equiv_cps T1 N V1 V1' ->
        equiv_cps (arr T1 T2) N V2 V2' ->
        sim_cps T2 N (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
H12 : forall J V1 V1' V2 V2', lt J N -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T2) J V2 V2' ->
        sim_cps T2 J (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
============================
 sim_cps T2 J (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))

equiv_cps_arr_cond < backchain H12.
Proof completed.
Abella < Theorem app_equiv_cps_arr : 
forall T1 T R R' N1 N2 V1 V1' I K, {is_sty (arr T1 T)} -> {is_nat N1} ->
  {is_nat N2} -> equiv_cps (arr T1 T) N1 (fix R) (fix R') ->
  equiv_cps T1 N2 V1 V1' -> lt I N1 -> lt I N2 ->
  sim_cps T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1')).


============================
 forall T1 T R R' N1 N2 V1 V1' I K, {is_sty (arr T1 T)} -> {is_nat N1} ->
   {is_nat N2} -> equiv_cps (arr T1 T) N1 (fix R) (fix R') ->
   equiv_cps T1 N2 V1 V1' -> lt I N1 -> lt I N2 ->
   sim_cps T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))

app_equiv_cps_arr < intros.

Variables: T1 T R R' N1 N2 V1 V1' I K
H1 : {is_sty (arr T1 T)}
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv_cps (arr T1 T) N1 (fix R) (fix R')
H5 : equiv_cps T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
============================
 sim_cps T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))

app_equiv_cps_arr < case H1.

Variables: T1 T R R' N1 N2 V1 V1' I K
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv_cps (arr T1 T) N1 (fix R) (fix R')
H5 : equiv_cps T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
H8 : {is_sty T1}
H9 : {is_sty T}
============================
 sim_cps T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))

app_equiv_cps_arr < apply equiv_cps_arr_cond to _ H4 with K = K.

Variables: T1 T R R' N1 N2 V1 V1' I K
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv_cps (arr T1 T) N1 (fix R) (fix R')
H5 : equiv_cps T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
H8 : {is_sty T1}
H9 : {is_sty T}
H10 : forall J V1 V1' V2 V2', lt J N1 -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T) J V2 V2' ->
        sim_cps T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 sim_cps T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))

app_equiv_cps_arr < backchain H10.
Subgoal 1:

Variables: T1 T R R' N1 N2 V1 V1' I K
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv_cps (arr T1 T) N1 (fix R) (fix R')
H5 : equiv_cps T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
H8 : {is_sty T1}
H9 : {is_sty T}
H10 : forall J V1 V1' V2 V2', lt J N1 -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T) J V2 V2' ->
        sim_cps T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 equiv_cps T1 I V1 V1'

Subgoal 2 is:
 equiv_cps (arr T1 T) I (fix R) (fix R')

app_equiv_cps_arr < backchain equiv_cps_closed with K = N2.
Subgoal 1:

Variables: T1 T R R' N1 N2 V1 V1' I K
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv_cps (arr T1 T) N1 (fix R) (fix R')
H5 : equiv_cps T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
H8 : {is_sty T1}
H9 : {is_sty T}
H10 : forall J V1 V1' V2 V2', lt J N1 -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T) J V2 V2' ->
        sim_cps T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 le I N2

Subgoal 2 is:
 equiv_cps (arr T1 T) I (fix R) (fix R')

app_equiv_cps_arr < backchain lt_to_le.
Subgoal 2:

Variables: T1 T R R' N1 N2 V1 V1' I K
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv_cps (arr T1 T) N1 (fix R) (fix R')
H5 : equiv_cps T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
H8 : {is_sty T1}
H9 : {is_sty T}
H10 : forall J V1 V1' V2 V2', lt J N1 -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T) J V2 V2' ->
        sim_cps T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 equiv_cps (arr T1 T) I (fix R) (fix R')

app_equiv_cps_arr < backchain equiv_cps_closed with K = N1.
Subgoal 2:

Variables: T1 T R R' N1 N2 V1 V1' I K
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv_cps (arr T1 T) N1 (fix R) (fix R')
H5 : equiv_cps T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
H8 : {is_sty T1}
H9 : {is_sty T}
H10 : forall J V1 V1' V2 V2', lt J N1 -> equiv_cps T1 J V1 V1' ->
        equiv_cps (arr T1 T) J V2 V2' ->
        sim_cps T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
 le I N1

app_equiv_cps_arr < backchain lt_to_le.
Proof completed.
Abella < Theorem sim_cps_nstep : 
forall T K M M' J I V N, sim_cps T I M K M' -> {nstep J M V} -> {val V} ->
  {add J N I} -> (exists V', step* M' (K V') /\ equiv_cps T N V V').


============================
 forall T K M M' J I V N, sim_cps T I M K M' -> {nstep J M V} -> {val V} ->
   {add J N I} -> (exists V', step* M' (K V') /\ equiv_cps T N V V')

sim_cps_nstep < intros.

Variables: T K M M' J I V N
H1 : sim_cps T I M K M'
H2 : {nstep J M V}
H3 : {val V}
H4 : {add J N I}
============================
 exists V', step* M' (K V') /\ equiv_cps T N V V'

sim_cps_nstep < case H1.

Variables: T K M M' J I V N
H2 : {nstep J M V}
H3 : {val V}
H4 : {add J N I}
H5 : forall J V, le J I -> {nstep J M V} -> {val V} ->
       (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T N V V')
============================
 exists V', step* M' (K V') /\ equiv_cps T N V V'

sim_cps_nstep < apply H5 to _ H2 H3.

Variables: T K M M' J I V N N1 V'
H2 : {nstep J M V}
H3 : {val V}
H4 : {add J N I}
H5 : forall J V, le J I -> {nstep J M V} -> {val V} ->
       (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv_cps T N1 V V'
============================
 exists V', step* M' (K V') /\ equiv_cps T N V V'

sim_cps_nstep < exists V'.

Variables: T K M M' J I V N N1 V'
H2 : {nstep J M V}
H3 : {val V}
H4 : {add J N I}
H5 : forall J V, le J I -> {nstep J M V} -> {val V} ->
       (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv_cps T N1 V V'
============================
 step* M' (K V') /\ equiv_cps T N V V'

sim_cps_nstep < split.
Subgoal 1:

Variables: T K M M' J I V N N1 V'
H2 : {nstep J M V}
H3 : {val V}
H4 : {add J N I}
H5 : forall J V, le J I -> {nstep J M V} -> {val V} ->
       (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv_cps T N1 V V'
============================
 step* M' (K V')

Subgoal 2 is:
 equiv_cps T N V V'

sim_cps_nstep < search.
Subgoal 2:

Variables: T K M M' J I V N N1 V'
H2 : {nstep J M V}
H3 : {val V}
H4 : {add J N I}
H5 : forall J V, le J I -> {nstep J M V} -> {val V} ->
       (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv_cps T N1 V V'
============================
 equiv_cps T N V V'

sim_cps_nstep < apply add_arg2_det to H4 H7.
Subgoal 2:

Variables: T K M M' J I V N1 V'
H2 : {nstep J M V}
H3 : {val V}
H4 : {add J N1 I}
H5 : forall J V, le J I -> {nstep J M V} -> {val V} ->
       (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv_cps T N1 V V'
============================
 equiv_cps T N1 V V'

sim_cps_nstep < search.
Proof completed.
Abella < Theorem sim_cps_closed_step* : 
forall T I K M M' M1', step* M1' M' -> sim_cps T I K M M' ->
  sim_cps T I K M M1'.


============================
 forall T I K M M' M1', step* M1' M' -> sim_cps T I K M M' ->
   sim_cps T I K M M1'

sim_cps_closed_step* < intros.

Variables: T I K M M' M1'
H1 : step* M1' M'
H2 : sim_cps T I K M M'
============================
 sim_cps T I K M M1'

sim_cps_closed_step* < unfold.

Variables: T I K M M' M1'
H1 : step* M1' M'
H2 : sim_cps T I K M M'
============================
 forall J V, le J I -> {nstep J K V} -> {val V} ->
   (exists N V', step* M1' (M V') /\ {add J N I} /\ equiv_cps T N V V')

sim_cps_closed_step* < intros.

Variables: T I K M M' M1' J V
H1 : step* M1' M'
H2 : sim_cps T I K M M'
H3 : le J I
H4 : {nstep J K V}
H5 : {val V}
============================
 exists N V', step* M1' (M V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_closed_step* < case H3.

Variables: T I K M M' M1' J V N
H1 : step* M1' M'
H2 : sim_cps T I K M M'
H4 : {nstep J K V}
H5 : {val V}
H6 : {add J N I}
============================
 exists N V', step* M1' (M V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_closed_step* < apply sim_cps_nstep to H2 H4 _ _.

Variables: T I K M M' M1' J V N V'
H1 : step* M1' M'
H2 : sim_cps T I K M M'
H4 : {nstep J K V}
H5 : {val V}
H6 : {add J N I}
H7 : step* M' (M V')
H8 : equiv_cps T N V V'
============================
 exists N V', step* M1' (M V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_closed_step* < apply step*_trans to H1 H7.

Variables: T I K M M' M1' J V N V'
H1 : step* M1' M'
H2 : sim_cps T I K M M'
H4 : {nstep J K V}
H5 : {val V}
H6 : {add J N I}
H7 : step* M' (M V')
H8 : equiv_cps T N V V'
H9 : step* M1' (M V')
============================
 exists N V', step* M1' (M V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_closed_step* < search.
Proof completed.
Abella < Define subst_equiv_cps : (list o) -> nat -> (list (map tm tm)) -> (list (map tm tm)) -> prop by 
subst_equiv_cps nil I nil nil;
nabla x, subst_equiv_cps (of x T :: L) I (map x V :: ML) (map x V' :: ML') := equiv_cps T I V V' /\ subst_equiv_cps L I ML ML'.

Abella < Theorem subst_equiv_cps_vars : 
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv_cps L I ML ML' ->
  vars_of_subst ML Vs.


============================
 forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv_cps L I ML ML' ->
   vars_of_subst ML Vs

subst_equiv_cps_vars < induction on 2.

IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML Vs
============================
 forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv_cps L I ML ML' @ ->
   vars_of_subst ML Vs

subst_equiv_cps_vars < intros.

Variables: L Vs ML ML' I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML Vs
H1 : vars_of_sctx L Vs
H2 : subst_equiv_cps L I ML ML' @
============================
 vars_of_subst ML Vs

subst_equiv_cps_vars < case H2.
Subgoal 1:

Variables: Vs I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML Vs
H1 : vars_of_sctx nil Vs
============================
 vars_of_subst nil Vs

Subgoal 2 is:
 vars_of_subst (map n1 V :: ML1) (Vs n1)

subst_equiv_cps_vars < case H1.
Subgoal 1:

Variables: I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML Vs
============================
 vars_of_subst nil nil

Subgoal 2 is:
 vars_of_subst (map n1 V :: ML1) (Vs n1)

subst_equiv_cps_vars < search.
Subgoal 2:

Variables: Vs I ML'1 V' ML1 V L1 T
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML Vs
H1 : vars_of_sctx (of n1 T :: L1) (Vs n1)
H3 : equiv_cps T I V V'
H4 : subst_equiv_cps L1 I ML1 ML'1 *
============================
 vars_of_subst (map n1 V :: ML1) (Vs n1)

subst_equiv_cps_vars < case H1.
Subgoal 2:

Variables: I ML'1 V' ML1 V L1 T L'
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML Vs
H3 : equiv_cps T I V V'
H4 : subst_equiv_cps L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
============================
 vars_of_subst (map n1 V :: ML1) (n1 :: L')

subst_equiv_cps_vars < apply IH to H5 H4.
Subgoal 2:

Variables: I ML'1 V' ML1 V L1 T L'
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML Vs
H3 : equiv_cps T I V V'
H4 : subst_equiv_cps L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
H6 : vars_of_subst ML1 L'
============================
 vars_of_subst (map n1 V :: ML1) (n1 :: L')

subst_equiv_cps_vars < search.
Proof completed.
Abella < Theorem subst_equiv_cps_vars' : 
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv_cps L I ML ML' ->
  vars_of_subst ML' Vs.


============================
 forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv_cps L I ML ML' ->
   vars_of_subst ML' Vs

subst_equiv_cps_vars' < induction on 2.

IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML' Vs
============================
 forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv_cps L I ML ML' @ ->
   vars_of_subst ML' Vs

subst_equiv_cps_vars' < intros.

Variables: L Vs ML ML' I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML' Vs
H1 : vars_of_sctx L Vs
H2 : subst_equiv_cps L I ML ML' @
============================
 vars_of_subst ML' Vs

subst_equiv_cps_vars' < case H2.
Subgoal 1:

Variables: Vs I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML' Vs
H1 : vars_of_sctx nil Vs
============================
 vars_of_subst nil Vs

Subgoal 2 is:
 vars_of_subst (map n1 V' :: ML'1) (Vs n1)

subst_equiv_cps_vars' < case H1.
Subgoal 1:

Variables: I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML' Vs
============================
 vars_of_subst nil nil

Subgoal 2 is:
 vars_of_subst (map n1 V' :: ML'1) (Vs n1)

subst_equiv_cps_vars' < search.
Subgoal 2:

Variables: Vs I ML'1 V' ML1 V L1 T
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML' Vs
H1 : vars_of_sctx (of n1 T :: L1) (Vs n1)
H3 : equiv_cps T I V V'
H4 : subst_equiv_cps L1 I ML1 ML'1 *
============================
 vars_of_subst (map n1 V' :: ML'1) (Vs n1)

subst_equiv_cps_vars' < case H1.
Subgoal 2:

Variables: I ML'1 V' ML1 V L1 T L'
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML' Vs
H3 : equiv_cps T I V V'
H4 : subst_equiv_cps L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
============================
 vars_of_subst (map n1 V' :: ML'1) (n1 :: L')

subst_equiv_cps_vars' < apply IH to H5 H4.
Subgoal 2:

Variables: I ML'1 V' ML1 V L1 T L'
IH : forall L Vs ML ML' I, vars_of_sctx L Vs ->
       subst_equiv_cps L I ML ML' * -> vars_of_subst ML' Vs
H3 : equiv_cps T I V V'
H4 : subst_equiv_cps L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
H6 : vars_of_subst ML'1 L'
============================
 vars_of_subst (map n1 V' :: ML'1) (n1 :: L')

subst_equiv_cps_vars' < search.
Proof completed.
Abella < Theorem subst_equiv_cps_mem : 
forall L ML ML' M T I, subst_equiv_cps L I ML ML' -> member (of M T) L ->
  (exists V V', member (map M V) ML /\ member (map M V') ML' /\
       equiv_cps T I V V').


============================
 forall L ML ML' M T I, subst_equiv_cps L I ML ML' -> member (of M T) L ->
   (exists V V', member (map M V) ML /\ member (map M V') ML' /\
        equiv_cps T I V V')

subst_equiv_cps_mem < induction on 2.

IH : forall L ML ML' M T I, subst_equiv_cps L I ML ML' ->
       member (of M T) L * ->
       (exists V V', member (map M V) ML /\ member (map M V') ML' /\
            equiv_cps T I V V')
============================
 forall L ML ML' M T I, subst_equiv_cps L I ML ML' -> member (of M T) L @ ->
   (exists V V', member (map M V) ML /\ member (map M V') ML' /\
        equiv_cps T I V V')

subst_equiv_cps_mem < intros.

Variables: L ML ML' M T I
IH : forall L ML ML' M T I, subst_equiv_cps L I ML ML' ->
       member (of M T) L * ->
       (exists V V', member (map M V) ML /\ member (map M V') ML' /\
            equiv_cps T I V V')
H1 : subst_equiv_cps L I ML ML'
H2 : member (of M T) L @
============================
 exists V V', member (map M V) ML /\ member (map M V') ML' /\
   equiv_cps T I V V'

subst_equiv_cps_mem < case H2.
Subgoal 1:

Variables: ML ML' M T I L1
IH : forall L ML ML' M T I, subst_equiv_cps L I ML ML' ->
       member (of M T) L * ->
       (exists V V', member (map M V) ML /\ member (map M V') ML' /\
            equiv_cps T I V V')
H1 : subst_equiv_cps (of M T :: L1) I ML ML'
============================
 exists V V', member (map M V) ML /\ member (map M V') ML' /\
   equiv_cps T I V V'

Subgoal 2 is:
 exists V V', member (map M V) ML /\ member (map M V') ML' /\
   equiv_cps T I V V'

subst_equiv_cps_mem < case H1.
Subgoal 1:

Variables: T I ML'1 V' ML1 V L2
IH : forall L ML ML' M T I, subst_equiv_cps L I ML ML' ->
       member (of M T) L * ->
       (exists V V', member (map M V) ML /\ member (map M V') ML' /\
            equiv_cps T I V V')
H3 : equiv_cps T I V V'
H4 : subst_equiv_cps L2 I ML1 ML'1
============================
 exists V1 V'1, member (map n1 V1) (map n1 V :: ML1) /\
   member (map n1 V'1) (map n1 V' :: ML'1) /\ equiv_cps T I V1 V'1

Subgoal 2 is:
 exists V V', member (map M V) ML /\ member (map M V') ML' /\
   equiv_cps T I V V'

subst_equiv_cps_mem < search.
Subgoal 2:

Variables: ML ML' M T I L1 B
IH : forall L ML ML' M T I, subst_equiv_cps L I ML ML' ->
       member (of M T) L * ->
       (exists V V', member (map M V) ML /\ member (map M V') ML' /\
            equiv_cps T I V V')
H1 : subst_equiv_cps (B :: L1) I ML ML'
H3 : member (of M T) L1 *
============================
 exists V V', member (map M V) ML /\ member (map M V') ML' /\
   equiv_cps T I V V'

subst_equiv_cps_mem < case H1.
Subgoal 2:

Variables: M T I ML'1 V' ML1 V L2 T1
IH : forall L ML ML' M T I, subst_equiv_cps L I ML ML' ->
       member (of M T) L * ->
       (exists V V', member (map M V) ML /\ member (map M V') ML' /\
            equiv_cps T I V V')
H3 : member (of (M n1) T) L2 *
H4 : equiv_cps T1 I V V'
H5 : subst_equiv_cps L2 I ML1 ML'1
============================
 exists V1 V'1, member (map (M n1) V1) (map n1 V :: ML1) /\
   member (map (M n1) V'1) (map n1 V' :: ML'1) /\ equiv_cps T I V1 V'1

subst_equiv_cps_mem < apply IH to H5 H3.
Subgoal 2:

Variables: M T I ML'1 V' ML1 V L2 T1 V1 V'1
IH : forall L ML ML' M T I, subst_equiv_cps L I ML ML' ->
       member (of M T) L * ->
       (exists V V', member (map M V) ML /\ member (map M V') ML' /\
            equiv_cps T I V V')
H3 : member (of (M n1) T) L2 *
H4 : equiv_cps T1 I V V'
H5 : subst_equiv_cps L2 I ML1 ML'1
H6 : member (map (M n1) (V1 n1)) ML1
H7 : member (map (M n1) (V'1 n1)) ML'1
H8 : equiv_cps T I (V1 n1) (V'1 n1)
============================
 exists V1 V'1, member (map (M n1) V1) (map n1 V :: ML1) /\
   member (map (M n1) V'1) (map n1 V' :: ML'1) /\ equiv_cps T I V1 V'1

subst_equiv_cps_mem < search.
Proof completed.
Abella < Theorem subst_equiv_cps_closed : 
forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv_cps L K ML ML' ->
  le J K -> subst_equiv_cps L J ML ML'.


============================
 forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv_cps L K ML ML' ->
   le J K -> subst_equiv_cps L J ML ML'

subst_equiv_cps_closed < induction on 3.

IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
============================
 forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv_cps L K ML ML' @ ->
   le J K -> subst_equiv_cps L J ML ML'

subst_equiv_cps_closed < intros.

Variables: L K J ML ML'
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H2 : sctx L
H3 : subst_equiv_cps L K ML ML' @
H4 : le J K
============================
 subst_equiv_cps L J ML ML'

subst_equiv_cps_closed < case H3.
Subgoal 1:

Variables: K J
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H2 : sctx nil
H4 : le J K
============================
 subst_equiv_cps nil J nil nil

Subgoal 2 is:
 subst_equiv_cps (of n1 T :: L1) J (map n1 V :: ML1) (map n1 V' :: ML'1)

subst_equiv_cps_closed < search.
Subgoal 2:

Variables: K J ML'1 V' ML1 V L1 T
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv_cps T K V V'
H6 : subst_equiv_cps L1 K ML1 ML'1 *
============================
 subst_equiv_cps (of n1 T :: L1) J (map n1 V :: ML1) (map n1 V' :: ML'1)

subst_equiv_cps_closed < unfold.
Subgoal 2.1:

Variables: K J ML'1 V' ML1 V L1 T
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv_cps T K V V'
H6 : subst_equiv_cps L1 K ML1 ML'1 *
============================
 equiv_cps T J V V'

Subgoal 2.2 is:
 subst_equiv_cps L1 J ML1 ML'1

subst_equiv_cps_closed < backchain equiv_cps_closed.
Subgoal 2.1:

Variables: K J ML'1 V' ML1 V L1 T
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv_cps T K V V'
H6 : subst_equiv_cps L1 K ML1 ML'1 *
============================
 {is_sty T}

Subgoal 2.2 is:
 subst_equiv_cps L1 J ML1 ML'1

subst_equiv_cps_closed < case H2.
Subgoal 2.1:

Variables: K J ML'1 V' ML1 V L1 T
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H4 : le J K
H5 : equiv_cps T K V V'
H6 : subst_equiv_cps L1 K ML1 ML'1 *
H7 : sctx L1
H8 : {is_sty T}
============================
 {is_sty T}

Subgoal 2.2 is:
 subst_equiv_cps L1 J ML1 ML'1

subst_equiv_cps_closed < search.
Subgoal 2.2:

Variables: K J ML'1 V' ML1 V L1 T
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv_cps T K V V'
H6 : subst_equiv_cps L1 K ML1 ML'1 *
============================
 subst_equiv_cps L1 J ML1 ML'1

subst_equiv_cps_closed < backchain IH.
Subgoal 2.2:

Variables: K J ML'1 V' ML1 V L1 T
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv_cps T K V V'
H6 : subst_equiv_cps L1 K ML1 ML'1 *
============================
 sctx L1

subst_equiv_cps_closed < case H2.
Subgoal 2.2:

Variables: K J ML'1 V' ML1 V L1 T
IH : forall L K J ML ML', {is_nat K} -> sctx L ->
       subst_equiv_cps L K ML ML' * -> le J K -> subst_equiv_cps L J ML ML'
H1 : {is_nat K}
H4 : le J K
H5 : equiv_cps T K V V'
H6 : subst_equiv_cps L1 K ML1 ML'1 *
H7 : sctx L1
H8 : {is_sty T}
============================
 sctx L1

subst_equiv_cps_closed < search.
Proof completed.
Abella < Import "cps_typ_pres".
Importing from /home/fac05/gopalan/test/sparrow/compiler-correctness/website/wang-phd-thesis/code/./cps_typ_pres

Abella < Theorem sim_cps_pred : 
forall I M M' K, sim_cps tnat I M (x\let (pred x) (v\K v)) M' ->
  sim_cps tnat I (pred M) K M'.


============================
 forall I M M' K, sim_cps tnat I M (x\let (pred x) (v\K v)) M' ->
   sim_cps tnat I (pred M) K M'

sim_cps_pred < intros.

Variables: I M M' K
H1 : sim_cps tnat I M (x\let (pred x) (v\K v)) M'
============================
 sim_cps tnat I (pred M) K M'

sim_cps_pred < unfold.

Variables: I M M' K
H1 : sim_cps tnat I M (x\let (pred x) (v\K v)) M'
============================
 forall J V, le J I -> {nstep J (pred M) V} -> {val V} ->
   (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps tnat N V V')

sim_cps_pred < intros.

Variables: I M M' K J V
H1 : sim_cps tnat I M (x\let (pred x) (v\K v)) M'
H2 : le J I
H3 : {nstep J (pred M) V}
H4 : {val V}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps tnat N V V'

sim_cps_pred < apply nstep_pred_inv to H4 H3.

Variables: I M M' K J1 N N'
H1 : sim_cps tnat I M (x\let (pred x) (v\K v)) M'
H2 : le (s J1) I
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
============================
 exists N V', step* M' (K V') /\ {add (s J1) N I} /\
   equiv_cps tnat N (nat N') V'

sim_cps_pred < case H2.

Variables: I M M' K J1 N N' N1
H1 : sim_cps tnat I M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H7 : {add (s J1) N1 I}
============================
 exists N V', step* M' (K V') /\ {add (s J1) N I} /\
   equiv_cps tnat N (nat N') V'

sim_cps_pred < case H7.

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
============================
 exists N V', step* M' (K V') /\ {add (s J1) N (s N3)} /\
   equiv_cps tnat N (nat N') V'

sim_cps_pred < assert {add J1 (s N1) (s N3)}.
Subgoal 1:

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
============================
 {add J1 (s N1) (s N3)}

Subgoal is:
 exists N V', step* M' (K V') /\ {add (s J1) N (s N3)} /\
   equiv_cps tnat N (nat N') V'

sim_cps_pred < backchain add_s.

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
============================
 exists N V', step* M' (K V') /\ {add (s J1) N (s N3)} /\
   equiv_cps tnat N (nat N') V'

sim_cps_pred < apply sim_cps_nstep to H1 H5 _ H9.

Variables: M M' K J1 N N' N1 N3 V'
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
H10 : step* M' (let (pred V') (v\K v))
H11 : equiv_cps tnat (s N1) (nat N) V'
============================
 exists N V', step* M' (K V') /\ {add (s J1) N (s N3)} /\
   equiv_cps tnat N (nat N') V'

sim_cps_pred < case H11.

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
H10 : step* M' (let (pred (nat N)) (v\K v))
============================
 exists N V', step* M' (K V') /\ {add (s J1) N (s N3)} /\
   equiv_cps tnat N (nat N') V'

sim_cps_pred < exists N1.

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
H10 : step* M' (let (pred (nat N)) (v\K v))
============================
 exists V', step* M' (K V') /\ {add (s J1) N1 (s N3)} /\
   equiv_cps tnat N1 (nat N') V'

sim_cps_pred < exists nat N'.

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
H10 : step* M' (let (pred (nat N)) (v\K v))
============================
 step* M' (K (nat N')) /\ {add (s J1) N1 (s N3)} /\
   equiv_cps tnat N1 (nat N') (nat N')

sim_cps_pred < split.
Subgoal 2:

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
H10 : step* M' (let (pred (nat N)) (v\K v))
============================
 step* M' (K (nat N'))

Subgoal 3 is:
 {add (s J1) N1 (s N3)}

Subgoal 4 is:
 equiv_cps tnat N1 (nat N') (nat N')

sim_cps_pred < backchain step*_trans with M2 = let (pred (nat N)) (v\K v).
Subgoal 3:

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
H10 : step* M' (let (pred (nat N)) (v\K v))
============================
 {add (s J1) N1 (s N3)}

Subgoal 4 is:
 equiv_cps tnat N1 (nat N') (nat N')

sim_cps_pred < search.
Subgoal 4:

Variables: M M' K J1 N N' N1 N3
H1 : sim_cps tnat (s N3) M (x\let (pred x) (v\K v)) M'
H3 : {nstep (s J1) (pred M) (nat N')}
H4 : {val (nat N')}
H5 : {nstep J1 M (nat N)}
H6 : {npred N N'}
H8 : {add J1 N1 N3}
H9 : {add J1 (s N1) (s N3)}
H10 : step* M' (let (pred (nat N)) (v\K v))
============================
 equiv_cps tnat N1 (nat N') (nat N')

sim_cps_pred < search.
Proof completed.
Abella < Theorem sim_cps_ifz : 
forall I T K' M1 M2 M3 M2' M3' M', {is_nat I} -> {is_sty T} ->
  sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K')) ->
  sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K')) ->
  sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M' ->
  sim_cps T I (ifz M1 M2 M3) K' M'.


============================
 forall I T K' M1 M2 M3 M2' M3' M', {is_nat I} -> {is_sty T} ->
   sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K')) ->
   sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K')) ->
   sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M' ->
   sim_cps T I (ifz M1 M2 M3) K' M'

sim_cps_ifz < intros.

Variables: I T K' M1 M2 M3 M2' M3' M'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
============================
 sim_cps T I (ifz M1 M2 M3) K' M'

sim_cps_ifz < unfold.

Variables: I T K' M1 M2 M3 M2' M3' M'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
============================
 forall J V, le J I -> {nstep J (ifz M1 M2 M3) V} -> {val V} ->
   (exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V')

sim_cps_ifz < intros.

Variables: I T K' M1 M2 M3 M2' M3' M' J V
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply nstep_ifz_inv to _ _ H7.
Subgoal 1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
============================
 {is_nat J}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H6.
Subgoal 1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V N
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : {add J N I}
============================
 {is_nat J}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < backchain add_arg1_isnat.

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H11 : {nstep J1 M1 (nat z)} /\ {nstep I1 M2 V} \/
        {nstep J1 M1 (nat (s N))} /\ {nstep I1 M3 V}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H11.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply le_trans to H9 H6.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H14 : le J1 I
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H14.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply sim_cps_nstep to H5 H12 _ H15.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat z) V'
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply le_trans to H10 H6.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat z) V'
H18 : le I1 I
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H18.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V' N2
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat z) V'
H19 : {add I1 N2 I}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply sim_cps_nstep to H3 H13 _ H19.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V' N2 V'1
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat z) V'
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H17.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H6.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < exists N3.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 exists V', step* M' (K' V') /\ {add J N3 I} /\ equiv_cps T N3 V V'

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < exists V'1.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 step* M' (K' V'1) /\ {add J N3 I} /\ equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < assert {is_nat N2}.
Subgoal 2.1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 {is_nat N2}

Subgoal 2 is:
 step* M' (K' V'1) /\ {add J N3 I} /\ equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < backchain add_arg2_isnat.
Subgoal 2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (K' V'1) /\ {add J N3 I} /\ equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < split.
Subgoal 2.2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (K' V'1)

Subgoal 2.3 is:
 {add J N3 I}

Subgoal 2.4 is:
 equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < backchain step*_trans with M2 = app (fix f\K') V'1.
Subgoal 2.2.1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (app (fix f\K') V'1)

Subgoal 2.2.2 is:
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 2.3 is:
 {add J N3 I}

Subgoal 2.4 is:
 equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < backchain step*_trans with M2 = M2' (fix f\K').
Subgoal 2.2.1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (M2' (fix f\K'))

Subgoal 2.2.2 is:
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 2.3 is:
 {add J N3 I}

Subgoal 2.4 is:
 equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < backchain step*_trans with M2 = let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)).
Subgoal 2.2.2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 2.3 is:
 {add J N3 I}

Subgoal 2.4 is:
 equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply equiv_cps_val2 to _ _ H21.
Subgoal 2.2.2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
H24 : {val V'1}
============================
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 2.3 is:
 {add J N3 I}

Subgoal 2.4 is:
 equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < search.
Subgoal 2.3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 {add J N3 I}

Subgoal 2.4 is:
 equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < search.
Subgoal 2.4:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 equiv_cps T N3 V V'1

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < backchain equiv_cps_closed with K = N2.
Subgoal 2.4:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat z)}
H13 : {nstep I1 M2 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat z) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M2' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 le N3 N2

Subgoal 3 is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < backchain add_le_complement with N = I, N1 = I1, N1' = J.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply le_trans to H9 H6.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H14 : le J1 I
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H14.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply sim_cps_nstep to H5 H12 _ H15.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat (s N)) V'
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply le_trans to H10 H6.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat (s N)) V'
H18 : le I1 I
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H18.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V' N2
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat (s N)) V'
H19 : {add I1 N2 I}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < apply sim_cps_nstep to H4 H13 _ H19.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 V' N2 V'1
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz V' (M2' k) (M3' k)))
H17 : equiv_cps tnat N1 (nat (s N)) V'
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H17.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H6 : le J I
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < case H6.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_ifz < exists N3.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 exists V', step* M' (K' V') /\ {add J N3 I} /\ equiv_cps T N3 V V'

sim_cps_ifz < exists V'1.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 step* M' (K' V'1) /\ {add J N3 I} /\ equiv_cps T N3 V V'1

sim_cps_ifz < assert {is_nat N2}.
Subgoal 3.1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
============================
 {is_nat N2}

Subgoal 3 is:
 step* M' (K' V'1) /\ {add J N3 I} /\ equiv_cps T N3 V V'1

sim_cps_ifz < backchain add_arg2_isnat.
Subgoal 3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (K' V'1) /\ {add J N3 I} /\ equiv_cps T N3 V V'1

sim_cps_ifz < split.
Subgoal 3.2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (K' V'1)

Subgoal 3.3 is:
 {add J N3 I}

Subgoal 3.4 is:
 equiv_cps T N3 V V'1

sim_cps_ifz < backchain step*_trans with M2 = app (fix f\K') V'1.
Subgoal 3.2.1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (app (fix f\K') V'1)

Subgoal 3.2.2 is:
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 3.3 is:
 {add J N3 I}

Subgoal 3.4 is:
 equiv_cps T N3 V V'1

sim_cps_ifz < backchain step*_trans with M2 = M3' (fix f\K').
Subgoal 3.2.1:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* M' (M3' (fix f\K'))

Subgoal 3.2.2 is:
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 3.3 is:
 {add J N3 I}

Subgoal 3.4 is:
 equiv_cps T N3 V V'1

sim_cps_ifz < backchain step*_trans with M2 = let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)).
Subgoal 3.2.2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 3.3 is:
 {add J N3 I}

Subgoal 3.4 is:
 equiv_cps T N3 V V'1

sim_cps_ifz < apply equiv_cps_val2 to _ _ H21.
Subgoal 3.2.2:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
H24 : {val V'1}
============================
 step* (app (fix f\K') V'1) (K' V'1)

Subgoal 3.3 is:
 {add J N3 I}

Subgoal 3.4 is:
 equiv_cps T N3 V V'1

sim_cps_ifz < search.
Subgoal 3.3:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 {add J N3 I}

Subgoal 3.4 is:
 equiv_cps T N3 V V'1

sim_cps_ifz < search.
Subgoal 3.4:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 equiv_cps T N3 V V'1

sim_cps_ifz < backchain equiv_cps_closed with K = N2.
Subgoal 3.4:

Variables: I T K' M1 M2 M3 M2' M3' M' J V I1 J1 N N1 N2 V'1 N3
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim_cps T I M2 (x\app (fix f\K') x) (M2' (fix f\K'))
H4 : sim_cps T I M3 (x\app (fix f\K') x) (M3' (fix f\K'))
H5 : sim_cps tnat I M1 (x1\let (fix f\K') (k\ifz x1 (M2' k) (M3' k))) M'
H7 : {nstep J (ifz M1 M2 M3) V}
H8 : {val V}
H9 : le J1 J
H10 : le I1 J
H12 : {nstep J1 M1 (nat (s N))}
H13 : {nstep I1 M3 V}
H15 : {add J1 N1 I}
H16 : step* M' (let (fix f\K') (k\ifz (nat (s N)) (M2' k) (M3' k)))
H19 : {add I1 N2 I}
H20 : step* (M3' (fix f\K')) (app (fix f\K') V'1)
H21 : equiv_cps T N2 V V'1
H22 : {add J N3 I}
H23 : {is_nat N2}
============================
 le N3 N2

sim_cps_ifz < backchain add_le_complement with N = I, N1 = I1, N1' = J.
Proof completed.
Abella < Theorem sim_cps_plus : 
forall I M1 M2 M2' M' K, nabla x1, {is_nat I} -> sim_cps tnat I M1 M2' M' ->
  sim_cps tnat I M2 (x2\let (plus x1 x2) (v\K v)) (M2' x1) ->
  sim_cps tnat I (plus M1 M2) K M'.


============================
 forall I M1 M2 M2' M' K, nabla x1, {is_nat I} -> sim_cps tnat I M1 M2' M' ->
   sim_cps tnat I M2 (x2\let (plus x1 x2) (v\K v)) (M2' x1) ->
   sim_cps tnat I (plus M1 M2) K M'

sim_cps_plus < intros.

Variables: I M1 M2 M2' M' K
H1 : {is_nat I}
H2 : sim_cps tnat I M1 M2' M'
H3 : sim_cps tnat I M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
============================
 sim_cps tnat I (plus M1 M2) K M'

sim_cps_plus < unfold.

Variables: I M1 M2 M2' M' K
H1 : {is_nat I}
H2 : sim_cps tnat I M1 M2' M'
H3 : sim_cps tnat I M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
============================
 forall J V, le J I -> {nstep J (plus M1 M2) V} -> {val V} ->
   (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps tnat N V V')

sim_cps_plus < intros.

Variables: I M1 M2 M2' M' K J V
H1 : {is_nat I}
H2 : sim_cps tnat I M1 M2' M'
H3 : sim_cps tnat I M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H4 : le J I
H5 : {nstep J (plus M1 M2) V}
H6 : {val V}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps tnat N V V'

sim_cps_plus < apply nstep_plus_inv to _ H5.

Variables: I M1 M2 M2' M' K J1 J2 J12 N1 N2 N3
H1 : {is_nat I}
H2 : sim_cps tnat I M1 M2' M'
H3 : sim_cps tnat I M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H4 : le (s J12) I
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N I} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < case H4.

Variables: I M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N
H1 : {is_nat I}
H2 : sim_cps tnat I M1 M2' M'
H3 : sim_cps tnat I M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H11 : {add (s J12) N I}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N I} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < case H11.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4
H1 : {is_nat (s N4)}
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < case H1.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < apply add_assoc to H7 H12.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < assert exists V1', step* M' (M2' V1') /\ equiv_cps tnat (s N23) (nat N1) V1'.
Subgoal 1:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
============================
 exists V1', step* M' (M2' V1') /\ equiv_cps tnat (s N23) (nat N1) V1'

Subgoal is:
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < backchain sim_cps_nstep.
Subgoal 1:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
============================
 {add J1 (s N23) (s N4)}

Subgoal is:
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < backchain add_s.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H16 : exists V1', step* M' (M2' V1') /\ equiv_cps tnat (s N23) (nat N1) V1'
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < case H16.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1'
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < apply add_comm to _ H7.
Subgoal 2:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1'
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
============================
 {is_nat J12}

Subgoal is:
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < backchain add_arg1_isnat.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1'
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < apply add_assoc to H19 H12.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < assert exists V2', step* (M2' n1) (let (plus n1 V2') K) /\
  equiv_cps tnat (s N5) (nat N2) V2'.
Subgoal 3:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
============================
 exists V2', step* (M2' n1) (let (plus n1 V2') K) /\
   equiv_cps tnat (s N5) (nat N2) V2'

Subgoal is:
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < backchain sim_cps_nstep.
Subgoal 3:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
============================
 {add J2 (s N5) (s N4)}

Subgoal is:
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < backchain add_s.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H22 : exists V2', step* (M2' n1) (let (plus n1 V2') K) /\
        equiv_cps tnat (s N5) (nat N2) V2'
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < case H22.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 V2'
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (V2' n1)) K)
H24 : equiv_cps tnat (s N5) (nat N2) (V2' n1)
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < apply add_arg2_isnat to _ H15.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 V2'
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (V2' n1)) K)
H24 : equiv_cps tnat (s N5) (nat N2) (V2' n1)
H25 : {is_nat N23}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < apply add_arg2_isnat to _ H21.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 V2'
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (V2' n1)) K)
H24 : equiv_cps tnat (s N5) (nat N2) (V2' n1)
H25 : {is_nat N23}
H26 : {is_nat N5}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < apply equiv_cps_tm2 to _ _ H24.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 V2'
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (V2' n1)) K)
H24 : equiv_cps tnat (s N5) (nat N2) (V2' n1)
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm (V2' n1)}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < apply sclosed_tm_prune to H27.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
============================
 exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < exists N.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
============================
 exists V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) V'

sim_cps_plus < exists nat N3.

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
============================
 step* M' (K (nat N3)) /\ {add (s J12) N (s N4)} /\
   equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < split.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < apply step*_inst to H23 with M = V1'.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
H28 : step* (M2' V1') (let (plus V1' M'1) K)
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < apply step*_trans to H17 H28.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
H28 : step* (M2' V1') (let (plus V1' M'1) K)
H29 : step* M' (let (plus V1' M'1) K)
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < apply equiv_cps_val2 to _ _ H18.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
H28 : step* (M2' V1') (let (plus V1' M'1) K)
H29 : step* M' (let (plus V1' M'1) K)
H30 : {val V1'}
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < apply equiv_cps_val2 to _ _ H24.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
H28 : step* (M2' V1') (let (plus V1' M'1) K)
H29 : step* M' (let (plus V1' M'1) K)
H30 : {val V1'}
H31 : {val M'1}
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < case H24.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (nat N2)) K)
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm (nat N2)}
H28 : step* (M2' V1') (let (plus V1' (nat N2)) K)
H29 : step* M' (let (plus V1' (nat N2)) K)
H30 : {val V1'}
H31 : {val (nat N2)}
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < case H18.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' (nat N1))
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (nat N2)) K)
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm (nat N2)}
H28 : step* (M2' (nat N1)) (let (plus (nat N1) (nat N2)) K)
H29 : step* M' (let (plus (nat N1) (nat N2)) K)
H30 : {val (nat N1)}
H31 : {val (nat N2)}
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < assert step* (let (plus V1' M'1) (v\K v)) (K (nat N3)).
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' (nat N1))
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (nat N2)) K)
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm (nat N2)}
H28 : step* (M2' (nat N1)) (let (plus (nat N1) (nat N2)) K)
H29 : step* M' (let (plus (nat N1) (nat N2)) K)
H30 : {val (nat N1)}
H31 : {val (nat N2)}
H32 : step* (let (plus (nat N1) (nat N2)) (v\K v)) (K (nat N3))
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < apply step*_trans to H29 H32.
Subgoal 4:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 N5
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' (nat N1))
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 (nat N2)) K)
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm (nat N2)}
H28 : step* (M2' (nat N1)) (let (plus (nat N1) (nat N2)) K)
H29 : step* M' (let (plus (nat N1) (nat N2)) K)
H30 : {val (nat N1)}
H31 : {val (nat N2)}
H32 : step* (let (plus (nat N1) (nat N2)) (v\K v)) (K (nat N3))
H33 : step* M' (K (nat N3))
============================
 step* M' (K (nat N3))

Subgoal 5 is:
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < search.
Subgoal 5:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
============================
 {add (s J12) N (s N4)}

Subgoal 6 is:
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < search.
Subgoal 6:

Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim_cps tnat (s N4) M1 M2' M'
H3 : sim_cps tnat (s N4) M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
H5 : {nstep (s J12) (plus M1 M2) (nat N3)}
H6 : {val (nat N3)}
H7 : {add J1 J2 J12}
H8 : {nstep J1 M1 (nat N1)}
H9 : {nstep J2 M2 (nat N2)}
H10 : {add N1 N2 N3}
H12 : {add J12 N N4}
H13 : {is_nat N4}
H14 : {add J2 N N23}
H15 : {add J1 N23 N4}
H17 : step* M' (M2' V1')
H18 : equiv_cps tnat (s N23) (nat N1) V1'
H19 : {add J2 J1 J12}
H20 : {add J1 N N5}
H21 : {add J2 N5 N4}
H23 : step* (M2' n1) (let (plus n1 M'1) K)
H24 : equiv_cps tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
============================
 equiv_cps tnat N (nat N3) (nat N3)

sim_cps_plus < search.
Proof completed.
Abella < Theorem sim_cps_unit : 
forall I K, sim_cps tunit I unit K (K unit).


============================
 forall I K, sim_cps tunit I unit K (K unit)

sim_cps_unit < intros.

Variables: I K
============================
 sim_cps tunit I unit K (K unit)

sim_cps_unit < unfold.

Variables: I K
============================
 forall J V, le J I -> {nstep J unit V} -> {val V} ->
   (exists N V', step* (K unit) (K V') /\ {add J N I} /\
        equiv_cps tunit N V V')

sim_cps_unit < intros.

Variables: I K J V
H1 : le J I
H2 : {nstep J unit V}
H3 : {val V}
============================
 exists N V', step* (K unit) (K V') /\ {add J N I} /\ equiv_cps tunit N V V'

sim_cps_unit < apply nstep_val_inv to _ H2.

Variables: I K
H1 : le z I
H2 : {nstep z unit unit}
H3 : {val unit}
============================
 exists N V', step* (K unit) (K V') /\ {add z N I} /\
   equiv_cps tunit N unit V'

sim_cps_unit < search.
Proof completed.
Abella < Theorem sim_cps_pair : 
forall I T1 T2 M1 M2 M2' M' K, nabla x1, {is_nat I} -> {is_sty T1} ->
  {is_sty T2} -> sim_cps T1 I M1 M2' M' ->
  sim_cps T2 I M2 (x2\let (pair x1 x2) (v\K v)) (M2' x1) ->
  sim_cps (prod T1 T2) I (pair M1 M2) K M'.


============================
 forall I T1 T2 M1 M2 M2' M' K, nabla x1, {is_nat I} -> {is_sty T1} ->
   {is_sty T2} -> sim_cps T1 I M1 M2' M' ->
   sim_cps T2 I M2 (x2\let (pair x1 x2) (v\K v)) (M2' x1) ->
   sim_cps (prod T1 T2) I (pair M1 M2) K M'

sim_cps_pair < intros.

Variables: I T1 T2 M1 M2 M2' M' K
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
============================
 sim_cps (prod T1 T2) I (pair M1 M2) K M'

sim_cps_pair < unfold.

Variables: I T1 T2 M1 M2 M2' M' K
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
============================
 forall J V, le J I -> {nstep J (pair M1 M2) V} -> {val V} ->
   (exists N V', step* M' (K V') /\ {add J N I} /\
        equiv_cps (prod T1 T2) N V V')

sim_cps_pair < intros.

Variables: I T1 T2 M1 M2 M2' M' K J V
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) V}
H8 : {val V}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps (prod T1 T2) N V V'

sim_cps_pair < apply nstep_pair_inv to _ H7.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H8 : {val (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < case H8.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < case H6 (keep).

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < apply le_trans to _ H6.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H15 : le I1 I
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < case H15.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < assert exists V1', step* M' (M2' V1') /\ equiv_cps T1 N1 V1 V1'.
Subgoal 1:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
============================
 exists V1', step* M' (M2' V1') /\ equiv_cps T1 N1 V1 V1'

Subgoal is:
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < backchain sim_cps_nstep.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H17 : exists V1', step* M' (M2' V1') /\ equiv_cps T1 N1 V1 V1'
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < case H17.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < apply add_comm to _ H9.
Subgoal 2:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
============================
 {is_nat J}

Subgoal is:
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < backchain add_arg1_isnat.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < apply le_trans to _ H6 with N1 = J1.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H21 : le J1 I
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < case H21.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < assert exists V2', step* (M2' n1) (let (pair n1 V2') K) /\ equiv_cps T2 N2 V2 V2'.
Subgoal 3:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
============================
 exists V2', step* (M2' n1) (let (pair n1 V2') K) /\ equiv_cps T2 N2 V2 V2'

Subgoal is:
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < backchain sim_cps_nstep.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H23 : exists V2', step* (M2' n1) (let (pair n1 V2') K) /\
        equiv_cps T2 N2 V2 V2'
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < case H23.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 V2'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 (V2' n1)) K)
H25 : equiv_cps T2 N2 V2 (V2' n1)
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < apply add_arg2_isnat to _ H16.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 V2'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 (V2' n1)) K)
H25 : equiv_cps T2 N2 V2 (V2' n1)
H26 : {is_nat N1}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < apply add_arg2_isnat to _ H22.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 V2'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 (V2' n1)) K)
H25 : equiv_cps T2 N2 V2 (V2' n1)
H26 : {is_nat N1}
H27 : {is_nat N2}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < apply equiv_cps_tm2 to _ _ H25.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 V2'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 (V2' n1)) K)
H25 : equiv_cps T2 N2 V2 (V2' n1)
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm (V2' n1)}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < apply sclosed_tm_prune to H28.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < exists N.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 exists V', step* M' (K V') /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) V'

sim_cps_pair < exists pair V1' M'1.

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 step* M' (K (pair V1' M'1)) /\ {add J N I} /\
   equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < split.
Subgoal 4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 step* M' (K (pair V1' M'1))

Subgoal 5 is:
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < apply step*_inst to H24 with M = V1'.
Subgoal 4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
H29 : step* (M2' V1') (let (pair V1' M'1) K)
============================
 step* M' (K (pair V1' M'1))

Subgoal 5 is:
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < apply step*_trans to H18 H29.
Subgoal 4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
H29 : step* (M2' V1') (let (pair V1' M'1) K)
H30 : step* M' (let (pair V1' M'1) K)
============================
 step* M' (K (pair V1' M'1))

Subgoal 5 is:
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < apply equiv_cps_val2 to _ _ H19.
Subgoal 4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
H29 : step* (M2' V1') (let (pair V1' M'1) K)
H30 : step* M' (let (pair V1' M'1) K)
H31 : {val V1'}
============================
 step* M' (K (pair V1' M'1))

Subgoal 5 is:
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < apply equiv_cps_val2 to _ _ H25.
Subgoal 4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
H29 : step* (M2' V1') (let (pair V1' M'1) K)
H30 : step* M' (let (pair V1' M'1) K)
H31 : {val V1'}
H32 : {val M'1}
============================
 step* M' (K (pair V1' M'1))

Subgoal 5 is:
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < assert step* (let (pair V1' M'1) (v\K v)) (K (pair V1' M'1)).
Subgoal 4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
H29 : step* (M2' V1') (let (pair V1' M'1) K)
H30 : step* M' (let (pair V1' M'1) K)
H31 : {val V1'}
H32 : {val M'1}
H33 : step* (let (pair V1' M'1) (v\K v)) (K (pair V1' M'1))
============================
 step* M' (K (pair V1' M'1))

Subgoal 5 is:
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < apply step*_trans to H30 H33.
Subgoal 4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
H29 : step* (M2' V1') (let (pair V1' M'1) K)
H30 : step* M' (let (pair V1' M'1) K)
H31 : {val V1'}
H32 : {val M'1}
H33 : step* (let (pair V1' M'1) (v\K v)) (K (pair V1' M'1))
H34 : step* M' (K (pair V1' M'1))
============================
 step* M' (K (pair V1' M'1))

Subgoal 5 is:
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < search.
Subgoal 5:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 {add J N I}

Subgoal 6 is:
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < search.
Subgoal 6:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 equiv_cps (prod T1 T2) N (pair V1 V2) (pair V1' M'1)

sim_cps_pair < unfold.
Subgoal 6.1:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 equiv_cps T1 N V1 V1'

Subgoal 6.2 is:
 equiv_cps T2 N V2 M'1

Subgoal 6.3 is:
 {tm V1}

Subgoal 6.4 is:
 {tm V2}

Subgoal 6.5 is:
 {tm V1'}

Subgoal 6.6 is:
 {tm M'1}

sim_cps_pair < backchain equiv_cps_closed with K = N1.
Subgoal 6.1:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 le N N1

Subgoal 6.2 is:
 equiv_cps T2 N V2 M'1

Subgoal 6.3 is:
 {tm V1}

Subgoal 6.4 is:
 {tm V2}

Subgoal 6.5 is:
 {tm V1'}

Subgoal 6.6 is:
 {tm M'1}

sim_cps_pair < backchain add_le_complement with N = I, N1 = I1, N1' = J.
Subgoal 6.2:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 equiv_cps T2 N V2 M'1

Subgoal 6.3 is:
 {tm V1}

Subgoal 6.4 is:
 {tm V2}

Subgoal 6.5 is:
 {tm V1'}

Subgoal 6.6 is:
 {tm M'1}

sim_cps_pair < backchain equiv_cps_closed with K = N2.
Subgoal 6.2:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 le N N2

Subgoal 6.3 is:
 {tm V1}

Subgoal 6.4 is:
 {tm V2}

Subgoal 6.5 is:
 {tm V1'}

Subgoal 6.6 is:
 {tm M'1}

sim_cps_pair < backchain add_le_complement with N = I, N1 = J1, N1' = J.
Subgoal 6.3:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 {tm V1}

Subgoal 6.4 is:
 {tm V2}

Subgoal 6.5 is:
 {tm V1'}

Subgoal 6.6 is:
 {tm M'1}

sim_cps_pair < backchain equiv_cps_tm1 with T = T1, K = N1.
Subgoal 6.4:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 {tm V2}

Subgoal 6.5 is:
 {tm V1'}

Subgoal 6.6 is:
 {tm M'1}

sim_cps_pair < backchain equiv_cps_tm1 with T = T2, K = N2.
Subgoal 6.5:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 {tm V1'}

Subgoal 6.6 is:
 {tm M'1}

sim_cps_pair < backchain equiv_cps_tm2 with T = T1, K = N1.
Subgoal 6.6:

Variables: I T1 T2 M1 M2 M2' M' K J I1 J1 V1 V2 N N1 V1' N2 M'1
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : {is_sty T2}
H4 : sim_cps T1 I M1 M2' M'
H5 : sim_cps T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
H6 : le J I
H7 : {nstep J (pair M1 M2) (pair V1 V2)}
H9 : {add I1 J1 J}
H10 : {nstep I1 M1 V1}
H11 : {nstep J1 M2 V2}
H12 : {val V1}
H13 : {val V2}
H14 : {add J N I}
H16 : {add I1 N1 I}
H18 : step* M' (M2' V1')
H19 : equiv_cps T1 N1 V1 V1'
H20 : {add J1 I1 J}
H22 : {add J1 N2 I}
H24 : step* (M2' n1) (let (pair n1 M'1) K)
H25 : equiv_cps T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
 {tm M'1}

sim_cps_pair < backchain equiv_cps_tm2 with T = T2, K = N2.
Proof completed.
Abella < Theorem sim_cps_fst : 
forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
  sim_cps (prod T1 T2) I M (x\let (fst x) (v\K v)) M' ->
  sim_cps T1 I (fst M) K M'.


============================
 forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
   sim_cps (prod T1 T2) I M (x\let (fst x) (v\K v)) M' ->
   sim_cps T1 I (fst M) K M'

sim_cps_fst < intros.

Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (fst x) (v\K v)) M'
============================
 sim_cps T1 I (fst M) K M'

sim_cps_fst < unfold.

Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (fst x) (v\K v)) M'
============================
 forall J V, le J I -> {nstep J (fst M) V} -> {val V} ->
   (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T1 N V V')

sim_cps_fst < intros.

Variables: T1 T2 K I M M' J V
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (fst x) (v\K v)) M'
H4 : le J I
H5 : {nstep J (fst M) V}
H6 : {val V}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T1 N V V'

sim_cps_fst < apply nstep_fst_inv to H6 H5.

Variables: T1 T2 K I M M' V K' V'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (fst x) (v\K v)) M'
H4 : le (s K') I
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
============================
 exists N V', step* M' (K V') /\ {add (s K') N I} /\ equiv_cps T1 N V V'

sim_cps_fst < case H4.

Variables: T1 T2 K I M M' V K' V' N
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H9 : {add (s K') N I}
============================
 exists N V', step* M' (K V') /\ {add (s K') N I} /\ equiv_cps T1 N V V'

sim_cps_fst < case H9.

Variables: T1 T2 K M M' V K' V' N N3
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < apply add_s to H10.

Variables: T1 T2 K M M' V K' V' N N3
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < apply sim_cps_nstep to H3 H8 _ H11.

Variables: T1 T2 K M M' V K' V' N N3 V'1
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst V'1) (v\K v))
H13 : equiv_cps (prod T1 T2) (s N) (pair V V') V'1
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < case H13.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < case H1.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < case H2.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < apply add_arg2_isnat to _ H10.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < exists N.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 exists V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V'

sim_cps_fst < exists V1'.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 step* M' (K V1') /\ {add (s K') N (s N3)} /\ equiv_cps T1 N V V1'

sim_cps_fst < split.
Subgoal 1:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 step* M' (K V1')

Subgoal 2 is:
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T1 N V V1'

sim_cps_fst < apply equiv_cps_val2 to _ _ H14.
Subgoal 1:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
H24 : {val V1'}
============================
 step* M' (K V1')

Subgoal 2 is:
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T1 N V V1'

sim_cps_fst < apply equiv_cps_val2 to _ _ H15.
Subgoal 1:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
H24 : {val V1'}
H25 : {val V2'}
============================
 step* M' (K V1')

Subgoal 2 is:
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T1 N V V1'

sim_cps_fst < backchain step*_trans with M2 = let (fst (pair V1' V2')) (v\K v).
Subgoal 2:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T1 N V V1'

sim_cps_fst < search.
Subgoal 3:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 equiv_cps T1 N V V1'

sim_cps_fst < backchain equiv_cps_closed with K = s N.
Subgoal 3:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 le N (s N)

sim_cps_fst < backchain le_succ.
Subgoal 3:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (fst x) (v\K v)) M'
H5 : {nstep (s K') (fst M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V V')}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (fst (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V V1'
H15 : equiv_cps T2 (s N) V' V2'
H16 : {tm V}
H17 : {tm V'}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 le N N

sim_cps_fst < backchain le_refl.
Proof completed.
Abella < Theorem sim_cps_snd : 
forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
  sim_cps (prod T1 T2) I M (x\let (snd x) (v\K v)) M' ->
  sim_cps T2 I (snd M) K M'.


============================
 forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
   sim_cps (prod T1 T2) I M (x\let (snd x) (v\K v)) M' ->
   sim_cps T2 I (snd M) K M'

sim_cps_snd < intros.

Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (snd x) (v\K v)) M'
============================
 sim_cps T2 I (snd M) K M'

sim_cps_snd < unfold.

Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (snd x) (v\K v)) M'
============================
 forall J V, le J I -> {nstep J (snd M) V} -> {val V} ->
   (exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T2 N V V')

sim_cps_snd < intros.

Variables: T1 T2 K I M M' J V
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (snd x) (v\K v)) M'
H4 : le J I
H5 : {nstep J (snd M) V}
H6 : {val V}
============================
 exists N V', step* M' (K V') /\ {add J N I} /\ equiv_cps T2 N V V'

sim_cps_snd < apply nstep_snd_inv to H6 H5.

Variables: T1 T2 K I M M' V K' V'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (snd x) (v\K v)) M'
H4 : le (s K') I
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
============================
 exists N V', step* M' (K V') /\ {add (s K') N I} /\ equiv_cps T2 N V V'

sim_cps_snd < case H4.

Variables: T1 T2 K I M M' V K' V' N
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) I M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H9 : {add (s K') N I}
============================
 exists N V', step* M' (K V') /\ {add (s K') N I} /\ equiv_cps T2 N V V'

sim_cps_snd < case H9.

Variables: T1 T2 K M M' V K' V' N N3
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < apply add_s to H10.

Variables: T1 T2 K M M' V K' V' N N3
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < apply sim_cps_nstep to H3 H8 _ H11.

Variables: T1 T2 K M M' V K' V' N N3 V'1
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd V'1) (v\K v))
H13 : equiv_cps (prod T1 T2) (s N) (pair V' V) V'1
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < case H13.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H1 : {is_nat (s N3)}
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < case H1.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H2 : {is_sty (prod T1 T2)}
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < case H2.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < apply add_arg2_isnat to _ H10.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < exists N.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 exists V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V'

sim_cps_snd < exists V2'.

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 step* M' (K V2') /\ {add (s K') N (s N3)} /\ equiv_cps T2 N V V2'

sim_cps_snd < split.
Subgoal 1:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 step* M' (K V2')

Subgoal 2 is:
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T2 N V V2'

sim_cps_snd < apply equiv_cps_val2 to _ _ H14.
Subgoal 1:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
H24 : {val V1'}
============================
 step* M' (K V2')

Subgoal 2 is:
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T2 N V V2'

sim_cps_snd < apply equiv_cps_val2 to _ _ H15.
Subgoal 1:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
H24 : {val V1'}
H25 : {val V2'}
============================
 step* M' (K V2')

Subgoal 2 is:
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T2 N V V2'

sim_cps_snd < backchain step*_trans with M2 = let (snd (pair V1' V2')) (v\K v).
Subgoal 2:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 {add (s K') N (s N3)}

Subgoal 3 is:
 equiv_cps T2 N V V2'

sim_cps_snd < search.
Subgoal 3:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 equiv_cps T2 N V V2'

sim_cps_snd < backchain equiv_cps_closed with K = s N.
Subgoal 3:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 le N (s N)

sim_cps_snd < backchain le_succ.
Subgoal 3:

Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim_cps (prod T1 T2) (s N3) M (x\let (snd x) (v\K v)) M'
H5 : {nstep (s K') (snd M) V}
H6 : {val V}
H7 : {val V'}
H8 : {nstep K' M (pair V' V)}
H10 : {add K' N N3}
H11 : {add K' (s N) (s N3)}
H12 : step* M' (let (snd (pair V1' V2')) (v\K v))
H14 : equiv_cps T1 (s N) V' V1'
H15 : equiv_cps T2 (s N) V V2'
H16 : {tm V'}
H17 : {tm V}
H18 : {tm V1'}
H19 : {tm V2'}
H20 : {is_nat N3}
H21 : {is_sty T1}
H22 : {is_sty T2}
H23 : {is_nat N}
============================
 le N N

sim_cps_snd < backchain le_refl.
Proof completed.
Abella < Theorem sim_cps_app : 
forall T1 T I K' M1 M' M2 M2', nabla x1, {is_nat I} -> {is_sty (arr T1 T)} ->
  sim_cps (arr T1 T) I M1 M2' M' ->
  sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app x1 p)))
    (M2' x1) ->
  sim_cps T I (app M1 M2) K' M'.


============================
 forall T1 T I K' M1 M' M2 M2', nabla x1, {is_nat I} ->
   {is_sty (arr T1 T)} -> sim_cps (arr T1 T) I M1 M2' M' ->
   sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app x1 p)))
     (M2' x1) ->
   sim_cps T I (app M1 M2) K' M'

sim_cps_app < intros.

Variables: T1 T I K' M1 M' M2 M2'
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) I M1 M2' M'
H4 : sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
       (M2' n1)
============================
 sim_cps T I (app M1 M2) K' M'

sim_cps_app < unfold.

Variables: T1 T I K' M1 M' M2 M2'
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) I M1 M2' M'
H4 : sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
       (M2' n1)
============================
 forall J V, le J I -> {nstep J (app M1 M2) V} -> {val V} ->
   (exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V')

sim_cps_app < intros.

Variables: T1 T I K' M1 M' M2 M2' J V
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) I M1 M2' M'
H4 : sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
       (M2' n1)
H5 : le J I
H6 : {nstep J (app M1 M2) V}
H7 : {val V}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_app < assert exists J1 J2 J3 J23 J123 V2 R, {add J2 J3 J23} /\ {add J1 J23 J123} /\ J =
s J123 /\ {nstep J1 M1 (fix R)} /\ {nstep J2 M2 V2} /\ {val V2} /\
  {nstep J3 (R (fix R) V2) V}.
Subgoal 1:

Variables: T1 T I K' M1 M' M2 M2' J V
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) I M1 M2' M'
H4 : sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
       (M2' n1)
H5 : le J I
H6 : {nstep J (app M1 M2) V}
H7 : {val V}
============================
 exists J1 J2 J3 J23 J123 V2 R, {add J2 J3 J23} /\ {add J1 J23 J123} /\ J =
 s J123 /\ {nstep J1 M1 (fix R)} /\ {nstep J2 M2 V2} /\ {val V2} /\
   {nstep J3 (R (fix R) V2) V}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_app < backchain nstep_app_inv.

Variables: T1 T I K' M1 M' M2 M2' J V
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) I M1 M2' M'
H4 : sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
       (M2' n1)
H5 : le J I
H6 : {nstep J (app M1 M2) V}
H7 : {val V}
H8 : exists J1 J2 J3 J23 J123 V2 R, {add J2 J3 J23} /\ {add J1 J23 J123} /\
       J =
     s J123 /\ {nstep J1 M1 (fix R)} /\ {nstep J2 M2 V2} /\ {val V2} /\
       {nstep J3 (R (fix R) V2) V}
============================
 exists N V', step* M' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

sim_cps_app < case H8.

Variables: T1 T I K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) I M1 M2' M'
H4 : sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
       (M2' n1)
H5 : le (s J123) I
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N I} /\ equiv_cps T N V V'

sim_cps_app < case H5.

Variables: T1 T I K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) I M1 M2' M'
H4 : sim_cps T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
       (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H15 : {add (s J123) N I}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N I} /\ equiv_cps T N V V'

sim_cps_app < case H15.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert exists N1, {add J1 N1 N3}.
Subgoal 2:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
============================
 exists N1, {add J1 N1 N3}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain k_minus_n1.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H17 : exists N1, {add J1 N1 N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H17.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert exists N2, {add J2 N2 N3}.
Subgoal 3:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
============================
 exists N2, {add J2 N2 N3}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain k_minus_n2.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H19 : exists N2, {add J2 N2 N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H19.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert exists V1', step* M' (M2' V1') /\ equiv_cps (arr T1 T) (s N1) (fix R) V1'.
Subgoal 4:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
============================
 exists V1', step* M' (M2' V1') /\ equiv_cps (arr T1 T) (s N1) (fix R) V1'

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain sim_cps_nstep.
Subgoal 4:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
============================
 {add J1 (s N1) (s N3)}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain add_s.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H21 : exists V1', step* M' (M2' V1') /\
        equiv_cps (arr T1 T) (s N1) (fix R) V1'
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H21.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1'
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert exists V2', step* (M2' n1) (let (fix f\K') (k\let (pair k V2') (p\app n1 p))) /\
  equiv_cps T1 (s N2) V2 V2'.
Subgoal 5:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1'
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
============================
 exists V2', step* (M2' n1)
               (let (fix f\K') (k\let (pair k V2') (p\app n1 p))) /\
   equiv_cps T1 (s N2) V2 V2'

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain sim_cps_nstep.
Subgoal 5:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1'
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
============================
 {add J2 (s N2) (s N3)}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain add_s.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1'
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H24 : exists V2', step* (M2' n1)
                    (let (fix f\K') (k\let (pair k V2') (p\app n1 p))) /\
        equiv_cps T1 (s N2) V2 V2'
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H24.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert exists K' J12, {add J1 J2 J12} /\ {add J3 N K'} /\ {add J12 K' N3}.
Subgoal 6:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
============================
 exists K' J12, {add J1 J2 J12} /\ {add J3 N K'} /\ {add J12 K' N3}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain k_minus_n12.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H27 : exists K' J12, {add J1 J2 J12} /\ {add J3 N K'} /\ {add J12 K' N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H27.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert lt K'1 (s N1).
Subgoal 7:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
============================
 lt K'1 (s N1)

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain sum_complement_to_lt1 with N1 = J1, N2 = J2, N = N3.
Subgoal 7:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
============================
 {is_nat N3}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H1.
Subgoal 7:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : {is_nat N3}
============================
 {is_nat N3}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < search.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert lt K'1 (s N2).
Subgoal 8:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
============================
 lt K'1 (s N2)

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain sum_complement_to_lt2 with N1 = J1, N2 = J2, N = N3.
Subgoal 8:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
============================
 {is_nat N3}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H1.
Subgoal 8:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : {is_nat N3}
============================
 {is_nat N3}

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < search.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H1 : {is_nat (s N3)}
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H1.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H2 : {is_sty (arr T1 T)}
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H2.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < apply add_arg2_isnat to _ H18.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < apply add_arg2_isnat to _ H20.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V1' V2'
           K'1 J12
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' V1')
H23 : equiv_cps (arr T1 T) (s N1) (fix R) V1'
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < apply equiv_cps_arr_val2 to _ H23.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V2' K'1
           J12 R'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < apply equiv_cps_tm2 to _ _ H26.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 V2' K'1
           J12 R'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k (V2' n1)) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 (V2' n1)
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm (V2' n1)}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < apply sclosed_tm_prune to H38.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1)).
Subgoal 9:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
============================
 sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain app_equiv_cps_arr with T1 = T1, N1 = s N1, N2 = s N2, R = R, R' = R', K = K'.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < assert exists V', step* (R' (fix R') (pair (fix f\K') M'1)) (K' V') /\
  equiv_cps T N V V'.
Subgoal 10:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
============================
 exists V', step* (R' (fix R') (pair (fix f\K') M'1)) (K' V') /\
   equiv_cps T N V V'

Subgoal is:
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < backchain sim_cps_nstep.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H40 : exists V', step* (R' (fix R') (pair (fix f\K') M'1)) (K' V') /\
        equiv_cps T N V V'
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < case H40.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
============================
 exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\
   equiv_cps T N V V'

sim_cps_app < exists N.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
============================
 exists V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv_cps T N V V'

sim_cps_app < exists V'.

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
============================
 step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv_cps T N V V'

sim_cps_app < split.
Subgoal 11:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
============================
 step* M' (K' V')

Subgoal 12 is:
 {add (s J123) N (s N3)}

Subgoal 13 is:
 equiv_cps T N V V'

sim_cps_app < apply equiv_cps_val2 to _ _ H26.
Subgoal 11:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
H43 : {val M'1}
============================
 step* M' (K' V')

Subgoal 12 is:
 {add (s J123) N (s N3)}

Subgoal 13 is:
 equiv_cps T N V V'

sim_cps_app < apply step*_inst to H25 with M = fix R'.
Subgoal 11:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
H43 : {val M'1}
H44 : step* (M2' (fix R'))
        (let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)))
============================
 step* M' (K' V')

Subgoal 12 is:
 {add (s J123) N (s N3)}

Subgoal 13 is:
 equiv_cps T N V V'

sim_cps_app < backchain step*_trans with M2 = R' (fix R') (pair (fix f\K') M'1).
Subgoal 11:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
H43 : {val M'1}
H44 : step* (M2' (fix R'))
        (let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)))
============================
 step* M' (R' (fix R') (pair (fix f\K') M'1))

Subgoal 12 is:
 {add (s J123) N (s N3)}

Subgoal 13 is:
 equiv_cps T N V V'

sim_cps_app < backchain step*_trans with M2 = let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)).
Subgoal 11.1:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
H43 : {val M'1}
H44 : step* (M2' (fix R'))
        (let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)))
============================
 step* M' (let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)))

Subgoal 11.2 is:
 step* (let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)))
   (R' (fix R') (pair (fix f\K') M'1))

Subgoal 12 is:
 {add (s J123) N (s N3)}

Subgoal 13 is:
 equiv_cps T N V V'

sim_cps_app < backchain step*_trans with M2 = M2' (fix R').
Subgoal 11.2:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
H43 : {val M'1}
H44 : step* (M2' (fix R'))
        (let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)))
============================
 step* (let (fix f\K') (k\let (pair k M'1) (p\app (fix R') p)))
   (R' (fix R') (pair (fix f\K') M'1))

Subgoal 12 is:
 {add (s J123) N (s N3)}

Subgoal 13 is:
 equiv_cps T N V V'

sim_cps_app < search 7.
Subgoal 12:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
============================
 {add (s J123) N (s N3)}

Subgoal 13 is:
 equiv_cps T N V V'

sim_cps_app < search.
Subgoal 13:

Variables: T1 T K' M1 M' M2 M2' V J1 J2 J3 J23 J123 V2 R N N3 N1 N2 K'1 J12
           R' M'1 V'
H3 : sim_cps (arr T1 T) (s N3) M1 M2' M'
H4 : sim_cps T1 (s N3) M2
       (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M2' n1)
H6 : {nstep (s J123) (app M1 M2) V}
H7 : {val V}
H9 : {add J2 J3 J23}
H10 : {add J1 J23 J123}
H11 : {nstep J1 M1 (fix R)}
H12 : {nstep J2 M2 V2}
H13 : {val V2}
H14 : {nstep J3 (R (fix R) V2) V}
H16 : {add J123 N N3}
H18 : {add J1 N1 N3}
H20 : {add J2 N2 N3}
H22 : step* M' (M2' (fix R'))
H23 : equiv_cps (arr T1 T) (s N1) (fix R) (fix R')
H25 : step* (M2' n1) (let (fix f\K') (k\let (pair k M'1) (p\app n1 p)))
H26 : equiv_cps T1 (s N2) V2 M'1
H28 : {add J1 J2 J12}
H29 : {add J3 N K'1}
H30 : {add J12 K'1 N3}
H31 : lt K'1 (s N1)
H32 : lt K'1 (s N2)
H33 : {is_nat N3}
H34 : {is_sty T1}
H35 : {is_sty T}
H36 : {is_nat N1}
H37 : {is_nat N2}
H38 : {tm M'1}
H39 : sim_cps T K'1 (R (fix R) V2) K' (R' (fix R') (pair (fix f\K') M'1))
H41 : step* (R' (fix R') (pair (fix f\K') M'1)) (K' V')
H42 : equiv_cps T N V V'
============================
 equiv_cps T N V V'

sim_cps_app < search.
Proof completed.
Abella < Theorem cps_sem_pres : 
forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
  sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
  subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' -> {TL |- of M T} ->
  {CL |- cps M K M'} -> app_subst ML M P -> app_subst ML' M' P' ->
  (nabla x, app_subst ML' (K x) (K' x)) -> sim_cps T I P K' P'.


============================
 forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
   sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
   subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' -> {TL |- of M T} ->
   {CL |- cps M K M'} -> app_subst ML M P -> app_subst ML' M' P' ->
   (nabla x, app_subst ML' (K x) (K' x)) -> sim_cps T I P K' P'

cps_sem_pres < induction on 11.

IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
============================
 forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
   sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
   subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' -> {TL |- of M T} ->
   {CL |- cps M K M'}@ -> app_subst ML M P -> app_subst ML' M' P' ->
   (nabla x, app_subst ML' (K x) (K' x)) -> sim_cps T I P K' P'

cps_sem_pres < intros.

Variables: ML ML' TL CL VL M T K K' M' P P' I
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H11 : {CL |- cps M K M'}@
H12 : app_subst ML M P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
============================
 sim_cps T I P K' P'

cps_sem_pres < case H11.
Subgoal 1:

Variables: ML ML' TL CL VL T K K' P P' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) T}
H12 : app_subst ML (nat N) P
H13 : app_subst ML' (K (nat N)) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
============================
 sim_cps T I P K' P'

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sof_nat_inv to _ H10.
Subgoal 1:

Variables: ML ML' TL CL VL K K' P P' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) P
H13 : app_subst ML' (K (nat N)) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
============================
 sim_cps tnat I P K' P'

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply subst_closed_tm_eq to _ H12.
Subgoal 1:

Variables: ML ML' TL CL VL K K' P' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) (nat N)
H13 : app_subst ML' (K (nat N)) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
============================
 sim_cps tnat I (nat N) K' P'

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 1:

Variables: ML ML' TL CL VL K K' P' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) (nat N)
H13 : app_subst ML' (K (nat N)) P'
H15 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps tnat I (nat N) K' P'

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply subst_inst to _ H15 with V = nat N.
Subgoal 1:

Variables: ML ML' TL CL VL K K' P' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) (nat N)
H13 : app_subst ML' (K (nat N)) P'
H15 : app_subst ML' (K n1) (K' n1)
H16 : app_subst ML' (K (nat N)) (K' (nat N))
============================
 sim_cps tnat I (nat N) K' P'

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_det to H13 H16.
Subgoal 1:

Variables: ML ML' TL CL VL K K' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) (nat N)
H13 : app_subst ML' (K (nat N)) (K' (nat N))
H15 : app_subst ML' (K n1) (K' n1)
H16 : app_subst ML' (K (nat N)) (K' (nat N))
============================
 sim_cps tnat I (nat N) K' (K' (nat N))

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 1:

Variables: ML ML' TL CL VL K K' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) (nat N)
H13 : app_subst ML' (K (nat N)) (K' (nat N))
H15 : app_subst ML' (K n1) (K' n1)
H16 : app_subst ML' (K (nat N)) (K' (nat N))
============================
 forall J V, le J I -> {nstep J (nat N) V} -> {val V} ->
   (exists N1 V', step* (K' (nat N)) (K' V') /\ {add J N1 I} /\
        equiv_cps tnat N1 V V')

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 1:

Variables: ML ML' TL CL VL K K' I N J V
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) (nat N)
H13 : app_subst ML' (K (nat N)) (K' (nat N))
H15 : app_subst ML' (K n1) (K' n1)
H16 : app_subst ML' (K (nat N)) (K' (nat N))
H17 : le J I
H18 : {nstep J (nat N) V}
H19 : {val V}
============================
 exists N1 V', step* (K' (nat N)) (K' V') /\ {add J N1 I} /\
   equiv_cps tnat N1 V V'

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply nstep_val_inv to _ H18.
Subgoal 1:

Variables: ML ML' TL CL VL K K' I N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_subst ML (nat N) (nat N)
H13 : app_subst ML' (K (nat N)) (K' (nat N))
H15 : app_subst ML' (K n1) (K' n1)
H16 : app_subst ML' (K (nat N)) (K' (nat N))
H17 : le z I
H18 : {nstep z (nat N) (nat N)}
H19 : {val (nat N)}
============================
 exists N1 V', step* (K' (nat N)) (K' V') /\ {add z N1 I} /\
   equiv_cps tnat N1 (nat N) V'

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 2:

Variables: ML ML' TL CL VL T K K' M' P P' I M1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_subst ML (pred M1) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
============================
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M2, P = pred M2 /\ app_subst ML M1 M2.
Subgoal 2.1:

Variables: ML ML' TL CL VL T K K' M' P P' I M1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_subst ML (pred M1) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
============================
 exists M2, P = pred M2 /\ app_subst ML M1 M2

Subgoal 2 is:
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_pred_comm.
Subgoal 2:

Variables: ML ML' TL CL VL T K K' M' P P' I M1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_subst ML (pred M1) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H16 : exists M2, P = pred M2 /\ app_subst ML M1 M2
============================
 sim_cps T I P K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H16.
Subgoal 2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
============================
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 2.2:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
 sim_cps tnat I (pred M2) K' P'

Subgoal 2.3 is:
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps tnat I M2 (x\let (pred x) (v\K' v)) P'.
Subgoal 2.2.1:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
 sim_cps tnat I M2 (x\let (pred x) (v\K' v)) P'

Subgoal 2.2 is:
 sim_cps tnat I (pred M2) K' P'

Subgoal 2.3 is:
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = x\let (pred x) (v\K v), ML = ML, ML' = ML'.
Subgoal 2.2.1:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
 nabla x, app_subst ML' (let (pred x) (v\K v)) (let (pred x) (v\K' v))

Subgoal 2.2 is:
 sim_cps tnat I (pred M2) K' P'

Subgoal 2.3 is:
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 2.2.1:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
 app_subst ML' (let (pred n1) (v\K v)) (let (pred n1) (v\K' v))

Subgoal 2.2 is:
 sim_cps tnat I (pred M2) K' P'

Subgoal 2.3 is:
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n2.
Subgoal 2.2.1:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
 app_subst ML' (pred n1) (pred n1)

Subgoal 2.2 is:
 sim_cps tnat I (pred M2) K' P'

Subgoal 2.3 is:
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_pred_compose.
Subgoal 2.2.1:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
 app_subst ML' n1 n1

Subgoal 2.2 is:
 sim_cps tnat I (pred M2) K' P'

Subgoal 2.3 is:
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 2.2:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
H20 : sim_cps tnat I M2 (x\let (pred x) (v\K' v)) P'
============================
 sim_cps tnat I (pred M2) K' P'

Subgoal 2.3 is:
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_pred.
Subgoal 2.3:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M2 F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL, [F] |- of (pred M1) T}
H20 : member F TL
============================
 sim_cps T I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H19.
Subgoal 2.3:

Variables: ML ML' TL CL VL K K' M' P' I M1 M2 F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pred M1) (pred M2)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_subst ML M1 M2
H18 : app_subst ML' (K n1) (K' n1)
H19 : {TL, [F] |- of (pred M1) T1}
H20 : member F TL
H21 : name (pred M1)
============================
 sim_cps T1 I (pred M2) K' P'

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H21.
Subgoal 3:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_subst ML (plus M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
============================
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M3 M4, P = plus M3 M4 /\ app_subst ML M1 M3 /\ app_subst ML M2 M4.
Subgoal 3.1:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_subst ML (plus M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
============================
 exists M3 M4, P = plus M3 M4 /\ app_subst ML M1 M3 /\ app_subst ML M2 M4

Subgoal 3 is:
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_plus_comm.
Subgoal 3:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_subst ML (plus M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H17 : exists M3 M4, P = plus M3 M4 /\ app_subst ML M1 M3 /\
        app_subst ML M2 M4
============================
 sim_cps T I P K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H17.
Subgoal 3:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
============================
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M4', app_subst ML' (M2' n1) M4'.
Subgoal 3.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
============================
 exists M4', app_subst ML' (M2' n1) M4'

Subgoal 3 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_exists.
Subgoal 3:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : exists M4', app_subst ML' (M2' n1) M4'
============================
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H20.
Subgoal 3:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
============================
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 3.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
============================
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 3.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1).
Subgoal 3.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)

Subgoal 3.3 is:
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M2, M' = M2' n1, K = x2\let (plus n1 x2) (v\K v), ML = ML, ML' = ML'.
Subgoal 3.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
============================
 nabla x, app_subst ML' (let (plus n1 x) (v\K v)) (let (plus n1 x) (v\K' v))

Subgoal 3.3 is:
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 3.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (let (plus n1 n2) (v\K v)) (let (plus n1 n2) (v\K' v))

Subgoal 3.3 is:
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n3.
Subgoal 3.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (plus n1 n2) (plus n1 n2)

Subgoal 3.3 is:
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_plus_compose.
Subgoal 3.3.1.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' n1 n1

Subgoal 3.3.1.2 is:
 app_subst ML' n2 n2

Subgoal 3.3 is:
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 3.3.1.2:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' n2 n2

Subgoal 3.3 is:
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 3.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
H25 : sim_cps tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)
============================
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps tnat I M3 M4' P'.
Subgoal 3.3.2:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
H25 : sim_cps tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)
============================
 sim_cps tnat I M3 M4' P'

Subgoal 3.3 is:
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = M2', ML = ML, ML' = ML'.
Subgoal 3.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tnat}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_subst ML' (K n1) (K' n1)
H25 : sim_cps tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)
H26 : sim_cps tnat I M3 M4' P'
============================
 sim_cps tnat I (plus M3 M4) K' P'

Subgoal 3.4 is:
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_plus with x1 = n1.
Subgoal 3.4:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL, [F] |- of (plus M1 M2) T}
H23 : member F TL
============================
 sim_cps T I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H22.
Subgoal 3.4:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (plus M1 M2) (plus M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {TL, [F] |- of (plus M1 M2) T1}
H23 : member F TL
H24 : name (plus M1 M2)
============================
 sim_cps T1 I (plus M3 M4) K' P'

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H24.
Subgoal 4:

Variables: ML ML' TL CL VL T K K' M' P P' I M3' M2' M1 M3 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_subst ML (ifz M1 M2 M3) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
============================
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M4 M5 M6, P = ifz M4 M5 M6 /\ app_subst ML M1 M4 /\
  app_subst ML M2 M5 /\ app_subst ML M3 M6.
Subgoal 4.1:

Variables: ML ML' TL CL VL T K K' M' P P' I M3' M2' M1 M3 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_subst ML (ifz M1 M2 M3) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
============================
 exists M4 M5 M6, P = ifz M4 M5 M6 /\ app_subst ML M1 M4 /\
   app_subst ML M2 M5 /\ app_subst ML M3 M6

Subgoal 4 is:
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_ifz_comm.
Subgoal 4:

Variables: ML ML' TL CL VL T K K' M' P P' I M3' M2' M1 M3 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_subst ML (ifz M1 M2 M3) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H18 : exists M4 M5 M6, P = ifz M4 M5 M6 /\ app_subst ML M1 M4 /\
        app_subst ML M2 M5 /\ app_subst ML M3 M6
============================
 sim_cps T I P K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H18.
Subgoal 4:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M5', app_subst ML' (M2' n1) M5'.
Subgoal 4.2.1:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
============================
 exists M5', app_subst ML' (M2' n1) M5'

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_exists.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H26 : exists M5', app_subst ML' (M2' n1) M5'
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H26.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M6', app_subst ML' (M3' n1) M6'.
Subgoal 4.2.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
============================
 exists M6', app_subst ML' (M3' n1) M6'

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_exists.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H28 : exists M6', app_subst ML' (M3' n1) M6'
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H28.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert app_subst ML' (fix f\K) (fix f\K').
Subgoal 4.2.3:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
============================
 app_subst ML' (fix f\K) (fix f\K')

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_fix_compose.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_inst to H30 H27.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_inst to H30 H29.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'.
Subgoal 4.2.4:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
============================
 sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k)), ML = ML, ML' = ML'.
Subgoal 4.2.4:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
============================
 nabla x, app_subst ML' (let (fix f\K) (k\ifz x (M2' k) (M3' k)))
            (let (fix f\K') (k\ifz x (M5' k) (M6' k)))

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 4.2.4:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
============================
 app_subst ML' (let (fix f\K) (k\ifz n1 (M2' k) (M3' k)))
   (let (fix f\K') (k\ifz n1 (M5' k) (M6' k)))

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose.
Subgoal 4.2.4:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
============================
 app_subst ML' (ifz n1 (M2' n2) (M3' n2)) (ifz n1 (M5' n2) (M6' n2))

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_ifz_compose.
Subgoal 4.2.4:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
============================
 app_subst ML' n1 n1

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K')).
Subgoal 4.2.5:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
============================
 sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres <  inst H15 with n1 = fix f\K.
Subgoal 4.2.5:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : {CL |- cps M2 (x\app (fix f\K) x) (M2' (fix f\K))}*
============================
 sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M2, M' = M2' (fix f\K), K = x\app (fix f\K) x, ML = ML, ML' = ML'.
Subgoal 4.2.5:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : {CL |- cps M2 (x\app (fix f\K) x) (M2' (fix f\K))}*
============================
 nabla x, app_subst ML' (app (fix f\K) x) (app (fix f\K') x)

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 4.2.5:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : {CL |- cps M2 (x\app (fix f\K) x) (M2' (fix f\K))}*
============================
 app_subst ML' (app (fix f\K) n1) (app (fix f\K') n1)

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_app_compose.
Subgoal 4.2.5:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : {CL |- cps M2 (x\app (fix f\K) x) (M2' (fix f\K))}*
============================
 app_subst ML' n1 n1

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T I M6 (x\app (fix f\K') x) (M6' (fix f\K')).
Subgoal 4.2.6:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))
============================
 sim_cps T I M6 (x\app (fix f\K') x) (M6' (fix f\K'))

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres <  inst H16 with n1 = fix f\K.
Subgoal 4.2.6:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))
H35 : {CL |- cps M3 (x\app (fix f\K) x) (M3' (fix f\K))}*
============================
 sim_cps T I M6 (x\app (fix f\K') x) (M6' (fix f\K'))

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M3, M' = M3' (fix f\K), K = x\app (fix f\K) x, ML = ML, ML' = ML'.
Subgoal 4.2.6:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))
H35 : {CL |- cps M3 (x\app (fix f\K) x) (M3' (fix f\K))}*
============================
 nabla x, app_subst ML' (app (fix f\K) x) (app (fix f\K') x)

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 4.2.6:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))
H35 : {CL |- cps M3 (x\app (fix f\K) x) (M3' (fix f\K))}*
============================
 app_subst ML' (app (fix f\K) n1) (app (fix f\K') n1)

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_app_compose.
Subgoal 4.2.6:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))
H35 : {CL |- cps M3 (x\app (fix f\K) x) (M3' (fix f\K))}*
============================
 app_subst ML' n1 n1

Subgoal 4.2 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 4.2:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 M5' M6'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_subst ML' (K n1) (K' n1)
H27 : app_subst ML' (M2' n1) (M5' n1)
H29 : app_subst ML' (M3' n1) (M6' n1)
H30 : app_subst ML' (fix f\K) (fix f\K')
H31 : app_subst ML' (M2' (fix f\K)) (M5' (fix f\K'))
H32 : app_subst ML' (M3' (fix f\K)) (M6' (fix f\K'))
H33 : sim_cps tnat I M4 (x1\let (fix f\K') (k\ifz x1 (M5' k) (M6' k))) P'
H34 : sim_cps T I M5 (x\app (fix f\K') x) (M5' (fix f\K'))
H35 : sim_cps T I M6 (x\app (fix f\K') x) (M6' (fix f\K'))
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 4.3 is:
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_ifz with M1 = M4, M2 = M5, M3 = M6, M2' = M5', M3' = M6', M' = P'.
Subgoal 4.3:

Variables: ML ML' TL CL VL T K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL, [F] |- of (ifz M1 M2 M3) T}
H23 : member F TL
============================
 sim_cps T I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H22.
Subgoal 4.3:

Variables: ML ML' TL CL VL K K' M' P' I M3' M2' M1 M3 M2 M4 M5 M6 F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x\app n1 x) (M2' n1)}*
H16 : {CL |- cps M3 (x\app n1 x) (M3' n1)}*
H17 : {CL |- cps M1 (x1\let (fix f\K) (k\ifz x1 (M2' k) (M3' k))) M'}*
H19 : app_subst ML M1 M4
H20 : app_subst ML M2 M5
H21 : app_subst ML M3 M6
H22 : {TL, [F] |- of (ifz M1 M2 M3) T1}
H23 : member F TL
H24 : name (ifz M1 M2 M3)
============================
 sim_cps T1 I (ifz M4 M5 M6) K' P'

Subgoal 5 is:
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H24.
Subgoal 5:

Variables: ML ML' TL CL VL T K K' P P' I
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_subst ML unit P
H13 : app_subst ML' (K unit) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
============================
 sim_cps T I P K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply subst_closed_tm_eq to _ H12.
Subgoal 5:

Variables: ML ML' TL CL VL T K K' P' I
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_subst ML unit unit
H13 : app_subst ML' (K unit) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
============================
 sim_cps T I unit K' P'

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_meta_app_comm to H13 with R = K.
Subgoal 5:

Variables: ML ML' TL CL VL T K K' I R' M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_subst ML unit unit
H13 : app_subst ML' (K unit) (R' M'1)
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : app_subst ML' unit M'1
H16 : app_subst ML' (K n1) (R' n1)
============================
 sim_cps T I unit K' (R' M'1)

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply subst_closed_tm_eq to _ H15.
Subgoal 5:

Variables: ML ML' TL CL VL T K K' I R'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_subst ML unit unit
H13 : app_subst ML' (K unit) (R' unit)
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : app_subst ML' unit unit
H16 : app_subst ML' (K n1) (R' n1)
============================
 sim_cps T I unit K' (R' unit)

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 5:

Variables: ML ML' TL CL VL T K K' I R'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_subst ML unit unit
H13 : app_subst ML' (K unit) (R' unit)
H15 : app_subst ML' unit unit
H16 : app_subst ML' (K n1) (R' n1)
H17 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I unit K' (R' unit)

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_det to H16 H17.
Subgoal 5:

Variables: ML ML' TL CL VL T K K' I
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_subst ML unit unit
H13 : app_subst ML' (K unit) (K' unit)
H15 : app_subst ML' unit unit
H16 : app_subst ML' (K n1) (K' n1)
H17 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I unit K' (K' unit)

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sof_unit_inv to _ H10.
Subgoal 5:

Variables: ML ML' TL CL VL K K' I
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty tunit}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of unit tunit}
H12 : app_subst ML unit unit
H13 : app_subst ML' (K unit) (K' unit)
H15 : app_subst ML' unit unit
H16 : app_subst ML' (K n1) (K' n1)
H17 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps tunit I unit K' (K' unit)

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_unit.
Subgoal 6:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_subst ML (pair M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
============================
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M3 M4, P = pair M3 M4 /\ app_subst ML M1 M3 /\ app_subst ML M2 M4.
Subgoal 6.1:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_subst ML (pair M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
============================
 exists M3 M4, P = pair M3 M4 /\ app_subst ML M1 M3 /\ app_subst ML M2 M4

Subgoal 6 is:
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_pair_comm.
Subgoal 6:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_subst ML (pair M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H17 : exists M3 M4, P = pair M3 M4 /\ app_subst ML M1 M3 /\
        app_subst ML M2 M4
============================
 sim_cps T I P K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H17.
Subgoal 6:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
============================
 sim_cps T I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M4', app_subst ML' (M2' n1) M4'.
Subgoal 6.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
============================
 exists M4', app_subst ML' (M2' n1) M4'

Subgoal 6 is:
 sim_cps T I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_exists.
Subgoal 6:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : exists M4', app_subst ML' (M2' n1) M4'
============================
 sim_cps T I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H20.
Subgoal 6:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
============================
 sim_cps T I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sof_pair_inv to _ H10.
Subgoal 6:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) (prod T1 T2)}
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H2.
Subgoal 6:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (pair M1 M2) (prod T1 T2)}
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 6.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 6.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1).
Subgoal 6.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)

Subgoal 6.3 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M2, M' = M2' n1, K = x2\let (pair n1 x2) (v\K v), ML = ML, ML' = ML'.
Subgoal 6.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
============================
 nabla x, app_subst ML' (let (pair n1 x) (v\K v)) (let (pair n1 x) (v\K' v))

Subgoal 6.3 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 6.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (let (pair n1 n2) (v\K v)) (let (pair n1 n2) (v\K' v))

Subgoal 6.3 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n3.
Subgoal 6.3.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (pair n1 n2) (pair n1 n2)

Subgoal 6.3 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_pair_compose.
Subgoal 6.3.1.1:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' n1 n1

Subgoal 6.3.1.2 is:
 app_subst ML' n2 n2

Subgoal 6.3 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 6.3.1.2:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' n2 n2

Subgoal 6.3 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 6.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
H27 : sim_cps T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T1 I M3 M4' P'.
Subgoal 6.3.2:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
H27 : sim_cps T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)
============================
 sim_cps T1 I M3 M4' P'

Subgoal 6.3 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = M2', ML = ML, ML' = ML'.
Subgoal 6.3:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
H26 : app_subst ML' (K n1) (K' n1)
H27 : sim_cps T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)
H28 : sim_cps T1 I M3 M4' P'
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 6.4 is:
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_pair with x1 = n1.
Subgoal 6.4:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2 F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL, [F] |- of (pair M1 M2) (prod T1 T2)}
H25 : member F TL
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H24.
Subgoal 6.4:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' T1 T2 F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (pair M1 M2) (pair M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H21 : app_subst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL, [F] |- of (pair M1 M2) (prod T1 T2)}
H25 : member F TL
H26 : name (pair M1 M2)
============================
 sim_cps (prod T1 T2) I (pair M3 M4) K' P'

Subgoal 7 is:
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H26.
Subgoal 7:

Variables: ML ML' TL CL VL T K K' M' P P' I M1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fst M1) T}
H12 : app_subst ML (fst M1) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
============================
 sim_cps T I P K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_fst_comm to H12.
Subgoal 7:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fst M1) T}
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
============================
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 7.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
============================
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 7.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps (prod T T2) I M1' (x\let (fst x) (v\K' v)) P'.
Subgoal 7.1.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps (prod T T2) I M1' (x\let (fst x) (v\K' v)) P'

Subgoal 7.1 is:
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = x\let (fst x) (v\K v), ML = ML, ML' = ML'.
Subgoal 7.1.1.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 {is_sty (prod T T2)}

Subgoal 7.1.1.2 is:
 nabla x, app_subst ML' (let (fst x) (v\K v)) (let (fst x) (v\K' v))

Subgoal 7.1 is:
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sof_is_sty.
Subgoal 7.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 nabla x, app_subst ML' (let (fst x) (v\K v)) (let (fst x) (v\K' v))

Subgoal 7.1 is:
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 7.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (let (fst n1) (v\K v)) (let (fst n1) (v\K' v))

Subgoal 7.1 is:
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n2.
Subgoal 7.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (fst n1) (fst n1)

Subgoal 7.1 is:
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_fst_compose.
Subgoal 7.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' n1 n1

Subgoal 7.1 is:
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 7.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
H19 : sim_cps (prod T T2) I M1' (x\let (fst x) (v\K' v)) P'
============================
 sim_cps T I (fst M1') K' P'

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_fst with T1 = T, T2 = T2.
Subgoal 7.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_subst ML' (K n1) (K' n1)
H19 : sim_cps (prod T T2) I M1' (x\let (fst x) (v\K' v)) P'
============================
 {is_sty (prod T T2)}

Subgoal 7.2 is:
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sof_is_sty.
Subgoal 7.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL, [F] |- of (fst M1) T}
H18 : member F TL
============================
 sim_cps T I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H17.
Subgoal 7.2:

Variables: ML ML' TL CL VL K K' M' P' I M1 M1' F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fst M1) (fst M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL, [F] |- of (fst M1) T1}
H18 : member F TL
H19 : name (fst M1)
============================
 sim_cps T1 I (fst M1') K' P'

Subgoal 8 is:
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H19.
Subgoal 8:

Variables: ML ML' TL CL VL T K K' M' P P' I M1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (snd M1) T}
H12 : app_subst ML (snd M1) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
============================
 sim_cps T I P K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_snd_comm to H12.
Subgoal 8:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (snd M1) T}
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
============================
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 8.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
============================
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 8.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps (prod T1 T) I M1' (x\let (snd x) (v\K' v)) P'.
Subgoal 8.1.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps (prod T1 T) I M1' (x\let (snd x) (v\K' v)) P'

Subgoal 8.1 is:
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = x\let (snd x) (v\K v), ML = ML, ML' = ML'.
Subgoal 8.1.1.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 {is_sty (prod T1 T)}

Subgoal 8.1.1.2 is:
 nabla x, app_subst ML' (let (snd x) (v\K v)) (let (snd x) (v\K' v))

Subgoal 8.1 is:
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sof_is_sty.
Subgoal 8.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 nabla x, app_subst ML' (let (snd x) (v\K v)) (let (snd x) (v\K' v))

Subgoal 8.1 is:
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 8.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (let (snd n1) (v\K v)) (let (snd n1) (v\K' v))

Subgoal 8.1 is:
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n2.
Subgoal 8.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' (snd n1) (snd n1)

Subgoal 8.1 is:
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_snd_compose.
Subgoal 8.1.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
============================
 app_subst ML' n1 n1

Subgoal 8.1 is:
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 8.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
H19 : sim_cps (prod T1 T) I M1' (x\let (snd x) (v\K' v)) P'
============================
 sim_cps T I (snd M1') K' P'

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_snd with T1 = T1, T2 = T.
Subgoal 8.1:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_subst ML' (K n1) (K' n1)
H19 : sim_cps (prod T1 T) I M1' (x\let (snd x) (v\K' v)) P'
============================
 {is_sty (prod T1 T)}

Subgoal 8.2 is:
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sof_is_sty.
Subgoal 8.2:

Variables: ML ML' TL CL VL T K K' M' P' I M1 M1' F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL, [F] |- of (snd M1) T}
H18 : member F TL
============================
 sim_cps T I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H17.
Subgoal 8.2:

Variables: ML ML' TL CL VL K K' M' P' I M1 M1' F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (snd M1) (snd M1')
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_subst ML M1 M1'
H17 : {TL, [F] |- of (snd M1) T1}
H18 : member F TL
H19 : name (snd M1)
============================
 sim_cps T1 I (snd M1') K' P'

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H19.
Subgoal 9:

Variables: ML ML' TL CL VL T K K' M' P P' I R' M1 R
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_subst ML (let M1 R) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
============================
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M2 R1, P = let M2 R1 /\ app_subst ML M1 M2 /\
  (nabla x, app_subst ML (R x) (R1 x)).
Subgoal 9.1:

Variables: ML ML' TL CL VL T K K' M' P P' I R' M1 R
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_subst ML (let M1 R) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
============================
 exists M2 R1, P = let M2 R1 /\ app_subst ML M1 M2 /\
   (nabla x, app_subst ML (R x) (R1 x))

Subgoal 9 is:
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_comm.
Subgoal 9:

Variables: ML ML' TL CL VL T K K' M' P P' I R' M1 R
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_subst ML (let M1 R) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H17 : exists M2 R1, P = let M2 R1 /\ app_subst ML M1 M2 /\
        (nabla x, app_subst ML (R x) (R1 x))
============================
 sim_cps T I P K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H17.
Subgoal 9:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
============================
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
============================
 sim_cps T I (let M2 R1) K' P'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists R1', app_subst ML' (R' n1) R1'.
Subgoal 9.2.1:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
============================
 exists R1', app_subst ML' (R' n1) R1'

Subgoal 9.2 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_exists.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H22 : exists R1', app_subst ML' (R' n1) R1'
============================
 sim_cps T I (let M2 R1) K' P'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H22.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
============================
 sim_cps T I (let M2 R1) K' P'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sof_is_sty to _ H20.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
============================
 sim_cps T I (let M2 R1) K' P'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T1 I M2 R1' P'.
Subgoal 9.2.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
============================
 sim_cps T1 I M2 R1' P'

Subgoal 9.2 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = R', ML = ML, ML' = ML'.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 I M2 R1' P'
============================
 sim_cps T I (let M2 R1) K' P'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 I M2 R1' P'
============================
 forall J V, le J I -> {nstep J (let M2 R1) V} -> {val V} ->
   (exists N V', step* P' (K' V') /\ {add J N I} /\ equiv_cps T N V V')

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1' J V
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 I M2 R1' P'
H26 : le J I
H27 : {nstep J (let M2 R1) V}
H28 : {val V}
============================
 exists N V', step* P' (K' V') /\ {add J N I} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply nstep_let_inv to _ H27.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 I M2 R1' P'
H26 : le (s K3) I
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N I} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H26.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1
           N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 I M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H33 : {add (s K3) N I}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N I} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H33.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat (s N3)}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply add_assoc to H29 H34.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat (s N3)}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sim_cps_nstep to H25 H30 H31 _ with N = s N23.
Subgoal 9.2.3:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat (s N3)}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
============================
 {add K1 (s N23) (s N3)}

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain add_s.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat (s N3)}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H1.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert {is_nat N23}.
Subgoal 9.2.4:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
============================
 {is_nat N23}

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain add_arg2_isnat.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_tm1 to _ _ H38.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_val1 to _ _ H38.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_tm2 to _ _ H38.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_val2 to _ _ H38.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T N23 (R1 V1) K' (R1' V').
Subgoal 9.2.5:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 sim_cps T N23 (R1 V1) K' (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = R n1, M' = R' n1, K = K, ML = map n1 V1 :: ML, ML' = map n1 V' :: ML', TL = of n1 T1 :: TL, CL = pi k\cps n1 k (k n1) :: CL, VL = n1 :: VL.
Subgoal 9.2.5.1:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 subst_equiv_cps (of n1 T1 :: TL) N23 (map n1 V1 :: ML) (map n1 V' :: ML')

Subgoal 9.2.5.2 is:
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 9.2.5.1.1:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 equiv_cps T1 N23 V1 V'

Subgoal 9.2.5.1.2 is:
 subst_equiv_cps TL N23 ML ML'

Subgoal 9.2.5.2 is:
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain equiv_cps_closed with K = s N23.
Subgoal 9.2.5.1.1:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 le N23 (s N23)

Subgoal 9.2.5.1.2 is:
 subst_equiv_cps TL N23 ML ML'

Subgoal 9.2.5.2 is:
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain le_succ.
Subgoal 9.2.5.1.1:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 le N23 N23

Subgoal 9.2.5.1.2 is:
 subst_equiv_cps TL N23 ML ML'

Subgoal 9.2.5.2 is:
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain le_refl.
Subgoal 9.2.5.1.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 subst_equiv_cps TL N23 ML ML'

Subgoal 9.2.5.2 is:
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_equiv_cps_closed with K = s N3.
Subgoal 9.2.5.1.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 le N23 (s N3)

Subgoal 9.2.5.2 is:
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply add_comm to _ H36.
Subgoal 9.2.5.1.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : {add N23 K1 N3}
============================
 le N23 (s N3)

Subgoal 9.2.5.2 is:
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain le_succ.
Subgoal 9.2.5.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 app_subst (map n1 V1 :: ML) (R n1) (R1 V1)

Subgoal 9.2.5.3 is:
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain explct_meta_subst_comm with n = n1, M = R, E = R1.
Subgoal 9.2.5.3:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
 app_subst (map n1 V' :: ML') (R' n1) (R1' V')

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain explct_meta_subst_comm with n = n1, M = R', E = R1'.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim_cps T N23 (R1 V1) K' (R1' V')
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists V'', step* (R1' V') (K' V'') /\ equiv_cps T N V V''.
Subgoal 9.2.6:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim_cps T N23 (R1 V1) K' (R1' V')
============================
 exists V'', step* (R1' V') (K' V'') /\ equiv_cps T N V V''

Subgoal 9.2 is:
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_nstep.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim_cps T N23 (R1 V1) K' (R1' V')
H47 : exists V'', step* (R1' V') (K' V'') /\ equiv_cps T N V V''
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H47.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V' V''
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim_cps T N23 (R1 V1) K' (R1' V')
H48 : step* (R1' V') (K' V'')
H49 : equiv_cps T N V V''
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply step*_trans to H37 H48.
Subgoal 9.2:

Variables: ML ML' TL CL VL T K K' M' P' R' M1 R M2 R1 T1 R1' V K1 K2 K3 V1 N
           N3 N23 V' V''
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL (s N3) ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_subst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim_cps T1 (s N3) M2 R1' P'
H27 : {nstep (s K3) (let M2 R1) V}
H28 : {val V}
H29 : {add K1 K2 K3}
H30 : {nstep K1 M2 V1}
H31 : {val V1}
H32 : {nstep K2 (R1 V1) V}
H34 : {add K3 N N3}
H35 : {add K2 N N23}
H36 : {add K1 N23 N3}
H37 : step* P' (R1' V')
H38 : equiv_cps T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_subst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim_cps T N23 (R1 V1) K' (R1' V')
H48 : step* (R1' V') (K' V'')
H49 : equiv_cps T N V V''
H50 : step* P' (K' V'')
============================
 exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv_cps T N V V'

Subgoal 9.3 is:
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 9.3:

Variables: ML ML' TL CL VL T K K' M' P' I R' M1 R M2 R1 F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL, [F] |- of (let M1 R) T}
H21 : member F TL
============================
 sim_cps T I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H20.
Subgoal 9.3:

Variables: ML ML' TL CL VL K K' M' P' I R' M1 R M2 R1 F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (let M1 R) (let M2 R1)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n1 k (k n1) |- cps (R n1) K (R' n1)}*
H16 : {CL |- cps M1 R' M'}*
H18 : app_subst ML M1 M2
H19 : app_subst ML (R n1) (R1 n1)
H20 : {TL, [F] |- of (let M1 R) T1}
H21 : member F TL
H22 : name (let M1 R)
============================
 sim_cps T1 I (let M2 R1) K' P'

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H22.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' P P' I R' R
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) P
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
============================
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists R1, P = fix R1 /\ (nabla f x, app_subst ML (R f x) (R1 f x)).
Subgoal 10.1:

Variables: ML ML' TL CL VL T K K' P P' I R' R
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) P
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
============================
 exists R1, P = fix R1 /\ (nabla f x, app_subst ML (R f x) (R1 f x))

Subgoal 10 is:
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_fix_comm.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' P P' I R' R
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) P
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H16 : exists R1, P = fix R1 /\ (nabla f x, app_subst ML (R f x) (R1 f x))
============================
 sim_cps T I P K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H16.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' P' I R' R R1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
============================
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' P' I R' R R1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists R1', nabla f k x, app_subst ML' (R' f k x) (R1' f k x).
Subgoal 10.2:

Variables: ML ML' TL CL VL T K K' P' I R' R R1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
============================
 exists R1', nabla f k x, app_subst ML' (R' f k x) (R1' f k x)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_exists to H8 with M = R' n1 n2 n3.
Subgoal 10.2:

Variables: ML ML' TL CL VL T K K' P' I R' R R1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H19 : app_subst ML' (R' n1 n2 n3) (M'1 n3 n2 n1)
============================
 exists R1', nabla f k x, app_subst ML' (R' f k x) (R1' f k x)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' P' I R' R R1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H19 : exists R1', nabla f k x, app_subst ML' (R' f k x) (R1' f k x)
============================
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H19.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' P' I R' R R1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
============================
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert P' = let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K'.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K K' P' I R' R R1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
============================
 P' = let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K'

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_let_comm to H13.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K K' I R' R R1 R1' M1 R2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let M1 R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) M1
H22 : app_subst ML' (K n1) (R2 n1)
============================
 let M1 R2 = let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K'

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_det to H18 H22.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' M1 R2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let M1 R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) M1
H22 : app_subst ML' (K n1) (R2 n1)
============================
 let M1 R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_fix_comm to H21.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 R'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix R'1) R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix R'1)
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x))) (R'1 n1 n2)
============================
 let (fix R'1) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_let_comm to H23.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 M2 R3
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (M2 z2 z1) (R3 z2 z1))) R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (M2 z2 z1) (R3 z2 z1)))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (M2 n2 n1) (R3 n2 n1))
H24 : app_subst ML' (fst n2) (M2 n2 n1)
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x)) (R3 n2 n1 n3)
============================
 let (fix (z1\z2\let (M2 z2 z1) (R3 z2 z1))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_fst_comm to H24.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 R3 M1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (fst (M1' z1 z2)) (R3 z2 z1))) R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (fst (M1' z1 z2)) (R3 z2 z1)))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst (M1' n1 n2)) (R3 n2 n1))
H24 : app_subst ML' (fst n2) (fst (M1' n1 n2))
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x)) (R3 n2 n1 n3)
H26 : app_subst ML' n2 (M1' n1 n2)
============================
 let (fix (z1\z2\let (fst (M1' z1 z2)) (R3 z2 z1))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply subst_nabla to H8 with x = n2.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 R3 M1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (fst (M1' z1 z2)) (R3 z2 z1))) R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (fst (M1' z1 z2)) (R3 z2 z1)))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst (M1' n1 n2)) (R3 n2 n1))
H24 : app_subst ML' (fst n2) (fst (M1' n1 n2))
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x)) (R3 n2 n1 n3)
H26 : app_subst ML' n2 (M1' n1 n2)
H27 : app_subst ML' n2 n2
============================
 let (fix (z1\z2\let (fst (M1' z1 z2)) (R3 z2 z1))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_det to H26 H27.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 R3
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (fst z2) (R3 z2 z1))) R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (fst z2) (R3 z2 z1)))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst n2) (R3 n2 n1))
H24 : app_subst ML' (fst n2) (fst n2)
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x)) (R3 n2 n1 n3)
H26 : app_subst ML' n2 n2
H27 : app_subst ML' n2 n2
============================
 let (fix (z1\z2\let (fst z2) (R3 z2 z1))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_let_comm to H25.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 M3 R4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (fst z2) (z3\let (M3 z3 z1 z2) (R4 z3 z1 z2))))
           R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (fst z2) (z3\let (M3 z3 z1 z2) (R4 z3 z1 z2))))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst n2) (z3\let (M3 z3 n1 n2) (R4 z3 n1 n2)))
H24 : app_subst ML' (fst n2) (fst n2)
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x))
        (let (M3 n3 n1 n2) (R4 n3 n1 n2))
H26 : app_subst ML' n2 n2
H27 : app_subst ML' n2 n2
H28 : app_subst ML' (snd n2) (M3 n3 n1 n2)
H29 : app_subst ML' (R' n1 n3 n4) (R4 n3 n1 n2 n4)
============================
 let (fix (z1\z2\let (fst z2) (z3\let (M3 z3 z1 z2) (R4 z3 z1 z2)))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_snd_comm to H28.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 R4 M1'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let
           (fix
              (z1\z2\let (fst z2)
                       (z3\let (snd (M1'1 z2 z1 z3)) (R4 z3 z1 z2))))
           R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix
           (z1\z2\let (fst z2) (z3\let (snd (M1'1 z2 z1 z3)) (R4 z3 z1 z2))))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst n2) (z3\let (snd (M1'1 n2 n1 z3)) (R4 z3 n1 n2)))
H24 : app_subst ML' (fst n2) (fst n2)
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x))
        (let (snd (M1'1 n2 n1 n3)) (R4 n3 n1 n2))
H26 : app_subst ML' n2 n2
H27 : app_subst ML' n2 n2
H28 : app_subst ML' (snd n2) (snd (M1'1 n2 n1 n3))
H29 : app_subst ML' (R' n1 n3 n4) (R4 n3 n1 n2 n4)
H30 : app_subst ML' n2 (M1'1 n2 n1 n3)
============================
 let (fix (z1\z2\let (fst z2) (z3\let (snd (M1'1 z2 z1 z3)) (R4 z3 z1 z2))))
   R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_det to H26 H30.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 R4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (fst z2) (z3\let (snd z2) (R4 z3 z1 z2)))) R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (fst z2) (z3\let (snd z2) (R4 z3 z1 z2))))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst n2) (z3\let (snd n2) (R4 z3 n1 n2)))
H24 : app_subst ML' (fst n2) (fst n2)
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x))
        (let (snd n2) (R4 n3 n1 n2))
H26 : app_subst ML' n2 n2
H27 : app_subst ML' n2 n2
H28 : app_subst ML' (snd n2) (snd n2)
H29 : app_subst ML' (R' n1 n3 n4) (R4 n3 n1 n2 n4)
H30 : app_subst ML' n2 n2
============================
 let (fix (z1\z2\let (fst z2) (z3\let (snd z2) (R4 z3 z1 z2)))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert app_subst ML' (R' n1 n2 n3) (R4 n2 n1 n4 n3).
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R1' R2 R4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (fst z2) (z3\let (snd z2) (R4 z3 z1 z2)))) R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (fst z2) (z3\let (snd z2) (R4 z3 z1 z2))))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst n2) (z3\let (snd n2) (R4 z3 n1 n2)))
H24 : app_subst ML' (fst n2) (fst n2)
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x))
        (let (snd n2) (R4 n3 n1 n2))
H26 : app_subst ML' n2 n2
H27 : app_subst ML' n2 n2
H28 : app_subst ML' (snd n2) (snd n2)
H29 : app_subst ML' (R' n1 n3 n4) (R4 n3 n1 n2 n4)
H30 : app_subst ML' n2 n2
H31 : app_subst ML' (R' n1 n2 n3) (R4 n2 n1 n4 n3)
============================
 let (fix (z1\z2\let (fst z2) (z3\let (snd z2) (R4 z3 z1 z2)))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply app_subst_det to H20 H31.
Subgoal 10.3:

Variables: ML ML' TL CL VL T K I R' R R1 R2 R1'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (z1\z2\let (fst z2) (z3\let (snd z2) (z4\R1'1 z3 z1 z4))))
           R2)
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (R2 n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1'1 n2 n1 n3)
H21 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (z1\z2\let (fst z2) (z3\let (snd z2) (z4\R1'1 z3 z1 z4))))
H22 : app_subst ML' (K n1) (R2 n1)
H23 : app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
        (let (fst n2) (z3\let (snd n2) (z4\R1'1 z3 n1 z4)))
H24 : app_subst ML' (fst n2) (fst n2)
H25 : app_subst ML' (let (snd n2) (x\R' n1 n3 x))
        (let (snd n2) (z4\R1'1 n3 n1 z4))
H26 : app_subst ML' n2 n2
H27 : app_subst ML' n2 n2
H28 : app_subst ML' (snd n2) (snd n2)
H29 : app_subst ML' (R' n1 n3 n4) (R1'1 n3 n1 n4)
H30 : app_subst ML' n2 n2
H31 : app_subst ML' (R' n1 n2 n3) (R1'1 n2 n1 n3)
============================
 let (fix (z1\z2\let (fst z2) (z3\let (snd z2) (z4\R1'1 z3 z1 z4)))) R2 =
 let (fix (f\p\let (fst p) (k\let (snd p) (x\R1'1 k f x)))) (z1\R2 z1)

Subgoal 10 is:
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' P' I R' R R1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : P' = let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K'
============================
 sim_cps T I (fix R1) K' P'

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H21.
Subgoal 10:

Variables: ML ML' TL CL VL T K K' I R' R R1 R1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
============================
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 10.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty (arr T1 T2)}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
============================
 sim_cps (arr T1 T2) I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H2.
Subgoal 10.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
============================
 sim_cps (arr T1 T2) I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 10.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
============================
 forall J V, le J I -> {nstep J (fix R1) V} -> {val V} ->
   (exists N V', step*
                   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))
                      K')
                   (K' V') /\
        {add J N I} /\ equiv_cps (arr T1 T2) N V V')

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 10.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J V
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le J I
H27 : {nstep J (fix R1) V}
H28 : {val V}
============================
 exists N V', step*
                (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
                (K' V') /\
   {add J N I} /\ equiv_cps (arr T1 T2) N V V'

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply nstep_val_inv to _ H27.
Subgoal 10.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 exists N V', step*
                (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
                (K' V') /\
   {add z N I} /\ equiv_cps (arr T1 T2) N (fix R1) V'

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < exists I.
Subgoal 10.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 exists V', step*
              (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
              (K' V') /\
   {add z I I} /\ equiv_cps (arr T1 T2) I (fix R1) V'

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < exists fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))).
Subgoal 10.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 step* (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
   (K' (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))) /\
   {add z I I} /\
   equiv_cps (arr T1 T2) I (fix R1)
     (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < split.
Subgoal 10.4.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 step* (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
   (K' (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))))

Subgoal 10.4.2 is:
 {add z I I}

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10.4.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 {add z I I}

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10.4.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert equiv_cps_arr (arr T1 T2) I (fix R1)
  (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))).
Subgoal 10.4.3.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 equiv_cps_arr (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 10.4.3.1.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 {tm (fix (z1\z2\R1 z1 z2))}

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_to_tm_sctx to _ H5.
Subgoal 10.4.3.1.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 SL
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : tm_sctx SL
H30 : vars_of_tm_sctx SL VL
============================
 {tm (fix (z1\z2\R1 z1 z2))}

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert {SL, tm n1, tm n2 |- tm (R n1 n2)}.
Subgoal 10.4.3.1.1.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 SL
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : tm_sctx SL
H30 : vars_of_tm_sctx SL VL
============================
 {SL, tm n1, tm n2 |- tm (R n1 n2)}

Subgoal 10.4.3.1.1 is:
 {tm (fix (z1\z2\R1 z1 z2))}

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sof_to_tm with L = of n2 T1 :: of n1 (arr T1 T2) :: TL, Vs = n2 :: n1 :: VL, T = T2.
Subgoal 10.4.3.1.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 SL
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : tm_sctx SL
H30 : vars_of_tm_sctx SL VL
H31 : {SL, tm n1, tm n2 |- tm (R n1 n2)}
============================
 {tm (fix (z1\z2\R1 z1 z2))}

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_result_closed_tm with L = SL, M = fix R, Vs = VL, ML = ML.
Subgoal 10.4.3.1.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 SL
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : tm_sctx SL
H30 : vars_of_tm_sctx SL VL
H31 : {SL, tm n1, tm n2 |- tm (R n1 n2)}
============================
 vars_of_subst ML VL

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_equiv_cps_vars.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply cps_sctx_exists to H3 with S = T2.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists T1', cps_ty T2 T1 T1'.
Subgoal 10.4.3.1.2.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
============================
 exists T1', cps_ty T2 T1 T1'

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain cps_ty_exists.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H30 : exists T1', cps_ty T2 T1 T1'
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H30.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists T2', cps_ty T2 T2 T2'.
Subgoal 10.4.3.1.2.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
============================
 exists T2', cps_ty T2 T2 T2'

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain cps_ty_exists.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H32 : exists T2', cps_ty T2 T2 T2'
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H32.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
 pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}.
Subgoal 10.4.3.1.2.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
============================
 {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
  pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain cps_typ_pres with TL = of n3 T1 :: of n2 (arr T1 T2) :: TL, CL = pi k\cps n3 k (k n3) :: pi k\cps n2 k (k n2) :: CL, M = R n2 n3, M' = R' n2 n1 n3, K = y\app n1 y, T = T2, S = T2.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert {of n1 (arr T2' T2) |- pi x\of x T2' => of (app n1 x) T2}.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2) |- pi x\of x T2' => of (app n1 x) T2}
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < cut H34 with H35.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2) |- pi x\of x T2' => of (app n1 x) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply cps_ty_pres to _ _ H31.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply cps_ty_pres to _ _ H33.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert {TL' |-
   of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
     (arr (prod (arr T2' T2) T1') T2)}.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
  (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))).
Subgoal 10.4.3.1.2.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_fix_compose with f = n1, x = n2.
Subgoal 10.4.3.1.2.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 app_subst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
   (let (fst n2) (k\let (snd n2) (x\R1' n1 k x)))

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n3.
Subgoal 10.4.3.1.2.4.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 app_subst ML' (fst n2) (fst n2)

Subgoal 10.4.3.1.2.4.2 is:
 app_subst ML' (let (snd n2) (x\R' n1 n3 x)) (let (snd n2) (x\R1' n1 n3 x))

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_fst_compose.
Subgoal 10.4.3.1.2.4.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 app_subst ML' n2 n2

Subgoal 10.4.3.1.2.4.2 is:
 app_subst ML' (let (snd n2) (x\R' n1 n3 x)) (let (snd n2) (x\R1' n1 n3 x))

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 10.4.3.1.2.4.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 app_subst ML' (let (snd n2) (x\R' n1 n3 x)) (let (snd n2) (x\R1' n1 n3 x))

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n4.
Subgoal 10.4.3.1.2.4.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 app_subst ML' (snd n2) (snd n2)

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_snd_compose.
Subgoal 10.4.3.1.2.4.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
============================
 app_subst ML' n2 n2

Subgoal 10.4.3.1.2 is:
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 10.4.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
H40 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))
============================
 {tm (fix (z1\z2\let (fst z2) (k\let (snd z2) (x\R1' z1 k x))))}

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_result_closed_tm' with L = TL', M = fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))), T = arr (prod (arr T2' T2) T1') T2, Vs = VL, ML = ML'.
Subgoal 10.4.3.1.2.5:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
H40 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))
============================
 sctx TL'

Subgoal 10.4.3.1.2.6 is:
 vars_of_sctx TL' VL

Subgoal 10.4.3.1.2.7 is:
 vars_of_subst ML' VL

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain cps_sctx_pres with S = T2.
Subgoal 10.4.3.1.2.6:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
H40 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))
============================
 vars_of_sctx TL' VL

Subgoal 10.4.3.1.2.7 is:
 vars_of_subst ML' VL

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain cps_sctx_vars_sync.
Subgoal 10.4.3.1.2.7:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 TL' T1' T2'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : cps_sctx T2 TL TL'
H31 : cps_ty T2 T1 T1'
H33 : cps_ty T2 T2 T2'
H34 : {TL', of n2 (arr (prod (arr T2' T2) T1') T2), of n3 T1',
       pi x\of x T2' => of (app n1 x) T2 |- of (R' n2 n1 n3) T2}
H35 : {of n1 (arr T2' T2), of n2 T2' |- of (app n1 n2) T2}
H36 : {TL', of n1 (arr T2' T2), of n2 (arr (prod (arr T2' T2) T1') T2),
       of n3 T1' |- of (R' n2 n1 n3) T2}
H37 : {is_sty T1'}
H38 : {is_sty T2'}
H39 : {TL' |-
         of (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
           (arr (prod (arr T2' T2) T1') T2)}
H40 : app_subst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
        (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))
============================
 vars_of_subst ML' VL

Subgoal 10.4.3.1.3 is:
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_equiv_cps_vars'.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
============================
 forall J V1 V1' V2 V2' K, lt J I -> equiv_cps T1 J V1 V1' ->
   equiv_cps (arr T1 T2) J V2 V2' ->
   sim_cps T2 J (R1 V2 V1) K
     (let (fst (pair (fix f\K) V1'))
        (k\let (snd (pair (fix f\K) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : lt J1 I
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H29.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply add_arg1_isnat to H32.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_tm1 to _ _ H30.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_tm2 to _ _ H30.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_val1 to _ _ H30.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_val2 to _ _ H30.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_tm1 to _ _ H31.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_tm2 to _ _ H31.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_val1 to _ _ H31.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_val2 to _ _ H31.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1').
Subgoal 10.4.3.1.3.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = R n2 n3, M' = R' n2 n1 n3, K = y\app n1 y, ML = map n3 V1 :: map n2 V2 :: ML, ML' = map n3 V1' :: map n2 V2' :: ML', TL = of n3 T1 :: of n2 (arr T1 T2) :: TL, CL = pi k\cps n3 k (k n3) :: pi k\cps n2 k (k n2) :: CL, VL = n3 :: n2 :: VL.
Subgoal 10.4.3.1.3.1.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 subst_equiv_cps (of n3 T1 :: of n2 (arr T1 T2) :: TL) J1
   (map n3 V1 :: map n2 V2 :: ML) (map n3 V1' :: map n2 V2' :: ML')

Subgoal 10.4.3.1.3.1.2 is:
 app_subst (map n3 V1 :: map n2 V2 :: ML) (R n2 n3) (R1 V2 V1)

Subgoal 10.4.3.1.3.1.3 is:
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 10.4.3.1.3.1.1.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 equiv_cps T1 J1 V1 V1'

Subgoal 10.4.3.1.3.1.1.2 is:
 subst_equiv_cps (of n2 (arr T1 T2) :: TL) J1 (map n2 V2 :: ML)
   (map n2 V2' :: ML')

Subgoal 10.4.3.1.3.1.2 is:
 app_subst (map n3 V1 :: map n2 V2 :: ML) (R n2 n3) (R1 V2 V1)

Subgoal 10.4.3.1.3.1.3 is:
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10.4.3.1.3.1.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 subst_equiv_cps (of n2 (arr T1 T2) :: TL) J1 (map n2 V2 :: ML)
   (map n2 V2' :: ML')

Subgoal 10.4.3.1.3.1.2 is:
 app_subst (map n3 V1 :: map n2 V2 :: ML) (R n2 n3) (R1 V2 V1)

Subgoal 10.4.3.1.3.1.3 is:
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 10.4.3.1.3.1.1.2.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 equiv_cps (arr T1 T2) J1 V2 V2'

Subgoal 10.4.3.1.3.1.1.2.2 is:
 subst_equiv_cps TL J1 ML ML'

Subgoal 10.4.3.1.3.1.2 is:
 app_subst (map n3 V1 :: map n2 V2 :: ML) (R n2 n3) (R1 V2 V1)

Subgoal 10.4.3.1.3.1.3 is:
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10.4.3.1.3.1.1.2.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 subst_equiv_cps TL J1 ML ML'

Subgoal 10.4.3.1.3.1.2 is:
 app_subst (map n3 V1 :: map n2 V2 :: ML) (R n2 n3) (R1 V2 V1)

Subgoal 10.4.3.1.3.1.3 is:
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_equiv_cps_closed with K = I.
Subgoal 10.4.3.1.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst (map n3 V1 :: map n2 V2 :: ML) (R n2 n3) (R1 V2 V1)

Subgoal 10.4.3.1.3.1.3 is:
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain explct_meta_subst_comm with n = n3, M = R n2, E = R1 V2.
Subgoal 10.4.3.1.3.1.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst (map n2 V2 :: ML) (R n2 n3) (R1 V2 n3)

Subgoal 10.4.3.1.3.1.3 is:
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain explct_meta_subst_comm with n = n2, M = x\R x n3, E = x\R1 x n3.
Subgoal 10.4.3.1.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst (map n3 V1' :: map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 V1')

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain explct_meta_subst_comm with n = n3, M = R' n2 n1, E = R1' V2' n1.
Subgoal 10.4.3.1.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst (map n2 V2' :: ML') (R' n2 n1 n3) (R1' V2' n1 n3)

Subgoal 10.4.3.1.3.1.4 is:
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain explct_meta_subst_comm with n = n2, M = x\R' x n1 n3, E = x\R1' x n1 n3.
Subgoal 10.4.3.1.3.1.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 nabla x, app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 x) (app n1 x)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 10.4.3.1.3.1.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst (map n3 V1' :: map n2 V2' :: ML') (app n1 n4) (app n1 n4)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 10.4.3.1.3.1.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst (map n2 V2' :: ML') (app n1 n4) (app n1 n4)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 10.4.3.1.3.1.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst ML' (app n1 n4) (app n1 n4)

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_app_compose.
Subgoal 10.4.3.1.3.1.4.1:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst ML' n1 n1

Subgoal 10.4.3.1.3.1.4.2 is:
 app_subst ML' n4 n4

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 10.4.3.1.3.1.4.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
============================
 app_subst ML' n4 n4

Subgoal 10.4.3.1.3 is:
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
============================
 sim_cps T2 J1 (R1 V2 V1) K1
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < unfold.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
============================
 forall J V, le J J1 -> {nstep J (R1 V2 V1) V} -> {val V} ->
   (exists N V', step*
                   (let (fst (pair (fix f\K1) V1'))
                      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                   (K1 V') /\
        {add J N J1} /\ equiv_cps T2 N V V')

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H43 : le J2 J1
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H43.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply add_arg2_isnat to _ H46.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sim_cps_nstep to H42 H44 H45 H46.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 (V' n1))
H49 : equiv_cps T2 N1 V3 (V' n1)
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_val2 to _ _ H49.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 (V' n1))
H49 : equiv_cps T2 N1 V3 (V' n1)
H50 : {val (V' n1)}
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply equiv_cps_tm2 to _ _ H49.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 (V' n1))
H49 : equiv_cps T2 N1 V3 (V' n1)
H50 : {val (V' n1)}
H51 : {tm (V' n1)}
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sclosed_tm_prune to H51.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply step*_inst to H48 with M = fix f\K1.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 exists N V', step*
                (let (fst (pair (fix f\K1) V1'))
                   (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
                (K1 V') /\
   {add J2 N J1} /\ equiv_cps T2 N V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < exists N1.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 exists V', step*
              (let (fst (pair (fix f\K1) V1'))
                 (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
              (K1 V') /\
   {add J2 N1 J1} /\ equiv_cps T2 N1 V3 V'

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < exists M'1.
Subgoal 10.4.3.1.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 step*
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
   (K1 M'1) /\ {add J2 N1 J1} /\ equiv_cps T2 N1 V3 M'1

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < split.
Subgoal 10.4.3.1.3.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 step*
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
   (K1 M'1)

Subgoal 10.4.3.1.3.3 is:
 {add J2 N1 J1}

Subgoal 10.4.3.1.3.4 is:
 equiv_cps T2 N1 V3 M'1

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain step*_trans with M2 = app (fix f\K1) M'1.
Subgoal 10.4.3.1.3.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 step*
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
   (app (fix f\K1) M'1)

Subgoal 10.4.3.1.3.3 is:
 {add J2 N1 J1}

Subgoal 10.4.3.1.3.4 is:
 equiv_cps T2 N1 V3 M'1

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain step*_trans with M2 = R1' V2' (fix f\K1) V1'.
Subgoal 10.4.3.1.3.2:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 step*
   (let (fst (pair (fix f\K1) V1'))
      (k\let (snd (pair (fix f\K1) V1')) (x\R1' V2' k x)))
   (R1' V2' (fix f\K1) V1')

Subgoal 10.4.3.1.3.3 is:
 {add J2 N1 J1}

Subgoal 10.4.3.1.3.4 is:
 equiv_cps T2 N1 V3 M'1

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search 8.
Subgoal 10.4.3.1.3.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 {add J2 N1 J1}

Subgoal 10.4.3.1.3.4 is:
 equiv_cps T2 N1 V3 M'1

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10.4.3.1.3.4:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1 J1 V1 V1' V2 V2' K1 N J2
           V3 N1 M'1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H30 : equiv_cps T1 J1 V1 V1'
H31 : equiv_cps (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
H36 : {val V1}
H37 : {val V1'}
H38 : {tm V2}
H39 : {tm V2'}
H40 : {val V2}
H41 : {val V2'}
H42 : sim_cps T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
H44 : {nstep J2 (R1 V2 V1) V3}
H45 : {val V3}
H46 : {add J2 N1 J1}
H47 : {is_nat N1}
H48 : step* (R1' V2' n1 V1') (app n1 M'1)
H49 : equiv_cps T2 N1 V3 M'1
H50 : {val M'1}
H51 : {tm M'1}
H52 : step* (R1' V2' (fix f\K1) V1') (app (fix f\K1) M'1)
============================
 equiv_cps T2 N1 V3 M'1

Subgoal 10.4.3 is:
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < search.
Subgoal 10.4.3:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' T2 T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, of n1 (arr T1 T2), of n2 T1 |- of (R n1 n2) T2}
H23 : {TL |- is_sty (arr T1 T2)}
H24 : {is_sty T1}
H25 : {is_sty T2}
H26 : le z I
H27 : {nstep z (fix R1) (fix R1)}
H28 : {val (fix R1)}
H29 : equiv_cps_arr (arr T1 T2) I (fix R1)
        (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))
============================
 equiv_cps (arr T1 T2) I (fix R1)
   (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))

Subgoal 10.5 is:
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain equiv_cps_arr_to_equiv_cps.
Subgoal 10.5:

Variables: ML ML' TL CL VL T K K' I R' R R1 R1' F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, [F] |- of (fix R) T}
H23 : member F TL
============================
 sim_cps T I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H22.
Subgoal 10.5:

Variables: ML ML' TL CL VL K K' I R' R R1 R1' F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (fix R) (fix R1)
H13 : app_subst ML'
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K)
        (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')
H15 : {CL, pi k\cps n2 k (k n2), pi k\cps n3 k (k n3) |-
         cps (R n2 n3) (y\app n1 y) (R' n2 n1 n3)}*
H17 : app_subst ML (R n1 n2) (R1 n1 n2)
H18 : app_subst ML' (K n1) (K' n1)
H20 : app_subst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, [F] |- of (fix R) T1}
H23 : member F TL
H24 : name (fix R)
============================
 sim_cps T1 I (fix R1) K'
   (let (fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x)))) K')

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H24.
Subgoal 11:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
============================
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M3 M4, P = app M3 M4 /\ app_subst ML M1 M3 /\ app_subst ML M2 M4.
Subgoal 11.1:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
============================
 exists M3 M4, P = app M3 M4 /\ app_subst ML M1 M3 /\ app_subst ML M2 M4

Subgoal 11 is:
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_app_comm.
Subgoal 11:

Variables: ML ML' TL CL VL T K K' M' P P' I M2' M1 M2
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H17 : exists M3 M4, P = app M3 M4 /\ app_subst ML M1 M3 /\ app_subst ML M2 M4
============================
 sim_cps T I P K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H17.
Subgoal 11:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H14.
Subgoal 11:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert exists M4', app_subst ML' (M2' n1) M4'.
Subgoal 11.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
============================
 exists M4', app_subst ML' (M2' n1) M4'

Subgoal 11 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_exists.
Subgoal 11:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H21 : exists M4', app_subst ML' (M2' n1) M4'
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H21.
Subgoal 11:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H10.
Subgoal 11.3:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sof_is_sty to _ H24.
Subgoal 11.3:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M4' n1).
Subgoal 11.3.1:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 sim_cps T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
   (M4' n1)

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M2, M' = M2' n1, K = x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p)), ML = ML, ML' = ML'.
Subgoal 11.3.1:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 nabla x, app_subst ML' (let (fix f\K) (k\let (pair k x) (p\app n1 p)))
            (let (fix f\K') (k\let (pair k x) (p\app n1 p)))

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < intros.
Subgoal 11.3.1:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' (let (fix f\K) (k\let (pair k n2) (p\app n1 p)))
   (let (fix f\K') (k\let (pair k n2) (p\app n1 p)))

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n3.
Subgoal 11.3.1.1:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' (fix f\K) (fix f\K')

Subgoal 11.3.1.2 is:
 app_subst ML' (let (pair n3 n2) (p\app n1 p))
   (let (pair n3 n2) (p\app n1 p))

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_fix_compose with f = n1, x = n2.
Subgoal 11.3.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' (let (pair n3 n2) (p\app n1 p))
   (let (pair n3 n2) (p\app n1 p))

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_let_compose with x = n4.
Subgoal 11.3.1.2.1:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' (pair n3 n2) (pair n3 n2)

Subgoal 11.3.1.2.2 is:
 app_subst ML' (app n1 n4) (app n1 n4)

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_pair_compose.
Subgoal 11.3.1.2.1.1:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' n3 n3

Subgoal 11.3.1.2.1.2 is:
 app_subst ML' n2 n2

Subgoal 11.3.1.2.2 is:
 app_subst ML' (app n1 n4) (app n1 n4)

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 11.3.1.2.1.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' n2 n2

Subgoal 11.3.1.2.2 is:
 app_subst ML' (app n1 n4) (app n1 n4)

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 11.3.1.2.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' (app n1 n4) (app n1 n4)

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain app_subst_app_compose.
Subgoal 11.3.1.2.2.1:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' n1 n1

Subgoal 11.3.1.2.2.2 is:
 app_subst ML' n4 n4

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 11.3.1.2.2.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
 app_subst ML' n4 n4

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain subst_nabla.
Subgoal 11.3:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
H26 : sim_cps T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
        (M4' n1)
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < assert sim_cps (arr T1 T) I M3 M4' P'.
Subgoal 11.3.2:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
H26 : sim_cps T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
        (M4' n1)
============================
 sim_cps (arr T1 T) I M3 M4' P'

Subgoal 11.3 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain IH with M = M1, M' = M', K = M2', ML = ML, ML' = ML'.
Subgoal 11.3:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
H26 : sim_cps T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
        (M4' n1)
H27 : sim_cps (arr T1 T) I M3 M4' P'
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 11.4 is:
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < backchain sim_cps_app with T1 = T1, M2' = M4', x1 = n1.
Subgoal 11.4:

Variables: ML ML' TL CL VL T K K' M' P' I M2' M1 M2 M3 M4 M4' F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL, [F] |- of (app M1 M2) T}
H24 : member F TL
============================
 sim_cps T I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_focus_inv to _ _ H23.
Subgoal 11.4:

Variables: ML ML' TL CL VL K K' M' P' I M2' M1 M2 M3 M4 M4' F T1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T1}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H12 : app_subst ML (app M1 M2) (app M3 M4)
H13 : app_subst ML' M' P'
H15 : {CL |-
         cps M2 (x2\let (fix f\K) (k\let (pair k x2) (p\app n1 p))) (M2' n1)}*
H16 : {CL |- cps M1 M2' M'}*
H18 : app_subst ML M1 M3
H19 : app_subst ML M2 M4
H20 : app_subst ML' (K n1) (K' n1)
H22 : app_subst ML' (M2' n1) (M4' n1)
H23 : {TL, [F] |- of (app M1 M2) T1}
H24 : member F TL
H25 : name (app M1 M2)
============================
 sim_cps T1 I (app M3 M4) K' P'

Subgoal 12 is:
 sim_cps T I P K' P'

cps_sem_pres < case H25.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' M' P P' I F
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, [F] |- cps M K M'}*
H16 : member F CL
============================
 sim_cps T I P K' P'

cps_sem_pres < apply cctx_mem to H4 H16.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' M' P P' I X
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M P
H13 : app_subst ML' M' P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H15 : {CL, [pi k\cps X k (k X)] |- cps M K M'}*
H16 : member (pi k\cps X k (k X)) CL
H17 : name X
============================
 sim_cps T I P K' P'

cps_sem_pres < case H15.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' P P' I
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M P
H13 : app_subst ML' (K M) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
============================
 sim_cps T I P K' P'

cps_sem_pres < apply sctx_var_mem to _ H10 _.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' P P' I
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M P
H13 : app_subst ML' (K M) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
============================
 sim_cps T I P K' P'

cps_sem_pres < apply subst_equiv_cps_mem to H9 H18.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' P P' I V V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M P
H13 : app_subst ML' (K M) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
============================
 sim_cps T I P K' P'

cps_sem_pres < apply subst_var_eq to _ H19 H12.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' P' I V V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
============================
 sim_cps T I V K' P'

cps_sem_pres < assert exists K1' M1', P' = K1' M1' /\ app_subst ML' M M1' /\
  (nabla x, app_subst ML' (K x) (K1' x)).
Subgoal 12.1:

Variables: ML ML' TL CL VL M T K K' P' I V V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
============================
 exists K1' M1', P' = K1' M1' /\ app_subst ML' M M1' /\
   (nabla x, app_subst ML' (K x) (K1' x))

Subgoal 12 is:
 sim_cps T I V K' P'

cps_sem_pres < backchain app_subst_meta_app_comm.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' P' I V V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) P'
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H22 : exists K1' M1', P' = K1' M1' /\ app_subst ML' M M1' /\
        (nabla x, app_subst ML' (K x) (K1' x))
============================
 sim_cps T I V K' P'

cps_sem_pres < case H22.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V V' K1' M1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K1' M1')
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M M1'
H24 : app_subst ML' (K n1) (K1' n1)
============================
 sim_cps T I V K' (K1' M1')

cps_sem_pres < apply subst_var_eq to _ H20 H23.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V V' K1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K1' V')
H14 : nabla x, app_subst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K1' n1)
============================
 sim_cps T I V K' (K1' V')

cps_sem_pres < case H14.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V V' K1'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K1' V')
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K1' n1)
H25 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I V K' (K1' V')

cps_sem_pres < apply app_subst_det to H24 H25.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K' V')
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K' n1)
H25 : app_subst ML' (K n1) (K' n1)
============================
 sim_cps T I V K' (K' V')

cps_sem_pres < unfold.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V V'
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K' V')
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K' n1)
H25 : app_subst ML' (K n1) (K' n1)
============================
 forall J V1, le J I -> {nstep J V V1} -> {val V1} ->
   (exists N V'1, step* (K' V') (K' V'1) /\ {add J N I} /\
        equiv_cps T N V1 V'1)

cps_sem_pres < intros.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V V' J V1
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K' V')
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K' n1)
H25 : app_subst ML' (K n1) (K' n1)
H26 : le J I
H27 : {nstep J V V1}
H28 : {val V1}
============================
 exists N V'1, step* (K' V') (K' V'1) /\ {add J N I} /\ equiv_cps T N V1 V'1

cps_sem_pres < case H26.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V V' J V1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K' V')
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K' n1)
H25 : app_subst ML' (K n1) (K' n1)
H27 : {nstep J V V1}
H28 : {val V1}
H29 : {add J N I}
============================
 exists N V'1, step* (K' V') (K' V'1) /\ {add J N I} /\ equiv_cps T N V1 V'1

cps_sem_pres < apply nstep_val_inv to _ H27.
Subgoal 12.2:

Variables: ML ML' TL CL VL M T K K' I V V' J V1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V
H13 : app_subst ML' (K M) (K' V')
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K' n1)
H25 : app_subst ML' (K n1) (K' n1)
H27 : {nstep J V V1}
H28 : {val V1}
H29 : {add J N I}
============================
 {val V}

Subgoal 12 is:
 exists N V'1, step* (K' V') (K' V'1) /\ {add z N I} /\ equiv_cps T N V1 V'1

cps_sem_pres < backchain equiv_cps_val1.
Subgoal 12:

Variables: ML ML' TL CL VL M T K K' I V' V1 N
IH : forall ML ML' TL CL VL M T K K' M' P P' I, {is_nat I} -> {is_sty T} ->
       sctx TL -> cctx CL -> vars_of_sctx TL VL -> vars_of_cctx CL VL ->
       subst ML -> subst ML' -> subst_equiv_cps TL I ML ML' ->
       {TL |- of M T} -> {CL |- cps M K M'}* -> app_subst ML M P ->
       app_subst ML' M' P' -> (nabla x, app_subst ML' (K x) (K' x)) ->
       sim_cps T I P K' P'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sctx TL
H4 : cctx CL
H5 : vars_of_sctx TL VL
H6 : vars_of_cctx CL VL
H7 : subst ML
H8 : subst ML'
H9 : subst_equiv_cps TL I ML ML'
H10 : {TL |- of M T}
H12 : app_subst ML M V1
H13 : app_subst ML' (K M) (K' V')
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
H18 : member (of M T) TL
H19 : member (map M V1) ML
H20 : member (map M V') ML'
H21 : equiv_cps T I V1 V'
H23 : app_subst ML' M V'
H24 : app_subst ML' (K n1) (K' n1)
H25 : app_subst ML' (K n1) (K' n1)
H27 : {nstep z V1 V1}
H28 : {val V1}
H29 : {add z N I}
============================
 exists N V'1, step* (K' V') (K' V'1) /\ {add z N I} /\ equiv_cps T N V1 V'1

cps_sem_pres < search.
Proof completed.
Abella < Theorem cps_sem_pres_base : 
forall M K M' V, {of M tnat} -> {cps M K M'} -> {eval M V} -> step* M' (K V).


============================
 forall M K M' V, {of M tnat} -> {cps M K M'} -> {eval M V} -> step* M' (K V)

cps_sem_pres_base < intros.

Variables: M K M' V
H1 : {of M tnat}
H2 : {cps M K M'}
H3 : {eval M V}
============================
 step* M' (K V)

cps_sem_pres_base < case H3.

Variables: M K M' V N
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
============================
 step* M' (K V)

cps_sem_pres_base < apply nstep_is_nat to H4.

Variables: M K M' V N
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
H6 : {is_nat N}
============================
 step* M' (K V)

cps_sem_pres_base < assert sim_cps tnat N M K M'.
Subgoal 1:

Variables: M K M' V N
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
H6 : {is_nat N}
============================
 sim_cps tnat N M K M'

Subgoal is:
 step* M' (K V)

cps_sem_pres_base < backchain cps_sem_pres.

Variables: M K M' V N
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
H6 : {is_nat N}
H7 : sim_cps tnat N M K M'
============================
 step* M' (K V)

cps_sem_pres_base < assert exists V', step* M' (K V') /\ equiv_cps tnat z V V'.
Subgoal 2:

Variables: M K M' V N
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
H6 : {is_nat N}
H7 : sim_cps tnat N M K M'
============================
 exists V', step* M' (K V') /\ equiv_cps tnat z V V'

Subgoal is:
 step* M' (K V)

cps_sem_pres_base < backchain sim_cps_nstep.
Subgoal 2:

Variables: M K M' V N
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
H6 : {is_nat N}
H7 : sim_cps tnat N M K M'
============================
 {add N z N}

Subgoal is:
 step* M' (K V)

cps_sem_pres_base < backchain add_comm.

Variables: M K M' V N
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
H6 : {is_nat N}
H7 : sim_cps tnat N M K M'
H8 : exists V', step* M' (K V') /\ equiv_cps tnat z V V'
============================
 step* M' (K V)

cps_sem_pres_base < case H8.

Variables: M K M' V N V'
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M V}
H5 : {val V}
H6 : {is_nat N}
H7 : sim_cps tnat N M K M'
H9 : step* M' (K V')
H10 : equiv_cps tnat z V V'
============================
 step* M' (K V)

cps_sem_pres_base < case H10.

Variables: M K M' N N1
H1 : {of M tnat}
H2 : {cps M K M'}
H4 : {nstep N M (nat N1)}
H5 : {val (nat N1)}
H6 : {is_nat N}
H7 : sim_cps tnat N M K M'
H9 : step* M' (K (nat N1))
============================
 step* M' (K (nat N1))

cps_sem_pres_base < search.
Proof completed.
Abella < Theorem cps_nat_sem_pres : 
forall M M' V, {of M tnat} -> {cps' M M'} -> {eval M V} -> {eval M' V}.


============================
 forall M M' V, {of M tnat} -> {cps' M M'} -> {eval M V} -> {eval M' V}

cps_nat_sem_pres < intros.

Variables: M M' V
H1 : {of M tnat}
H2 : {cps' M M'}
H3 : {eval M V}
============================
 {eval M' V}

cps_nat_sem_pres < case H2.

Variables: M M' V
H1 : {of M tnat}
H3 : {eval M V}
H4 : {cps M x\x M'}
============================
 {eval M' V}

cps_nat_sem_pres < apply cps_sem_pres_base to H1 H4 H3.

Variables: M M' V
H1 : {of M tnat}
H3 : {eval M V}
H4 : {cps M x\x M'}
H5 : step* M' V
============================
 {eval M' V}

cps_nat_sem_pres < case H5.

Variables: M M' V N
H1 : {of M tnat}
H3 : {eval M V}
H4 : {cps M x\x M'}
H6 : {nstep N M' V}
============================
 {eval M' V}

cps_nat_sem_pres < case H3.

Variables: M M' V N N1
H1 : {of M tnat}
H4 : {cps M x\x M'}
H6 : {nstep N M' V}
H7 : {nstep N1 M V}
H8 : {val V}
============================
 {eval M' V}

cps_nat_sem_pres < search.
Proof completed.
Abella < Theorem cg_nat_sem_pres : 
forall M M' V, {of'' M tnat} -> {hcgen M M'} -> {eval'' M V} -> {eval'' M' V}.


============================
 forall M M' V, {of'' M tnat} -> {hcgen M M'} -> {eval'' M V} ->
   {eval'' M' V}

cg_nat_sem_pres < intros.

Variables: M M' V
H1 : {of'' M tnat}
H2 : {hcgen M M'}
H3 : {eval'' M V}
============================
 {eval'' M' V}

cg_nat_sem_pres < case H2.

Variables: V M1 FE
H1 : {of'' (htm FE M1) tnat}
H3 : {eval'' (htm FE M1) V}
============================
 {eval'' (htm FE M1) V}

cg_nat_sem_pres < search.
Proof completed.
Abella <