Welcome to Abella 2.0.4-dev
Abella < Specification "trans".
Reading specification "trans"
Abella < Import "eval".
Importing from eval
Abella < Import "cps_typ_pres".
Importing from cps_typ_pres
Abella < Import "subst".
Importing from subst
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 : ty -> nat -> tm -> (tm -> tm) -> tm -> prop,
equiv : ty -> nat -> tm -> tm -> prop by
sim 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 T N V V');
equiv tnat I (nat N) (nat N);
equiv tunit I unit unit;
equiv (prod T1 T2) I (pair V1 V2) (pair V1' V2') := equiv T1 I V1 V1' /\ equiv T2 I V2 V2' /\ {tm V1} /\ {tm V2} /\ {tm V1'} /\
{tm V2'};
equiv (arr T1 T2) z (fix (f\x\R f x)) (fix (f\p\R' f p)) := {tm (fix R)} /\ {tm (fix R')};
equiv (arr T1 T2) (s I) (fix (f\x\R f x)) (fix (f\p\R' f p)) := equiv (arr T1 T2) I (fix (f\x\R f x)) (fix (f\p\R' f p)) /\
(forall V1 V1' V2 V2' K, equiv T1 I V1 V1' -> equiv (arr T1 T2) I V2 V2' ->
sim T2 I (R V2 V1) K (R' V2' (pair (fix f\K) V1'))).
Warning: Definition might not be stratified
("equiv" occurs to the left of ->)
Abella < Theorem equiv_val1 :
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {val V}.
============================
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {val V}
equiv_val1 < induction on 1.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
============================
forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv T K V V' -> {val V}
equiv_val1 < induction on 2.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
============================
forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv T K V V' -> {val V}
equiv_val1 < intros.
Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv T K V V'
============================
{val V}
equiv_val1 < case H1 (keep).
Subgoal 1:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv tnat K V V'
============================
{val V}
Subgoal 2 is:
{val V}
Subgoal 3 is:
{val V}
Subgoal 4 is:
{val V}
equiv_val1 < case H3.
Subgoal 1:
Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_val1 < search.
Subgoal 2:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv tunit K V V'
============================
{val V}
Subgoal 3 is:
{val V}
Subgoal 4 is:
{val V}
equiv_val1 < case H3.
Subgoal 2:
Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_val1 < search.
Subgoal 3:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{val V}
Subgoal 4 is:
{val V}
equiv_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 T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_val1 < search.
Subgoal 4:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{val V}
equiv_val1 < case H2.
Subgoal 4.1:
Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{val V}
Subgoal 4.2 is:
{val V}
equiv_val1 < case H3.
Subgoal 4.1:
Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_val1 < search.
Subgoal 4.2:
Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
{val V}
equiv_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 T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
{val (fix (f\x\R f x))}
equiv_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 T K V V' -> {val V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim 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_val1 < search.
Proof completed.
Abella < Theorem equiv_val2 :
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {val V'}.
============================
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {val V'}
equiv_val2 < induction on 1.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
============================
forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv T K V V' -> {val V'}
equiv_val2 < induction on 2.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
============================
forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv T K V V' -> {val V'}
equiv_val2 < intros.
Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv T K V V'
============================
{val V'}
equiv_val2 < case H1 (keep).
Subgoal 1:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv tnat K V V'
============================
{val V'}
Subgoal 2 is:
{val V'}
Subgoal 3 is:
{val V'}
Subgoal 4 is:
{val V'}
equiv_val2 < case H3.
Subgoal 1:
Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_val2 < search.
Subgoal 2:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv tunit K V V'
============================
{val V'}
Subgoal 3 is:
{val V'}
Subgoal 4 is:
{val V'}
equiv_val2 < case H3.
Subgoal 2:
Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_val2 < search.
Subgoal 3:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{val V'}
Subgoal 4 is:
{val V'}
equiv_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 T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_val2 < search.
Subgoal 4:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{val V'}
equiv_val2 < case H2.
Subgoal 4.1:
Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{val V'}
Subgoal 4.2 is:
{val V'}
equiv_val2 < case H3.
Subgoal 4.1:
Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_val2 < search.
Subgoal 4.2:
Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{val V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
{val V'}
equiv_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 T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
{val (fix (f\p\R' f p))}
equiv_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 T K V V' -> {val V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim 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_val2 < search.
Proof completed.
Abella < Theorem equiv_tm1 :
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {tm V}.
============================
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {tm V}
equiv_tm1 < induction on 1.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
============================
forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv T K V V' -> {tm V}
equiv_tm1 < induction on 2.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
============================
forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv T K V V' -> {tm V}
equiv_tm1 < intros.
Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv T K V V'
============================
{tm V}
equiv_tm1 < case H1 (keep).
Subgoal 1:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv tnat K V V'
============================
{tm V}
Subgoal 2 is:
{tm V}
Subgoal 3 is:
{tm V}
Subgoal 4 is:
{tm V}
equiv_tm1 < case H3.
Subgoal 1:
Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_tm1 < search.
Subgoal 2:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv tunit K V V'
============================
{tm V}
Subgoal 3 is:
{tm V}
Subgoal 4 is:
{tm V}
equiv_tm1 < case H3.
Subgoal 2:
Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_tm1 < search.
Subgoal 3:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{tm V}
Subgoal 4 is:
{tm V}
equiv_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 T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_tm1 < search.
Subgoal 4:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{tm V}
equiv_tm1 < case H2.
Subgoal 4.1:
Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{tm V}
Subgoal 4.2 is:
{tm V}
equiv_tm1 < case H3.
Subgoal 4.1:
Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_tm1 < search.
Subgoal 4.2:
Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
{tm V}
equiv_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 T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
{tm (fix (f\x\R f x))}
equiv_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 T K V V' -> {tm V}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim 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_tm1 < search.
Proof completed.
Abella < Theorem equiv_tm2 :
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {tm V'}.
============================
forall T K V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> {tm V'}
equiv_tm2 < induction on 1.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
============================
forall T K V V', {is_sty T}@ -> {is_nat K} -> equiv T K V V' -> {tm V'}
equiv_tm2 < induction on 2.
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
============================
forall T K V V', {is_sty T}@ -> {is_nat K}@@ -> equiv T K V V' -> {tm V'}
equiv_tm2 < intros.
Variables: T K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv T K V V'
============================
{tm V'}
equiv_tm2 < case H1 (keep).
Subgoal 1:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv tnat K V V'
============================
{tm V'}
Subgoal 2 is:
{tm V'}
Subgoal 3 is:
{tm V'}
Subgoal 4 is:
{tm V'}
equiv_tm2 < case H3.
Subgoal 1:
Variables: K N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_tm2 < search.
Subgoal 2:
Variables: K V V'
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv tunit K V V'
============================
{tm V'}
Subgoal 3 is:
{tm V'}
Subgoal 4 is:
{tm V'}
equiv_tm2 < case H3.
Subgoal 2:
Variables: K
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_tm2 < search.
Subgoal 3:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (prod T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{tm V'}
Subgoal 4 is:
{tm V'}
equiv_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 T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_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 T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 T1 K V1 V1'
H7 : equiv 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_tm2 < search.
Subgoal 4:
Variables: K V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (arr T1 T2) K V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{tm V'}
equiv_tm2 < case H2.
Subgoal 4.1:
Variables: V V' T2 T1
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) z V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
============================
{tm V'}
Subgoal 4.2 is:
{tm V'}
equiv_tm2 < case H3.
Subgoal 4.1:
Variables: T2 T1 R' R
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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_tm2 < search.
Subgoal 4.2:
Variables: V V' T2 T1 N
IH : forall T K V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
{tm V'}
H1 : {is_sty (arr T1 T2)}@
H3 : equiv (arr T1 T2) (s N) V V'
H4 : {is_sty T1}*
H5 : {is_sty T2}*
H6 : {is_nat N}**
============================
{tm V'}
equiv_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 T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
{tm (fix (f\p\R' f p))}
equiv_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 T K V V' -> {tm V'}
IH1 : forall T K V V', {is_sty T}@ -> {is_nat K}** -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H8 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim 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_tm2 < search.
Proof completed.
Abella < Theorem equiv_arr_val2 :
forall T1 T K R V, {is_nat K} -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R').
============================
forall T1 T K R V, {is_nat K} -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R')
equiv_arr_val2 < induction on 1.
IH : forall T1 T K R V, {is_nat K}* -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R')
============================
forall T1 T K R V, {is_nat K}@ -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R')
equiv_arr_val2 < intros.
Variables: T1 T K R V
IH : forall T1 T K R V, {is_nat K}* -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R')
H1 : {is_nat K}@
H2 : equiv (arr T1 T) K (fix R) V
============================
exists R', V = fix R'
equiv_arr_val2 < case H1.
Subgoal 1:
Variables: T1 T R V
IH : forall T1 T K R V, {is_nat K}* -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R')
H2 : equiv (arr T1 T) z (fix R) V
============================
exists R', V = fix R'
Subgoal 2 is:
exists R', V = fix R'
equiv_arr_val2 < case H2.
Subgoal 1:
Variables: T1 T R' R1
IH : forall T1 T K R V, {is_nat K}* -> equiv (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_arr_val2 < search.
Subgoal 2:
Variables: T1 T R V N
IH : forall T1 T K R V, {is_nat K}* -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R')
H2 : equiv (arr T1 T) (s N) (fix R) V
H3 : {is_nat N}*
============================
exists R', V = fix R'
equiv_arr_val2 < case H2.
Subgoal 2:
Variables: T1 T N R' R1
IH : forall T1 T K R V, {is_nat K}* -> equiv (arr T1 T) K (fix R) V ->
(exists R', V = fix R')
H3 : {is_nat N}*
H4 : equiv (arr T1 T) N (fix (f\x\R1 f x)) (fix (f\p\R' f p))
H5 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T) N V2 V2' ->
sim 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_arr_val2 < backchain IH.
Proof completed.
Abella < Theorem equiv_closed :
forall T K J V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> le J K ->
equiv T J V V'.
============================
forall T K J V V', {is_sty T} -> {is_nat K} -> equiv T K V V' -> le J K ->
equiv T J V V'
equiv_closed < induction on 1.
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' ->
le J K -> equiv T J V V'
============================
forall T K J V V', {is_sty T}@ -> {is_nat K} -> equiv T K V V' -> le J K ->
equiv T J V V'
equiv_closed < induction on 2.
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
============================
forall T K J V V', {is_sty T}@ -> {is_nat K}@@ -> equiv T K V V' ->
le J K -> equiv T J V V'
equiv_closed < intros.
Variables: T K J V V'
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty T}@
H2 : {is_nat K}@@
H3 : equiv T K V V'
H4 : le J K
============================
equiv T J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H3 : equiv tnat K V V'
H4 : le J K
============================
equiv tnat J V V'
Subgoal 2 is:
equiv tunit J V V'
Subgoal 3 is:
equiv (prod T1 T2) J V V'
Subgoal 4 is:
equiv (arr T1 T2) J V V'
equiv_closed < case H3.
Subgoal 1:
Variables: K J N
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty tnat}@
H2 : {is_nat K}@@
H4 : le J K
============================
equiv tnat J (nat N) (nat N)
Subgoal 2 is:
equiv tunit J V V'
Subgoal 3 is:
equiv (prod T1 T2) J V V'
Subgoal 4 is:
equiv (arr T1 T2) J V V'
equiv_closed < search.
Subgoal 2:
Variables: K J V V'
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H3 : equiv tunit K V V'
H4 : le J K
============================
equiv tunit J V V'
Subgoal 3 is:
equiv (prod T1 T2) J V V'
Subgoal 4 is:
equiv (arr T1 T2) J V V'
equiv_closed < case H3.
Subgoal 2:
Variables: K J
IH : forall T K J V V', {is_sty T}* -> {is_nat K} -> equiv T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty tunit}@
H2 : {is_nat K}@@
H4 : le J K
============================
equiv tunit J unit unit
Subgoal 3 is:
equiv (prod T1 T2) J V V'
Subgoal 4 is:
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (prod T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (prod T1 T2) K V V'
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
============================
equiv (prod T1 T2) J V V'
Subgoal 4 is:
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 T1 K V1 V1'
H8 : equiv T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
equiv (prod T1 T2) J (pair V1 V2) (pair V1' V2')
Subgoal 4 is:
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 T1 K V1 V1'
H8 : equiv T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
equiv T1 J V1 V1'
Subgoal 3.2 is:
equiv 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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 T1 K V1 V1'
H8 : equiv T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
equiv 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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 T1 K V1 V1'
H8 : equiv 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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 T1 K V1 V1'
H8 : equiv 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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 T1 K V1 V1'
H8 : equiv 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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 T1 K V1 V1'
H8 : equiv T2 K V2 V2'
H9 : {tm V1}
H10 : {tm V2}
H11 : {tm V1'}
H12 : {tm V2'}
============================
{tm V2'}
Subgoal 4 is:
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (arr T1 T2) K V V'
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
============================
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (arr T1 T2) K V V'
H4 : le K K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
============================
equiv (arr T1 T2) K V V'
Subgoal 4.2 is:
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat K}@@
H3 : equiv (arr T1 T2) K V V'
H4 : le J K
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J K
============================
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat z}@@
H3 : equiv (arr T1 T2) z V V'
H4 : le J z
H5 : {is_sty T1}*
H6 : {is_sty T2}*
H8 : lt J z
============================
equiv (arr T1 T2) J V V'
Subgoal 4.2.2 is:
equiv (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat (s N)}@@
H3 : equiv (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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv T J V V'
H1 : {is_sty (arr T1 T2)}@
H2 : {is_nat (s N)}@@
H3 : equiv (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 (arr T1 T2) J V V'
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H12 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
equiv (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))
equiv_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 T K V V' ->
le J K -> equiv T J V V'
IH1 : forall T K J V V', {is_sty T}@ -> {is_nat K}** -> equiv T K V V' ->
le J K -> equiv 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 (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H12 : forall V1 V1' V2 V2' K, equiv T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
H13 : equiv (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))
============================
equiv (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))
equiv_closed < search.
Proof completed.
Abella < Define equiv_arr : ty -> nat -> tm -> tm -> prop by
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))).
Abella < Theorem equiv_arr_closed :
forall J K T M M', {is_nat K} -> le J K -> equiv_arr T K M M' ->
equiv_arr T J M M'.
============================
forall J K T M M', {is_nat K} -> le J K -> equiv_arr T K M M' ->
equiv_arr T J M M'
equiv_arr_closed < intros.
Variables: J K T M M'
H1 : {is_nat K}
H2 : le J K
H3 : equiv_arr T K M M'
============================
equiv_arr T J M M'
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
equiv_arr (arr T1 T2) J (fix (f\x\R f x)) (fix (f\p\R' f p))
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 T1 J1 V1 V1' ->
equiv (arr T1 T2) J1 V2 V2' ->
sim T2 J1 (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 T1 J1 V1 V1' ->
equiv (arr T1 T2) J1 V2 V2' ->
sim T2 J1 (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
forall J1 V1 V1' V2 V2' K, lt J1 J -> equiv T1 J1 V1 V1' ->
equiv (arr T1 T2) J1 V2 V2' ->
sim T2 J1 (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : lt J1 J
H8 : equiv T1 J1 V1 V1'
H9 : equiv (arr T1 T2) J1 V2 V2'
============================
sim T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : lt J1 J
H8 : equiv T1 J1 V1 V1'
H9 : equiv (arr T1 T2) J1 V2 V2'
H10 : lt J1 K
============================
sim T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : lt J1 J
H8 : equiv T1 J1 V1 V1'
H9 : equiv (arr T1 T2) J1 V2 V2'
H10 : lt J1 K
H11 : sim T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
sim T2 J1 (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
equiv_arr_closed < search.
Proof completed.
Abella < Theorem equiv_arr_to_equiv :
forall T K M M', {is_nat K} -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'.
============================
forall T K M M', {is_nat K} -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
equiv_arr_to_equiv < induction on 1.
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
============================
forall T K M M', {is_nat K}@ -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
equiv_arr_to_equiv < intros.
Variables: T K M M'
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
H1 : {is_nat K}@
H2 : {is_sty T}
H3 : equiv_arr T K M M'
============================
equiv T K M M'
equiv_arr_to_equiv < case H3 (keep).
Variables: K R' R T2 T1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
H1 : {is_nat K}@
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
equiv (arr T1 T2) K (fix (f\x\R f x)) (fix (f\p\R' f p))
equiv_arr_to_equiv < case H1.
Subgoal 1:
Variables: R' R T2 T1
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
============================
equiv (arr T1 T2) z (fix (f\x\R f x)) (fix (f\p\R' f p))
Subgoal 2 is:
equiv (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
equiv_arr_to_equiv < search.
Subgoal 2:
Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
equiv (arr T1 T2) (s N) (fix (f\x\R f x)) (fix (f\p\R' f p))
equiv_arr_to_equiv < unfold.
Subgoal 2.1:
Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
equiv (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 T1 N V1 V1' -> equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_arr_to_equiv < apply equiv_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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 T1 N V1 V1' -> equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_arr_to_equiv < 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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 T1 N V1 V1' -> equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_arr_to_equiv < 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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_arr (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
============================
equiv (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 T1 N V1 V1' -> equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_arr_to_equiv < 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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv_arr (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
H9 : equiv (arr T1 T2) N (fix (f\x\R f x)) (fix (f\p\R' f p))
============================
equiv (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 T1 N V1 V1' -> equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_arr_to_equiv < search.
Subgoal 2.2:
Variables: R' R T2 T1 N
IH : forall T K M M', {is_nat K}* -> {is_sty T} -> equiv_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
============================
forall V1 V1' V2 V2' K, equiv T1 N V1 V1' -> equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_arr_to_equiv < 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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv T1 N V1 V1'
H9 : equiv (arr T1 T2) N V2 V2'
============================
sim T2 N (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
equiv_arr_to_equiv < 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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv T1 N V1 V1'
H9 : equiv (arr T1 T2) N V2 V2'
============================
lt N (s N)
equiv_arr_to_equiv < 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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv T1 N V1 V1'
H9 : equiv (arr T1 T2) N V2 V2'
============================
exists N1, {add N (s N1) (s N)}
equiv_arr_to_equiv < 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_arr T K M M' ->
equiv T K M M'
H2 : {is_sty (arr T1 T2)}
H3 : equiv_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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K1 (R' V2' (pair (fix f\K1) V1'))
H7 : {is_nat N}*
H8 : equiv T1 N V1 V1'
H9 : equiv (arr T1 T2) N V2 V2'
============================
{add N (s z) (s N)}
equiv_arr_to_equiv < backchain add_comm.
Proof completed.
Abella < Theorem equiv_arr_cond :
forall I T1 T2 R R' K, {is_nat I} -> equiv (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))).
============================
forall I T1 T2 R R' K, {is_nat I} -> equiv (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
equiv_arr_cond < induction on 1.
IH : forall I T1 T2 R R' K, {is_nat I}* ->
equiv (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
============================
forall I T1 T2 R R' K, {is_nat I}@ ->
equiv (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H1 : {is_nat I}@
H2 : equiv (arr T1 T2) I (fix R) (fix R')
H3 : lt J I
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
============================
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv (arr T1 T2) z (fix R) (fix R')
H3 : lt J z
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
============================
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
Subgoal 2 is:
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
============================
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
============================
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H8 : J = N \/ lt J N
============================
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt N (s N)
H4 : equiv T1 N V1 V1'
H5 : equiv (arr T1 T2) N V2 V2'
H6 : {is_nat N}*
H7 : le N N
============================
sim T2 N (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
Subgoal 2.2 is:
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H3 : lt N (s N)
H4 : equiv T1 N V1 V1'
H5 : equiv (arr T1 T2) N V2 V2'
H6 : {is_nat N}*
H7 : le N N
H9 : equiv (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 T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
============================
sim T2 N (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
Subgoal 2.2 is:
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H2 : equiv (arr T1 T2) (s N) (fix R) (fix R')
H3 : lt J (s N)
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H9 : lt J N
============================
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H3 : lt J (s N)
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H9 : lt J N
H10 : equiv (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 T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim T2 N (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
============================
sim T2 J (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
equiv_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 (arr T1 T2) I (fix R) (fix R') ->
(forall J V1 V1' V2 V2', lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R V2 V1) K (R' V2' (pair (fix f\K) V1')))
H3 : lt J (s N)
H4 : equiv T1 J V1 V1'
H5 : equiv (arr T1 T2) J V2 V2'
H6 : {is_nat N}*
H7 : le J N
H9 : lt J N
H10 : equiv (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 T1 N V1 V1' ->
equiv (arr T1 T2) N V2 V2' ->
sim 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim T2 J (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
============================
sim T2 J (R1 V2 V1) K (R'1 V2' (pair (fix f\K) V1'))
equiv_arr_cond < backchain H12.
Proof completed.
Abella < Theorem app_equiv_arr :
forall T1 T R R' N1 N2 V1 V1' I K, {is_sty (arr T1 T)} -> {is_nat N1} ->
{is_nat N2} -> equiv (arr T1 T) N1 (fix R) (fix R') ->
equiv T1 N2 V1 V1' -> lt I N1 -> lt I N2 ->
sim 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 (arr T1 T) N1 (fix R) (fix R') ->
equiv T1 N2 V1 V1' -> lt I N1 -> lt I N2 ->
sim T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))
app_equiv_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 (arr T1 T) N1 (fix R) (fix R')
H5 : equiv T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
============================
sim T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))
app_equiv_arr < case H1.
Variables: T1 T R R' N1 N2 V1 V1' I K
H2 : {is_nat N1}
H3 : {is_nat N2}
H4 : equiv (arr T1 T) N1 (fix R) (fix R')
H5 : equiv T1 N2 V1 V1'
H6 : lt I N1
H7 : lt I N2
H8 : {is_sty T1}
H9 : {is_sty T}
============================
sim T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))
app_equiv_arr < apply equiv_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 (arr T1 T) N1 (fix R) (fix R')
H5 : equiv 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 T1 J V1 V1' ->
equiv (arr T1 T) J V2 V2' ->
sim T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
sim T I (R (fix R) V1) K (R' (fix R') (pair (fix f\K) V1'))
app_equiv_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 (arr T1 T) N1 (fix R) (fix R')
H5 : equiv 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 T1 J V1 V1' ->
equiv (arr T1 T) J V2 V2' ->
sim T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
equiv T1 I V1 V1'
Subgoal 2 is:
equiv (arr T1 T) I (fix R) (fix R')
app_equiv_arr < backchain equiv_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 (arr T1 T) N1 (fix R) (fix R')
H5 : equiv 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 T1 J V1 V1' ->
equiv (arr T1 T) J V2 V2' ->
sim T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
le I N2
Subgoal 2 is:
equiv (arr T1 T) I (fix R) (fix R')
app_equiv_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 (arr T1 T) N1 (fix R) (fix R')
H5 : equiv 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 T1 J V1 V1' ->
equiv (arr T1 T) J V2 V2' ->
sim T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
equiv (arr T1 T) I (fix R) (fix R')
app_equiv_arr < backchain equiv_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 (arr T1 T) N1 (fix R) (fix R')
H5 : equiv 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 T1 J V1 V1' ->
equiv (arr T1 T) J V2 V2' ->
sim T J (R V2 V1) K (R' V2' (pair (fix f\K) V1'))
============================
le I N1
app_equiv_arr < backchain lt_to_le.
Proof completed.
Abella < Theorem sim_nstep :
forall T K M M' J I V N, sim T I M K M' -> {nstep J M V} -> {val V} ->
{add J N I} -> (exists V', step* M' (K V') /\ equiv T N V V').
============================
forall T K M M' J I V N, sim T I M K M' -> {nstep J M V} -> {val V} ->
{add J N I} -> (exists V', step* M' (K V') /\ equiv T N V V')
sim_nstep < intros.
Variables: T K M M' J I V N
H1 : sim 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 T N V V'
sim_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 T N V V')
============================
exists V', step* M' (K V') /\ equiv T N V V'
sim_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 T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv T N1 V V'
============================
exists V', step* M' (K V') /\ equiv T N V V'
sim_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 T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv T N1 V V'
============================
step* M' (K V') /\ equiv T N V V'
sim_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 T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv T N1 V V'
============================
step* M' (K V')
Subgoal 2 is:
equiv T N V V'
sim_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 T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv T N1 V V'
============================
equiv T N V V'
sim_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 T N V V')
H6 : step* M' (K V')
H7 : {add J N1 I}
H8 : equiv T N1 V V'
============================
equiv T N1 V V'
sim_nstep < search.
Proof completed.
Abella < Theorem sim_closed_step* :
forall T I K M M' M1', step* M1' M' -> sim T I K M M' -> sim T I K M M1'.
============================
forall T I K M M' M1', step* M1' M' -> sim T I K M M' -> sim T I K M M1'
sim_closed_step* < intros.
Variables: T I K M M' M1'
H1 : step* M1' M'
H2 : sim T I K M M'
============================
sim T I K M M1'
sim_closed_step* < unfold.
Variables: T I K M M' M1'
H1 : step* M1' M'
H2 : sim 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 T N V V')
sim_closed_step* < intros.
Variables: T I K M M' M1' J V
H1 : step* M1' M'
H2 : sim 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 T N V V'
sim_closed_step* < case H3.
Variables: T I K M M' M1' J V N
H1 : step* M1' M'
H2 : sim 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 T N V V'
sim_closed_step* < apply sim_nstep to H2 H4 _ _.
Variables: T I K M M' M1' J V N V'
H1 : step* M1' M'
H2 : sim 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 T N V V'
============================
exists N V', step* M1' (M V') /\ {add J N I} /\ equiv T N V V'
sim_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 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 T N V V'
H9 : step* M1' (M V')
============================
exists N V', step* M1' (M V') /\ {add J N I} /\ equiv T N V V'
sim_closed_step* < search.
Proof completed.
Abella < Define subst_equiv : olist -> nat -> smap_list -> smap_list -> prop by
subst_equiv nil I smnil smnil;
nabla x, subst_equiv (of x T :: L) I (smcons (smap x V) ML) (smcons (smap x V') ML') := equiv T I V V' /\ subst_equiv L I ML ML'.
Abella < Theorem subst_equiv_vars :
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' ->
vars_of_ssubst ML Vs.
============================
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' ->
vars_of_ssubst ML Vs
subst_equiv_vars < induction on 2.
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML Vs
============================
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' @ ->
vars_of_ssubst ML Vs
subst_equiv_vars < intros.
Variables: L Vs ML ML' I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML Vs
H1 : vars_of_sctx L Vs
H2 : subst_equiv L I ML ML' @
============================
vars_of_ssubst ML Vs
subst_equiv_vars < case H2.
Subgoal 1:
Variables: Vs I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML Vs
H1 : vars_of_sctx nil Vs
============================
vars_of_ssubst smnil Vs
Subgoal 2 is:
vars_of_ssubst (smcons (smap n1 V) ML1) (Vs n1)
subst_equiv_vars < case H1.
Subgoal 1:
Variables: I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML Vs
============================
vars_of_ssubst smnil snil
Subgoal 2 is:
vars_of_ssubst (smcons (smap n1 V) ML1) (Vs n1)
subst_equiv_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 L I ML ML' * ->
vars_of_ssubst ML Vs
H1 : vars_of_sctx (of n1 T :: L1) (Vs n1)
H3 : equiv T I V V'
H4 : subst_equiv L1 I ML1 ML'1 *
============================
vars_of_ssubst (smcons (smap n1 V) ML1) (Vs n1)
subst_equiv_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 L I ML ML' * ->
vars_of_ssubst ML Vs
H3 : equiv T I V V'
H4 : subst_equiv L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
============================
vars_of_ssubst (smcons (smap n1 V) ML1) (scons n1 L')
subst_equiv_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 L I ML ML' * ->
vars_of_ssubst ML Vs
H3 : equiv T I V V'
H4 : subst_equiv L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
H6 : vars_of_ssubst ML1 L'
============================
vars_of_ssubst (smcons (smap n1 V) ML1) (scons n1 L')
subst_equiv_vars < search.
Proof completed.
Abella < Theorem subst_equiv_vars' :
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' ->
vars_of_ssubst ML' Vs.
============================
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' ->
vars_of_ssubst ML' Vs
subst_equiv_vars' < induction on 2.
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML' Vs
============================
forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' @ ->
vars_of_ssubst ML' Vs
subst_equiv_vars' < intros.
Variables: L Vs ML ML' I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML' Vs
H1 : vars_of_sctx L Vs
H2 : subst_equiv L I ML ML' @
============================
vars_of_ssubst ML' Vs
subst_equiv_vars' < case H2.
Subgoal 1:
Variables: Vs I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML' Vs
H1 : vars_of_sctx nil Vs
============================
vars_of_ssubst smnil Vs
Subgoal 2 is:
vars_of_ssubst (smcons (smap n1 V') ML'1) (Vs n1)
subst_equiv_vars' < case H1.
Subgoal 1:
Variables: I
IH : forall L Vs ML ML' I, vars_of_sctx L Vs -> subst_equiv L I ML ML' * ->
vars_of_ssubst ML' Vs
============================
vars_of_ssubst smnil snil
Subgoal 2 is:
vars_of_ssubst (smcons (smap n1 V') ML'1) (Vs n1)
subst_equiv_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 L I ML ML' * ->
vars_of_ssubst ML' Vs
H1 : vars_of_sctx (of n1 T :: L1) (Vs n1)
H3 : equiv T I V V'
H4 : subst_equiv L1 I ML1 ML'1 *
============================
vars_of_ssubst (smcons (smap n1 V') ML'1) (Vs n1)
subst_equiv_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 L I ML ML' * ->
vars_of_ssubst ML' Vs
H3 : equiv T I V V'
H4 : subst_equiv L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
============================
vars_of_ssubst (smcons (smap n1 V') ML'1) (scons n1 L')
subst_equiv_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 L I ML ML' * ->
vars_of_ssubst ML' Vs
H3 : equiv T I V V'
H4 : subst_equiv L1 I ML1 ML'1 *
H5 : vars_of_sctx L1 L'
H6 : vars_of_ssubst ML'1 L'
============================
vars_of_ssubst (smcons (smap n1 V') ML'1) (scons n1 L')
subst_equiv_vars' < search.
Proof completed.
Abella < Theorem subst_equiv_mem :
forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V').
============================
forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
subst_equiv_mem < induction on 2.
IH : forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L * ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
============================
forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L @ ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
subst_equiv_mem < intros.
Variables: L ML ML' M T I
IH : forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L * ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
H1 : subst_equiv L I ML ML'
H2 : member (of M T) L @
============================
exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V'
subst_equiv_mem < case H2.
Subgoal 1:
Variables: ML ML' M T I L1
IH : forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L * ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
H1 : subst_equiv (of M T :: L1) I ML ML'
============================
exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V'
Subgoal 2 is:
exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V'
subst_equiv_mem < case H1.
Subgoal 1:
Variables: T I ML'1 V' ML1 V L2
IH : forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L * ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
H3 : equiv T I V V'
H4 : subst_equiv L2 I ML1 ML'1
============================
exists V1 V'1, smmember (smap n1 V1) (smcons (smap n1 V) ML1) /\
smmember (smap n1 V'1) (smcons (smap n1 V') ML'1) /\ equiv T I V1 V'1
Subgoal 2 is:
exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V'
subst_equiv_mem < search.
Subgoal 2:
Variables: ML ML' M T I L1 B
IH : forall L ML ML' M T I, subst_equiv L I ML ML' -> member (of M T) L * ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
H1 : subst_equiv (B :: L1) I ML ML'
H3 : member (of M T) L1 *
============================
exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V'
subst_equiv_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 L I ML ML' -> member (of M T) L * ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
H3 : member (of (M n1) T) L2 *
H4 : equiv T1 I V V'
H5 : subst_equiv L2 I ML1 ML'1
============================
exists V1 V'1, smmember (smap (M n1) V1) (smcons (smap n1 V) ML1) /\
smmember (smap (M n1) V'1) (smcons (smap n1 V') ML'1) /\ equiv T I V1 V'1
subst_equiv_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 L I ML ML' -> member (of M T) L * ->
(exists V V', smmember (smap M V) ML /\ smmember (smap M V') ML' /\
equiv T I V V')
H3 : member (of (M n1) T) L2 *
H4 : equiv T1 I V V'
H5 : subst_equiv L2 I ML1 ML'1
H6 : smmember (smap (M n1) (V1 n1)) ML1
H7 : smmember (smap (M n1) (V'1 n1)) ML'1
H8 : equiv T I (V1 n1) (V'1 n1)
============================
exists V1 V'1, smmember (smap (M n1) V1) (smcons (smap n1 V) ML1) /\
smmember (smap (M n1) V'1) (smcons (smap n1 V') ML'1) /\ equiv T I V1 V'1
subst_equiv_mem < search.
Proof completed.
Abella < Theorem subst_equiv_closed :
forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv L K ML ML' ->
le J K -> subst_equiv L J ML ML'.
============================
forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv L K ML ML' ->
le J K -> subst_equiv L J ML ML'
subst_equiv_closed < induction on 3.
IH : forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
============================
forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv L K ML ML' @ ->
le J K -> subst_equiv L J ML ML'
subst_equiv_closed < intros.
Variables: L K J ML ML'
IH : forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H2 : sctx L
H3 : subst_equiv L K ML ML' @
H4 : le J K
============================
subst_equiv L J ML ML'
subst_equiv_closed < case H3.
Subgoal 1:
Variables: K J
IH : forall L K J ML ML', {is_nat K} -> sctx L -> subst_equiv L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H2 : sctx nil
H4 : le J K
============================
subst_equiv nil J smnil smnil
Subgoal 2 is:
subst_equiv (of n1 T :: L1) J (smcons (smap n1 V) ML1)
(smcons (smap n1 V') ML'1)
subst_equiv_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 L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv T K V V'
H6 : subst_equiv L1 K ML1 ML'1 *
============================
subst_equiv (of n1 T :: L1) J (smcons (smap n1 V) ML1)
(smcons (smap n1 V') ML'1)
subst_equiv_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 L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv T K V V'
H6 : subst_equiv L1 K ML1 ML'1 *
============================
equiv T J V V'
Subgoal 2.2 is:
subst_equiv L1 J ML1 ML'1
subst_equiv_closed < backchain equiv_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 L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv T K V V'
H6 : subst_equiv L1 K ML1 ML'1 *
============================
{is_sty T}
Subgoal 2.2 is:
subst_equiv L1 J ML1 ML'1
subst_equiv_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 L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H4 : le J K
H5 : equiv T K V V'
H6 : subst_equiv L1 K ML1 ML'1 *
H7 : sctx L1
H8 : {is_sty T}
============================
{is_sty T}
Subgoal 2.2 is:
subst_equiv L1 J ML1 ML'1
subst_equiv_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 L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv T K V V'
H6 : subst_equiv L1 K ML1 ML'1 *
============================
subst_equiv L1 J ML1 ML'1
subst_equiv_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 L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H2 : sctx (of n1 T :: L1)
H4 : le J K
H5 : equiv T K V V'
H6 : subst_equiv L1 K ML1 ML'1 *
============================
sctx L1
subst_equiv_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 L K ML ML' * ->
le J K -> subst_equiv L J ML ML'
H1 : {is_nat K}
H4 : le J K
H5 : equiv T K V V'
H6 : subst_equiv L1 K ML1 ML'1 *
H7 : sctx L1
H8 : {is_sty T}
============================
sctx L1
subst_equiv_closed < search.
Proof completed.
Abella < Theorem sim_pred :
forall I M M' K, sim tnat I M (x\let (pred x) (v\K v)) M' ->
sim tnat I (pred M) K M'.
============================
forall I M M' K, sim tnat I M (x\let (pred x) (v\K v)) M' ->
sim tnat I (pred M) K M'
sim_pred < intros.
Variables: I M M' K
H1 : sim tnat I M (x\let (pred x) (v\K v)) M'
============================
sim tnat I (pred M) K M'
sim_pred < unfold.
Variables: I M M' K
H1 : sim 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 tnat N V V')
sim_pred < intros.
Variables: I M M' K J V
H1 : sim 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 tnat N V V'
sim_pred < apply nstep_pred_inv to H4 H3.
Variables: I M M' K J1 N N'
H1 : sim 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 tnat N (nat N') V'
sim_pred < case H2.
Variables: I M M' K J1 N N' N1
H1 : sim 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 tnat N (nat N') V'
sim_pred < case H7.
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N (nat N') V'
sim_pred < assert {add J1 (s N1) (s N3)}.
Subgoal 1:
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N (nat N') V'
sim_pred < backchain add_s.
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N (nat N') V'
sim_pred < apply sim_nstep to H1 H5 _ H9.
Variables: M M' K J1 N N' N1 N3 V'
H1 : sim 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 tnat (s N1) (nat N) V'
============================
exists N V', step* M' (K V') /\ {add (s J1) N (s N3)} /\
equiv tnat N (nat N') V'
sim_pred < case H11.
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N (nat N') V'
sim_pred < exists N1.
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N1 (nat N') V'
sim_pred < exists nat N'.
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N1 (nat N') (nat N')
sim_pred < split.
Subgoal 2:
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N1 (nat N') (nat N')
sim_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 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 tnat N1 (nat N') (nat N')
sim_pred < search.
Subgoal 4:
Variables: M M' K J1 N N' N1 N3
H1 : sim 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 tnat N1 (nat N') (nat N')
sim_pred < search.
Proof completed.
Abella < Theorem sim_ifz :
forall I T K' M1 M2 M3 M2' M3' M', {is_nat I} -> {is_sty T} ->
sim T I M2 K' M2' -> sim T I M3 K' M3' ->
sim tnat I M1 (x1\ifz x1 M2' M3') M' -> sim 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 T I M2 K' M2' -> sim T I M3 K' M3' ->
sim tnat I M1 (x1\ifz x1 M2' M3') M' -> sim T I (ifz M1 M2 M3) K' M'
sim_ifz < intros.
Variables: I T K' M1 M2 M3 M2' M3' M'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') M'
============================
sim T I (ifz M1 M2 M3) K' M'
sim_ifz < unfold.
Variables: I T K' M1 M2 M3 M2' M3' M'
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V')
sim_ifz < intros.
Variables: I T K' M1 M2 M3 M2' M3' M' J V
H1 : {is_nat I}
H2 : {is_sty T}
H3 : sim T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < apply sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat z) V'
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat z) V'
H18 : le I1 I
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat z) V'
H19 : {add I1 N2 I}
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < apply sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat z) V'
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
exists V', step* M' (K' V') /\ {add J N3 I} /\ equiv T N3 V V'
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
step* M' (K' V'1) /\ {add J N3 I} /\ equiv T N3 V V'1
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < split.
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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
step* M' (K' V'1)
Subgoal 2.2 is:
{add J N3 I}
Subgoal 2.3 is:
equiv T N3 V V'1
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < backchain step*_trans with M2 = M2'.
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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
step* M' M2'
Subgoal 2.2 is:
{add J N3 I}
Subgoal 2.3 is:
equiv T N3 V V'1
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < backchain step*_trans with M2 = ifz (nat z) M2' M3'.
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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
{add J N3 I}
Subgoal 2.3 is:
equiv T N3 V V'1
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
equiv T N3 V V'1
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < backchain equiv_closed with K = N2.
Subgoal 2.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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
{is_nat N2}
Subgoal 2.3.2 is:
le N3 N2
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < backchain add_arg2_isnat.
Subgoal 2.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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
le N3 N2
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < backchain add_le_complement with N = I, N1 = I1, N1' = J.
Subgoal 2.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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat z) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M2' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
{is_nat N2}
Subgoal 3 is:
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < backchain add_arg2_isnat.
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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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 T N V V'
sim_ifz < apply sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat (s N)) V'
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat (s N)) V'
H18 : le I1 I
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat (s N)) V'
H19 : {add I1 N2 I}
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_ifz < apply sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz V' M2' M3')
H17 : equiv tnat N1 (nat (s N)) V'
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
exists N V', step* M' (K' V') /\ {add J N I} /\ equiv T N V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
exists V', step* M' (K' V') /\ {add J N3 I} /\ equiv T N3 V V'
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
step* M' (K' V'1) /\ {add J N3 I} /\ equiv T N3 V V'1
sim_ifz < split.
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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
step* M' (K' V'1)
Subgoal 3.2 is:
{add J N3 I}
Subgoal 3.3 is:
equiv T N3 V V'1
sim_ifz < backchain step*_trans with M2 = M3'.
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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
step* M' M3'
Subgoal 3.2 is:
{add J N3 I}
Subgoal 3.3 is:
equiv T N3 V V'1
sim_ifz < backchain step*_trans with M2 = ifz (nat (s N)) M2' M3'.
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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
{add J N3 I}
Subgoal 3.3 is:
equiv T N3 V V'1
sim_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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
equiv T N3 V V'1
sim_ifz < backchain equiv_closed with K = N2.
Subgoal 3.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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
{is_nat N2}
Subgoal 3.3.2 is:
le N3 N2
sim_ifz < backchain add_arg2_isnat.
Subgoal 3.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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
le N3 N2
sim_ifz < backchain add_le_complement with N = I, N1 = I1, N1' = J.
Subgoal 3.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 T I M2 K' M2'
H4 : sim T I M3 K' M3'
H5 : sim tnat I M1 (x1\ifz x1 M2' M3') 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' (ifz (nat (s N)) M2' M3')
H19 : {add I1 N2 I}
H20 : step* M3' (K' V'1)
H21 : equiv T N2 V V'1
H22 : {add J N3 I}
============================
{is_nat N2}
sim_ifz < backchain add_arg2_isnat.
Proof completed.
Abella < Theorem sim_plus :
forall I M1 M2 M2' M' K, nabla x1, {is_nat I} -> sim tnat I M1 M2' M' ->
sim tnat I M2 (x2\let (plus x1 x2) (v\K v)) (M2' x1) ->
sim tnat I (plus M1 M2) K M'.
============================
forall I M1 M2 M2' M' K, nabla x1, {is_nat I} -> sim tnat I M1 M2' M' ->
sim tnat I M2 (x2\let (plus x1 x2) (v\K v)) (M2' x1) ->
sim tnat I (plus M1 M2) K M'
sim_plus < intros.
Variables: I M1 M2 M2' M' K
H1 : {is_nat I}
H2 : sim tnat I M1 M2' M'
H3 : sim tnat I M2 (x2\let (plus n1 x2) (v\K v)) (M2' n1)
============================
sim tnat I (plus M1 M2) K M'
sim_plus < unfold.
Variables: I M1 M2 M2' M' K
H1 : {is_nat I}
H2 : sim tnat I M1 M2' M'
H3 : sim 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 tnat N V V')
sim_plus < intros.
Variables: I M1 M2 M2' M' K J V
H1 : {is_nat I}
H2 : sim tnat I M1 M2' M'
H3 : sim 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 tnat N V V'
sim_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 tnat I M1 M2' M'
H3 : sim 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 tnat N (nat N3) V'
sim_plus < case H4.
Variables: I M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N
H1 : {is_nat I}
H2 : sim tnat I M1 M2' M'
H3 : sim 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 tnat N (nat N3) V'
sim_plus < case H11.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4
H1 : {is_nat (s N4)}
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 tnat N (nat N3) V'
sim_plus < case H1.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 tnat N (nat N3) V'
sim_plus < apply add_assoc to H7 H12.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 tnat N (nat N3) V'
sim_plus < assert exists V1', step* M' (M2' V1') /\ equiv 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 tnat (s N4) M1 M2' M'
H3 : sim 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 tnat (s N23) (nat N1) V1'
Subgoal is:
exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
equiv tnat N (nat N3) V'
sim_plus < backchain sim_nstep.
Subgoal 1:
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 tnat N (nat N3) V'
sim_plus < backchain add_s.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 tnat (s N23) (nat N1) V1'
============================
exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
equiv tnat N (nat N3) V'
sim_plus < case H16.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1'
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 tnat (s N23) (nat N1) V1'
============================
exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
equiv tnat N (nat N3) V'
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat N (nat N3) V'
sim_plus < backchain add_arg1_isnat.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1'
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat N (nat N3) V'
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat N (nat N3) V'
sim_plus < assert exists V2', step* (M2' n1) (let (plus n1 V2') K) /\
equiv 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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat (s N5) (nat N2) V2'
Subgoal is:
exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
equiv tnat N (nat N3) V'
sim_plus < backchain sim_nstep.
Subgoal 3:
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat N (nat N3) V'
sim_plus < backchain add_s.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat (s N5) (nat N2) V2'
============================
exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
equiv tnat N (nat N3) V'
sim_plus < case H22.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 V2'
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat (s N5) (nat N2) (V2' n1)
============================
exists N V', step* M' (K V') /\ {add (s J12) N (s N4)} /\
equiv tnat N (nat N3) V'
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) V'
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) V'
sim_plus < apply equiv_tm2 to _ _ H24.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 V2'
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) V'
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) V'
sim_plus < exists N.
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5 M'1
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) V'
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) (nat N3)
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) (nat N3)
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) (nat N3)
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) (nat N3)
sim_plus < apply equiv_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) (nat N3)
sim_plus < apply equiv_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) (nat N3)
sim_plus < case H24.
Subgoal 4:
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 V1' N5
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat N (nat N3) (nat N3)
sim_plus < case H18.
Subgoal 4:
Variables: M1 M2 M2' M' K J1 J2 J12 N1 N2 N3 N N4 N23 N5
H2 : sim tnat (s N4) M1 M2' M'
H3 : sim 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 tnat N (nat N3) (nat N3)
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 tnat N (nat N3) (nat N3)
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 tnat N (nat N3) (nat N3)
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 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 tnat N (nat N3) (nat N3)
sim_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 tnat (s N4) M1 M2' M'
H3 : sim 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 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 tnat (s N5) (nat N2) M'1
H25 : {is_nat N23}
H26 : {is_nat N5}
H27 : {tm M'1}
============================
equiv tnat N (nat N3) (nat N3)
sim_plus < search.
Proof completed.
Abella < Theorem sim_unit :
forall I K, sim tunit I unit K (K unit).
============================
forall I K, sim tunit I unit K (K unit)
sim_unit < intros.
Variables: I K
============================
sim tunit I unit K (K unit)
sim_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 tunit N V V')
sim_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 tunit N V V'
sim_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 tunit N unit V'
sim_unit < search.
Proof completed.
Abella < Theorem sim_pair :
forall I T1 T2 M1 M2 M2' M' K, nabla x1, {is_nat I} -> {is_sty T1} ->
{is_sty T2} -> sim T1 I M1 M2' M' ->
sim T2 I M2 (x2\let (pair x1 x2) (v\K v)) (M2' x1) ->
sim (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 T1 I M1 M2' M' ->
sim T2 I M2 (x2\let (pair x1 x2) (v\K v)) (M2' x1) ->
sim (prod T1 T2) I (pair M1 M2) K M'
sim_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 T1 I M1 M2' M'
H5 : sim T2 I M2 (x2\let (pair n1 x2) (v\K v)) (M2' n1)
============================
sim (prod T1 T2) I (pair M1 M2) K M'
sim_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 T1 I M1 M2' M'
H5 : sim 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 (prod T1 T2) N V V')
sim_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 T1 I M1 M2' M'
H5 : sim 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 (prod T1 T2) N V V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 (prod T1 T2) N (pair V1 V2) V'
sim_pair < assert exists V1', step* M' (M2' V1') /\ equiv 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 T1 I M1 M2' M'
H5 : sim 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 T1 N1 V1 V1'
Subgoal is:
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_pair < backchain sim_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 T1 I M1 M2' M'
H5 : sim 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 T1 N1 V1 V1'
============================
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 T1 N1 V1 V1'
============================
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 T1 N1 V1 V1'
============================
{is_nat J}
Subgoal is:
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 T1 N1 V1 V1'
H20 : {add J1 I1 J}
============================
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 (prod T1 T2) N (pair V1 V2) V'
sim_pair < assert exists V2', step* (M2' n1) (let (pair n1 V2') K) /\ equiv 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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 V2'
Subgoal is:
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_pair < backchain sim_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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 V2'
============================
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 (V2' n1)
============================
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 (V2' n1)
H26 : {is_nat N1}
============================
exists N V', step* M' (K V') /\ {add J N I} /\
equiv (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) V'
sim_pair < apply equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) V'
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_pair < apply equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_pair < apply equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 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 (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
equiv (prod T1 T2) N (pair V1 V2) (pair V1' M'1)
sim_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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
equiv T1 N V1 V1'
Subgoal 6.2 is:
equiv 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_pair < backchain equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 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 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_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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
equiv 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_pair < backchain equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 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_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 T1 I M1 M2' M'
H5 : sim 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 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 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_pair < backchain equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 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_pair < backchain equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 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_pair < backchain equiv_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 T1 I M1 M2' M'
H5 : sim 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 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 T2 N2 V2 M'1
H26 : {is_nat N1}
H27 : {is_nat N2}
H28 : {tm M'1}
============================
{tm M'1}
sim_pair < backchain equiv_tm2 with T = T2, K = N2.
Proof completed.
Abella < Theorem sim_fst :
forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
sim (prod T1 T2) I M (x\let (fst x) (v\K v)) M' -> sim T1 I (fst M) K M'.
============================
forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
sim (prod T1 T2) I M (x\let (fst x) (v\K v)) M' -> sim T1 I (fst M) K M'
sim_fst < intros.
Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim (prod T1 T2) I M (x\let (fst x) (v\K v)) M'
============================
sim T1 I (fst M) K M'
sim_fst < unfold.
Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim (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 T1 N V V')
sim_fst < intros.
Variables: T1 T2 K I M M' J V
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim (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 T1 N V V'
sim_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 (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 T1 N V V'
sim_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 (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 T1 N V V'
sim_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 (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 T1 N V V'
sim_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 (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 T1 N V V'
sim_fst < apply sim_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 (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 (prod T1 T2) (s N) (pair V V') V'1
============================
exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv T1 N V V'
sim_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 (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V'
sim_fst < case H1.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H2 : {is_sty (prod T1 T2)}
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V'
sim_fst < case H2.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V'
sim_fst < apply add_arg2_isnat to _ H10.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V'
sim_fst < exists N.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V'
sim_fst < exists V1'.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V1'
sim_fst < split.
Subgoal 1:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V1'
sim_fst < apply equiv_val2 to _ _ H14.
Subgoal 1:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V1'
sim_fst < apply equiv_val2 to _ _ H15.
Subgoal 1:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V1'
sim_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 (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V1'
sim_fst < search.
Subgoal 3:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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 T1 N V V1'
sim_fst < backchain equiv_closed with K = s N.
Subgoal 3:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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_fst < backchain le_succ.
Subgoal 3:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V V1'
H15 : equiv 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_fst < backchain le_refl.
Proof completed.
Abella < Theorem sim_snd :
forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
sim (prod T1 T2) I M (x\let (snd x) (v\K v)) M' -> sim T2 I (snd M) K M'.
============================
forall T1 T2 K I M M', {is_nat I} -> {is_sty (prod T1 T2)} ->
sim (prod T1 T2) I M (x\let (snd x) (v\K v)) M' -> sim T2 I (snd M) K M'
sim_snd < intros.
Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim (prod T1 T2) I M (x\let (snd x) (v\K v)) M'
============================
sim T2 I (snd M) K M'
sim_snd < unfold.
Variables: T1 T2 K I M M'
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim (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 T2 N V V')
sim_snd < intros.
Variables: T1 T2 K I M M' J V
H1 : {is_nat I}
H2 : {is_sty (prod T1 T2)}
H3 : sim (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 T2 N V V'
sim_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 (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 T2 N V V'
sim_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 (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 T2 N V V'
sim_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 (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 T2 N V V'
sim_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 (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 T2 N V V'
sim_snd < apply sim_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 (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 (prod T1 T2) (s N) (pair V' V) V'1
============================
exists N V', step* M' (K V') /\ {add (s K') N (s N3)} /\ equiv T2 N V V'
sim_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 (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V'
sim_snd < case H1.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H2 : {is_sty (prod T1 T2)}
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V'
sim_snd < case H2.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V'
sim_snd < apply add_arg2_isnat to _ H10.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V'
sim_snd < exists N.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V'
sim_snd < exists V2'.
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V2'
sim_snd < split.
Subgoal 1:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V2'
sim_snd < apply equiv_val2 to _ _ H14.
Subgoal 1:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V2'
sim_snd < apply equiv_val2 to _ _ H15.
Subgoal 1:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V2'
sim_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 (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V2'
sim_snd < search.
Subgoal 3:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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 T2 N V V2'
sim_snd < backchain equiv_closed with K = s N.
Subgoal 3:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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_snd < backchain le_succ.
Subgoal 3:
Variables: T1 T2 K M M' V K' V' N N3 V2' V1'
H3 : sim (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 T1 (s N) V' V1'
H15 : equiv 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_snd < backchain le_refl.
Proof completed.
Abella < Theorem sim_app :
forall T1 T I K' M1 M' M2 M2', nabla x1, {is_nat I} -> {is_sty (arr T1 T)} ->
sim (arr T1 T) I M1 M2' M' ->
sim T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app x1 p))) (M2' x1) ->
sim 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 (arr T1 T) I M1 M2' M' ->
sim T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app x1 p))) (M2' x1) ->
sim T I (app M1 M2) K' M'
sim_app < intros.
Variables: T1 T I K' M1 M' M2 M2'
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim (arr T1 T) I M1 M2' M'
H4 : sim T1 I M2 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
(M2' n1)
============================
sim T I (app M1 M2) K' M'
sim_app < unfold.
Variables: T1 T I K' M1 M' M2 M2'
H1 : {is_nat I}
H2 : {is_sty (arr T1 T)}
H3 : sim (arr T1 T) I M1 M2' M'
H4 : sim 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 T N V V')
sim_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 (arr T1 T) I M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) I M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) I M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) I M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) I M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_app < assert exists V1', step* M' (M2' V1') /\ equiv (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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (arr T1 T) (s N1) (fix R) V1'
Subgoal is:
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_app < backchain sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (arr T1 T) (s N1) (fix R) V1'
============================
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (arr T1 T) (s N1) (fix R) V1'
============================
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_app < assert exists V2', step* (M2' n1) (let (fix f\K') (k\let (pair k V2') (p\app n1 p))) /\
equiv 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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 T1 (s N2) V2 V2'
Subgoal is:
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_app < backchain sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 T1 (s N2) V2 V2'
============================
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 T1 (s N2) V2 (V2' n1)
============================
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_app < apply equiv_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_app < apply equiv_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 T N V V'
sim_app < assert sim 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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
sim_app < backchain app_equiv_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
sim_app < assert exists V', step* (R' (fix R') (pair (fix f\K') M'1)) (K' V') /\
equiv 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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
Subgoal is:
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_app < backchain sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
============================
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
============================
exists N V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
============================
exists V', step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
============================
step* M' (K' V') /\ {add (s J123) N (s N3)} /\ equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
============================
step* M' (K' V')
Subgoal 12 is:
{add (s J123) N (s N3)}
Subgoal 13 is:
equiv T N V V'
sim_app < apply equiv_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 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 T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
============================
{add (s J123) N (s N3)}
Subgoal 13 is:
equiv T N V V'
sim_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 (arr T1 T) (s N3) M1 M2' M'
H4 : sim 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 (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 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 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 T N V V'
============================
equiv T N V V'
sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' -> {TL |- of M T} ->
{CL |- cps M K M'} -> app_ssubst ML M P -> app_ssubst ML' M' P' ->
(nabla x, app_ssubst ML' (K x) (K' x)) -> sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' -> {TL |- of M T} ->
{CL |- cps M K M'} -> app_ssubst ML M P -> app_ssubst ML' M' P' ->
(nabla x, app_ssubst ML' (K x) (K' x)) -> sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' -> {TL |- of M T} ->
{CL |- cps M K M'}@ -> app_ssubst ML M P -> app_ssubst ML' M' P' ->
(nabla x, app_ssubst ML' (K x) (K' x)) -> sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H11 : {CL |- cps M K M'}@
H12 : app_ssubst ML M P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
============================
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) T}
H12 : app_ssubst ML (nat N) P
H13 : app_ssubst ML' (K (nat N)) P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
============================
sim T I P K' P'
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) P
H13 : app_ssubst ML' (K (nat N)) P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
============================
sim tnat I P K' P'
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) (nat N)
H13 : app_ssubst ML' (K (nat N)) P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
============================
sim tnat I (nat N) K' P'
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) (nat N)
H13 : app_ssubst ML' (K (nat N)) P'
H15 : app_ssubst ML' (K n1) (K' n1)
============================
sim tnat I (nat N) K' P'
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) (nat N)
H13 : app_ssubst ML' (K (nat N)) P'
H15 : app_ssubst ML' (K n1) (K' n1)
H16 : app_ssubst ML' (K (nat N)) (K' (nat N))
============================
sim tnat I (nat N) K' P'
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) (nat N)
H13 : app_ssubst ML' (K (nat N)) (K' (nat N))
H15 : app_ssubst ML' (K n1) (K' n1)
H16 : app_ssubst ML' (K (nat N)) (K' (nat N))
============================
sim tnat I (nat N) K' (K' (nat N))
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) (nat N)
H13 : app_ssubst ML' (K (nat N)) (K' (nat N))
H15 : app_ssubst ML' (K n1) (K' n1)
H16 : app_ssubst 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 tnat N1 V V')
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) (nat N)
H13 : app_ssubst ML' (K (nat N)) (K' (nat N))
H15 : app_ssubst ML' (K n1) (K' n1)
H16 : app_ssubst 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 tnat N1 V V'
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (nat N) tnat}
H12 : app_ssubst ML (nat N) (nat N)
H13 : app_ssubst ML' (K (nat N)) (K' (nat N))
H15 : app_ssubst ML' (K n1) (K' n1)
H16 : app_ssubst 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 tnat N1 (nat N) V'
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_ssubst ML (pred M1) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
============================
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M2, P = pred M2 /\ app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_ssubst ML (pred M1) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
============================
exists M2, P = pred M2 /\ app_ssubst ML M1 M2
Subgoal 2 is:
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_ssubst ML (pred M1) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H16 : exists M2, P = pred M2 /\ app_ssubst ML M1 M2
============================
sim T I P K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
============================
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pred M1) T}
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
sim tnat I (pred M2) K' P'
Subgoal 2.3 is:
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
sim tnat I M2 (x\let (pred x) (v\K' v)) P'
Subgoal 2.2 is:
sim tnat I (pred M2) K' P'
Subgoal 2.3 is:
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
nabla x, app_ssubst ML' (let (pred x) (v\K v)) (let (pred x) (v\K' v))
Subgoal 2.2 is:
sim tnat I (pred M2) K' P'
Subgoal 2.3 is:
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
app_ssubst ML' (let (pred n1) (v\K v)) (let (pred n1) (v\K' v))
Subgoal 2.2 is:
sim tnat I (pred M2) K' P'
Subgoal 2.3 is:
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
app_ssubst ML' (pred n1) (pred n1)
Subgoal 2.2 is:
sim tnat I (pred M2) K' P'
Subgoal 2.3 is:
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
============================
app_ssubst ML' n1 n1
Subgoal 2.2 is:
sim tnat I (pred M2) K' P'
Subgoal 2.3 is:
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL |- of M1 tnat}
H20 : sim tnat I M2 (x\let (pred x) (v\K' v)) P'
============================
sim tnat I (pred M2) K' P'
Subgoal 2.3 is:
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL, [F] |- of (pred M1) T}
H20 : member F TL
============================
sim T I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pred M1) (pred M2)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (pred x) (v\K v)) M'}*
H17 : app_ssubst ML M1 M2
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : {TL, [F] |- of (pred M1) T1}
H20 : member F TL
H21 : name (pred M1)
============================
sim T1 I (pred M2) K' P'
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_ssubst ML (plus M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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 T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M3 M4, P = plus M3 M4 /\ app_ssubst ML M1 M3 /\ app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_ssubst ML (plus M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3 /\ app_ssubst ML M2 M4
Subgoal 3 is:
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_ssubst ML (plus M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3 /\
app_ssubst ML M2 M4
============================
sim T I P K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
============================
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M4', app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
============================
exists M4', app_ssubst ML' (M2' n1) M4'
Subgoal 3 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : exists M4', app_ssubst ML' (M2' n1) M4'
============================
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (plus M1 M2) T}
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
============================
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
============================
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
============================
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
============================
sim tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)
Subgoal 3.3 is:
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
============================
nabla x, app_ssubst ML' (let (plus n1 x) (v\K v)) (let (plus n1 x) (v\K' v))
Subgoal 3.3 is:
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (let (plus n1 n2) (v\K v)) (let (plus n1 n2) (v\K' v))
Subgoal 3.3 is:
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (plus n1 n2) (plus n1 n2)
Subgoal 3.3 is:
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' n1 n1
Subgoal 3.3.1.2 is:
app_ssubst ML' n2 n2
Subgoal 3.3 is:
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' n2 n2
Subgoal 3.3 is:
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : sim tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)
============================
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : sim tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)
============================
sim tnat I M3 M4' P'
Subgoal 3.3 is:
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 tnat}
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : sim tnat I M4 (x2\let (plus n1 x2) (v\K' v)) (M4' n1)
H26 : sim tnat I M3 M4' P'
============================
sim tnat I (plus M3 M4) K' P'
Subgoal 3.4 is:
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL, [F] |- of (plus M1 M2) T}
H23 : member F TL
============================
sim T I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (plus M1 M2) (plus M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {TL, [F] |- of (plus M1 M2) T1}
H23 : member F TL
H24 : name (plus M1 M2)
============================
sim T1 I (plus M3 M4) K' P'
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_ssubst ML (ifz M1 M2 M3) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
============================
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M4 M5 M6, P = ifz M4 M5 M6 /\ app_ssubst ML M1 M4 /\
app_ssubst ML M2 M5 /\ app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_ssubst ML (ifz M1 M2 M3) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
============================
exists M4 M5 M6, P = ifz M4 M5 M6 /\ app_ssubst ML M1 M4 /\
app_ssubst ML M2 M5 /\ app_ssubst ML M3 M6
Subgoal 4 is:
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_ssubst ML (ifz M1 M2 M3) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H18 : exists M4 M5 M6, P = ifz M4 M5 M6 /\ app_ssubst ML M1 M4 /\
app_ssubst ML M2 M5 /\ app_ssubst ML M3 M6
============================
sim T I P K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (ifz M1 M2 M3) T}
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M5', app_ssubst ML' M2' 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
============================
exists M5', app_ssubst ML' M2' M5'
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H26 : exists M5', app_ssubst ML' M2' M5'
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M6', app_ssubst ML' M3' 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
============================
exists M6', app_ssubst ML' M3' M6'
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H28 : exists M6', app_ssubst ML' M3' M6'
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim tnat I M4 (x1\ifz x1 M5' M6') P'.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
============================
sim tnat I M4 (x1\ifz x1 M5' M6') P'
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain IH with M = M1, M' = M', K = x1\ifz x1 M2' M3', ML = ML, ML' = ML'.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
============================
nabla x, app_ssubst ML' (ifz x M2' M3') (ifz x M5' M6')
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < intros.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
============================
app_ssubst ML' (ifz n1 M2' M3') (ifz n1 M5' M6')
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_ifz_compose.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
============================
app_ssubst ML' n1 n1
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
H30 : sim tnat I M4 (x1\ifz x1 M5' M6') P'
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim T I M5 K' M5'.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
H30 : sim tnat I M4 (x1\ifz x1 M5' M6') P'
============================
sim T I M5 K' M5'
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain IH with M = M2, M' = M2', K = K, ML = ML, ML' = ML'.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
H30 : sim tnat I M4 (x1\ifz x1 M5' M6') P'
H31 : sim T I M5 K' M5'
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim T I M6 K' M6'.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
H30 : sim tnat I M4 (x1\ifz x1 M5' M6') P'
H31 : sim T I M5 K' M5'
============================
sim T I M6 K' M6'
Subgoal 4.2 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain IH with M = M3, M' = M3', K = K, ML = ML, ML' = ML'.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL |- of M1 tnat}
H23 : {TL |- of M2 T}
H24 : {TL |- of M3 T}
H25 : app_ssubst ML' (K n1) (K' n1)
H27 : app_ssubst ML' M2' M5'
H29 : app_ssubst ML' M3' M6'
H30 : sim tnat I M4 (x1\ifz x1 M5' M6') P'
H31 : sim T I M5 K' M5'
H32 : sim T I M6 K' M6'
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 4.3 is:
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_ifz.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL, [F] |- of (ifz M1 M2 M3) T}
H23 : member F TL
============================
sim T I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (ifz M1 M2 M3) (ifz M4 M5 M6)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M2 K M2'}*
H16 : {CL |- cps M3 K M3'}*
H17 : {CL |- cps M1 (x1\ifz x1 M2' M3') M'}*
H19 : app_ssubst ML M1 M4
H20 : app_ssubst ML M2 M5
H21 : app_ssubst ML M3 M6
H22 : {TL, [F] |- of (ifz M1 M2 M3) T1}
H23 : member F TL
H24 : name (ifz M1 M2 M3)
============================
sim T1 I (ifz M4 M5 M6) K' P'
Subgoal 5 is:
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_ssubst ML unit P
H13 : app_ssubst ML' (K unit) P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
============================
sim T I P K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_ssubst ML unit unit
H13 : app_ssubst ML' (K unit) P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
============================
sim T I unit K' P'
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_ssubst ML unit unit
H13 : app_ssubst ML' (K unit) (R' M'1)
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : app_ssubst ML' unit M'1
H16 : app_ssubst ML' (K n1) (R' n1)
============================
sim T I unit K' (R' M'1)
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_ssubst ML unit unit
H13 : app_ssubst ML' (K unit) (R' unit)
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : app_ssubst ML' unit unit
H16 : app_ssubst ML' (K n1) (R' n1)
============================
sim T I unit K' (R' unit)
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_ssubst ML unit unit
H13 : app_ssubst ML' (K unit) (R' unit)
H15 : app_ssubst ML' unit unit
H16 : app_ssubst ML' (K n1) (R' n1)
H17 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I unit K' (R' unit)
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of unit T}
H12 : app_ssubst ML unit unit
H13 : app_ssubst ML' (K unit) (K' unit)
H15 : app_ssubst ML' unit unit
H16 : app_ssubst ML' (K n1) (K' n1)
H17 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I unit K' (K' unit)
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of unit tunit}
H12 : app_ssubst ML unit unit
H13 : app_ssubst ML' (K unit) (K' unit)
H15 : app_ssubst ML' unit unit
H16 : app_ssubst ML' (K n1) (K' n1)
H17 : app_ssubst ML' (K n1) (K' n1)
============================
sim tunit I unit K' (K' unit)
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_ssubst ML (pair M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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 T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M3 M4, P = pair M3 M4 /\ app_ssubst ML M1 M3 /\ app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_ssubst ML (pair M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3 /\ app_ssubst ML M2 M4
Subgoal 6 is:
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_ssubst ML (pair M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3 /\
app_ssubst ML M2 M4
============================
sim T I P K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
============================
sim T I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M4', app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
============================
exists M4', app_ssubst ML' (M2' n1) M4'
Subgoal 6 is:
sim T I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : exists M4', app_ssubst ML' (M2' n1) M4'
============================
sim T I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) T}
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
============================
sim T I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) (prod T1 T2)}
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
============================
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (pair M1 M2) (prod T1 T2)}
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
============================
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst ML' (M2' n1) (M4' n1)
H22 : {is_sty T1}
H23 : {is_sty T2}
H24 : {TL |- of M1 T1}
H25 : {TL |- of M2 T2}
============================
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
============================
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
============================
sim T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)
Subgoal 6.3 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
============================
nabla x, app_ssubst ML' (let (pair n1 x) (v\K v)) (let (pair n1 x) (v\K' v))
Subgoal 6.3 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (let (pair n1 n2) (v\K v)) (let (pair n1 n2) (v\K' v))
Subgoal 6.3 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (pair n1 n2) (pair n1 n2)
Subgoal 6.3 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' n1 n1
Subgoal 6.3.1.2 is:
app_ssubst ML' n2 n2
Subgoal 6.3 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' n2 n2
Subgoal 6.3 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
H27 : sim T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)
============================
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
H27 : sim T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)
============================
sim T1 I M3 M4' P'
Subgoal 6.3 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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_ssubst ML' (K n1) (K' n1)
H27 : sim T2 I M4 (x2\let (pair n1 x2) (v\K' v)) (M4' n1)
H28 : sim T1 I M3 M4' P'
============================
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 6.4 is:
sim (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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 (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (pair M1 M2) (pair M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H21 : app_ssubst 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 (prod T1 T2) I (pair M3 M4) K' P'
Subgoal 7 is:
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fst M1) T}
H12 : app_ssubst ML (fst M1) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
============================
sim T I P K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fst M1) T}
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
============================
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
============================
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim (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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
sim (prod T T2) I M1' (x\let (fst x) (v\K' v)) P'
Subgoal 7.1 is:
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
{is_sty (prod T T2)}
Subgoal 7.1.1.2 is:
nabla x, app_ssubst ML' (let (fst x) (v\K v)) (let (fst x) (v\K' v))
Subgoal 7.1 is:
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
nabla x, app_ssubst ML' (let (fst x) (v\K v)) (let (fst x) (v\K' v))
Subgoal 7.1 is:
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (let (fst n1) (v\K v)) (let (fst n1) (v\K' v))
Subgoal 7.1 is:
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (fst n1) (fst n1)
Subgoal 7.1 is:
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' n1 n1
Subgoal 7.1 is:
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : sim (prod T T2) I M1' (x\let (fst x) (v\K' v)) P'
============================
sim T I (fst M1') K' P'
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T T2)}
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : sim (prod T T2) I M1' (x\let (fst x) (v\K' v)) P'
============================
{is_sty (prod T T2)}
Subgoal 7.2 is:
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL, [F] |- of (fst M1) T}
H18 : member F TL
============================
sim T I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fst M1) (fst M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (fst x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL, [F] |- of (fst M1) T1}
H18 : member F TL
H19 : name (fst M1)
============================
sim T1 I (fst M1') K' P'
Subgoal 8 is:
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (snd M1) T}
H12 : app_ssubst ML (snd M1) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
============================
sim T I P K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (snd M1) T}
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
============================
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
============================
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim (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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
sim (prod T1 T) I M1' (x\let (snd x) (v\K' v)) P'
Subgoal 8.1 is:
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
{is_sty (prod T1 T)}
Subgoal 8.1.1.2 is:
nabla x, app_ssubst ML' (let (snd x) (v\K v)) (let (snd x) (v\K' v))
Subgoal 8.1 is:
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
nabla x, app_ssubst ML' (let (snd x) (v\K v)) (let (snd x) (v\K' v))
Subgoal 8.1 is:
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (let (snd n1) (v\K v)) (let (snd n1) (v\K' v))
Subgoal 8.1 is:
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' (snd n1) (snd n1)
Subgoal 8.1 is:
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
============================
app_ssubst ML' n1 n1
Subgoal 8.1 is:
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : sim (prod T1 T) I M1' (x\let (snd x) (v\K' v)) P'
============================
sim T I (snd M1') K' P'
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL |- of M1 (prod T1 T)}
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : sim (prod T1 T) I M1' (x\let (snd x) (v\K' v)) P'
============================
{is_sty (prod T1 T)}
Subgoal 8.2 is:
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL, [F] |- of (snd M1) T}
H18 : member F TL
============================
sim T I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (snd M1) (snd M1')
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL |- cps M1 (x\let (snd x) (v\K v)) M'}*
H16 : app_ssubst ML M1 M1'
H17 : {TL, [F] |- of (snd M1) T1}
H18 : member F TL
H19 : name (snd M1)
============================
sim T1 I (snd M1') K' P'
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_ssubst ML (let M1 R) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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 T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M2 R1, P = let M2 R1 /\ app_ssubst ML M1 M2 /\
(nabla x, app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_ssubst ML (let M1 R) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2 /\
(nabla x, app_ssubst ML (R x) (R1 x))
Subgoal 9 is:
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_ssubst ML (let M1 R) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2 /\
(nabla x, app_ssubst ML (R x) (R1 x))
============================
sim T I P K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (let M1 R) T}
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
============================
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
============================
sim T I (let M2 R1) K' P'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists R1', app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
============================
exists R1', app_ssubst ML' (R' n1) R1'
Subgoal 9.2 is:
sim T I (let M2 R1) K' P'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H22 : exists R1', app_ssubst ML' (R' n1) R1'
============================
sim T I (let M2 R1) K' P'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
============================
sim T I (let M2 R1) K' P'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
============================
sim T I (let M2 R1) K' P'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
============================
sim T1 I M2 R1' P'
Subgoal 9.2 is:
sim T I (let M2 R1) K' P'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim T1 I M2 R1' P'
============================
sim T I (let M2 R1) K' P'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T N V V')
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
sim 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain IH with M = R n1, M' = R' n1, K = K, ML = smcons (smap n1 V1) ML, ML' = smcons (smap n1 V') ML', TL = of n1 T1 :: TL, CL = pi k\cps n1 k (k n1) :: CL, VL = scons 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
subst_equiv (of n1 T1 :: TL) N23 (smcons (smap n1 V1) ML)
(smcons (smap n1 V') ML')
Subgoal 9.2.5.2 is:
app_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
equiv T1 N23 V1 V'
Subgoal 9.2.5.1.2 is:
subst_equiv TL N23 ML ML'
Subgoal 9.2.5.2 is:
app_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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 TL N23 ML ML'
Subgoal 9.2.5.2 is:
app_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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 TL N23 ML ML'
Subgoal 9.2.5.2 is:
app_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
subst_equiv TL N23 ML ML'
Subgoal 9.2.5.2 is:
app_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain subst_equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst 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_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
app_ssubst (smcons (smap n1 V1) ML) (R n1) (R1 V1)
Subgoal 9.2.5.3 is:
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain explct_meta_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
============================
app_ssubst (smcons (smap 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 T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain explct_meta_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim T N23 (R1 V1) K' (R1' V')
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists V'', step* (R1' V') (K' V'') /\ equiv 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim T N23 (R1 V1) K' (R1' V')
============================
exists V'', step* (R1' V') (K' V'') /\ equiv T N V V''
Subgoal 9.2 is:
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim T N23 (R1 V1) K' (R1' V')
H47 : exists V'', step* (R1' V') (K' V'') /\ equiv T N V V''
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim T N23 (R1 V1) K' (R1' V')
H48 : step* (R1' V') (K' V'')
H49 : equiv T N V V''
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL (s N3) ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL |- of M1 T1}
H21 : {TL, of n1 T1 |- of (R n1) T}
H23 : app_ssubst ML' (R' n1) (R1' n1)
H24 : {is_sty T1}
H25 : sim 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 T1 (s N23) V1 V'
H39 : {is_nat N3}
H40 : app_ssubst ML' (K n1) (K' n1)
H41 : {is_nat N23}
H42 : {tm V1}
H43 : {val V1}
H44 : {tm V'}
H45 : {val V'}
H46 : sim T N23 (R1 V1) K' (R1' V')
H48 : step* (R1' V') (K' V'')
H49 : equiv T N V V''
H50 : step* P' (K' V'')
============================
exists N V', step* P' (K' V') /\ {add (s K3) N (s N3)} /\ equiv T N V V'
Subgoal 9.3 is:
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL, [F] |- of (let M1 R) T}
H21 : member F TL
============================
sim T I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (let M1 R) (let M2 R1)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M2
H19 : app_ssubst ML (R n1) (R1 n1)
H20 : {TL, [F] |- of (let M1 R) T1}
H21 : member F TL
H22 : name (let M1 R)
============================
sim T1 I (let M2 R1) K' P'
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) P
H13 : app_ssubst ML'
(let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_ssubst 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 T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists R1, P = fix R1 /\ (nabla f x, app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) P
H13 : app_ssubst ML'
(let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_ssubst 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_ssubst ML (R f x) (R1 f x))
Subgoal 10 is:
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) P
H13 : app_ssubst ML'
(let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_ssubst 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_ssubst ML (R f x) (R1 f x))
============================
sim T I P K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst ML'
(let (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) K) P'
H14 : nabla x, app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
============================
sim T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists R1', nabla f k x, app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
============================
exists R1', nabla f k x, app_ssubst ML' (R' f k x) (R1' f k x)
Subgoal 10 is:
sim T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : app_ssubst ML' (R' n1 n2 n3) (M'1 n3 n2 n1)
============================
exists R1', nabla f k x, app_ssubst ML' (R' f k x) (R1' f k x)
Subgoal 10 is:
sim T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H19 : exists R1', nabla f k x, app_ssubst ML' (R' f k x) (R1' f k x)
============================
sim T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
============================
sim T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) M1
H22 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x)))) M1
H22 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst ML' (fix (f\p\let (fst p) (k\let (snd p) (x\R' f k x))))
(fix R'1)
H22 : app_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
(let (M2 n2 n1) (R3 n2 n1))
H24 : app_ssubst ML' (fst n2) (M2 n2 n1)
H25 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
(let (fst (M1' n1 n2)) (R3 n2 n1))
H24 : app_ssubst ML' (fst n2) (fst (M1' n1 n2))
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x)) (R3 n2 n1 n3)
H26 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
(let (fst (M1' n1 n2)) (R3 n2 n1))
H24 : app_ssubst ML' (fst n2) (fst (M1' n1 n2))
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x)) (R3 n2 n1 n3)
H26 : app_ssubst ML' n2 (M1' n1 n2)
H27 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst ML' (let (fst n2) (k\let (snd n2) (x\R' n1 k x)))
(let (fst n2) (R3 n2 n1))
H24 : app_ssubst ML' (fst n2) (fst n2)
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x)) (R3 n2 n1 n3)
H26 : app_ssubst ML' n2 n2
H27 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst 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_ssubst ML' (fst n2) (fst n2)
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x))
(let (M3 n3 n1 n2) (R4 n3 n1 n2))
H26 : app_ssubst ML' n2 n2
H27 : app_ssubst ML' n2 n2
H28 : app_ssubst ML' (snd n2) (M3 n3 n1 n2)
H29 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst 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_ssubst ML' (fst n2) (fst n2)
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x))
(let (snd (M1'1 n2 n1 n3)) (R4 n3 n1 n2))
H26 : app_ssubst ML' n2 n2
H27 : app_ssubst ML' n2 n2
H28 : app_ssubst ML' (snd n2) (snd (M1'1 n2 n1 n3))
H29 : app_ssubst ML' (R' n1 n3 n4) (R4 n3 n1 n2 n4)
H30 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst 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_ssubst ML' (fst n2) (fst n2)
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x))
(let (snd n2) (R4 n3 n1 n2))
H26 : app_ssubst ML' n2 n2
H27 : app_ssubst ML' n2 n2
H28 : app_ssubst ML' (snd n2) (snd n2)
H29 : app_ssubst ML' (R' n1 n3 n4) (R4 n3 n1 n2 n4)
H30 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst 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_ssubst ML' (fst n2) (fst n2)
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x))
(let (snd n2) (R4 n3 n1 n2))
H26 : app_ssubst ML' n2 n2
H27 : app_ssubst ML' n2 n2
H28 : app_ssubst ML' (snd n2) (snd n2)
H29 : app_ssubst ML' (R' n1 n3 n4) (R4 n3 n1 n2 n4)
H30 : app_ssubst ML' n2 n2
H31 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (R2 n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1'1 n2 n1 n3)
H21 : app_ssubst 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_ssubst ML' (K n1) (R2 n1)
H23 : app_ssubst 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_ssubst ML' (fst n2) (fst n2)
H25 : app_ssubst ML' (let (snd n2) (x\R' n1 n3 x))
(let (snd n2) (z4\R1'1 n3 n1 z4))
H26 : app_ssubst ML' n2 n2
H27 : app_ssubst ML' n2 n2
H28 : app_ssubst ML' (snd n2) (snd n2)
H29 : app_ssubst ML' (R' n1 n3 n4) (R1'1 n3 n1 n4)
H30 : app_ssubst ML' n2 n2
H31 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T I (fix R1) K' P'
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (fix R) T}
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
============================
sim 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (arr T1 T2) N V V')
Subgoal 10.5 is:
sim 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (arr T1 T2) N V V'
Subgoal 10.5 is:
sim 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (arr T1 T2) N (fix R1) V'
Subgoal 10.5 is:
sim 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (arr T1 T2) I (fix R1) V'
Subgoal 10.5 is:
sim 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sof_to_tm with L = of n2 T1 :: of n1 (arr T1 T2) :: TL, Vs = scons n2 (scons 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain subst_equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst ML' (fst n2) (fst n2)
Subgoal 10.4.3.1.2.4.2 is:
app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst ML' n2 n2
Subgoal 10.4.3.1.2.4.2 is:
app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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_ssubst ML' VL
Subgoal 10.4.3.1.3 is:
forall J V1 V1' V2 V2' K, lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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_ssubst ML' VL
Subgoal 10.4.3.1.3 is:
forall J V1 V1' V2 V2' K, lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_ssubst 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_ssubst ML' VL
Subgoal 10.4.3.1.3 is:
forall J V1 V1' V2 V2' K, lt J I -> equiv T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain subst_equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J V1 V1' ->
equiv (arr T1 T2) J V2 V2' ->
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (arr T1 T2) J1 V2 V2'
============================
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
============================
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
============================
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
============================
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (arr T1 T2) J1 V2 V2'
H32 : {add J1 (s N) I}
H33 : {is_nat J1}
H34 : {tm V1}
H35 : {tm V1'}
============================
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 = smcons (smap n3 V1) (smcons (smap n2 V2) ML), ML' = smcons (smap n3 V1') (smcons (smap 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 = scons n3 (scons 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 (of n3 T1 :: of n2 (arr T1 T2) :: TL) J1
(smcons (smap n3 V1) (smcons (smap n2 V2) ML))
(smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
Subgoal 10.4.3.1.3.1.2 is:
app_ssubst (smcons (smap n3 V1) (smcons (smap n2 V2) ML)) (R n2 n3)
(R1 V2 V1)
Subgoal 10.4.3.1.3.1.3 is:
app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 T1 J1 V1 V1'
Subgoal 10.4.3.1.3.1.1.2 is:
subst_equiv (of n2 (arr T1 T2) :: TL) J1 (smcons (smap n2 V2) ML)
(smcons (smap n2 V2') ML')
Subgoal 10.4.3.1.3.1.2 is:
app_ssubst (smcons (smap n3 V1) (smcons (smap n2 V2) ML)) (R n2 n3)
(R1 V2 V1)
Subgoal 10.4.3.1.3.1.3 is:
app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 (of n2 (arr T1 T2) :: TL) J1 (smcons (smap n2 V2) ML)
(smcons (smap n2 V2') ML')
Subgoal 10.4.3.1.3.1.2 is:
app_ssubst (smcons (smap n3 V1) (smcons (smap n2 V2) ML)) (R n2 n3)
(R1 V2 V1)
Subgoal 10.4.3.1.3.1.3 is:
app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 (arr T1 T2) J1 V2 V2'
Subgoal 10.4.3.1.3.1.1.2.2 is:
subst_equiv TL J1 ML ML'
Subgoal 10.4.3.1.3.1.2 is:
app_ssubst (smcons (smap n3 V1) (smcons (smap n2 V2) ML)) (R n2 n3)
(R1 V2 V1)
Subgoal 10.4.3.1.3.1.3 is:
app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 TL J1 ML ML'
Subgoal 10.4.3.1.3.1.2 is:
app_ssubst (smcons (smap n3 V1) (smcons (smap n2 V2) ML)) (R n2 n3)
(R1 V2 V1)
Subgoal 10.4.3.1.3.1.3 is:
app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain subst_equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst (smcons (smap n3 V1) (smcons (smap n2 V2) ML)) (R n2 n3)
(R1 V2 V1)
Subgoal 10.4.3.1.3.1.3 is:
app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain explct_meta_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst (smcons (smap n2 V2) ML) (R n2 n3) (R1 V2 n3)
Subgoal 10.4.3.1.3.1.3 is:
app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain explct_meta_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (R' n2 n1 n3)
(R1' V2' n1 V1')
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain explct_meta_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst (smcons (smap n2 V2') ML') (R' n2 n1 n3) (R1' V2' n1 n3)
Subgoal 10.4.3.1.3.1.4 is:
nabla x, app_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain explct_meta_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML'))
(app n1 x) (app n1 x)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst (smcons (smap n3 V1') (smcons (smap n2 V2') ML')) (app n1 n4)
(app n1 n4)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst (smcons (smap n2 V2') ML') (app n1 n4) (app n1 n4)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst ML' (app n1 n4) (app n1 n4)
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst ML' n1 n1
Subgoal 10.4.3.1.3.1.4.2 is:
app_ssubst ML' n4 n4
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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_ssubst ML' n4 n4
Subgoal 10.4.3.1.3 is:
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 T2 J1 (R1 V2 V1) (y\app n1 y) (R1' V2' n1 V1')
============================
sim 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 (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 T2 N V V')
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < apply equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N1 V3 V'
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N1 V3 M'1
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N1 V3 M'1
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N1 V3 M'1
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N1 V3 M'1
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N1 V3 M'1
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 T1 J1 V1 V1'
H31 : equiv (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 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 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 T2 N1 V3 M'1
Subgoal 10.4.3 is:
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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_arr (arr T1 T2) I (fix R1)
(fix (f\p\let (fst p) (k\let (snd p) (x\R1' f k x))))
============================
equiv (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 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain equiv_arr_to_equiv.
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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst ML' (R' n1 n2 n3) (R1' n1 n2 n3)
H22 : {TL, [F] |- of (fix R) T}
H23 : member F TL
============================
sim 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (fix R) (fix R1)
H13 : app_ssubst 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_ssubst ML (R n1 n2) (R1 n1 n2)
H18 : app_ssubst ML' (K n1) (K' n1)
H20 : app_ssubst 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 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 T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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 T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M3 M4, P = app M3 M4 /\ app_ssubst ML M1 M3 /\ app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3 /\ app_ssubst ML M2 M4
Subgoal 11 is:
sim T I P K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3 /\
app_ssubst ML M2 M4
============================
sim T I P K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
============================
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert exists M4', app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
============================
exists M4', app_ssubst ML' (M2' n1) M4'
Subgoal 11 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H21 : exists M4', app_ssubst ML' (M2' n1) M4'
============================
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of (app M1 M2) T}
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
============================
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
============================
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
sim T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p))) (M4' n1)
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
nabla x, app_ssubst 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 T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst 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 T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' (fix f\K) (fix f\K')
Subgoal 11.3.1.2 is:
app_ssubst ML' (let (pair n3 n2) (p\app n1 p))
(let (pair n3 n2) (p\app n1 p))
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' (let (pair n3 n2) (p\app n1 p))
(let (pair n3 n2) (p\app n1 p))
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' (pair n3 n2) (pair n3 n2)
Subgoal 11.3.1.2.2 is:
app_ssubst ML' (app n1 n4) (app n1 n4)
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' n3 n3
Subgoal 11.3.1.2.1.2 is:
app_ssubst ML' n2 n2
Subgoal 11.3.1.2.2 is:
app_ssubst ML' (app n1 n4) (app n1 n4)
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' n2 n2
Subgoal 11.3.1.2.2 is:
app_ssubst ML' (app n1 n4) (app n1 n4)
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' (app n1 n4) (app n1 n4)
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' n1 n1
Subgoal 11.3.1.2.2.2 is:
app_ssubst ML' n4 n4
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
============================
app_ssubst ML' n4 n4
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
H26 : sim T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
(M4' n1)
============================
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < assert sim (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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
H26 : sim T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
(M4' n1)
============================
sim (arr T1 T) I M3 M4' P'
Subgoal 11.3 is:
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL |- of M1 (arr T1 T)}
H24 : {TL |- of M2 T1}
H25 : {is_sty T1}
H26 : sim T1 I M4 (x2\let (fix f\K') (k\let (pair k x2) (p\app n1 p)))
(M4' n1)
H27 : sim (arr T1 T) I M3 M4' P'
============================
sim T I (app M3 M4) K' P'
Subgoal 11.4 is:
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim T I P K' P'
cps_sem_pres < backchain sim_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL, [F] |- of (app M1 M2) T}
H24 : member F TL
============================
sim T I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H12 : app_ssubst ML (app M1 M2) (app M3 M4)
H13 : app_ssubst 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_ssubst ML M1 M3
H19 : app_ssubst ML M2 M4
H20 : app_ssubst ML' (K n1) (K' n1)
H22 : app_ssubst ML' (M2' n1) (M4' n1)
H23 : {TL, [F] |- of (app M1 M2) T1}
H24 : member F TL
H25 : name (app M1 M2)
============================
sim T1 I (app M3 M4) K' P'
Subgoal 12 is:
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H15 : {CL, [F] |- cps M K M'}*
H16 : member F CL
============================
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M P
H13 : app_ssubst ML' M' P'
H14 : nabla x, app_ssubst 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 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M P
H13 : app_ssubst ML' (K M) P'
H14 : nabla x, app_ssubst ML' (K x) (K' x)
H16 : member (pi k\cps M k (k M)) CL
H17 : name M
============================
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M P
H13 : app_ssubst ML' (K M) P'
H14 : nabla x, app_ssubst 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 T I P K' P'
cps_sem_pres < apply subst_equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M P
H13 : app_ssubst ML' (K M) P'
H14 : nabla x, app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
============================
sim T I P K' P'
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst ML' (K M) P'
H14 : nabla x, app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
============================
sim T I V K' P'
cps_sem_pres < assert exists K1' M1', P' = K1' M1' /\ app_ssubst ML' M M1' /\
(nabla x, app_ssubst 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst ML' (K M) P'
H14 : nabla x, app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
============================
exists K1' M1', P' = K1' M1' /\ app_ssubst ML' M M1' /\
(nabla x, app_ssubst ML' (K x) (K1' x))
Subgoal 12 is:
sim T I V K' P'
cps_sem_pres < backchain app_ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst ML' (K M) P'
H14 : nabla x, app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H22 : exists K1' M1', P' = K1' M1' /\ app_ssubst ML' M M1' /\
(nabla x, app_ssubst ML' (K x) (K1' x))
============================
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst ML' (K M) (K1' M1')
H14 : nabla x, app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M M1'
H24 : app_ssubst ML' (K n1) (K1' n1)
============================
sim T I V K' (K1' M1')
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst ML' (K M) (K1' V')
H14 : nabla x, app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K1' n1)
============================
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K1' n1)
H25 : app_ssubst ML' (K n1) (K' n1)
============================
sim T I V K' (K1' V')
cps_sem_pres < apply ssubst_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : app_ssubst ML' (K n1) (K' n1)
============================
sim 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : app_ssubst 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 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : app_ssubst 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 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : app_ssubst 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 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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V
H13 : app_ssubst 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 : smmember (smap M V) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : app_ssubst 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 T N V1 V'1
cps_sem_pres < backchain equiv_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 ->
ssubst ML -> ssubst ML' -> subst_equiv TL I ML ML' ->
{TL |- of M T} -> {CL |- cps M K M'}* -> app_ssubst ML M P ->
app_ssubst ML' M' P' -> (nabla x, app_ssubst ML' (K x) (K' x)) ->
sim 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 : ssubst ML
H8 : ssubst ML'
H9 : subst_equiv TL I ML ML'
H10 : {TL |- of M T}
H12 : app_ssubst ML M V1
H13 : app_ssubst 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 : smmember (smap M V1) ML
H20 : smmember (smap M V') ML'
H21 : equiv T I V1 V'
H23 : app_ssubst ML' M V'
H24 : app_ssubst ML' (K n1) (K' n1)
H25 : app_ssubst 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 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 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 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 tnat N M K M'
============================
step* M' (K V)
cps_sem_pres_base < assert exists V', step* M' (K V') /\ equiv 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 tnat N M K M'
============================
exists V', step* M' (K V') /\ equiv tnat z V V'
Subgoal is:
step* M' (K V)
cps_sem_pres_base < backchain sim_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 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 tnat N M K M'
H8 : exists V', step* M' (K V') /\ equiv 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 tnat N M K M'
H9 : step* M' (K V')
H10 : equiv 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 tnat N M K M'
H9 : step* M' (K (nat N1))
============================
step* M' (K (nat N1))
cps_sem_pres_base < search.
Proof completed.
Abella <