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

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

Abella < Define ch_ctx : (list o) -> prop by 
ch_ctx nil;
nabla x, ch_ctx (ch x (htm nil (hbase x)) :: L) := ch_ctx L.

Abella < Define vars_of_ch_ctx : (list o) -> (list tm') -> prop by 
vars_of_ch_ctx nil nil;
vars_of_ch_ctx (ch X (htm nil (hbase X)) :: L) (X :: L') := vars_of_ch_ctx L L'.

Abella < Theorem ch_ctx_mem : 
forall L E, ch_ctx L -> member E L ->
  (exists X, E = ch X (htm nil (hbase X)) /\ name X).


============================
 forall L E, ch_ctx L -> member E L ->
   (exists X, E = ch X (htm nil (hbase X)) /\ name X)

ch_ctx_mem < induction on 2.

IH : forall L E, ch_ctx L -> member E L * ->
       (exists X, E = ch X (htm nil (hbase X)) /\ name X)
============================
 forall L E, ch_ctx L -> member E L @ ->
   (exists X, E = ch X (htm nil (hbase X)) /\ name X)

ch_ctx_mem < intros.

Variables: L E
IH : forall L E, ch_ctx L -> member E L * ->
       (exists X, E = ch X (htm nil (hbase X)) /\ name X)
H1 : ch_ctx L
H2 : member E L @
============================
 exists X, E = ch X (htm nil (hbase X)) /\ name X

ch_ctx_mem < case H2.
Subgoal 1:

Variables: E L1
IH : forall L E, ch_ctx L -> member E L * ->
       (exists X, E = ch X (htm nil (hbase X)) /\ name X)
H1 : ch_ctx (E :: L1)
============================
 exists X, E = ch X (htm nil (hbase X)) /\ name X

Subgoal 2 is:
 exists X, E = ch X (htm nil (hbase X)) /\ name X

ch_ctx_mem < case H1.
Subgoal 1:

Variables: L2
IH : forall L E, ch_ctx L -> member E L * ->
       (exists X, E = ch X (htm nil (hbase X)) /\ name X)
H3 : ch_ctx L2
============================
 exists X, ch n1 (htm nil (hbase n1)) = ch X (htm nil (hbase X)) /\ name X

Subgoal 2 is:
 exists X, E = ch X (htm nil (hbase X)) /\ name X

ch_ctx_mem < search.
Subgoal 2:

Variables: E L1 B
IH : forall L E, ch_ctx L -> member E L * ->
       (exists X, E = ch X (htm nil (hbase X)) /\ name X)
H1 : ch_ctx (B :: L1)
H3 : member E L1 *
============================
 exists X, E = ch X (htm nil (hbase X)) /\ name X

ch_ctx_mem < case H1.
Subgoal 2:

Variables: E L2
IH : forall L E, ch_ctx L -> member E L * ->
       (exists X, E = ch X (htm nil (hbase X)) /\ name X)
H3 : member (E n1) L2 *
H4 : ch_ctx L2
============================
 exists X, E n1 = ch X (htm nil (hbase X)) /\ name X

ch_ctx_mem < apply IH to _ H3.
Subgoal 2:

Variables: L2 X
IH : forall L E, ch_ctx L -> member E L * ->
       (exists X, E = ch X (htm nil (hbase X)) /\ name X)
H3 : member (ch (X n1) (htm nil (hbase (X n1)))) L2 *
H4 : ch_ctx L2
H5 : name (X n1)
============================
 exists X1, ch (X n1) (htm nil (hbase (X n1))) =
 ch X1 (htm nil (hbase X1)) /\ name X1

ch_ctx_mem < search.
Proof completed.
Abella < Theorem ch_ctx_ctx'_sync : 
forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
  member (ch M (htm nil (hbase M))) CL -> (exists T, member (of' M T) L).


============================
 forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
   member (ch M (htm nil (hbase M))) CL -> (exists T, member (of' M T) L)

ch_ctx_ctx'_sync < induction on 3.

IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
============================
 forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
   member (ch M (htm nil (hbase M))) CL @ -> (exists T, member (of' M T) L)

ch_ctx_ctx'_sync < intros.

Variables: L Vs CL M
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H1 : vars_of_ch_ctx CL Vs
H2 : vars_of_ctx' L Vs
H3 : member (ch M (htm nil (hbase M))) CL @
============================
 exists T, member (of' M T) L

ch_ctx_ctx'_sync < case H3.
Subgoal 1:

Variables: L Vs M L1
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H1 : vars_of_ch_ctx (ch M (htm nil (hbase M)) :: L1) Vs
H2 : vars_of_ctx' L Vs
============================
 exists T, member (of' M T) L

Subgoal 2 is:
 exists T, member (of' M T) L

ch_ctx_ctx'_sync < case H1.
Subgoal 1:

Variables: L M L1 L'
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H2 : vars_of_ctx' L (M :: L')
H4 : vars_of_ch_ctx L1 L'
============================
 exists T, member (of' M T) L

Subgoal 2 is:
 exists T, member (of' M T) L

ch_ctx_ctx'_sync < case H2.
Subgoal 1:

Variables: M L1 L' L2 T
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H4 : vars_of_ch_ctx L1 L'
H5 : vars_of_ctx' L2 L'
============================
 exists T1, member (of' M T1) (of' M T :: L2)

Subgoal 2 is:
 exists T, member (of' M T) L

ch_ctx_ctx'_sync < search.
Subgoal 2:

Variables: L Vs M L1 B
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H1 : vars_of_ch_ctx (B :: L1) Vs
H2 : vars_of_ctx' L Vs
H4 : member (ch M (htm nil (hbase M))) L1 *
============================
 exists T, member (of' M T) L

ch_ctx_ctx'_sync < case H1.
Subgoal 2:

Variables: L M L1 L' X
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H2 : vars_of_ctx' L (X :: L')
H4 : member (ch M (htm nil (hbase M))) L1 *
H5 : vars_of_ch_ctx L1 L'
============================
 exists T, member (of' M T) L

ch_ctx_ctx'_sync < case H2.
Subgoal 2:

Variables: M L1 L' X L2 T
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H4 : member (ch M (htm nil (hbase M))) L1 *
H5 : vars_of_ch_ctx L1 L'
H6 : vars_of_ctx' L2 L'
============================
 exists T1, member (of' M T1) (of' X T :: L2)

ch_ctx_ctx'_sync < apply IH to _ _ H4.
Subgoal 2:

Variables: M L1 L' X L2 T T1
IH : forall L Vs CL M, vars_of_ch_ctx CL Vs -> vars_of_ctx' L Vs ->
       member (ch M (htm nil (hbase M))) CL * ->
       (exists T, member (of' M T) L)
H4 : member (ch M (htm nil (hbase M))) L1 *
H5 : vars_of_ch_ctx L1 L'
H6 : vars_of_ctx' L2 L'
H7 : member (of' M T1) L2
============================
 exists T1, member (of' M T1) (of' X T :: L2)

ch_ctx_ctx'_sync < search.
Proof completed.
Abella < Theorem cappend_str [A] : 
forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3} -> {appd M1 M2 M3}.


============================
 forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3} -> {appd M1 M2 M3}

cappend_str < induction on 2.

IH : forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}* -> {appd M1 M2 M3}
============================
 forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}@ -> {appd M1 M2 M3}

cappend_str < intros.

Variables: L M1 M2 M3
IH : forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}* -> {appd M1 M2 M3}
H1 : ch_ctx L
H2 : {L |- appd M1 M2 M3}@
============================
 {appd M1 M2 M3}

cappend_str < case H2.
Subgoal 1:

Variables: L M3
IH : forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}* -> {appd M1 M2 M3}
H1 : ch_ctx L
============================
 {appd nil M3 M3}

Subgoal 2 is:
 {appd (X :: L1) M2 (X :: L3)}

Subgoal 3 is:
 {appd M1 M2 M3}

cappend_str < search.
Subgoal 2:

Variables: L M2 L3 L1 X
IH : forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}* -> {appd M1 M2 M3}
H1 : ch_ctx L
H3 : {L |- appd L1 M2 L3}*
============================
 {appd (X :: L1) M2 (X :: L3)}

Subgoal 3 is:
 {appd M1 M2 M3}

cappend_str < apply IH to _ H3.
Subgoal 2:

Variables: L M2 L3 L1 X
IH : forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}* -> {appd M1 M2 M3}
H1 : ch_ctx L
H3 : {L |- appd L1 M2 L3}*
H4 : {appd L1 M2 L3}
============================
 {appd (X :: L1) M2 (X :: L3)}

Subgoal 3 is:
 {appd M1 M2 M3}

cappend_str < search.
Subgoal 3:

Variables: L M1 M2 M3 F
IH : forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}* -> {appd M1 M2 M3}
H1 : ch_ctx L
H3 : {L, [F] |- appd M1 M2 M3}*
H4 : member F L
============================
 {appd M1 M2 M3}

cappend_str < apply ch_ctx_mem to _ H4.
Subgoal 3:

Variables: L M1 M2 M3 X
IH : forall L M1 M2 M3, ch_ctx L -> {L |- appd M1 M2 M3}* -> {appd M1 M2 M3}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- appd M1 M2 M3}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {appd M1 M2 M3}

cappend_str < case H3.
Proof completed.
Abella < Theorem hconstr_str : 
forall L M R M', ch_ctx L -> {L |- hconstr M R M'} -> {hconstr M R M'}.


============================
 forall L M R M', ch_ctx L -> {L |- hconstr M R M'} -> {hconstr M R M'}

hconstr_str < induction on 2.

IH : forall L M R M', ch_ctx L -> {L |- hconstr M R M'}* -> {hconstr M R M'}
============================
 forall L M R M', ch_ctx L -> {L |- hconstr M R M'}@ -> {hconstr M R M'}

hconstr_str < intros.

Variables: L M R M'
IH : forall L M R M', ch_ctx L -> {L |- hconstr M R M'}* -> {hconstr M R M'}
H1 : ch_ctx L
H2 : {L |- hconstr M R M'}@
============================
 {hconstr M R M'}

hconstr_str < case H2.
Subgoal 1:

Variables: L R M1
IH : forall L M R M', ch_ctx L -> {L |- hconstr M R M'}* -> {hconstr M R M'}
H1 : ch_ctx L
============================
 {hconstr (hbase M1) R (hbase (R M1))}

Subgoal 2 is:
 {hconstr (habs R1) R (habs R')}

Subgoal 3 is:
 {hconstr M R M'}

hconstr_str < search.
Subgoal 2:

Variables: L R R' R1
IH : forall L M R M', ch_ctx L -> {L |- hconstr M R M'}* -> {hconstr M R M'}
H1 : ch_ctx L
H3 : {L |- hconstr (R1 n1) R (R' n1)}*
============================
 {hconstr (habs R1) R (habs R')}

Subgoal 3 is:
 {hconstr M R M'}

hconstr_str < apply IH to _ H3.
Subgoal 2:

Variables: L R R' R1
IH : forall L M R M', ch_ctx L -> {L |- hconstr M R M'}* -> {hconstr M R M'}
H1 : ch_ctx L
H3 : {L |- hconstr (R1 n1) R (R' n1)}*
H4 : {hconstr (R1 n1) R (R' n1)}
============================
 {hconstr (habs R1) R (habs R')}

Subgoal 3 is:
 {hconstr M R M'}

hconstr_str < search.
Subgoal 3:

Variables: L M R M' F
IH : forall L M R M', ch_ctx L -> {L |- hconstr M R M'}* -> {hconstr M R M'}
H1 : ch_ctx L
H3 : {L, [F] |- hconstr M R M'}*
H4 : member F L
============================
 {hconstr M R M'}

hconstr_str < apply ch_ctx_mem to _ H4.
Subgoal 3:

Variables: L M R M' X
IH : forall L M R M', ch_ctx L -> {L |- hconstr M R M'}* -> {hconstr M R M'}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- hconstr M R M'}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {hconstr M R M'}

hconstr_str < case H3.
Proof completed.
Abella < Theorem hcombine_str : 
forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'} ->
  {hcombine M1 M2 R M'}.


============================
 forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'} ->
   {hcombine M1 M2 R M'}

hcombine_str < induction on 2.

IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
============================
 forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}@ ->
   {hcombine M1 M2 R M'}

hcombine_str < intros.

Variables: L M1 M2 R M'
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
H2 : {L |- hcombine M1 M2 R M'}@
============================
 {hcombine M1 M2 R M'}

hcombine_str < case H2.
Subgoal 1:

Variables: L R M3 M4
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
============================
 {hcombine (hbase M4) (hbase M3) R (hbase (R M4 M3))}

Subgoal 2 is:
 {hcombine (habs R1) M2 R (habs R')}

Subgoal 3 is:
 {hcombine (hbase M) (habs R1) R (habs R')}

Subgoal 4 is:
 {hcombine M1 M2 R M'}

hcombine_str < search.
Subgoal 2:

Variables: L M2 R R' R1
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine (R1 n1) M2 R (R' n1)}*
============================
 {hcombine (habs R1) M2 R (habs R')}

Subgoal 3 is:
 {hcombine (hbase M) (habs R1) R (habs R')}

Subgoal 4 is:
 {hcombine M1 M2 R M'}

hcombine_str < apply IH to _ H3.
Subgoal 2:

Variables: L M2 R R' R1
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine (R1 n1) M2 R (R' n1)}*
H4 : {hcombine (R1 n1) M2 R (R' n1)}
============================
 {hcombine (habs R1) M2 R (habs R')}

Subgoal 3 is:
 {hcombine (hbase M) (habs R1) R (habs R')}

Subgoal 4 is:
 {hcombine M1 M2 R M'}

hcombine_str < search.
Subgoal 3:

Variables: L R R' R1 M
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine (hbase M) (R1 n1) R (R' n1)}*
============================
 {hcombine (hbase M) (habs R1) R (habs R')}

Subgoal 4 is:
 {hcombine M1 M2 R M'}

hcombine_str < apply IH to _ H3.
Subgoal 3:

Variables: L R R' R1 M
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine (hbase M) (R1 n1) R (R' n1)}*
H4 : {hcombine (hbase M) (R1 n1) R (R' n1)}
============================
 {hcombine (hbase M) (habs R1) R (habs R')}

Subgoal 4 is:
 {hcombine M1 M2 R M'}

hcombine_str < search.
Subgoal 4:

Variables: L M1 M2 R M' F
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
H3 : {L, [F] |- hcombine M1 M2 R M'}*
H4 : member F L
============================
 {hcombine M1 M2 R M'}

hcombine_str < apply ch_ctx_mem to _ H4.
Subgoal 4:

Variables: L M1 M2 R M' X
IH : forall L M1 M2 R M', ch_ctx L -> {L |- hcombine M1 M2 R M'}* ->
       {hcombine M1 M2 R M'}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- hcombine M1 M2 R M'}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {hcombine M1 M2 R M'}

hcombine_str < case H3.
Proof completed.
Abella < Theorem hcombine3_str : 
forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'} ->
  {hcombine3 M1 M2 M3 R M'}.


============================
 forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'} ->
   {hcombine3 M1 M2 M3 R M'}

hcombine3_str < induction on 2.

IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
============================
 forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}@ ->
   {hcombine3 M1 M2 M3 R M'}

hcombine3_str < intros.

Variables: L M1 M2 M3 R M'
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H2 : {L |- hcombine3 M1 M2 M3 R M'}@
============================
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < case H2.
Subgoal 1:

Variables: L R M4 M5 M6
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
============================
 {hcombine3 (hbase M6) (hbase M5) (hbase M4) R (hbase (R M6 M5 M4))}

Subgoal 2 is:
 {hcombine3 (habs R1) M2 M3 R (habs R')}

Subgoal 3 is:
 {hcombine3 (hbase M5) (habs R1) M3 R (habs R')}

Subgoal 4 is:
 {hcombine3 (hbase M5) (hbase M4) (habs R1) R (habs R')}

Subgoal 5 is:
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < search.
Subgoal 2:

Variables: L M2 M3 R R' R1
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine3 (R1 n1) M2 M3 R (R' n1)}*
============================
 {hcombine3 (habs R1) M2 M3 R (habs R')}

Subgoal 3 is:
 {hcombine3 (hbase M5) (habs R1) M3 R (habs R')}

Subgoal 4 is:
 {hcombine3 (hbase M5) (hbase M4) (habs R1) R (habs R')}

Subgoal 5 is:
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < apply IH to _ H3.
Subgoal 2:

Variables: L M2 M3 R R' R1
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H4 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}
============================
 {hcombine3 (habs R1) M2 M3 R (habs R')}

Subgoal 3 is:
 {hcombine3 (hbase M5) (habs R1) M3 R (habs R')}

Subgoal 4 is:
 {hcombine3 (hbase M5) (hbase M4) (habs R1) R (habs R')}

Subgoal 5 is:
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < search.
Subgoal 3:

Variables: L M3 R R' R1 M5
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
============================
 {hcombine3 (hbase M5) (habs R1) M3 R (habs R')}

Subgoal 4 is:
 {hcombine3 (hbase M5) (hbase M4) (habs R1) R (habs R')}

Subgoal 5 is:
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < apply IH to _ H3.
Subgoal 3:

Variables: L M3 R R' R1 M5
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H4 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}
============================
 {hcombine3 (hbase M5) (habs R1) M3 R (habs R')}

Subgoal 4 is:
 {hcombine3 (hbase M5) (hbase M4) (habs R1) R (habs R')}

Subgoal 5 is:
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < search.
Subgoal 4:

Variables: L R R' R1 M4 M5
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
============================
 {hcombine3 (hbase M5) (hbase M4) (habs R1) R (habs R')}

Subgoal 5 is:
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < apply IH to _ H3.
Subgoal 4:

Variables: L R R' R1 M4 M5
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L |- hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H4 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}
============================
 {hcombine3 (hbase M5) (hbase M4) (habs R1) R (habs R')}

Subgoal 5 is:
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < search.
Subgoal 5:

Variables: L M1 M2 M3 R M' F
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L, [F] |- hcombine3 M1 M2 M3 R M'}*
H4 : member F L
============================
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < apply ch_ctx_mem to _ H4.
Subgoal 5:

Variables: L M1 M2 M3 R M' X
IH : forall L M1 M2 M3 R M', ch_ctx L -> {L |- hcombine3 M1 M2 M3 R M'}* ->
       {hcombine3 M1 M2 M3 R M'}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- hcombine3 M1 M2 M3 R M'}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {hcombine3 M1 M2 M3 R M'}

hcombine3_str < case H3.
Proof completed.
Abella < Theorem hcombine_abs_str : 
forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'} ->
  {hcombine_abs M R R' M'}.


============================
 forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'} ->
   {hcombine_abs M R R' M'}

hcombine_abs_str < induction on 2.

IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
============================
 forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}@ ->
   {hcombine_abs M R R' M'}

hcombine_abs_str < intros.

Variables: L M R R' M'
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
H2 : {L |- hcombine_abs M R R' M'}@
============================
 {hcombine_abs M R R' M'}

hcombine_abs_str < case H2.
Subgoal 1:

Variables: L R' M2 M1
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
============================
 {hcombine_abs (hbase M1) (x\hbase (M2 x)) R' (hbase (R' M1 M2))}

Subgoal 2 is:
 {hcombine_abs (habs R1) R R' (habs R'1)}

Subgoal 3 is:
 {hcombine_abs (hbase M1) (x\habs (R1 x)) R' (habs R'1)}

Subgoal 4 is:
 {hcombine_abs M R R' M'}

hcombine_abs_str < search.
Subgoal 2:

Variables: L R R' R'1 R1
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
H3 : {L |- hcombine_abs (R1 n1) R R' (R'1 n1)}*
============================
 {hcombine_abs (habs R1) R R' (habs R'1)}

Subgoal 3 is:
 {hcombine_abs (hbase M1) (x\habs (R1 x)) R' (habs R'1)}

Subgoal 4 is:
 {hcombine_abs M R R' M'}

hcombine_abs_str < apply IH to _ H3.
Subgoal 2:

Variables: L R R' R'1 R1
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
H3 : {L |- hcombine_abs (R1 n1) R R' (R'1 n1)}*
H4 : {hcombine_abs (R1 n1) R R' (R'1 n1)}
============================
 {hcombine_abs (habs R1) R R' (habs R'1)}

Subgoal 3 is:
 {hcombine_abs (hbase M1) (x\habs (R1 x)) R' (habs R'1)}

Subgoal 4 is:
 {hcombine_abs M R R' M'}

hcombine_abs_str < search.
Subgoal 3:

Variables: L R' R'1 R1 M1
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
H3 : {L |- hcombine_abs (hbase M1) (x\R1 x n1) R' (R'1 n1)}*
============================
 {hcombine_abs (hbase M1) (x\habs (R1 x)) R' (habs R'1)}

Subgoal 4 is:
 {hcombine_abs M R R' M'}

hcombine_abs_str < apply IH to _ H3.
Subgoal 3:

Variables: L R' R'1 R1 M1
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
H3 : {L |- hcombine_abs (hbase M1) (x\R1 x n1) R' (R'1 n1)}*
H4 : {hcombine_abs (hbase M1) (z2\R1 z2 n1) R' (R'1 n1)}
============================
 {hcombine_abs (hbase M1) (x\habs (R1 x)) R' (habs R'1)}

Subgoal 4 is:
 {hcombine_abs M R R' M'}

hcombine_abs_str < search.
Subgoal 4:

Variables: L M R R' M' F
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
H3 : {L, [F] |- hcombine_abs M R R' M'}*
H4 : member F L
============================
 {hcombine_abs M R R' M'}

hcombine_abs_str < apply ch_ctx_mem to _ H4.
Subgoal 4:

Variables: L M R R' M' X
IH : forall L M R R' M', ch_ctx L -> {L |- hcombine_abs M R R' M'}* ->
       {hcombine_abs M R R' M'}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- hcombine_abs M R R' M'}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {hcombine_abs M R R' M'}

hcombine_abs_str < case H3.
Proof completed.
Abella < Theorem crev_str [A] : 
forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3} -> {rev L1 L2 L3}.


============================
 forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3} -> {rev L1 L2 L3}

crev_str < induction on 2.

IH : forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}* -> {rev L1 L2 L3}
============================
 forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}@ -> {rev L1 L2 L3}

crev_str < intros.

Variables: L L1 L2 L3
IH : forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}* -> {rev L1 L2 L3}
H1 : ch_ctx L
H2 : {L |- rev L1 L2 L3}@
============================
 {rev L1 L2 L3}

crev_str < case H2.
Subgoal 1:

Variables: L L3
IH : forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}* -> {rev L1 L2 L3}
H1 : ch_ctx L
============================
 {rev nil L3 L3}

Subgoal 2 is:
 {rev (X :: L6) L2 L3}

Subgoal 3 is:
 {rev L1 L2 L3}

crev_str < search.
Subgoal 2:

Variables: L L2 L3 X L6
IH : forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}* -> {rev L1 L2 L3}
H1 : ch_ctx L
H3 : {L |- rev L6 (X :: L2) L3}*
============================
 {rev (X :: L6) L2 L3}

Subgoal 3 is:
 {rev L1 L2 L3}

crev_str < apply IH to _ H3.
Subgoal 2:

Variables: L L2 L3 X L6
IH : forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}* -> {rev L1 L2 L3}
H1 : ch_ctx L
H3 : {L |- rev L6 (X :: L2) L3}*
H4 : {rev L6 (X :: L2) L3}
============================
 {rev (X :: L6) L2 L3}

Subgoal 3 is:
 {rev L1 L2 L3}

crev_str < search.
Subgoal 3:

Variables: L L1 L2 L3 F
IH : forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}* -> {rev L1 L2 L3}
H1 : ch_ctx L
H3 : {L, [F] |- rev L1 L2 L3}*
H4 : member F L
============================
 {rev L1 L2 L3}

crev_str < apply ch_ctx_mem to _ H4.
Subgoal 3:

Variables: L L1 L2 L3 X
IH : forall L L1 L2 L3, ch_ctx L -> {L |- rev L1 L2 L3}* -> {rev L1 L2 L3}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- rev L1 L2 L3}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {rev L1 L2 L3}

crev_str < case H3.
Proof completed.
Abella < Theorem tm'_list_to_tuple_str : 
forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T} ->
  {tm'_list_to_tuple L' T}.


============================
 forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T} ->
   {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < induction on 2.

IH : forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}* ->
       {tm'_list_to_tuple L' T}
============================
 forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}@ ->
   {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < intros.

Variables: L L' T
IH : forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}* ->
       {tm'_list_to_tuple L' T}
H1 : ch_ctx L
H2 : {L |- tm'_list_to_tuple L' T}@
============================
 {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < case H2.
Subgoal 1:

Variables: L
IH : forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}* ->
       {tm'_list_to_tuple L' T}
H1 : ch_ctx L
============================
 {tm'_list_to_tuple nil unit'}

Subgoal 2 is:
 {tm'_list_to_tuple (M :: ML) (pair' M ML')}

Subgoal 3 is:
 {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < search.
Subgoal 2:

Variables: L ML' ML M
IH : forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}* ->
       {tm'_list_to_tuple L' T}
H1 : ch_ctx L
H3 : {L |- tm'_list_to_tuple ML ML'}*
============================
 {tm'_list_to_tuple (M :: ML) (pair' M ML')}

Subgoal 3 is:
 {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < apply IH to _ H3.
Subgoal 2:

Variables: L ML' ML M
IH : forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}* ->
       {tm'_list_to_tuple L' T}
H1 : ch_ctx L
H3 : {L |- tm'_list_to_tuple ML ML'}*
H4 : {tm'_list_to_tuple ML ML'}
============================
 {tm'_list_to_tuple (M :: ML) (pair' M ML')}

Subgoal 3 is:
 {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < search.
Subgoal 3:

Variables: L L' T F
IH : forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}* ->
       {tm'_list_to_tuple L' T}
H1 : ch_ctx L
H3 : {L, [F] |- tm'_list_to_tuple L' T}*
H4 : member F L
============================
 {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < apply ch_ctx_mem to _ H4.
Subgoal 3:

Variables: L L' T X
IH : forall L L' T, ch_ctx L -> {L |- tm'_list_to_tuple L' T}* ->
       {tm'_list_to_tuple L' T}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- tm'_list_to_tuple L' T}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {tm'_list_to_tuple L' T}

tm'_list_to_tuple_str < case H3.
Proof completed.
Abella < Theorem hoist_abs_str : 
forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'} ->
  {hoist_abs R f l FA R' F'}.


============================
 forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'} ->
   {hoist_abs R f l FA R' F'}

hoist_abs_str < induction on 2.

IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
============================
 forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}@ ->
   {hoist_abs R f l FA R' F'}

hoist_abs_str < intros.

Variables: L R f l FA R' F'
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H2 : {L |- hoist_abs R f l FA R' F'}@
============================
 {hoist_abs R f l FA R' F'}

hoist_abs_str < case H2.
Subgoal 1:

Variables: L f l FA F' FA'' FA'
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H3 : {L |- rev FA nil FA'}*
H4 : {L |- tm'_list_to_tuple FA' FA''}*
============================
 {hoist_abs (x\hbase (F' x)) f l FA (hbase (app' f FA'')) F'}

Subgoal 2 is:
 {hoist_abs (x\habs (R1 x)) f l FA (habs F'1) (x\let' (fst' l) (R'1 x))}

Subgoal 3 is:
 {hoist_abs R f l FA R' F'}

hoist_abs_str < apply crev_str to _ H3.
Subgoal 1:

Variables: L f l FA F' FA'' FA'
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H3 : {L |- rev FA nil FA'}*
H4 : {L |- tm'_list_to_tuple FA' FA''}*
H5 : {rev FA nil FA'}
============================
 {hoist_abs (x\hbase (F' x)) f l FA (hbase (app' f FA'')) F'}

Subgoal 2 is:
 {hoist_abs (x\habs (R1 x)) f l FA (habs F'1) (x\let' (fst' l) (R'1 x))}

Subgoal 3 is:
 {hoist_abs R f l FA R' F'}

hoist_abs_str < apply tm'_list_to_tuple_str to _ H4.
Subgoal 1:

Variables: L f l FA F' FA'' FA'
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H3 : {L |- rev FA nil FA'}*
H4 : {L |- tm'_list_to_tuple FA' FA''}*
H5 : {rev FA nil FA'}
H6 : {tm'_list_to_tuple FA' FA''}
============================
 {hoist_abs (x\hbase (F' x)) f l FA (hbase (app' f FA'')) F'}

Subgoal 2 is:
 {hoist_abs (x\habs (R1 x)) f l FA (habs F'1) (x\let' (fst' l) (R'1 x))}

Subgoal 3 is:
 {hoist_abs R f l FA R' F'}

hoist_abs_str < search.
Subgoal 2:

Variables: L f l FA R'1 F'1 R1
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H3 : {L |- hoist_abs (x\R1 x n1) f (snd' l) (n1 :: FA) (F'1 n1) (x\R'1 x n1)}*
============================
 {hoist_abs (x\habs (R1 x)) f l FA (habs F'1) (x\let' (fst' l) (R'1 x))}

Subgoal 3 is:
 {hoist_abs R f l FA R' F'}

hoist_abs_str < apply IH to _ H3.
Subgoal 2:

Variables: L f l FA R'1 F'1 R1
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H3 : {L |- hoist_abs (x\R1 x n1) f (snd' l) (n1 :: FA) (F'1 n1) (x\R'1 x n1)}*
H4 : {hoist_abs (z2\R1 z2 n1) f (snd' l) (n1 :: FA) (F'1 n1) (z2\R'1 z2 n1)}
============================
 {hoist_abs (x\habs (R1 x)) f l FA (habs F'1) (x\let' (fst' l) (R'1 x))}

Subgoal 3 is:
 {hoist_abs R f l FA R' F'}

hoist_abs_str < search.
Subgoal 3:

Variables: L R f l FA R' F' F
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H3 : {L, [F] |- hoist_abs R f l FA R' F'}*
H4 : member F L
============================
 {hoist_abs R f l FA R' F'}

hoist_abs_str < apply ch_ctx_mem to _ H4.
Subgoal 3:

Variables: L R f l FA R' F' X
IH : forall L R f l FA R' F', ch_ctx L -> {L |- hoist_abs R f l FA R' F'}* ->
       {hoist_abs R f l FA R' F'}
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- hoist_abs R f l FA R' F'}*
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {hoist_abs R f l FA R' F'}

hoist_abs_str < case H3.
Proof completed.
Abella < Theorem abstract_str : 
forall L R R' F, ch_ctx L -> {L |- abstract R R' F} -> {abstract R R' F}.


============================
 forall L R R' F, ch_ctx L -> {L |- abstract R R' F} -> {abstract R R' F}

abstract_str < intros.

Variables: L R R' F
H1 : ch_ctx L
H2 : {L |- abstract R R' F}
============================
 {abstract R R' F}

abstract_str < case H2.
Subgoal 1:

Variables: L R R' F
H1 : ch_ctx L
H3 : {L |- hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
============================
 {abstract R R' F}

Subgoal 2 is:
 {abstract R R' F}

abstract_str < apply hoist_abs_str to _ H3.
Subgoal 1:

Variables: L R R' F
H1 : ch_ctx L
H3 : {L |- hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
H4 : {hoist_abs R n1 n2 nil (R' n1) (z3\F n2 z3)}
============================
 {abstract R R' F}

Subgoal 2 is:
 {abstract R R' F}

abstract_str < search.
Subgoal 2:

Variables: L R R' F F1
H1 : ch_ctx L
H3 : {L, [F1] |- abstract R R' F}
H4 : member F1 L
============================
 {abstract R R' F}

abstract_str < apply ch_ctx_mem to _ H4.
Subgoal 2:

Variables: L R R' F X
H1 : ch_ctx L
H3 : {L, [ch X (htm nil (hbase X))] |- abstract R R' F}
H4 : member (ch X (htm nil (hbase X))) L
H5 : name X
============================
 {abstract R R' F}

abstract_str < case H3.
Proof completed.
Abella < Theorem hconstr_typ_pres : 
forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
  {of' x T |- of' (R x) T'} -> {hconstr M R M'} -> {L |- of'' (htm FE M') T'}.


============================
 forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
   {of' x T |- of' (R x) T'} -> {hconstr M R M'} ->
   {L |- of'' (htm FE M') T'}

hconstr_typ_pres < induction on 4.

IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
============================
 forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
   {of' x T |- of' (R x) T'} -> {hconstr M R M'}@ ->
   {L |- of'' (htm FE M') T'}

hconstr_typ_pres < intros.

Variables: L FE M M' T T' R
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H2 : {L |- of'' (htm FE M) T}
H3 : {of' n1 T |- of' (R n1) T'}
H4 : {hconstr M R M'}@
============================
 {L |- of'' (htm FE M') T'}

hconstr_typ_pres < case H4.
Subgoal 1:

Variables: L FE T T' R M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H2 : {L |- of'' (htm FE (hbase M1)) T}
H3 : {of' n1 T |- of' (R n1) T'}
============================
 {L |- of'' (htm FE (hbase (R M1))) T'}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < case H2.
Subgoal 1.1:

Variables: L T T' R M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {L |- of' M1 T}
============================
 {L |- of'' (htm nil (hbase (R M1))) T'}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M1))) T'}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres <  inst H3 with n1 = M1.
Subgoal 1.1:

Variables: L T T' R M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {L |- of' M1 T}
H6 : {of' M1 T |- of' (R M1) T'}
============================
 {L |- of'' (htm nil (hbase (R M1))) T'}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M1))) T'}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < cut H6 with H5.
Subgoal 1.1:

Variables: L T T' R M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {L |- of' M1 T}
H6 : {of' M1 T |- of' (R M1) T'}
H7 : {L |- of' (R M1) T'}
============================
 {L |- of'' (htm nil (hbase (R M1))) T'}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M1))) T'}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < search.
Subgoal 1.2:

Variables: L FE T T' R M1 F
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {L, [F] |- of'' (htm FE (hbase M1)) T}
H6 : member F L
============================
 {L |- of'' (htm FE (hbase (R M1))) T'}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < apply ctx'_mem to _ H6.
Subgoal 1.2:

Variables: L FE T T' R M1 M2 T1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {L, [of' M2 T1] |- of'' (htm FE (hbase M1)) T}
H6 : member (of' M2 T1) L
H7 : name M2
H8 : {is_cty T1}
============================
 {L |- of'' (htm FE (hbase (R M1))) T'}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < case H5.
Subgoal 2:

Variables: L FE T T' R R' R1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H2 : {L |- of'' (htm FE (habs R1)) T}
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {hconstr (R1 n1) R (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < case H2.
Subgoal 2.1:

Variables: L T T' R R' R1 L1 T1 M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {hconstr (R1 n1) R (R' n1)}*
H6 : {L |- of' M1 T1}
H7 : {L, of' n1 T1 |- of'' (htm L1 (R1 n1)) T}
============================
 {L |- of'' (htm (M1 :: L1) (habs R')) T'}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < apply of'_is_cty to _ H6.
Subgoal 2.1:

Variables: L T T' R R' R1 L1 T1 M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {hconstr (R1 n1) R (R' n1)}*
H6 : {L |- of' M1 T1}
H7 : {L, of' n1 T1 |- of'' (htm L1 (R1 n1)) T}
H8 : {is_cty T1}
============================
 {L |- of'' (htm (M1 :: L1) (habs R')) T'}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < assert {of' n2 T |- of' (R n2) T'}.
Subgoal 2.1:

Variables: L T T' R R' R1 L1 T1 M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {hconstr (R1 n1) R (R' n1)}*
H6 : {L |- of' M1 T1}
H7 : {L, of' n1 T1 |- of'' (htm L1 (R1 n1)) T}
H8 : {is_cty T1}
H9 : {of' n2 T |- of' (R n2) T'}
============================
 {L |- of'' (htm (M1 :: L1) (habs R')) T'}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < apply IH to _ H7 H9 H5 with x = n2.
Subgoal 2.1:

Variables: L T T' R R' R1 L1 T1 M1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {hconstr (R1 n1) R (R' n1)}*
H6 : {L |- of' M1 T1}
H7 : {L, of' n1 T1 |- of'' (htm L1 (R1 n1)) T}
H8 : {is_cty T1}
H9 : {of' n2 T |- of' (R n2) T'}
H10 : {L, of' n1 T1 |- of'' (htm L1 (R' n1)) T'}
============================
 {L |- of'' (htm (M1 :: L1) (habs R')) T'}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < search.
Subgoal 2.2:

Variables: L FE T T' R R' R1 F
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {hconstr (R1 n1) R (R' n1)}*
H6 : {L, [F] |- of'' (htm FE (habs R1)) T}
H7 : member F L
============================
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < apply ctx'_mem to _ H7.
Subgoal 2.2:

Variables: L FE T T' R R' R1 M1 T1
IH : forall L FE M M' T T' R, nabla x, ctx' L -> {L |- of'' (htm FE M) T} ->
       {of' x T |- of' (R x) T'} -> {hconstr M R M'}* ->
       {L |- of'' (htm FE M') T'}
H1 : ctx' L
H3 : {of' n1 T |- of' (R n1) T'}
H5 : {hconstr (R1 n1) R (R' n1)}*
H6 : {L, [of' M1 T1] |- of'' (htm FE (habs R1)) T}
H7 : member (of' M1 T1) L
H8 : name M1
H9 : {is_cty T1}
============================
 {L |- of'' (htm FE (habs R')) T'}

hconstr_typ_pres < case H6.
Proof completed.
Abella < Theorem hcombine_typ_pres : 
forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
  {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
  {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M} ->
  {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}.


============================
 forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
   {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
   {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M} ->
   {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}

hcombine_typ_pres < induction on 5.

IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
============================
 forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
   {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
   {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}@ ->
   {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}

hcombine_typ_pres < intros.

Variables: L FE1 FE2 FE M1 M2 M T1 T2 T R
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 M1) T1}
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H5 : {hcombine M1 M2 R M}@
H6 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M) T}

hcombine_typ_pres < case H5.
Subgoal 1:

Variables: L FE1 FE2 FE T1 T2 T R M3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M4)) T1}
H3 : {L |- of'' (htm FE2 (hbase M3)) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H2.
Subgoal 1.1:

Variables: L FE2 FE T1 T2 T R M3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (hbase M3)) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd nil FE2 FE}
H7 : {L |- of' M4 T1}
============================
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H3.
Subgoal 1.1.1:

Variables: L FE T1 T2 T R M3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd nil nil FE}
H7 : {L |- of' M4 T1}
H8 : {L |- of' M3 T2}
============================
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H6.
Subgoal 1.1.1:

Variables: L T1 T2 T R M3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {L |- of' M4 T1}
H8 : {L |- of' M3 T2}
============================
 {L |- of'' (htm nil (hbase (R M4 M3))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres <  inst H4 with n1 = M4, n2 = M3.
Subgoal 1.1.1:

Variables: L T1 T2 T R M3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {L |- of' M4 T1}
H8 : {L |- of' M3 T2}
H9 : {of' M4 T1, of' M3 T2 |- of' (R M4 M3) T}
============================
 {L |- of'' (htm nil (hbase (R M4 M3))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < cut H9 with H7.
Subgoal 1.1.1:

Variables: L T1 T2 T R M3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {L |- of' M4 T1}
H8 : {L |- of' M3 T2}
H9 : {of' M4 T1, of' M3 T2 |- of' (R M4 M3) T}
H10 : {L, of' M3 T2 |- of' (R M4 M3) T}
============================
 {L |- of'' (htm nil (hbase (R M4 M3))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < cut H10 with H8.
Subgoal 1.1.1:

Variables: L T1 T2 T R M3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {L |- of' M4 T1}
H8 : {L |- of' M3 T2}
H9 : {of' M4 T1, of' M3 T2 |- of' (R M4 M3) T}
H10 : {L, of' M3 T2 |- of' (R M4 M3) T}
H11 : {L |- of' (R M4 M3) T}
============================
 {L |- of'' (htm nil (hbase (R M4 M3))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < search.
Subgoal 1.1.2:

Variables: L FE2 FE T1 T2 T R M3 M4 F
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd nil FE2 FE}
H7 : {L |- of' M4 T1}
H8 : {L, [F] |- of'' (htm FE2 (hbase M3)) T2}
H9 : member F L
============================
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply ctx'_focus_inv to _ _ H8.
Subgoal 1.2:

Variables: L FE1 FE2 FE T1 T2 T R M3 M4 F
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (hbase M3)) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd FE1 FE2 FE}
H7 : {L, [F] |- of'' (htm FE1 (hbase M4)) T1}
H8 : member F L
============================
 {L |- of'' (htm FE (hbase (R M4 M3))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply ctx'_focus_inv to _ _ H7.
Subgoal 2:

Variables: L FE1 FE2 FE M2 T1 T2 T R R' R1
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (habs R1)) T1}
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd FE1 FE2 FE}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H2.
Subgoal 2.1:

Variables: L FE2 FE M2 T1 T2 T R R' R1 L1 T3 M3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd (M3 :: L1) FE2 FE}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
H8 : {L |- of' M3 T3}
H9 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T1}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H6.
Subgoal 2.1:

Variables: L FE2 M2 T1 T2 T R R' R1 L1 T3 M3 L3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
H8 : {L |- of' M3 T3}
H9 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T1}
H10 : {appd L1 FE2 L3}
============================
 {L |- of'' (htm (M3 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < assert {L, of' n1 T3 |- of'' (htm FE2 M2) T2}.
Subgoal 2.1:

Variables: L FE2 M2 T1 T2 T R R' R1 L1 T3 M3 L3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
H8 : {L |- of' M3 T3}
H9 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T1}
H10 : {appd L1 FE2 L3}
H11 : {L, of' n1 T3 |- of'' (htm FE2 M2) T2}
============================
 {L |- of'' (htm (M3 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < assert {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}.
Subgoal 2.1:

Variables: L FE2 M2 T1 T2 T R R' R1 L1 T3 M3 L3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
H8 : {L |- of' M3 T3}
H9 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T1}
H10 : {appd L1 FE2 L3}
H11 : {L, of' n1 T3 |- of'' (htm FE2 M2) T2}
H12 : {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}
============================
 {L |- of'' (htm (M3 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply of'_is_cty to _ H8.
Subgoal 2.1:

Variables: L FE2 M2 T1 T2 T R R' R1 L1 T3 M3 L3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
H8 : {L |- of' M3 T3}
H9 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T1}
H10 : {appd L1 FE2 L3}
H11 : {L, of' n1 T3 |- of'' (htm FE2 M2) T2}
H12 : {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}
H13 : {is_cty T3}
============================
 {L |- of'' (htm (M3 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply IH to _ H9 H11 H12 H7 _.
Subgoal 2.1:

Variables: L FE2 M2 T1 T2 T R R' R1 L1 T3 M3 L3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
H8 : {L |- of' M3 T3}
H9 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T1}
H10 : {appd L1 FE2 L3}
H11 : {L, of' n1 T3 |- of'' (htm FE2 M2) T2}
H12 : {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}
H13 : {is_cty T3}
H14 : {L, of' n1 T3 |- of'' (htm L3 (R' n1)) T}
============================
 {L |- of'' (htm (M3 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < search.
Subgoal 2.2:

Variables: L FE1 FE2 FE M2 T1 T2 T R R' R1 F
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd FE1 FE2 FE}
H7 : {hcombine (R1 n1) M2 R (R' n1)}*
H8 : {L, [F] |- of'' (htm FE1 (habs R1)) T1}
H9 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply ctx'_focus_inv to _ _ H8.
Subgoal 3:

Variables: L FE1 FE2 FE T1 T2 T R R' R1 M3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M3)) T1}
H3 : {L |- of'' (htm FE2 (habs R1)) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd FE1 FE2 FE}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H2 (keep).
Subgoal 3.1:

Variables: L FE2 FE T1 T2 T R R' R1 M3
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H3 : {L |- of'' (htm FE2 (habs R1)) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd nil FE2 FE}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H3.
Subgoal 3.1.1:

Variables: L FE T1 T2 T R R' R1 M3 L1 T3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd nil (M4 :: L1) FE}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
H9 : {L |- of' M4 T3}
H10 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T2}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < case H6.
Subgoal 3.1.1:

Variables: L T1 T2 T R R' R1 M3 L1 T3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
H9 : {L |- of' M4 T3}
H10 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T2}
============================
 {L |- of'' (htm (M4 :: L1) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < assert {L, of' n1 T3 |- of'' (htm nil (hbase M3)) T1}.
Subgoal 3.1.1:

Variables: L T1 T2 T R R' R1 M3 L1 T3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
H9 : {L |- of' M4 T3}
H10 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T2}
H11 : {L, of' n1 T3 |- of'' (htm nil (hbase M3)) T1}
============================
 {L |- of'' (htm (M4 :: L1) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < assert {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}.
Subgoal 3.1.1:

Variables: L T1 T2 T R R' R1 M3 L1 T3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
H9 : {L |- of' M4 T3}
H10 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T2}
H11 : {L, of' n1 T3 |- of'' (htm nil (hbase M3)) T1}
H12 : {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}
============================
 {L |- of'' (htm (M4 :: L1) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply of'_is_cty to _ H9.
Subgoal 3.1.1:

Variables: L T1 T2 T R R' R1 M3 L1 T3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
H9 : {L |- of' M4 T3}
H10 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T2}
H11 : {L, of' n1 T3 |- of'' (htm nil (hbase M3)) T1}
H12 : {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}
H13 : {is_cty T3}
============================
 {L |- of'' (htm (M4 :: L1) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply IH to _ H11 H10 H12 H7 _.
Subgoal 3.1.1:

Variables: L T1 T2 T R R' R1 M3 L1 T3 M4
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
H9 : {L |- of' M4 T3}
H10 : {L, of' n1 T3 |- of'' (htm L1 (R1 n1)) T2}
H11 : {L, of' n1 T3 |- of'' (htm nil (hbase M3)) T1}
H12 : {of' n2 T1, of' n3 T2 |- of' (R n2 n3) T}
H13 : {is_cty T3}
H14 : {L, of' n1 T3 |- of'' (htm L1 (R' n1)) T}
============================
 {L |- of'' (htm (M4 :: L1) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < search.
Subgoal 3.1.2:

Variables: L FE2 FE T1 T2 T R R' R1 M3 F
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M3)) T1}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd nil FE2 FE}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L |- of' M3 T1}
H9 : {L, [F] |- of'' (htm FE2 (habs R1)) T2}
H10 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply ctx'_focus_inv to _ _ H9.
Subgoal 3.2:

Variables: L FE1 FE2 FE T1 T2 T R R' R1 M3 F
IH : forall L FE1 FE2 FE M1 M2 M T1 T2 T R, nabla x y, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {of' x T1, of' y T2 |- of' (R x y) T} -> {hcombine M1 M2 R M}* ->
       {appd FE1 FE2 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M3)) T1}
H3 : {L |- of'' (htm FE2 (habs R1)) T2}
H4 : {of' n1 T1, of' n2 T2 |- of' (R n1 n2) T}
H6 : {appd FE1 FE2 FE}
H7 : {hcombine (hbase M3) (R1 n1) R (R' n1)}*
H8 : {L, [F] |- of'' (htm FE1 (hbase M3)) T1}
H9 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

hcombine_typ_pres < apply ctx'_focus_inv to _ _ H8.
Proof completed.
Abella < Theorem hcombine3_typ_pres : 
forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, ctx' L ->
  {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
  {L |- of'' (htm FE3 M3) T3} ->
  {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
  {hcombine3 M1 M2 M3 R M} -> {appd FE1 FE2 FE12} -> {appd FE12 FE3 FE} ->
  {L |- of'' (htm FE M) T}.


============================
 forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, ctx' L ->
   {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
   {L |- of'' (htm FE3 M3) T3} ->
   {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
   {hcombine3 M1 M2 M3 R M} -> {appd FE1 FE2 FE12} -> {appd FE12 FE3 FE} ->
   {L |- of'' (htm FE M) T}

hcombine3_typ_pres < induction on 6.

IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
============================
 forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, ctx' L ->
   {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
   {L |- of'' (htm FE3 M3) T3} ->
   {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
   {hcombine3 M1 M2 M3 R M}@ -> {appd FE1 FE2 FE12} -> {appd FE12 FE3 FE} ->
   {L |- of'' (htm FE M) T}

hcombine3_typ_pres < intros.

Variables: L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 M1) T1}
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H6 : {hcombine3 M1 M2 M3 R M}@
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
============================
 {L |- of'' (htm FE M) T}

hcombine3_typ_pres < case H6.
Subgoal 1:

Variables: L FE1 FE2 FE3 FE12 FE T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M6)) T1}
H3 : {L |- of'' (htm FE2 (hbase M5)) T2}
H4 : {L |- of'' (htm FE3 (hbase M4)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H2.
Subgoal 1.1:

Variables: L FE2 FE3 FE12 FE T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (hbase M5)) T2}
H4 : {L |- of'' (htm FE3 (hbase M4)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {L |- of' M6 T1}
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H3.
Subgoal 1.1.1:

Variables: L FE3 FE12 FE T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 (hbase M4)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil nil FE12}
H8 : {appd FE12 FE3 FE}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H4.
Subgoal 1.1.1.1:

Variables: L FE12 FE T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil nil FE12}
H8 : {appd FE12 nil FE}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L |- of' M4 T3}
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H7.
Subgoal 1.1.1.1:

Variables: L FE T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H8 : {appd nil nil FE}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L |- of' M4 T3}
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H8.
Subgoal 1.1.1.1:

Variables: L T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L |- of' M4 T3}
============================
 {L |- of'' (htm nil (hbase (R M6 M5 M4))) T}

Subgoal 1.1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres <  inst H5 with n1 = M6, n2 = M5, n3 = M4.
Subgoal 1.1.1.1:

Variables: L T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L |- of' M4 T3}
H12 : {of' M6 T1, of' M5 T2, of' M4 T3 |- of' (R M6 M5 M4) T}
============================
 {L |- of'' (htm nil (hbase (R M6 M5 M4))) T}

Subgoal 1.1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < cut H12 with H9.
Subgoal 1.1.1.1:

Variables: L T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L |- of' M4 T3}
H12 : {of' M6 T1, of' M5 T2, of' M4 T3 |- of' (R M6 M5 M4) T}
H13 : {L, of' M5 T2, of' M4 T3 |- of' (R M6 M5 M4) T}
============================
 {L |- of'' (htm nil (hbase (R M6 M5 M4))) T}

Subgoal 1.1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < cut H13 with H10.
Subgoal 1.1.1.1:

Variables: L T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L |- of' M4 T3}
H12 : {of' M6 T1, of' M5 T2, of' M4 T3 |- of' (R M6 M5 M4) T}
H13 : {L, of' M5 T2, of' M4 T3 |- of' (R M6 M5 M4) T}
H14 : {L, of' M4 T3 |- of' (R M6 M5 M4) T}
============================
 {L |- of'' (htm nil (hbase (R M6 M5 M4))) T}

Subgoal 1.1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < cut H14 with H11.
Subgoal 1.1.1.1:

Variables: L T1 T2 T3 T R M4 M5 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L |- of' M4 T3}
H12 : {of' M6 T1, of' M5 T2, of' M4 T3 |- of' (R M6 M5 M4) T}
H13 : {L, of' M5 T2, of' M4 T3 |- of' (R M6 M5 M4) T}
H14 : {L, of' M4 T3 |- of' (R M6 M5 M4) T}
H15 : {L |- of' (R M6 M5 M4) T}
============================
 {L |- of'' (htm nil (hbase (R M6 M5 M4))) T}

Subgoal 1.1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < search.
Subgoal 1.1.1.2:

Variables: L FE3 FE12 FE T1 T2 T3 T R M4 M5 M6 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil nil FE12}
H8 : {appd FE12 FE3 FE}
H9 : {L |- of' M6 T1}
H10 : {L |- of' M5 T2}
H11 : {L, [F] |- of'' (htm FE3 (hbase M4)) T3}
H12 : member F L
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 1.1.2:

Variables: L FE2 FE3 FE12 FE T1 T2 T3 T R M4 M5 M6 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 (hbase M4)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {L |- of' M6 T1}
H10 : {L, [F] |- of'' (htm FE2 (hbase M5)) T2}
H11 : member F L
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H10.
Subgoal 1.2:

Variables: L FE1 FE2 FE3 FE12 FE T1 T2 T3 T R M4 M5 M6 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (hbase M5)) T2}
H4 : {L |- of'' (htm FE3 (hbase M4)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {L, [F] |- of'' (htm FE1 (hbase M6)) T1}
H10 : member F L
============================
 {L |- of'' (htm FE (hbase (R M6 M5 M4))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H9.
Subgoal 2:

Variables: L FE1 FE2 FE3 FE12 FE M2 M3 T1 T2 T3 T R R' R1
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (habs R1)) T1}
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H2.
Subgoal 2.1:

Variables: L FE2 FE3 FE12 FE M2 M3 T1 T2 T3 T R R' R1 L1 T4 M4
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd (M4 :: L1) FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L |- of' M4 T4}
H11 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T1}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H7.
Subgoal 2.1:

Variables: L FE2 FE3 FE M2 M3 T1 T2 T3 T R R' R1 L1 T4 M4 L3
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H8 : {appd (M4 :: L3) FE3 FE}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L |- of' M4 T4}
H11 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T1}
H12 : {appd L1 FE2 L3}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H8.
Subgoal 2.1:

Variables: L FE2 FE3 M2 M3 T1 T2 T3 T R R' R1 L1 T4 M4 L3 L2
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L |- of' M4 T4}
H11 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T1}
H12 : {appd L1 FE2 L3}
H13 : {appd L3 FE3 L2}
============================
 {L |- of'' (htm (M4 :: L2) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < assert {L, of' n1 T4 |- of'' (htm FE2 M2) T2}.
Subgoal 2.1:

Variables: L FE2 FE3 M2 M3 T1 T2 T3 T R R' R1 L1 T4 M4 L3 L2
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L |- of' M4 T4}
H11 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T1}
H12 : {appd L1 FE2 L3}
H13 : {appd L3 FE3 L2}
H14 : {L, of' n1 T4 |- of'' (htm FE2 M2) T2}
============================
 {L |- of'' (htm (M4 :: L2) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < assert {L, of' n1 T4 |- of'' (htm FE3 M3) T3}.
Subgoal 2.1:

Variables: L FE2 FE3 M2 M3 T1 T2 T3 T R R' R1 L1 T4 M4 L3 L2
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L |- of' M4 T4}
H11 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T1}
H12 : {appd L1 FE2 L3}
H13 : {appd L3 FE3 L2}
H14 : {L, of' n1 T4 |- of'' (htm FE2 M2) T2}
H15 : {L, of' n1 T4 |- of'' (htm FE3 M3) T3}
============================
 {L |- of'' (htm (M4 :: L2) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply of'_is_cty to _ H10.
Subgoal 2.1:

Variables: L FE2 FE3 M2 M3 T1 T2 T3 T R R' R1 L1 T4 M4 L3 L2
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L |- of' M4 T4}
H11 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T1}
H12 : {appd L1 FE2 L3}
H13 : {appd L3 FE3 L2}
H14 : {L, of' n1 T4 |- of'' (htm FE2 M2) T2}
H15 : {L, of' n1 T4 |- of'' (htm FE3 M3) T3}
H16 : {is_cty T4}
============================
 {L |- of'' (htm (M4 :: L2) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply IH to _ H11 H14 H15 _ H9 _ _.
Subgoal 2.1:

Variables: L FE2 FE3 M2 M3 T1 T2 T3 T R R' R1 L1 T4 M4 L3 L2
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L |- of' M4 T4}
H11 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T1}
H12 : {appd L1 FE2 L3}
H13 : {appd L3 FE3 L2}
H14 : {L, of' n1 T4 |- of'' (htm FE2 M2) T2}
H15 : {L, of' n1 T4 |- of'' (htm FE3 M3) T3}
H16 : {is_cty T4}
H17 : {L, of' n1 T4 |- of'' (htm L2 (R' n1)) T}
============================
 {L |- of'' (htm (M4 :: L2) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < search.
Subgoal 2.2:

Variables: L FE1 FE2 FE3 FE12 FE M2 M3 T1 T2 T3 T R R' R1 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 M2) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (R1 n1) M2 M3 R (R' n1)}*
H10 : {L, [F] |- of'' (htm FE1 (habs R1)) T1}
H11 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H10.
Subgoal 3:

Variables: L FE1 FE2 FE3 FE12 FE M3 T1 T2 T3 T R R' R1 M5
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M5)) T1}
H3 : {L |- of'' (htm FE2 (habs R1)) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H2.
Subgoal 3.1:

Variables: L FE2 FE3 FE12 FE M3 T1 T2 T3 T R R' R1 M5
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (habs R1)) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H3.
Subgoal 3.1.1:

Variables: L FE3 FE12 FE M3 T1 T2 T3 T R R' R1 M5 L1 T4 M4
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil (M4 :: L1) FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T4}
H12 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T2}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H7.
Subgoal 3.1.1:

Variables: L FE3 FE M3 T1 T2 T3 T R R' R1 M5 L1 T4 M4
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H8 : {appd (M4 :: L1) FE3 FE}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T4}
H12 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T2}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H8.
Subgoal 3.1.1:

Variables: L FE3 M3 T1 T2 T3 T R R' R1 M5 L1 T4 M4 L3
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T4}
H12 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T2}
H13 : {appd L1 FE3 L3}
============================
 {L |- of'' (htm (M4 :: L3) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < assert {L, of' n1 T4 |- of'' (htm FE3 M3) T3}.
Subgoal 3.1.1:

Variables: L FE3 M3 T1 T2 T3 T R R' R1 M5 L1 T4 M4 L3
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T4}
H12 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T2}
H13 : {appd L1 FE3 L3}
H14 : {L, of' n1 T4 |- of'' (htm FE3 M3) T3}
============================
 {L |- of'' (htm (M4 :: L3) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < assert {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}.
Subgoal 3.1.1:

Variables: L FE3 M3 T1 T2 T3 T R R' R1 M5 L1 T4 M4 L3
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T4}
H12 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T2}
H13 : {appd L1 FE3 L3}
H14 : {L, of' n1 T4 |- of'' (htm FE3 M3) T3}
H15 : {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}
============================
 {L |- of'' (htm (M4 :: L3) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply of'_is_cty to _ H11.
Subgoal 3.1.1:

Variables: L FE3 M3 T1 T2 T3 T R R' R1 M5 L1 T4 M4 L3
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T4}
H12 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T2}
H13 : {appd L1 FE3 L3}
H14 : {L, of' n1 T4 |- of'' (htm FE3 M3) T3}
H15 : {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}
H16 : {is_cty T4}
============================
 {L |- of'' (htm (M4 :: L3) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply IH to _ H15 H12 H14 _ H9 _ _.
Subgoal 3.1.1:

Variables: L FE3 M3 T1 T2 T3 T R R' R1 M5 L1 T4 M4 L3
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T4}
H12 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T2}
H13 : {appd L1 FE3 L3}
H14 : {L, of' n1 T4 |- of'' (htm FE3 M3) T3}
H15 : {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}
H16 : {is_cty T4}
H17 : {L, of' n1 T4 |- of'' (htm L3 (R' n1)) T}
============================
 {L |- of'' (htm (M4 :: L3) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < search.
Subgoal 3.1.2:

Variables: L FE2 FE3 FE12 FE M3 T1 T2 T3 T R R' R1 M5 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L, [F] |- of'' (htm FE2 (habs R1)) T2}
H12 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 3.2:

Variables: L FE1 FE2 FE3 FE12 FE M3 T1 T2 T3 T R R' R1 M5 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (habs R1)) T2}
H4 : {L |- of'' (htm FE3 M3) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (R1 n1) M3 R (R' n1)}*
H10 : {L, [F] |- of'' (htm FE1 (hbase M5)) T1}
H11 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H10.
Subgoal 4:

Variables: L FE1 FE2 FE3 FE12 FE T1 T2 T3 T R R' R1 M4 M5
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M5)) T1}
H3 : {L |- of'' (htm FE2 (hbase M4)) T2}
H4 : {L |- of'' (htm FE3 (habs R1)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H2.
Subgoal 4.1:

Variables: L FE2 FE3 FE12 FE T1 T2 T3 T R R' R1 M4 M5
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (hbase M4)) T2}
H4 : {L |- of'' (htm FE3 (habs R1)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H3.
Subgoal 4.1.1:

Variables: L FE3 FE12 FE T1 T2 T3 T R R' R1 M4 M5
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 (habs R1)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil nil FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H4.
Subgoal 4.1.1.1:

Variables: L FE12 FE T1 T2 T3 T R R' R1 M4 M5 L1 T4 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil nil FE12}
H8 : {appd FE12 (M6 :: L1) FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L |- of' M6 T4}
H13 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T3}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H7.
Subgoal 4.1.1.1:

Variables: L FE T1 T2 T3 T R R' R1 M4 M5 L1 T4 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H8 : {appd nil (M6 :: L1) FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L |- of' M6 T4}
H13 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T3}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < case H8.
Subgoal 4.1.1.1:

Variables: L T1 T2 T3 T R R' R1 M4 M5 L1 T4 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L |- of' M6 T4}
H13 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T3}
============================
 {L |- of'' (htm (M6 :: L1) (habs R')) T}

Subgoal 4.1.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < assert {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}.
Subgoal 4.1.1.1:

Variables: L T1 T2 T3 T R R' R1 M4 M5 L1 T4 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L |- of' M6 T4}
H13 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T3}
H14 : {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}
============================
 {L |- of'' (htm (M6 :: L1) (habs R')) T}

Subgoal 4.1.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < assert {L, of' n1 T4 |- of'' (htm nil (hbase M4)) T2}.
Subgoal 4.1.1.1:

Variables: L T1 T2 T3 T R R' R1 M4 M5 L1 T4 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L |- of' M6 T4}
H13 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T3}
H14 : {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}
H15 : {L, of' n1 T4 |- of'' (htm nil (hbase M4)) T2}
============================
 {L |- of'' (htm (M6 :: L1) (habs R')) T}

Subgoal 4.1.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply of'_is_cty to _ H12.
Subgoal 4.1.1.1:

Variables: L T1 T2 T3 T R R' R1 M4 M5 L1 T4 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L |- of' M6 T4}
H13 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T3}
H14 : {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}
H15 : {L, of' n1 T4 |- of'' (htm nil (hbase M4)) T2}
H16 : {is_cty T4}
============================
 {L |- of'' (htm (M6 :: L1) (habs R')) T}

Subgoal 4.1.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply IH to _ H14 H15 H13 _ H9 _ _.
Subgoal 4.1.1.1:

Variables: L T1 T2 T3 T R R' R1 M4 M5 L1 T4 M6
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L |- of' M6 T4}
H13 : {L, of' n1 T4 |- of'' (htm L1 (R1 n1)) T3}
H14 : {L, of' n1 T4 |- of'' (htm nil (hbase M5)) T1}
H15 : {L, of' n1 T4 |- of'' (htm nil (hbase M4)) T2}
H16 : {is_cty T4}
H17 : {L, of' n1 T4 |- of'' (htm L1 (R' n1)) T}
============================
 {L |- of'' (htm (M6 :: L1) (habs R')) T}

Subgoal 4.1.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < search.
Subgoal 4.1.1.2:

Variables: L FE3 FE12 FE T1 T2 T3 T R R' R1 M4 M5 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil nil FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L |- of' M4 T2}
H12 : {L, [F] |- of'' (htm FE3 (habs R1)) T3}
H13 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H12.
Subgoal 4.1.2:

Variables: L FE2 FE3 FE12 FE T1 T2 T3 T R R' R1 M4 M5 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H4 : {L |- of'' (htm FE3 (habs R1)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd nil FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L |- of' M5 T1}
H11 : {L, [F] |- of'' (htm FE2 (hbase M4)) T2}
H12 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 4.2:

Variables: L FE1 FE2 FE3 FE12 FE T1 T2 T3 T R R' R1 M4 M5 F
IH : forall L FE1 FE2 FE3 FE12 FE M1 M2 M3 M T1 T2 T3 T R, nabla x y z, 
     ctx' L -> {L |- of'' (htm FE1 M1) T1} -> {L |- of'' (htm FE2 M2) T2} ->
       {L |- of'' (htm FE3 M3) T3} ->
       {of' x T1, of' y T2, of' z T3 |- of' (R x y z) T} ->
       {hcombine3 M1 M2 M3 R M}* -> {appd FE1 FE2 FE12} ->
       {appd FE12 FE3 FE} -> {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L |- of'' (htm FE2 (hbase M4)) T2}
H4 : {L |- of'' (htm FE3 (habs R1)) T3}
H5 : {of' n1 T1, of' n2 T2, of' n3 T3 |- of' (R n1 n2 n3) T}
H7 : {appd FE1 FE2 FE12}
H8 : {appd FE12 FE3 FE}
H9 : {hcombine3 (hbase M5) (hbase M4) (R1 n1) R (R' n1)}*
H10 : {L, [F] |- of'' (htm FE1 (hbase M5)) T1}
H11 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

hcombine3_typ_pres < apply ctx'_focus_inv to _ _ H10.
Proof completed.
Abella < Theorem hcombine_abs_let_typ_pres : 
forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
  {L |- of'' (htm FE1 M1) T1} -> {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
  {hcombine_abs M1 R (x\y\let' x y) M} -> {appd FE1 FE2 FE} ->
  {L |- of'' (htm FE M) T}.


============================
 forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
   {L |- of'' (htm FE1 M1) T1} -> {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
   {hcombine_abs M1 R (x\y\let' x y) M} -> {appd FE1 FE2 FE} ->
   {L |- of'' (htm FE M) T}

hcombine_abs_let_typ_pres < induction on 4.

IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
============================
 forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
   {L |- of'' (htm FE1 M1) T1} -> {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
   {hcombine_abs M1 R (x\y\let' x y) M}@ -> {appd FE1 FE2 FE} ->
   {L |- of'' (htm FE M) T}

hcombine_abs_let_typ_pres < intros.

Variables: L FE1 FE2 FE M1 R M T1 T
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 M1) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H4 : {hcombine_abs M1 R (x\y\let' x y) M}@
H5 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M) T}

hcombine_abs_let_typ_pres < case H4.
Subgoal 1:

Variables: L FE1 FE2 FE T1 T M2 M3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M3)) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (hbase (M2 n1))) T}
H5 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply of''_is_cty to _ H2.
Subgoal 1:

Variables: L FE1 FE2 FE T1 T M2 M3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M3)) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (hbase (M2 n1))) T}
H5 : {appd FE1 FE2 FE}
H6 : {is_cty T1}
============================
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H2.
Subgoal 1.1:

Variables: L FE2 FE T1 T M2 M3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (hbase (M2 n1))) T}
H5 : {appd nil FE2 FE}
H6 : {is_cty T1}
H7 : {L |- of' M3 T1}
============================
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H3.
Subgoal 1.1.1:

Variables: L FE T1 T M2 M3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {appd nil nil FE}
H6 : {is_cty T1}
H7 : {L |- of' M3 T1}
H8 : {L, of' n1 T1 |- of' (M2 n1) T}
============================
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H5.
Subgoal 1.1.1:

Variables: L T1 T M2 M3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H6 : {is_cty T1}
H7 : {L |- of' M3 T1}
H8 : {L, of' n1 T1 |- of' (M2 n1) T}
============================
 {L |- of'' (htm nil (hbase (let' M3 M2))) T}

Subgoal 1.1.2 is:
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < search.
Subgoal 1.1.2:

Variables: L FE2 FE T1 T M2 M3 F
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H5 : {appd nil FE2 FE}
H6 : {is_cty T1}
H7 : {L |- of' M3 T1}
H8 : {L, of' n1 T1, [F n1] |- of'' (htm FE2 (hbase (M2 n1))) T}
H9 : member (F n1) (of' n1 T1 :: L)
============================
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 1.2 is:
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply ctx'_focus_inv to _ _ H8.
Subgoal 1.2:

Variables: L FE1 FE2 FE T1 T M2 M3 F
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (hbase (M2 n1))) T}
H5 : {appd FE1 FE2 FE}
H6 : {is_cty T1}
H7 : {L, [F] |- of'' (htm FE1 (hbase M3)) T1}
H8 : member F L
============================
 {L |- of'' (htm FE (hbase (let' M3 M2))) T}

Subgoal 2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply ctx'_focus_inv to _ _ H7.
Subgoal 2:

Variables: L FE1 FE2 FE R T1 T R' R1
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (habs R1)) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H5 : {appd FE1 FE2 FE}
H6 : {hcombine_abs (R1 n1) R (x\y\let' x y) (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H2.
Subgoal 2.1:

Variables: L FE2 FE R T1 T R' R1 L1 T2 M2
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H5 : {appd (M2 :: L1) FE2 FE}
H6 : {hcombine_abs (R1 n1) R (x\y\let' x y) (R' n1)}*
H7 : {L |- of' M2 T2}
H8 : {L, of' n1 T2 |- of'' (htm L1 (R1 n1)) T1}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H5.
Subgoal 2.1:

Variables: L FE2 R T1 T R' R1 L1 T2 M2 L3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H6 : {hcombine_abs (R1 n1) R (x\y\let' x y) (R' n1)}*
H7 : {L |- of' M2 T2}
H8 : {L, of' n1 T2 |- of'' (htm L1 (R1 n1)) T1}
H9 : {appd L1 FE2 L3}
============================
 {L |- of'' (htm (M2 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < assert {L, of' n1 T2, of' n2 T1 |- of'' (htm FE2 (R n2)) T}.
Subgoal 2.1:

Variables: L FE2 R T1 T R' R1 L1 T2 M2 L3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H6 : {hcombine_abs (R1 n1) R (x\y\let' x y) (R' n1)}*
H7 : {L |- of' M2 T2}
H8 : {L, of' n1 T2 |- of'' (htm L1 (R1 n1)) T1}
H9 : {appd L1 FE2 L3}
H10 : {L, of' n1 T2, of' n2 T1 |- of'' (htm FE2 (R n2)) T}
============================
 {L |- of'' (htm (M2 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply of'_is_cty to _ H7.
Subgoal 2.1:

Variables: L FE2 R T1 T R' R1 L1 T2 M2 L3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H6 : {hcombine_abs (R1 n1) R (x\y\let' x y) (R' n1)}*
H7 : {L |- of' M2 T2}
H8 : {L, of' n1 T2 |- of'' (htm L1 (R1 n1)) T1}
H9 : {appd L1 FE2 L3}
H10 : {L, of' n1 T2, of' n2 T1 |- of'' (htm FE2 (R n2)) T}
H11 : {is_cty T2}
============================
 {L |- of'' (htm (M2 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply IH to _ H8 H10 H6 H9.
Subgoal 2.1:

Variables: L FE2 R T1 T R' R1 L1 T2 M2 L3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H6 : {hcombine_abs (R1 n1) R (x\y\let' x y) (R' n1)}*
H7 : {L |- of' M2 T2}
H8 : {L, of' n1 T2 |- of'' (htm L1 (R1 n1)) T1}
H9 : {appd L1 FE2 L3}
H10 : {L, of' n1 T2, of' n2 T1 |- of'' (htm FE2 (R n2)) T}
H11 : {is_cty T2}
H12 : {L, of' n1 T2 |- of'' (htm L3 (R' n1)) T}
============================
 {L |- of'' (htm (M2 :: L3) (habs R')) T}

Subgoal 2.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < search.
Subgoal 2.2:

Variables: L FE1 FE2 FE R T1 T R' R1 F
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H3 : {L, of' n1 T1 |- of'' (htm FE2 (R n1)) T}
H5 : {appd FE1 FE2 FE}
H6 : {hcombine_abs (R1 n1) R (x\y\let' x y) (R' n1)}*
H7 : {L, [F] |- of'' (htm FE1 (habs R1)) T1}
H8 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply ctx'_focus_inv to _ _ H7.
Subgoal 3:

Variables: L FE1 FE2 FE T1 T R' R1 M2
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M2)) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (habs (R1 n1))) T}
H5 : {appd FE1 FE2 FE}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
============================
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply of''_is_cty to _ H2.
Subgoal 3:

Variables: L FE1 FE2 FE T1 T R' R1 M2
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M2)) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (habs (R1 n1))) T}
H5 : {appd FE1 FE2 FE}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
============================
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H2 (keep).
Subgoal 3.1:

Variables: L FE2 FE T1 T R' R1 M2
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (habs (R1 n1))) T}
H5 : {appd nil FE2 FE}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H3.
Subgoal 3.1.1:

Variables: L FE T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H5 : {appd nil (FE3 :: FE4) FE}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < case H5.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < assert {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
H11 : {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < assert {L, of' n2 T2, of' n1 T1 |- of'' (htm FE4 (R1 n1 n2)) T}.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
H11 : {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}
H12 : {L, of' n2 T2, of' n1 T1 |- of'' (htm FE4 (R1 n1 n2)) T}
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply of'_is_cty to _ H8.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
H11 : {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}
H12 : {L, of' n2 T2, of' n1 T1 |- of'' (htm FE4 (R1 n1 n2)) T}
H13 : {is_cty T1}
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply of'_is_cty to _ H9.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
H11 : {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}
H12 : {L, of' n2 T2, of' n1 T1 |- of'' (htm FE4 (R1 n1 n2)) T}
H13 : {is_cty T1}
H14 : {is_cty T2}
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres <  inst H6 with n1 = n2.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
H11 : {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}
H12 : {L, of' n2 T2, of' n1 T1 |- of'' (htm FE4 (R1 n1 n2)) T}
H13 : {is_cty T1}
H14 : {is_cty T2}
H15 : {hcombine_abs (hbase M2) (x\R1 x n2) (x\y\let' x y) (R' n2)}*
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply IH to _ H11 H12 H15 _.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
H11 : {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}
H12 : {L, of' n2 T2, of' n1 T1 |- of'' (htm FE4 (R1 n1 n2)) T}
H13 : {is_cty T1}
H14 : {is_cty T2}
H15 : {hcombine_abs (hbase M2) (x\R1 x n2) (x\y\let' x y) (R' n2)}*
H16 : {L, of' n2 T2 |- of'' (htm FE4 (R' n2)) T}
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply of'_str to _ _ H9.
Subgoal 3.1.1:

Variables: L T1 T R' R1 M2 FE4 T2 FE3
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1 |- of' FE3 T2}
H10 : {L, of' n1 T1, of' n2 T2 |- of'' (htm FE4 (R1 n1 n2)) T}
H11 : {L, of' n2 T2 |- of'' (htm nil (hbase M2)) T1}
H12 : {L, of' n2 T2, of' n1 T1 |- of'' (htm FE4 (R1 n1 n2)) T}
H13 : {is_cty T1}
H14 : {is_cty T2}
H15 : {hcombine_abs (hbase M2) (x\R1 x n2) (x\y\let' x y) (R' n2)}*
H16 : {L, of' n2 T2 |- of'' (htm FE4 (R' n2)) T}
H17 : {L |- of' FE3 T2}
============================
 {L |- of'' (htm (FE3 :: FE4) (habs R')) T}

Subgoal 3.1.2 is:
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < search.
Subgoal 3.1.2:

Variables: L FE2 FE T1 T R' R1 M2 F
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm nil (hbase M2)) T1}
H5 : {appd nil FE2 FE}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L |- of' M2 T1}
H9 : {L, of' n1 T1, [F n1] |- of'' (htm FE2 (habs (R1 n1))) T}
H10 : member (F n1) (of' n1 T1 :: L)
============================
 {L |- of'' (htm FE (habs R')) T}

Subgoal 3.2 is:
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply ctx'_focus_inv to _ _ H9.
Subgoal 3.2:

Variables: L FE1 FE2 FE T1 T R' R1 M2 F
IH : forall L FE1 FE2 FE M1 R M T1 T, nabla x, ctx' L ->
       {L |- of'' (htm FE1 M1) T1} ->
       {L, of' x T1 |- of'' (htm FE2 (R x)) T} ->
       {hcombine_abs M1 R (x\y\let' x y) M}* -> {appd FE1 FE2 FE} ->
       {L |- of'' (htm FE M) T}
H1 : ctx' L
H2 : {L |- of'' (htm FE1 (hbase M2)) T1}
H3 : {L, of' n1 T1 |- of'' (htm FE2 (habs (R1 n1))) T}
H5 : {appd FE1 FE2 FE}
H6 : {hcombine_abs (hbase M2) (x\R1 x n1) (x\y\let' x y) (R' n1)}*
H7 : {is_cty T1}
H8 : {L, [F] |- of'' (htm FE1 (hbase M2)) T1}
H9 : member F L
============================
 {L |- of'' (htm FE (habs R')) T}

hcombine_abs_let_typ_pres < apply ctx'_focus_inv to _ _ H8.
Proof completed.
Abella < Theorem hoist_abs_fun_typ : 
forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
  {L, of' x T1 |- of''_body TE (R x) T2} -> {hoist_abs R G E FA R' F} ->
  {L, of' E TE, of' x T1 |- of' (F x) T2}.


============================
 forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
   {L, of' x T1 |- of''_body TE (R x) T2} -> {hoist_abs R G E FA R' F} ->
   {L, of' E TE, of' x T1 |- of' (F x) T2}

hoist_abs_fun_typ < induction on 4.

IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
============================
 forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
   {L, of' x T1 |- of''_body TE (R x) T2} -> {hoist_abs R G E FA R' F}@ ->
   {L, of' E TE, of' x T1 |- of' (F x) T2}

hoist_abs_fun_typ < intros.

Variables: L T1 T2 TE R R' G E FA F
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H4 : {hoist_abs R G E FA R' F}@
============================
 {L, of' E TE, of' n1 T1 |- of' (F n1) T2}

hoist_abs_fun_typ < case H4.
Subgoal 1:

Variables: L T1 T2 TE G E FA F FA'' FA'
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (hbase (F n1)) T2}
H5 : {rev FA nil FA'}*
H6 : {tm'_list_to_tuple FA' FA''}*
============================
 {L, of' E TE, of' n1 T1 |- of' (F n1) T2}

Subgoal 2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < case H3.
Subgoal 1.1:

Variables: L T1 T2 G E FA F FA'' FA'
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {rev FA nil FA'}*
H6 : {tm'_list_to_tuple FA' FA''}*
H7 : {L, of' n1 T1 |- of' (F n1) T2}
============================
 {L, of' E tunit, of' n1 T1 |- of' (F n1) T2}

Subgoal 1.2 is:
 {L, of' E TE, of' n1 T1 |- of' (F n1) T2}

Subgoal 2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < search.
Subgoal 1.2:

Variables: L T1 T2 TE G E FA F FA'' FA' F1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {rev FA nil FA'}*
H6 : {tm'_list_to_tuple FA' FA''}*
H7 : {L, of' n1 T1, [F1 n1] |- of''_body TE (hbase (F n1)) T2}
H8 : member (F1 n1) (of' n1 T1 :: L)
============================
 {L, of' E TE, of' n1 T1 |- of' (F n1) T2}

Subgoal 2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < apply ctx'_focus_inv to _ _ H7.
Subgoal 2:

Variables: L T1 T2 TE G E FA R'1 F' R1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (habs (R1 n1)) T2}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
============================
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < case H3.
Subgoal 2.1:

Variables: L T1 T2 G E FA R'1 F' R1 T3 TE1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H7 : {L, of' n1 T1 |- is_cty T3}
============================
 {L, of' E (prod T3 TE1), of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

Subgoal 2.2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < assert {L, of' n2 T3, of' n1 T1 |- of''_body TE1 (R1 n1 n2) T2}.
Subgoal 2.1:

Variables: L T1 T2 G E FA R'1 F' R1 T3 TE1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H7 : {L, of' n1 T1 |- is_cty T3}
H8 : {L, of' n2 T3, of' n1 T1 |- of''_body TE1 (R1 n1 n2) T2}
============================
 {L, of' E (prod T3 TE1), of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

Subgoal 2.2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ <  inst H5 with n1 = n2.
Subgoal 2.1:

Variables: L T1 T2 G E FA R'1 F' R1 T3 TE1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H7 : {L, of' n1 T1 |- is_cty T3}
H8 : {L, of' n2 T3, of' n1 T1 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {hoist_abs (x\R1 x n2) G (snd' E) (n2 :: FA) (F' n2) (x\R'1 x n2)}*
============================
 {L, of' E (prod T3 TE1), of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

Subgoal 2.2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < apply is_cty_str to _ H7.
Subgoal 2.1:

Variables: L T1 T2 G E FA R'1 F' R1 T3 TE1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H7 : {L, of' n1 T1 |- is_cty T3}
H8 : {L, of' n2 T3, of' n1 T1 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {hoist_abs (x\R1 x n2) G (snd' E) (n2 :: FA) (F' n2) (x\R'1 x n2)}*
H10 : {is_cty T3}
============================
 {L, of' E (prod T3 TE1), of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

Subgoal 2.2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < apply IH to _ _ H8 H9.
Subgoal 2.1:

Variables: L T1 T2 G E FA R'1 F' R1 T3 TE1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H7 : {L, of' n1 T1 |- is_cty T3}
H8 : {L, of' n2 T3, of' n1 T1 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {hoist_abs (x\R1 x n2) G (snd' E) (n2 :: FA) (F' n2) (x\R'1 x n2)}*
H10 : {is_cty T3}
H11 : {L, of' n2 T3, of' (snd' E) TE1, of' n1 T1 |- of' (R'1 n1 n2) T2}
============================
 {L, of' E (prod T3 TE1), of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

Subgoal 2.2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < assert {of' E (prod T3 TE1) |- of' (snd' E) TE1}.
Subgoal 2.1:

Variables: L T1 T2 G E FA R'1 F' R1 T3 TE1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H7 : {L, of' n1 T1 |- is_cty T3}
H8 : {L, of' n2 T3, of' n1 T1 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {hoist_abs (x\R1 x n2) G (snd' E) (n2 :: FA) (F' n2) (x\R'1 x n2)}*
H10 : {is_cty T3}
H11 : {L, of' n2 T3, of' (snd' E) TE1, of' n1 T1 |- of' (R'1 n1 n2) T2}
H12 : {of' E (prod T3 TE1) |- of' (snd' E) TE1}
============================
 {L, of' E (prod T3 TE1), of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

Subgoal 2.2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < cut H11 with H12.
Subgoal 2.1:

Variables: L T1 T2 G E FA R'1 F' R1 T3 TE1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H7 : {L, of' n1 T1 |- is_cty T3}
H8 : {L, of' n2 T3, of' n1 T1 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {hoist_abs (x\R1 x n2) G (snd' E) (n2 :: FA) (F' n2) (x\R'1 x n2)}*
H10 : {is_cty T3}
H11 : {L, of' n2 T3, of' (snd' E) TE1, of' n1 T1 |- of' (R'1 n1 n2) T2}
H12 : {of' E (prod T3 TE1) |- of' (snd' E) TE1}
H13 : {L, of' E (prod T3 TE1), of' n2 T3, of' n1 T1 |- of' (R'1 n1 n2) T2}
============================
 {L, of' E (prod T3 TE1), of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

Subgoal 2.2 is:
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < search.
Subgoal 2.2:

Variables: L T1 T2 TE G E FA R'1 F' R1 F1
IH : forall L T1 T2 TE R R' G E FA F, nabla x, ctx' L -> {is_cty T1} ->
       {L, of' x T1 |- of''_body TE (R x) T2} ->
       {hoist_abs R G E FA R' F}* -> {L, of' E TE, of' x T1 |- of' (F x) T2}
H1 : ctx' L
H2 : {is_cty T1}
H5 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: FA) (F' n1) (x\R'1 x n1)}*
H6 : {L, of' n1 T1, [F1 n1] |- of''_body TE (habs (R1 n1)) T2}
H7 : member (F1 n1) (of' n1 T1 :: L)
============================
 {L, of' E TE, of' n1 T1 |- of' (let' (fst' E) (R'1 n1)) T2}

hoist_abs_fun_typ < apply ctx'_focus_inv to _ _ H6.
Proof completed.
Abella < Theorem abstract_fun_typ : 
forall L T1 T2 TE R R' F, nabla x, ctx' L -> {is_cty T1} ->
  {L, of' x T1 |- of''_body TE (R x) T2} -> {abstract R R' F} ->
  (nabla l, {L, of' l TE, of' x T1 |- of' (F l x) T2}).


============================
 forall L T1 T2 TE R R' F, nabla x, ctx' L -> {is_cty T1} ->
   {L, of' x T1 |- of''_body TE (R x) T2} -> {abstract R R' F} ->
   (nabla l, {L, of' l TE, of' x T1 |- of' (F l x) T2})

abstract_fun_typ < intros.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H4 : {abstract R R' F}
============================
 {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}

abstract_fun_typ < case H4.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H5 : {hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
============================
 {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}

abstract_fun_typ <  inst H5 with n1 = n2, n2 = n3.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H5 : {hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
H6 : {hoist_abs R n3 n3 nil (R' n3) (x\F n3 x)}
============================
 {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}

abstract_fun_typ < apply hoist_abs_fun_typ to _ _ H3 H6.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H5 : {hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
H6 : {hoist_abs R n3 n3 nil (R' n3) (x\F n3 x)}
H7 : {L, of' n3 TE, of' n1 T1 |- of' (F n3 n1) T2}
============================
 {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}

abstract_fun_typ < search.
Proof completed.
Abella < Define ctx'_env_typ_split : (list o) -> ty -> ty -> prop by 
ctx'_env_typ_split nil TE TE;
ctx'_env_typ_split (of' X T :: L') TE' TE := ctx'_env_typ_split L' (prod T TE') TE.

Abella < Define ctx2' : (list o) -> (list o) -> (list o) -> prop by 
ctx2' L L nil := ctx' L;
nabla x, ctx2' (of' x T :: L) L1 (of' x T :: L2) := ctx2' L L1 L2 /\ {is_cty T}.

Abella < Theorem ctx2'_nil1 : 
forall L L2, ctx2' L nil L2 -> L = L2.


============================
 forall L L2, ctx2' L nil L2 -> L = L2

ctx2'_nil1 < induction on 1.

IH : forall L L2, ctx2' L nil L2 * -> L = L2
============================
 forall L L2, ctx2' L nil L2 @ -> L = L2

ctx2'_nil1 < intros.

Variables: L L2
IH : forall L L2, ctx2' L nil L2 * -> L = L2
H1 : ctx2' L nil L2 @
============================
 L = L2

ctx2'_nil1 < case H1.
Subgoal 1:

IH : forall L L2, ctx2' L nil L2 * -> L = L2
H2 : ctx' nil
============================
 nil = nil

Subgoal 2 is:
 of' n1 T :: L1 = of' n1 T :: L4

ctx2'_nil1 < search.
Subgoal 2:

Variables: L4 T L1
IH : forall L L2, ctx2' L nil L2 * -> L = L2
H2 : ctx2' L1 nil L4 *
H3 : {is_cty T}
============================
 of' n1 T :: L1 = of' n1 T :: L4

ctx2'_nil1 < apply IH to H2.
Subgoal 2:

Variables: L4 T
IH : forall L L2, ctx2' L nil L2 * -> L = L2
H2 : ctx2' L4 nil L4 *
H3 : {is_cty T}
============================
 of' n1 T :: L4 = of' n1 T :: L4

ctx2'_nil1 < search.
Proof completed.
Abella < Theorem ctx2'_move_head : 
forall L E L1 L2, ctx2' L (E :: L1) L2 ->
  (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L).


============================
 forall L E L1 L2, ctx2' L (E :: L1) L2 ->
   (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)

ctx2'_move_head < induction on 1.

IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
============================
 forall L E L1 L2, ctx2' L (E :: L1) L2 @ ->
   (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)

ctx2'_move_head < intros.

Variables: L E L1 L2
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H1 : ctx2' L (E :: L1) L2 @
============================
 exists L', ctx2' L' L1 (E :: L2) /\ subset L' L

ctx2'_move_head < case H1.
Subgoal 1:

Variables: E L1
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx' (E :: L1)
============================
 exists L', ctx2' L' L1 (E :: nil) /\ subset L' (E :: L1)

Subgoal 2 is:
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < case H2.
Subgoal 1:

Variables: L3 T
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H3 : ctx' L3
H4 : {is_cty T}
============================
 exists L', ctx2' L' L3 (of' n1 T :: nil) /\ subset L' (of' n1 T :: L3)

Subgoal 2 is:
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < exists of' n1 T :: L3.
Subgoal 1:

Variables: L3 T
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H3 : ctx' L3
H4 : {is_cty T}
============================
 ctx2' (of' n1 T :: L3) L3 (of' n1 T :: nil) /\
   subset (of' n1 T :: L3) (of' n1 T :: L3)

Subgoal 2 is:
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < split.
Subgoal 1.1:

Variables: L3 T
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H3 : ctx' L3
H4 : {is_cty T}
============================
 ctx2' (of' n1 T :: L3) L3 (of' n1 T :: nil)

Subgoal 1.2 is:
 subset (of' n1 T :: L3) (of' n1 T :: L3)

Subgoal 2 is:
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < search.
Subgoal 1.2:

Variables: L3 T
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H3 : ctx' L3
H4 : {is_cty T}
============================
 subset (of' n1 T :: L3) (of' n1 T :: L3)

Subgoal 2 is:
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < backchain subset_refl.
Subgoal 1.2:

Variables: L3 T
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H3 : ctx' L3
H4 : {is_cty T}
============================
 is_list (of' n1 T :: L3)

Subgoal 2 is:
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < unfold.
Subgoal 1.2:

Variables: L3 T
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H3 : ctx' L3
H4 : {is_cty T}
============================
 is_list L3

Subgoal 2 is:
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < backchain ctx'_islist.
Subgoal 2:

Variables: L5 T L7 L6 L3
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' L3 (L6 :: L7) L5 *
H3 : {is_cty T}
============================
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < apply IH to H2.
Subgoal 2:

Variables: L5 T L7 L6 L3 L'
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' L3 (L6 :: L7) L5 *
H3 : {is_cty T}
H4 : ctx2' L' L7 (L6 :: L5)
H5 : subset L' L3
============================
 exists L', ctx2' L' L7 (L6 :: of' n1 T :: L5) /\ subset L' (of' n1 T :: L3)

ctx2'_move_head < case H4.
Subgoal 2:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 exists L', ctx2' L' L8 (of' n2 T1 :: of' n1 T :: L9) /\
   subset L' (of' n1 T :: L3 n2)

ctx2'_move_head < exists of' n2 T1 :: of' n1 T :: L4.
Subgoal 2:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 ctx2' (of' n2 T1 :: of' n1 T :: L4) L8 (of' n2 T1 :: of' n1 T :: L9) /\
   subset (of' n2 T1 :: of' n1 T :: L4) (of' n1 T :: L3 n2)

ctx2'_move_head < split.
Subgoal 2.1:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 ctx2' (of' n2 T1 :: of' n1 T :: L4) L8 (of' n2 T1 :: of' n1 T :: L9)

Subgoal 2.2 is:
 subset (of' n2 T1 :: of' n1 T :: L4) (of' n1 T :: L3 n2)

ctx2'_move_head < search.
Subgoal 2.2:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 subset (of' n2 T1 :: of' n1 T :: L4) (of' n1 T :: L3 n2)

ctx2'_move_head < unfold.
Subgoal 2.2.1:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 member (of' n2 T1) (of' n1 T :: L3 n2)

Subgoal 2.2.2 is:
 subset (of' n1 T :: L4) (of' n1 T :: L3 n2)

ctx2'_move_head < case H5.
Subgoal 2.2.1:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
H8 : member (of' n2 T1) (L3 n2)
H9 : subset L4 (L3 n2)
============================
 member (of' n2 T1) (of' n1 T :: L3 n2)

Subgoal 2.2.2 is:
 subset (of' n1 T :: L4) (of' n1 T :: L3 n2)

ctx2'_move_head < search.
Subgoal 2.2.2:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 subset (of' n1 T :: L4) (of' n1 T :: L3 n2)

ctx2'_move_head < unfold.
Subgoal 2.2.2.1:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 member (of' n1 T) (of' n1 T :: L3 n2)

Subgoal 2.2.2.2 is:
 subset L4 (of' n1 T :: L3 n2)

ctx2'_move_head < search.
Subgoal 2.2.2.2:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H5 : subset (of' n2 T1 :: L4) (L3 n2)
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
============================
 subset L4 (of' n1 T :: L3 n2)

ctx2'_move_head < case H5.
Subgoal 2.2.2.2:

Variables: T L3 L9 T1 L8 L4
IH : forall L E L1 L2, ctx2' L (E :: L1) L2 * ->
       (exists L', ctx2' L' L1 (E :: L2) /\ subset L' L)
H2 : ctx2' (L3 n2) (of' n2 T1 :: L8) L9 *
H3 : {is_cty T}
H6 : ctx2' L4 L8 L9
H7 : {is_cty T1}
H8 : member (of' n2 T1) (L3 n2)
H9 : subset L4 (L3 n2)
============================
 subset L4 (of' n1 T :: L3 n2)

ctx2'_move_head < backchain subset_add.
Proof completed.
Abella < Theorem ctx2'_is_ctx : 
forall L L1 L2, ctx2' L L1 L2 -> ctx' L.


============================
 forall L L1 L2, ctx2' L L1 L2 -> ctx' L

ctx2'_is_ctx < induction on 1.

IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L
============================
 forall L L1 L2, ctx2' L L1 L2 @ -> ctx' L

ctx2'_is_ctx < intros.

Variables: L L1 L2
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L
H1 : ctx2' L L1 L2 @
============================
 ctx' L

ctx2'_is_ctx < case H1.
Subgoal 1:

Variables: L1
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L
H2 : ctx' L1
============================
 ctx' L1

Subgoal 2 is:
 ctx' (of' n1 T :: L3)

ctx2'_is_ctx < search.
Subgoal 2:

Variables: L5 T L4 L3
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L
H2 : ctx2' L3 L4 L5 *
H3 : {is_cty T}
============================
 ctx' (of' n1 T :: L3)

ctx2'_is_ctx < apply IH to H2.
Subgoal 2:

Variables: L5 T L4 L3
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L
H2 : ctx2' L3 L4 L5 *
H3 : {is_cty T}
H4 : ctx' L3
============================
 ctx' (of' n1 T :: L3)

ctx2'_is_ctx < search.
Proof completed.
Abella < Theorem ctx2'_is_ctx2 : 
forall L L1 L2, ctx2' L L1 L2 -> ctx' L2.


============================
 forall L L1 L2, ctx2' L L1 L2 -> ctx' L2

ctx2'_is_ctx2 < induction on 1.

IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L2
============================
 forall L L1 L2, ctx2' L L1 L2 @ -> ctx' L2

ctx2'_is_ctx2 < intros.

Variables: L L1 L2
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L2
H1 : ctx2' L L1 L2 @
============================
 ctx' L2

ctx2'_is_ctx2 < case H1.
Subgoal 1:

Variables: L1
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L2
H2 : ctx' L1
============================
 ctx' nil

Subgoal 2 is:
 ctx' (of' n1 T :: L5)

ctx2'_is_ctx2 < search.
Subgoal 2:

Variables: L5 T L4 L3
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L2
H2 : ctx2' L3 L4 L5 *
H3 : {is_cty T}
============================
 ctx' (of' n1 T :: L5)

ctx2'_is_ctx2 < apply IH to H2.
Subgoal 2:

Variables: L5 T L4 L3
IH : forall L L1 L2, ctx2' L L1 L2 * -> ctx' L2
H2 : ctx2' L3 L4 L5 *
H3 : {is_cty T}
H4 : ctx' L5
============================
 ctx' (of' n1 T :: L5)

ctx2'_is_ctx2 < search.
Proof completed.
Abella < Define ctx'_prod : (list o) -> ty -> prop by 
ctx'_prod nil tunit;
ctx'_prod (of' X T :: L) (prod T TE) := ctx'_prod L TE.

Abella < Theorem type_of_tuple : 
forall L TE Vs FA, ctx'_prod L TE -> vars_of_ctx' L Vs ->
  {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}.


============================
 forall L TE Vs FA, ctx'_prod L TE -> vars_of_ctx' L Vs ->
   {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}

type_of_tuple < induction on 1.

IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
============================
 forall L TE Vs FA, ctx'_prod L TE @ -> vars_of_ctx' L Vs ->
   {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}

type_of_tuple < intros.

Variables: L TE Vs FA
IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx'_prod L TE @
H2 : vars_of_ctx' L Vs
H3 : {tm'_list_to_tuple Vs FA}
============================
 {L |- of' FA TE}

type_of_tuple < case H1.
Subgoal 1:

Variables: Vs FA
IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H2 : vars_of_ctx' nil Vs
H3 : {tm'_list_to_tuple Vs FA}
============================
 {of' FA tunit}

Subgoal 2 is:
 {L1, of' X T |- of' FA (prod T TE1)}

type_of_tuple < case H2.
Subgoal 1:

Variables: FA
IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H3 : {tm'_list_to_tuple nil FA}
============================
 {of' FA tunit}

Subgoal 2 is:
 {L1, of' X T |- of' FA (prod T TE1)}

type_of_tuple < case H3.
Subgoal 1:

IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
============================
 {of' unit' tunit}

Subgoal 2 is:
 {L1, of' X T |- of' FA (prod T TE1)}

type_of_tuple < search.
Subgoal 2:

Variables: Vs FA TE1 T L1 X
IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H2 : vars_of_ctx' (of' X T :: L1) Vs
H3 : {tm'_list_to_tuple Vs FA}
H4 : ctx'_prod L1 TE1 *
============================
 {L1, of' X T |- of' FA (prod T TE1)}

type_of_tuple < case H2.
Subgoal 2:

Variables: FA TE1 T L1 X Vs1
IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H3 : {tm'_list_to_tuple (X :: Vs1) FA}
H4 : ctx'_prod L1 TE1 *
H5 : vars_of_ctx' L1 Vs1
============================
 {L1, of' X T |- of' FA (prod T TE1)}

type_of_tuple < case H3.
Subgoal 2:

Variables: TE1 T L1 X Vs1 ML'
IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H4 : ctx'_prod L1 TE1 *
H5 : vars_of_ctx' L1 Vs1
H6 : {tm'_list_to_tuple Vs1 ML'}
============================
 {L1, of' X T |- of' (pair' X ML') (prod T TE1)}

type_of_tuple < apply IH to H4 H5 H6.
Subgoal 2:

Variables: TE1 T L1 X Vs1 ML'
IH : forall L TE Vs FA, ctx'_prod L TE * -> vars_of_ctx' L Vs ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H4 : ctx'_prod L1 TE1 *
H5 : vars_of_ctx' L1 Vs1
H6 : {tm'_list_to_tuple Vs1 ML'}
H7 : {L1 |- of' ML' TE1}
============================
 {L1, of' X T |- of' (pair' X ML') (prod T TE1)}

type_of_tuple < search.
Proof completed.
Abella < Theorem type_of_env_tuple : 
forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 -> vars_of_ctx' L1 Vs1 ->
  vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' -> ctx'_env_typ_split L1 TE' TE ->
  {rev Vs1 Vs2 Vs} -> {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}.


============================
 forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 -> vars_of_ctx' L1 Vs1 ->
   vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' -> ctx'_env_typ_split L1 TE' TE ->
   {rev Vs1 Vs2 Vs} -> {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}

type_of_env_tuple < induction on 5.

IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
============================
 forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 -> vars_of_ctx' L1 Vs1 ->
   vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
   ctx'_env_typ_split L1 TE' TE @ -> {rev Vs1 Vs2 Vs} ->
   {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}

type_of_env_tuple < intros.

Variables: L L1 L2 Vs TE TE' Vs1 Vs2 FA
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L L1 L2
H2 : vars_of_ctx' L1 Vs1
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H5 : ctx'_env_typ_split L1 TE' TE @
H6 : {rev Vs1 Vs2 Vs}
H7 : {tm'_list_to_tuple Vs FA}
============================
 {L |- of' FA TE}

type_of_env_tuple < case H5.
Subgoal 1:

Variables: L L2 Vs TE Vs1 Vs2 FA
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L nil L2
H2 : vars_of_ctx' nil Vs1
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE
H6 : {rev Vs1 Vs2 Vs}
H7 : {tm'_list_to_tuple Vs FA}
============================
 {L |- of' FA TE}

Subgoal 2 is:
 {L |- of' FA TE}

type_of_env_tuple < case H2.
Subgoal 1:

Variables: L L2 Vs TE Vs2 FA
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L nil L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE
H6 : {rev nil Vs2 Vs}
H7 : {tm'_list_to_tuple Vs FA}
============================
 {L |- of' FA TE}

Subgoal 2 is:
 {L |- of' FA TE}

type_of_env_tuple < case H6.
Subgoal 1:

Variables: L L2 Vs TE FA
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L nil L2
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_prod L2 TE
H7 : {tm'_list_to_tuple Vs FA}
============================
 {L |- of' FA TE}

Subgoal 2 is:
 {L |- of' FA TE}

type_of_env_tuple < apply ctx2'_nil1 to H1.
Subgoal 1:

Variables: L2 Vs TE FA
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L2 nil L2
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_prod L2 TE
H7 : {tm'_list_to_tuple Vs FA}
============================
 {L2 |- of' FA TE}

Subgoal 2 is:
 {L |- of' FA TE}

type_of_env_tuple < backchain type_of_tuple.
Subgoal 2:

Variables: L L2 Vs TE TE' Vs1 Vs2 FA L' T X
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H2 : vars_of_ctx' (of' X T :: L') Vs1
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H6 : {rev Vs1 Vs2 Vs}
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
============================
 {L |- of' FA TE}

type_of_env_tuple < case H2.
Subgoal 2:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H6 : {rev (X :: Vs3) Vs2 Vs}
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
============================
 {L |- of' FA TE}

type_of_env_tuple < case H6.
Subgoal 2:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
H10 : {rev Vs3 (X :: Vs2) Vs}
============================
 {L |- of' FA TE}

type_of_env_tuple < apply ctx2'_move_head to H1.
Subgoal 2:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3 L'1
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
H10 : {rev Vs3 (X :: Vs2) Vs}
H11 : ctx2' L'1 L' (of' X T :: L2)
H12 : subset L'1 L
============================
 {L |- of' FA TE}

type_of_env_tuple < apply IH to H11 _ _ _ H8 H10 H7.
Subgoal 2:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3 L'1
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
H10 : {rev Vs3 (X :: Vs2) Vs}
H11 : ctx2' L'1 L' (of' X T :: L2)
H12 : subset L'1 L
H13 : {L'1 |- of' FA TE}
============================
 {L |- of' FA TE}

type_of_env_tuple < monotone H13 with L.
Subgoal 2.1:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3 L'1
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
H10 : {rev Vs3 (X :: Vs2) Vs}
H11 : ctx2' L'1 L' (of' X T :: L2)
H12 : subset L'1 L
H13 : {L'1 |- of' FA TE}
============================
 forall X, member X L'1 -> member X L

Subgoal 2 is:
 {L |- of' FA TE}

type_of_env_tuple < intros.
Subgoal 2.1:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3 L'1 X1
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
H10 : {rev Vs3 (X :: Vs2) Vs}
H11 : ctx2' L'1 L' (of' X T :: L2)
H12 : subset L'1 L
H13 : {L'1 |- of' FA TE}
H14 : member X1 L'1
============================
 member X1 L

Subgoal 2 is:
 {L |- of' FA TE}

type_of_env_tuple < apply subset_mem_trans to H12 H14.
Subgoal 2.1:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3 L'1 X1
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
H10 : {rev Vs3 (X :: Vs2) Vs}
H11 : ctx2' L'1 L' (of' X T :: L2)
H12 : subset L'1 L
H13 : {L'1 |- of' FA TE}
H14 : member X1 L'1
H15 : member X1 L
============================
 member X1 L

Subgoal 2 is:
 {L |- of' FA TE}

type_of_env_tuple < search.
Subgoal 2:

Variables: L L2 Vs TE TE' Vs2 FA L' T X Vs3 L'1
IH : forall L L1 L2 Vs TE TE' Vs1 Vs2 FA, ctx2' L L1 L2 ->
       vars_of_ctx' L1 Vs1 -> vars_of_ctx' L2 Vs2 -> ctx'_prod L2 TE' ->
       ctx'_env_typ_split L1 TE' TE * -> {rev Vs1 Vs2 Vs} ->
       {tm'_list_to_tuple Vs FA} -> {L |- of' FA TE}
H1 : ctx2' L (of' X T :: L') L2
H3 : vars_of_ctx' L2 Vs2
H4 : ctx'_prod L2 TE'
H7 : {tm'_list_to_tuple Vs FA}
H8 : ctx'_env_typ_split L' (prod T TE') TE *
H9 : vars_of_ctx' L' Vs3
H10 : {rev Vs3 (X :: Vs2) Vs}
H11 : ctx2' L'1 L' (of' X T :: L2)
H12 : subset L'1 L
H13 : {L'1 |- of' FA TE}
H14 : {L |- of' FA TE}
============================
 {L |- of' FA TE}

type_of_env_tuple < search.
Proof completed.
Abella < Theorem hoist_abs_body_typ : 
forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
  {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
  {L, of' x T1 |- of''_body TE' (R x) T2} -> {hoist_abs R G E Vs R' F} ->
  {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}.


============================
 forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
   {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
   {L, of' x T1 |- of''_body TE' (R x) T2} -> {hoist_abs R G E Vs R' F} ->
   {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}

hoist_abs_body_typ < induction on 6.

IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
============================
 forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
   {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
   {L, of' x T1 |- of''_body TE' (R x) T2} -> {hoist_abs R G E Vs R' F}@ ->
   {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}

hoist_abs_body_typ < intros.

Variables: L L1 L2 T1 T2 TE TE' R R' G E Vs F
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 TE' TE
H5 : {L, of' n1 T1 |- of''_body TE' (R n1) T2}
H6 : {hoist_abs R G E Vs R' F}@
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}

hoist_abs_body_typ < case H6.
Subgoal 1:

Variables: L L1 L2 T1 T2 TE TE' G E Vs F FA'' FA'
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 TE' TE
H5 : {L, of' n1 T1 |- of''_body TE' (hbase (F n1)) T2}
H7 : {rev Vs nil FA'}*
H8 : {tm'_list_to_tuple FA' FA''}*
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body TE' (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < case H5.
Subgoal 1.1:

Variables: L L1 L2 T1 T2 TE G E Vs F FA'' FA'
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 tunit TE
H7 : {rev Vs nil FA'}*
H8 : {tm'_list_to_tuple FA' FA''}*
H9 : {L, of' n1 T1 |- of' (F n1) T2}
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body tunit (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 1.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body TE' (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply ctx2'_is_ctx2 to H1.
Subgoal 1.1:

Variables: L L1 L2 T1 T2 TE G E Vs F FA'' FA'
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 tunit TE
H7 : {rev Vs nil FA'}*
H8 : {tm'_list_to_tuple FA' FA''}*
H9 : {L, of' n1 T1 |- of' (F n1) T2}
H10 : ctx' L2
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body tunit (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 1.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body TE' (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply type_of_env_tuple to _ H3 _ _ H4 H7 H8 with L = L2.
Subgoal 1.1:

Variables: L L1 L2 T1 T2 TE G E Vs F FA'' FA'
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 tunit TE
H7 : {rev Vs nil FA'}*
H8 : {tm'_list_to_tuple FA' FA''}*
H9 : {L, of' n1 T1 |- of' (F n1) T2}
H10 : ctx' L2
H11 : {L2 |- of' FA'' TE}
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body tunit (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 1.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body TE' (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < search.
Subgoal 1.2:

Variables: L L1 L2 T1 T2 TE TE' G E Vs F FA'' FA' F1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 TE' TE
H7 : {rev Vs nil FA'}*
H8 : {tm'_list_to_tuple FA' FA''}*
H9 : {L, of' n1 T1, [F1 n1] |- of''_body TE' (hbase (F n1)) T2}
H10 : member (F1 n1) (of' n1 T1 :: L)
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body TE' (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply ctx2'_is_ctx to H1.
Subgoal 1.2:

Variables: L L1 L2 T1 T2 TE TE' G E Vs F FA'' FA' F1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 TE' TE
H7 : {rev Vs nil FA'}*
H8 : {tm'_list_to_tuple FA' FA''}*
H9 : {L, of' n1 T1, [F1 n1] |- of''_body TE' (hbase (F n1)) T2}
H10 : member (F1 n1) (of' n1 T1 :: L)
H11 : ctx' L
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body TE' (hbase (app' G FA'')) (arr' T1 T2)}

Subgoal 2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply ctx'_focus_inv to _ _ H9.
Subgoal 2:

Variables: L L1 L2 T1 T2 TE TE' G E Vs R'1 F' R1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 TE' TE
H5 : {L, of' n1 T1 |- of''_body TE' (habs (R1 n1)) T2}
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < case H5.
Subgoal 2.1:

Variables: L L1 L2 T1 T2 TE G E Vs R'1 F' R1 T3 TE1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 (prod T3 TE1) TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {L, of' n1 T1 |- is_cty T3}
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body (prod T3 TE1) (habs F') (arr' T1 T2)}

Subgoal 2.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < assert {L, of' n1 T3, of' n2 T1 |- of''_body TE1 (R1 n2 n1) T2}.
Subgoal 2.1:

Variables: L L1 L2 T1 T2 TE G E Vs R'1 F' R1 T3 TE1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 (prod T3 TE1) TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {L, of' n1 T1 |- is_cty T3}
H10 : {L, of' n1 T3, of' n2 T1 |- of''_body TE1 (R1 n2 n1) T2}
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body (prod T3 TE1) (habs F') (arr' T1 T2)}

Subgoal 2.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply ctx2'_is_ctx to H1.
Subgoal 2.1:

Variables: L L1 L2 T1 T2 TE G E Vs R'1 F' R1 T3 TE1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 (prod T3 TE1) TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {L, of' n1 T1 |- is_cty T3}
H10 : {L, of' n1 T3, of' n2 T1 |- of''_body TE1 (R1 n2 n1) T2}
H11 : ctx' L
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body (prod T3 TE1) (habs F') (arr' T1 T2)}

Subgoal 2.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply is_cty_str to _ H9.
Subgoal 2.1:

Variables: L L1 L2 T1 T2 TE G E Vs R'1 F' R1 T3 TE1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 (prod T3 TE1) TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {L, of' n1 T1 |- is_cty T3}
H10 : {L, of' n1 T3, of' n2 T1 |- of''_body TE1 (R1 n2 n1) T2}
H11 : ctx' L
H12 : {is_cty T3}
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body (prod T3 TE1) (habs F') (arr' T1 T2)}

Subgoal 2.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < assert ctx2' (of' n1 T3 :: L) L1 (of' n1 T3 :: L2).
Subgoal 2.1:

Variables: L L1 L2 T1 T2 TE G E Vs R'1 F' R1 T3 TE1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 (prod T3 TE1) TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {L, of' n1 T1 |- is_cty T3}
H10 : {L, of' n1 T3, of' n2 T1 |- of''_body TE1 (R1 n2 n1) T2}
H11 : ctx' L
H12 : {is_cty T3}
H13 : ctx2' (of' n1 T3 :: L) L1 (of' n1 T3 :: L2)
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body (prod T3 TE1) (habs F') (arr' T1 T2)}

Subgoal 2.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply IH to H13 _ _ _ H10 H7.
Subgoal 2.1:

Variables: L L1 L2 T1 T2 TE G E Vs R'1 F' R1 T3 TE1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 (prod T3 TE1) TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, of' n2 T3 |- of''_body TE1 (R1 n1 n2) T2}
H9 : {L, of' n1 T1 |- is_cty T3}
H10 : {L, of' n1 T3, of' n2 T1 |- of''_body TE1 (R1 n2 n1) T2}
H11 : ctx' L
H12 : {is_cty T3}
H13 : ctx2' (of' n1 T3 :: L) L1 (of' n1 T3 :: L2)
H14 : {L2, of' n1 T3, of' G (arr' TE (arr' T1 T2)) |-
         of''_body TE1 (F' n1) (arr' T1 T2)}
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |-
    of''_body (prod T3 TE1) (habs F') (arr' T1 T2)}

Subgoal 2.2 is:
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < search.
Subgoal 2.2:

Variables: L L1 L2 T1 T2 TE TE' G E Vs R'1 F' R1 F1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 TE' TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, [F1 n1] |- of''_body TE' (habs (R1 n1)) T2}
H9 : member (F1 n1) (of' n1 T1 :: L)
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply ctx2'_is_ctx to H1.
Subgoal 2.2:

Variables: L L1 L2 T1 T2 TE TE' G E Vs R'1 F' R1 F1
IH : forall L L1 L2 T1 T2 TE TE' R R' G E Vs F, nabla x, ctx2' L L1 L2 ->
       {is_cty T1} -> vars_of_ctx' L2 Vs -> ctx'_env_typ_split L2 TE' TE ->
       {L, of' x T1 |- of''_body TE' (R x) T2} ->
       {hoist_abs R G E Vs R' F}* ->
       {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' R' (arr' T1 T2)}
H1 : ctx2' L L1 L2
H2 : {is_cty T1}
H3 : vars_of_ctx' L2 Vs
H4 : ctx'_env_typ_split L2 TE' TE
H7 : {hoist_abs (x\R1 x n1) G (snd' E) (n1 :: Vs) (F' n1) (x\R'1 x n1)}*
H8 : {L, of' n1 T1, [F1 n1] |- of''_body TE' (habs (R1 n1)) T2}
H9 : member (F1 n1) (of' n1 T1 :: L)
H10 : ctx' L
============================
 {L2, of' G (arr' TE (arr' T1 T2)) |- of''_body TE' (habs F') (arr' T1 T2)}

hoist_abs_body_typ < apply ctx'_focus_inv to _ _ H8.
Proof completed.
Abella < Theorem abstract_body_typ : 
forall L T1 T2 TE R R' F, nabla x, ctx' L -> {is_cty T1} ->
  {L, of' x T1 |- of''_body TE (R x) T2} -> {abstract R R' F} ->
  (nabla g, {of' g (arr' TE (arr' T1 T2)) |-
               of''_body TE (R' g) (arr' T1 T2)}).


============================
 forall L T1 T2 TE R R' F, nabla x, ctx' L -> {is_cty T1} ->
   {L, of' x T1 |- of''_body TE (R x) T2} -> {abstract R R' F} ->
   (nabla g, {of' g (arr' TE (arr' T1 T2)) |-
                of''_body TE (R' g) (arr' T1 T2)})

abstract_body_typ < intros.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H4 : {abstract R R' F}
============================
 {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R' n1) (arr' T1 T2)}

abstract_body_typ < case H4.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H5 : {hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
============================
 {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R' n1) (arr' T1 T2)}

abstract_body_typ < assert {hoist_abs R n2 n3 nil (R' n2) (x\F n3 x)}.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H5 : {hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
H6 : {hoist_abs R n2 n3 nil (R' n2) (x\F n3 x)}
============================
 {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R' n1) (arr' T1 T2)}

abstract_body_typ < apply hoist_abs_body_typ to _ _ _ _ H3 H6 with TE' = TE.

Variables: L T1 T2 TE R R' F
H1 : ctx' L
H2 : {is_cty T1}
H3 : {L, of' n1 T1 |- of''_body TE (R n1) T2}
H5 : {hoist_abs R n1 n2 nil (R' n1) (x\F n2 x)}
H6 : {hoist_abs R n2 n3 nil (R' n2) (x\F n3 x)}
H7 : {of' n2 (arr' TE (arr' T1 T2)) |- of''_body TE (R' n2) (arr' T1 T2)}
============================
 {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R' n1) (arr' T1 T2)}

abstract_body_typ < search.
Proof completed.
Abella < Theorem ch_typ_pres : 
forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
  vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'} ->
  {L |- of'' M' T}.


============================
 forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
   vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'} ->
   {L |- of'' M' T}

ch_typ_pres < induction on 6.

IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
============================
 forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
   vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}@ ->
   {L |- of'' M' T}

ch_typ_pres < intros.

Variables: L CL Vs M M' T
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' M T}
H6 : {CL |- ch M M'}@
============================
 {L |- of'' M' T}

ch_typ_pres < case H6.
Subgoal 1:

Variables: L CL Vs T N
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (nat' N) T}
============================
 {L |- of'' (htm nil (hbase (nat' N))) T}

Subgoal 2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 1.1:

Variables: L CL Vs N
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
============================
 {L |- of'' (htm nil (hbase (nat' N))) tnat}

Subgoal 1.2 is:
 {L |- of'' (htm nil (hbase (nat' N))) T}

Subgoal 2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 1.2:

Variables: L CL Vs T N F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {L, [F] |- of' (nat' N) T}
H8 : member F L
============================
 {L |- of'' (htm nil (hbase (nat' N))) T}

Subgoal 2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H7.
Subgoal 1.2:

Variables: L CL Vs N F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {L, [F] |- of' (nat' N) T1}
H8 : member F L
H9 : name (nat' N)
============================
 {L |- of'' (htm nil (hbase (nat' N))) T1}

Subgoal 2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H9.
Subgoal 2:

Variables: L CL Vs T M'' M'1 FE M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (pred' M1) T}
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\pred' x) M''}*
============================
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 2.1:

Variables: L CL Vs M'' M'1 FE M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\pred' x) M''}*
H9 : {L |- of' M1 tnat}
============================
 {L |- of'' (htm FE M'') tnat}

Subgoal 2.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H9 H7.
Subgoal 2.1:

Variables: L CL Vs M'' M'1 FE M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\pred' x) M''}*
H9 : {L |- of' M1 tnat}
H10 : {L |- of'' (htm FE M'1) tnat}
============================
 {L |- of'' (htm FE M'') tnat}

Subgoal 2.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hconstr_str to _ H8.
Subgoal 2.1:

Variables: L CL Vs M'' M'1 FE M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\pred' x) M''}*
H9 : {L |- of' M1 tnat}
H10 : {L |- of'' (htm FE M'1) tnat}
H11 : {hconstr M'1 (x\pred' x) M''}
============================
 {L |- of'' (htm FE M'') tnat}

Subgoal 2.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hconstr_typ_pres to _ H10 _ H11.
Subgoal 2.1:

Variables: L CL Vs M'' M'1 FE M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\pred' x) M''}*
H9 : {L |- of' M1 tnat}
H10 : {L |- of'' (htm FE M'1) tnat}
H11 : {hconstr M'1 (x\pred' x) M''}
H12 : {L |- of'' (htm FE M'') tnat}
============================
 {L |- of'' (htm FE M'') tnat}

Subgoal 2.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 2.2:

Variables: L CL Vs T M'' M'1 FE M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\pred' x) M''}*
H9 : {L, [F] |- of' (pred' M1) T}
H10 : member F L
============================
 {L |- of'' (htm FE M'') T}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H9.
Subgoal 2.2:

Variables: L CL Vs M'' M'1 FE M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\pred' x) M''}*
H9 : {L, [F] |- of' (pred' M1) T1}
H10 : member F L
H11 : name (pred' M1)
============================
 {L |- of'' (htm FE M'') T1}

Subgoal 3 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H11.
Subgoal 3:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (plus' M1 M2) T}
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 3.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L |- of' M1 tnat}
H12 : {L |- of' M2 tnat}
============================
 {L |- of'' (htm FE M'1) tnat}

Subgoal 3.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H11 H7.
Subgoal 3.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L |- of' M1 tnat}
H12 : {L |- of' M2 tnat}
H13 : {L |- of'' (htm FE1 M1') tnat}
============================
 {L |- of'' (htm FE M'1) tnat}

Subgoal 3.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H12 H8.
Subgoal 3.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L |- of' M1 tnat}
H12 : {L |- of' M2 tnat}
H13 : {L |- of'' (htm FE1 M1') tnat}
H14 : {L |- of'' (htm FE2 M2') tnat}
============================
 {L |- of'' (htm FE M'1) tnat}

Subgoal 3.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_str to _ H10.
Subgoal 3.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L |- of' M1 tnat}
H12 : {L |- of' M2 tnat}
H13 : {L |- of'' (htm FE1 M1') tnat}
H14 : {L |- of'' (htm FE2 M2') tnat}
H15 : {hcombine M1' M2' (x\y\plus' x y) M'1}
============================
 {L |- of'' (htm FE M'1) tnat}

Subgoal 3.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H9.
Subgoal 3.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L |- of' M1 tnat}
H12 : {L |- of' M2 tnat}
H13 : {L |- of'' (htm FE1 M1') tnat}
H14 : {L |- of'' (htm FE2 M2') tnat}
H15 : {hcombine M1' M2' (x\y\plus' x y) M'1}
H16 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M'1) tnat}

Subgoal 3.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_typ_pres to _ H13 H14 _ H15 H16.
Subgoal 3.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L |- of' M1 tnat}
H12 : {L |- of' M2 tnat}
H13 : {L |- of'' (htm FE1 M1') tnat}
H14 : {L |- of'' (htm FE2 M2') tnat}
H15 : {hcombine M1' M2' (x\y\plus' x y) M'1}
H16 : {appd FE1 FE2 FE}
H17 : {L |- of'' (htm FE M'1) tnat}
============================
 {L |- of'' (htm FE M'1) tnat}

Subgoal 3.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 3.2:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L, [F] |- of' (plus' M1 M2) T}
H12 : member F L
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 3.2:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\plus' x y) M'1}*
H11 : {L, [F] |- of' (plus' M1 M2) T1}
H12 : member F L
H13 : name (plus' M1 M2)
============================
 {L |- of'' (htm FE M'1) T1}

Subgoal 4 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H13.
Subgoal 4:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (ifz' M1 M2 M3) T}
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H13 H7.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
H16 : {L |- of'' (htm FE1 M1') tnat}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H14 H8.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
H16 : {L |- of'' (htm FE1 M1') tnat}
H17 : {L |- of'' (htm FE2 M2') T}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H15 H9.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
H16 : {L |- of'' (htm FE1 M1') tnat}
H17 : {L |- of'' (htm FE2 M2') T}
H18 : {L |- of'' (htm FE3 M3') T}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine3_str to _ H12.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
H16 : {L |- of'' (htm FE1 M1') tnat}
H17 : {L |- of'' (htm FE2 M2') T}
H18 : {L |- of'' (htm FE3 M3') T}
H19 : {hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H10.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
H16 : {L |- of'' (htm FE1 M1') tnat}
H17 : {L |- of'' (htm FE2 M2') T}
H18 : {L |- of'' (htm FE3 M3') T}
H19 : {hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}
H20 : {appd FE1 FE2 FE12}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H11.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
H16 : {L |- of'' (htm FE1 M1') tnat}
H17 : {L |- of'' (htm FE2 M2') T}
H18 : {L |- of'' (htm FE3 M3') T}
H19 : {hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}
H20 : {appd FE1 FE2 FE12}
H21 : {appd FE12 FE3 FE}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine3_typ_pres to _ H16 H17 H18 _ H19 H20 H21.
Subgoal 4.1:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L |- of' M1 tnat}
H14 : {L |- of' M2 T}
H15 : {L |- of' M3 T}
H16 : {L |- of'' (htm FE1 M1') tnat}
H17 : {L |- of'' (htm FE2 M2') T}
H18 : {L |- of'' (htm FE3 M3') T}
H19 : {hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}
H20 : {appd FE1 FE2 FE12}
H21 : {appd FE12 FE3 FE}
H22 : {L |- of'' (htm FE M'1) T}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 4.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 4.2:

Variables: L CL Vs T M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L, [F] |- of' (ifz' M1 M2 M3) T}
H14 : member F L
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H13.
Subgoal 4.2:

Variables: L CL Vs M'1 M3' M2' M1' FE FE3 FE12 FE2 FE1 M3 M2 M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- ch M3 (htm FE3 M3')}*
H10 : {CL |- appd FE1 FE2 FE12}*
H11 : {CL |- appd FE12 FE3 FE}*
H12 : {CL |- hcombine3 M1' M2' M3' (x\y\z\ifz' x y z) M'1}*
H13 : {L, [F] |- of' (ifz' M1 M2 M3) T1}
H14 : member F L
H15 : name (ifz' M1 M2 M3)
============================
 {L |- of'' (htm FE M'1) T1}

Subgoal 5 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H15.
Subgoal 5:

Variables: L CL Vs T
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' unit' T}
============================
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 5.1:

Variables: L CL Vs
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
============================
 {L |- of'' (htm nil (hbase unit')) tunit}

Subgoal 5.2 is:
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 5.2:

Variables: L CL Vs T F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {L, [F] |- of' unit' T}
H8 : member F L
============================
 {L |- of'' (htm nil (hbase unit')) T}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H7.
Subgoal 5.2:

Variables: L CL Vs F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {L, [F] |- of' unit' T1}
H8 : member F L
H9 : name unit'
============================
 {L |- of'' (htm nil (hbase unit')) T1}

Subgoal 6 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H9.
Subgoal 6:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (pair' M1 M2) T}
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 6.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L |- of' M1 T1}
H12 : {L |- of' M2 T2}
============================
 {L |- of'' (htm FE M'1) (prod T1 T2)}

Subgoal 6.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H11 H7.
Subgoal 6.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L |- of' M1 T1}
H12 : {L |- of' M2 T2}
H13 : {L |- of'' (htm FE1 M1') T1}
============================
 {L |- of'' (htm FE M'1) (prod T1 T2)}

Subgoal 6.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H12 H8.
Subgoal 6.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L |- of' M1 T1}
H12 : {L |- of' M2 T2}
H13 : {L |- of'' (htm FE1 M1') T1}
H14 : {L |- of'' (htm FE2 M2') T2}
============================
 {L |- of'' (htm FE M'1) (prod T1 T2)}

Subgoal 6.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_str to _ H10.
Subgoal 6.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L |- of' M1 T1}
H12 : {L |- of' M2 T2}
H13 : {L |- of'' (htm FE1 M1') T1}
H14 : {L |- of'' (htm FE2 M2') T2}
H15 : {hcombine M1' M2' (x\y\pair' x y) M'1}
============================
 {L |- of'' (htm FE M'1) (prod T1 T2)}

Subgoal 6.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H9.
Subgoal 6.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L |- of' M1 T1}
H12 : {L |- of' M2 T2}
H13 : {L |- of'' (htm FE1 M1') T1}
H14 : {L |- of'' (htm FE2 M2') T2}
H15 : {hcombine M1' M2' (x\y\pair' x y) M'1}
H16 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M'1) (prod T1 T2)}

Subgoal 6.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_typ_pres to _ H13 H14 _ H15 H16.
Subgoal 6.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L |- of' M1 T1}
H12 : {L |- of' M2 T2}
H13 : {L |- of'' (htm FE1 M1') T1}
H14 : {L |- of'' (htm FE2 M2') T2}
H15 : {hcombine M1' M2' (x\y\pair' x y) M'1}
H16 : {appd FE1 FE2 FE}
H17 : {L |- of'' (htm FE M'1) (prod T1 T2)}
============================
 {L |- of'' (htm FE M'1) (prod T1 T2)}

Subgoal 6.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 6.2:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L, [F] |- of' (pair' M1 M2) T}
H12 : member F L
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 6.2:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\pair' x y) M'1}*
H11 : {L, [F] |- of' (pair' M1 M2) T1}
H12 : member F L
H13 : name (pair' M1 M2)
============================
 {L |- of'' (htm FE M'1) T1}

Subgoal 7 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H13.
Subgoal 7:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (let' M1 R) T}
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
============================
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 7.1:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L |- of' M1 T1}
H12 : {L, of' n1 T1 |- of' (R n1) T}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 7.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H11 H7.
Subgoal 7.1:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L |- of' M1 T1}
H12 : {L, of' n1 T1 |- of' (R n1) T}
H13 : {L |- of'' (htm FE1 M'1) T1}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 7.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply of'_is_cty to _ H11.
Subgoal 7.1:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L |- of' M1 T1}
H12 : {L, of' n1 T1 |- of' (R n1) T}
H13 : {L |- of'' (htm FE1 M'1) T1}
H14 : {is_cty T1}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 7.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H12 H8.
Subgoal 7.1:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L |- of' M1 T1}
H12 : {L, of' n1 T1 |- of' (R n1) T}
H13 : {L |- of'' (htm FE1 M'1) T1}
H14 : {is_cty T1}
H15 : {L, of' n1 T1 |- of'' (htm FE2 (R' n1)) T}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 7.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_abs_str to _ H10.
Subgoal 7.1:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L |- of' M1 T1}
H12 : {L, of' n1 T1 |- of' (R n1) T}
H13 : {L |- of'' (htm FE1 M'1) T1}
H14 : {is_cty T1}
H15 : {L, of' n1 T1 |- of'' (htm FE2 (R' n1)) T}
H16 : {hcombine_abs M'1 R' (x\y\let' x y) M''}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 7.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H9.
Subgoal 7.1:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L |- of' M1 T1}
H12 : {L, of' n1 T1 |- of' (R n1) T}
H13 : {L |- of'' (htm FE1 M'1) T1}
H14 : {is_cty T1}
H15 : {L, of' n1 T1 |- of'' (htm FE2 (R' n1)) T}
H16 : {hcombine_abs M'1 R' (x\y\let' x y) M''}
H17 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 7.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_abs_let_typ_pres to _ H13 H15 H16 H17.
Subgoal 7.1:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L |- of' M1 T1}
H12 : {L, of' n1 T1 |- of' (R n1) T}
H13 : {L |- of'' (htm FE1 M'1) T1}
H14 : {is_cty T1}
H15 : {L, of' n1 T1 |- of'' (htm FE2 (R' n1)) T}
H16 : {hcombine_abs M'1 R' (x\y\let' x y) M''}
H17 : {appd FE1 FE2 FE}
H18 : {L |- of'' (htm FE M'') T}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 7.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 7.2:

Variables: L CL Vs T M'' R' M'1 FE FE2 FE1 R M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L, [F] |- of' (let' M1 R) T}
H12 : member F L
============================
 {L |- of'' (htm FE M'') T}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 7.2:

Variables: L CL Vs M'' R' M'1 FE FE2 FE1 R M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M'1)}*
H8 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE2 (R' n1))}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine_abs M'1 R' (x\y\let' x y) M''}*
H11 : {L, [F] |- of' (let' M1 R) T1}
H12 : member F L
H13 : name (let' M1 R)
============================
 {L |- of'' (htm FE M'') T1}

Subgoal 8 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H13.
Subgoal 8:

Variables: L CL Vs T M'' M'1 FE M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (fst' M1) T}
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\fst' x) M''}*
============================
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 8.1:

Variables: L CL Vs T M'' M'1 FE M1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\fst' x) M''}*
H9 : {L |- of' M1 (prod T T2)}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 8.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H9 H7.
Subgoal 8.1:

Variables: L CL Vs T M'' M'1 FE M1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\fst' x) M''}*
H9 : {L |- of' M1 (prod T T2)}
H10 : {L |- of'' (htm FE M'1) (prod T T2)}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 8.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hconstr_str to _ H8.
Subgoal 8.1:

Variables: L CL Vs T M'' M'1 FE M1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\fst' x) M''}*
H9 : {L |- of' M1 (prod T T2)}
H10 : {L |- of'' (htm FE M'1) (prod T T2)}
H11 : {hconstr M'1 (x\fst' x) M''}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 8.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hconstr_typ_pres to _ H10 _ H11.
Subgoal 8.1:

Variables: L CL Vs T M'' M'1 FE M1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\fst' x) M''}*
H9 : {L |- of' M1 (prod T T2)}
H10 : {L |- of'' (htm FE M'1) (prod T T2)}
H11 : {hconstr M'1 (x\fst' x) M''}
H12 : {L |- of'' (htm FE M'') T}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 8.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 8.2:

Variables: L CL Vs T M'' M'1 FE M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\fst' x) M''}*
H9 : {L, [F] |- of' (fst' M1) T}
H10 : member F L
============================
 {L |- of'' (htm FE M'') T}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H9.
Subgoal 8.2:

Variables: L CL Vs M'' M'1 FE M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\fst' x) M''}*
H9 : {L, [F] |- of' (fst' M1) T1}
H10 : member F L
H11 : name (fst' M1)
============================
 {L |- of'' (htm FE M'') T1}

Subgoal 9 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H11.
Subgoal 9:

Variables: L CL Vs T M'' M'1 FE M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (snd' M1) T}
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\snd' x) M''}*
============================
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 9.1:

Variables: L CL Vs T M'' M'1 FE M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\snd' x) M''}*
H9 : {L |- of' M1 (prod T1 T)}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 9.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H9 H7.
Subgoal 9.1:

Variables: L CL Vs T M'' M'1 FE M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\snd' x) M''}*
H9 : {L |- of' M1 (prod T1 T)}
H10 : {L |- of'' (htm FE M'1) (prod T1 T)}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 9.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hconstr_str to _ H8.
Subgoal 9.1:

Variables: L CL Vs T M'' M'1 FE M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\snd' x) M''}*
H9 : {L |- of' M1 (prod T1 T)}
H10 : {L |- of'' (htm FE M'1) (prod T1 T)}
H11 : {hconstr M'1 (x\snd' x) M''}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 9.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hconstr_typ_pres to _ H10 _ H11.
Subgoal 9.1:

Variables: L CL Vs T M'' M'1 FE M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\snd' x) M''}*
H9 : {L |- of' M1 (prod T1 T)}
H10 : {L |- of'' (htm FE M'1) (prod T1 T)}
H11 : {hconstr M'1 (x\snd' x) M''}
H12 : {L |- of'' (htm FE M'') T}
============================
 {L |- of'' (htm FE M'') T}

Subgoal 9.2 is:
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 9.2:

Variables: L CL Vs T M'' M'1 FE M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\snd' x) M''}*
H9 : {L, [F] |- of' (snd' M1) T}
H10 : member F L
============================
 {L |- of'' (htm FE M'') T}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H9.
Subgoal 9.2:

Variables: L CL Vs M'' M'1 FE M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE M'1)}*
H8 : {CL |- hconstr M'1 (x\snd' x) M''}*
H9 : {L, [F] |- of' (snd' M1) T1}
H10 : member F L
H11 : name (snd' M1)
============================
 {L |- of'' (htm FE M'') T1}

Subgoal 10 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H11.
Subgoal 10:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (app' M1 M2) T}
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 10.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L |- of' M1 (arr' T1 T)}
H12 : {L |- of' M2 T1}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 10.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H11 H7.
Subgoal 10.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L |- of' M1 (arr' T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr' T1 T)}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 10.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H12 H8.
Subgoal 10.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L |- of' M1 (arr' T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr' T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 10.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_str to _ H10.
Subgoal 10.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L |- of' M1 (arr' T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr' T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
H15 : {hcombine M1' M2' (x\y\app' x y) M'1}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 10.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H9.
Subgoal 10.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L |- of' M1 (arr' T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr' T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
H15 : {hcombine M1' M2' (x\y\app' x y) M'1}
H16 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 10.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_typ_pres to _ H13 H14 _ H15 H16.
Subgoal 10.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L |- of' M1 (arr' T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr' T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
H15 : {hcombine M1' M2' (x\y\app' x y) M'1}
H16 : {appd FE1 FE2 FE}
H17 : {L |- of'' (htm FE M'1) T}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 10.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 10.2:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L, [F] |- of' (app' M1 M2) T}
H12 : member F L
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 10.2:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\app' x y) M'1}*
H11 : {L, [F] |- of' (app' M1 M2) T1}
H12 : member F L
H13 : name (app' M1 M2)
============================
 {L |- of'' (htm FE M'1) T1}

Subgoal 11 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H13.
Subgoal 11:

Variables: L CL Vs T F R'' R' FE R
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (abs' R) T}
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply is_cty_str to _ H10.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H9 H7.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply abstract_str to _ H8.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply of''_to_alter_ver to _ H12.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply of''_env_str to _ _ H14.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply abstract_fun_typ to _ _ H15 H13.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
H17 : {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply abstract_body_typ to _ _ H15 H13.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
H17 : {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}
H18 : {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R'' n1) (arr' T1 T2)}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply of''_env_is_cty to _ H16.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
H17 : {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}
H18 : {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R'' n1) (arr' T1 T2)}
H19 : {is_cty TE}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply of'_is_cty to _ H9.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
H17 : {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}
H18 : {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R'' n1) (arr' T1 T2)}
H19 : {is_cty TE}
H20 : {is_cty T2}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < assert {L |- of''_body (prod (arr' TE (arr' T1 T2)) TE) (habs R'') (arr' T1 T2)}.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
H17 : {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}
H18 : {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R'' n1) (arr' T1 T2)}
H19 : {is_cty TE}
H20 : {is_cty T2}
H21 : {L |-
         of''_body (prod (arr' TE (arr' T1 T2)) TE) (habs R'') (arr' T1 T2)}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < assert {L |-
   of''_env (abs' (l\abs' (x\F l x)) :: FE) (prod (arr' TE (arr' T1 T2)) TE)}.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
H17 : {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}
H18 : {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R'' n1) (arr' T1 T2)}
H19 : {is_cty TE}
H20 : {is_cty T2}
H21 : {L |-
         of''_body (prod (arr' TE (arr' T1 T2)) TE) (habs R'') (arr' T1 T2)}
H22 : {L |-
         of''_env (abs' (l\abs' (x\F l x)) :: FE)
           (prod (arr' TE (arr' T1 T2)) TE)}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply of''_from_alter_ver to _ H22 H21.
Subgoal 11.1:

Variables: L CL Vs F R'' R' FE R T1 T2 TE
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, of' n1 T1 |- of' (R n1) T2}
H10 : {L |- is_cty T1}
H11 : {is_cty T1}
H12 : {L, of' n1 T1 |- of'' (htm FE (R' n1)) T2}
H13 : {abstract R' R'' F}
H14 : {L, of' n1 T1 |- of''_env FE TE}
H15 : {L, of' n1 T1 |- of''_body TE (R' n1) T2}
H16 : {L |- of''_env FE TE}
H17 : {L, of' n2 TE, of' n1 T1 |- of' (F n2 n1) T2}
H18 : {of' n1 (arr' TE (arr' T1 T2)) |- of''_body TE (R'' n1) (arr' T1 T2)}
H19 : {is_cty TE}
H20 : {is_cty T2}
H21 : {L |-
         of''_body (prod (arr' TE (arr' T1 T2)) TE) (habs R'') (arr' T1 T2)}
H22 : {L |-
         of''_env (abs' (l\abs' (x\F l x)) :: FE)
           (prod (arr' TE (arr' T1 T2)) TE)}
H23 : {L |-
         of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) (arr' T1 T2)}

Subgoal 11.2 is:
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 11.2:

Variables: L CL Vs T F R'' R' FE R F1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, [F1] |- of' (abs' R) T}
H10 : member F1 L
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H9.
Subgoal 11.2:

Variables: L CL Vs F R'' R' FE R F1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL, ch n1 (htm nil (hbase n1)) |- ch (R n1) (htm FE (R' n1))}*
H8 : {CL |- abstract R' R'' F}*
H9 : {L, [F1] |- of' (abs' R) T1}
H10 : member F1 L
H11 : name (abs' R)
============================
 {L |- of'' (htm (abs' (l\abs' (x\F l x)) :: FE) (habs R'')) T1}

Subgoal 12 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H11.
Subgoal 12:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (clos' M1 M2) T}
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 12.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 TL T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L |- of' M1 (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H12 : {L |- of' M2 TL}
============================
 {L |- of'' (htm FE M'1) (arr T1 T2)}

Subgoal 12.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H11 H7.
Subgoal 12.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 TL T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L |- of' M1 (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H12 : {L |- of' M2 TL}
H13 : {L |- of'' (htm FE1 M1') (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
============================
 {L |- of'' (htm FE M'1) (arr T1 T2)}

Subgoal 12.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H12 H8.
Subgoal 12.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 TL T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L |- of' M1 (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H12 : {L |- of' M2 TL}
H13 : {L |- of'' (htm FE1 M1') (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H14 : {L |- of'' (htm FE2 M2') TL}
============================
 {L |- of'' (htm FE M'1) (arr T1 T2)}

Subgoal 12.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_str to _ H10.
Subgoal 12.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 TL T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L |- of' M1 (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H12 : {L |- of' M2 TL}
H13 : {L |- of'' (htm FE1 M1') (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H14 : {L |- of'' (htm FE2 M2') TL}
H15 : {hcombine M1' M2' (x\y\clos' x y) M'1}
============================
 {L |- of'' (htm FE M'1) (arr T1 T2)}

Subgoal 12.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H9.
Subgoal 12.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 TL T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L |- of' M1 (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H12 : {L |- of' M2 TL}
H13 : {L |- of'' (htm FE1 M1') (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H14 : {L |- of'' (htm FE2 M2') TL}
H15 : {hcombine M1' M2' (x\y\clos' x y) M'1}
H16 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M'1) (arr T1 T2)}

Subgoal 12.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_typ_pres to _ H13 H14 _ H15 H16.
Subgoal 12.1:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 TL T2 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L |- of' M1 (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H12 : {L |- of' M2 TL}
H13 : {L |- of'' (htm FE1 M1') (arr' (prod (arr T1 T2) (prod T1 TL)) T2)}
H14 : {L |- of'' (htm FE2 M2') TL}
H15 : {hcombine M1' M2' (x\y\clos' x y) M'1}
H16 : {appd FE1 FE2 FE}
H17 : {L |- of'' (htm FE M'1) (arr T1 T2)}
============================
 {L |- of'' (htm FE M'1) (arr T1 T2)}

Subgoal 12.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 12.2:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L, [F] |- of' (clos' M1 M2) T}
H12 : member F L
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 12.2:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |- hcombine M1' M2' (x\y\clos' x y) M'1}*
H11 : {L, [F] |- of' (clos' M1 M2) T1}
H12 : member F L
H13 : name (clos' M1 M2)
============================
 {L |- of'' (htm FE M'1) T1}

Subgoal 13 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H13.
Subgoal 13:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' (open' M1 (f\e\app' f (pair' M1 (pair' M2 e)))) T}
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H5.
Subgoal 13.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L |- of' M1 (arr T1 T)}
H12 : {L |- of' M2 T1}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H11 H7.
Subgoal 13.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L |- of' M1 (arr T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr T1 T)}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply IH to _ _ _ _ H12 H8.
Subgoal 13.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L |- of' M1 (arr T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_str to _ H10.
Subgoal 13.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L |- of' M1 (arr T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
H15 : {hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e)))) M'1}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply cappend_str to _ H9.
Subgoal 13.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L |- of' M1 (arr T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
H15 : {hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e)))) M'1}
H16 : {appd FE1 FE2 FE}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply hcombine_typ_pres to _ H13 H14 _ H15 H16.
Subgoal 13.1:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L |- of' M1 (arr T1 T)}
H12 : {L |- of' M2 T1}
H13 : {L |- of'' (htm FE1 M1') (arr T1 T)}
H14 : {L |- of'' (htm FE2 M2') T1}
H15 : {hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e)))) M'1}
H16 : {appd FE1 FE2 FE}
H17 : {L |- of'' (htm FE M'1) T}
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 13.2 is:
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < search.
Subgoal 13.2:

Variables: L CL Vs T M'1 M2' M1' FE FE2 FE1 M2 M1 F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L, [F] |- of' (open' M1 (f\e\app' f (pair' M1 (pair' M2 e)))) T}
H12 : member F L
============================
 {L |- of'' (htm FE M'1) T}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < apply ctx'_focus_inv to _ _ H11.
Subgoal 13.2:

Variables: L CL Vs M'1 M2' M1' FE FE2 FE1 M2 M1 F T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H7 : {CL |- ch M1 (htm FE1 M1')}*
H8 : {CL |- ch M2 (htm FE2 M2')}*
H9 : {CL |- appd FE1 FE2 FE}*
H10 : {CL |-
         hcombine M1' M2' (x\y\open' x (f\e\app' f (pair' x (pair' y e))))
           M'1}*
H11 : {L, [F] |- of' (open' M1 (f\e\app' f (pair' M1 (pair' M2 e)))) T1}
H12 : member F L
H13 : name (open' M1 (f\e\app' f (pair' M1 (pair' M2 e))))
============================
 {L |- of'' (htm FE M'1) T1}

Subgoal 14 is:
 {L |- of'' M' T}

ch_typ_pres < case H13.
Subgoal 14:

Variables: L CL Vs M M' T F
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' M T}
H7 : {CL, [F] |- ch M M'}*
H8 : member F CL
============================
 {L |- of'' M' T}

ch_typ_pres < apply ch_ctx_mem to _ H8.
Subgoal 14:

Variables: L CL Vs M M' T X
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' M T}
H7 : {CL, [ch X (htm nil (hbase X))] |- ch M M'}*
H8 : member (ch X (htm nil (hbase X))) CL
H9 : name X
============================
 {L |- of'' M' T}

ch_typ_pres < case H7.
Subgoal 14:

Variables: L CL Vs M T
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' M T}
H8 : member (ch M (htm nil (hbase M))) CL
H9 : name M
============================
 {L |- of'' (htm nil (hbase M)) T}

ch_typ_pres < apply ch_ctx_ctx'_sync to H4 H3 H8.
Subgoal 14:

Variables: L CL Vs M T T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' L
H2 : ch_ctx CL
H3 : vars_of_ctx' L Vs
H4 : vars_of_ch_ctx CL Vs
H5 : {L |- of' M T}
H8 : member (ch M (htm nil (hbase M))) CL
H9 : name M
H10 : member (of' M T1) L
============================
 {L |- of'' (htm nil (hbase M)) T}

ch_typ_pres < case H9.
Subgoal 14:

Variables: L CL Vs T T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' (L n1)
H2 : ch_ctx (CL n1)
H3 : vars_of_ctx' (L n1) (Vs n1)
H4 : vars_of_ch_ctx (CL n1) (Vs n1)
H5 : {L n1 |- of' n1 T}
H8 : member (ch n1 (htm nil (hbase n1))) (CL n1)
H10 : member (of' n1 T1) (L n1)
============================
 {L n1 |- of'' (htm nil (hbase n1)) T}

ch_typ_pres < case H5.
Subgoal 14:

Variables: L CL Vs T T1 F1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' (L n1)
H2 : ch_ctx (CL n1)
H3 : vars_of_ctx' (L n1) (Vs n1)
H4 : vars_of_ch_ctx (CL n1) (Vs n1)
H8 : member (ch n1 (htm nil (hbase n1))) (CL n1)
H10 : member (of' n1 T1) (L n1)
H11 : {L n1, [F1 n1] |- of' n1 T}
H12 : member (F1 n1) (L n1)
============================
 {L n1 |- of'' (htm nil (hbase n1)) T}

ch_typ_pres < apply ctx'_mem to _ H12.
Subgoal 14:

Variables: L CL Vs T T1 M1 T2
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' (L n1)
H2 : ch_ctx (CL n1)
H3 : vars_of_ctx' (L n1) (Vs n1)
H4 : vars_of_ch_ctx (CL n1) (Vs n1)
H8 : member (ch n1 (htm nil (hbase n1))) (CL n1)
H10 : member (of' n1 T1) (L n1)
H11 : {L n1, [of' (M1 n1) T2] |- of' n1 T}
H12 : member (of' (M1 n1) T2) (L n1)
H13 : name (M1 n1)
H14 : {is_cty T2}
============================
 {L n1 |- of'' (htm nil (hbase n1)) T}

ch_typ_pres < case H11.
Subgoal 14:

Variables: L CL Vs T T1
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' (L n1)
H2 : ch_ctx (CL n1)
H3 : vars_of_ctx' (L n1) (Vs n1)
H4 : vars_of_ch_ctx (CL n1) (Vs n1)
H8 : member (ch n1 (htm nil (hbase n1))) (CL n1)
H10 : member (of' n1 T1) (L n1)
H12 : member (of' n1 T) (L n1)
H13 : name n1
H14 : {is_cty T}
============================
 {L n1 |- of'' (htm nil (hbase n1)) T}

ch_typ_pres < apply ctx'_mem_sync to _ H10 H12.
Subgoal 14:

Variables: L CL Vs T
IH : forall L CL Vs M M' T, ctx' L -> ch_ctx CL -> vars_of_ctx' L Vs ->
       vars_of_ch_ctx CL Vs -> {L |- of' M T} -> {CL |- ch M M'}* ->
       {L |- of'' M' T}
H1 : ctx' (L n1)
H2 : ch_ctx (CL n1)
H3 : vars_of_ctx' (L n1) (Vs n1)
H4 : vars_of_ch_ctx (CL n1) (Vs n1)
H8 : member (ch n1 (htm nil (hbase n1))) (CL n1)
H10 : member (of' n1 T) (L n1)
H12 : member (of' n1 T) (L n1)
H13 : name n1
H14 : {is_cty T}
============================
 {L n1 |- of'' (htm nil (hbase n1)) T}

ch_typ_pres < search.
Proof completed.
Abella < Theorem ch_typ_pres_closed : 
forall M M' T, {of' M T} -> {ch M M'} -> {of'' M' T}.


============================
 forall M M' T, {of' M T} -> {ch M M'} -> {of'' M' T}

ch_typ_pres_closed < intros.

Variables: M M' T
H1 : {of' M T}
H2 : {ch M M'}
============================
 {of'' M' T}

ch_typ_pres_closed < apply ch_typ_pres to _ _ _ _ H1 H2.

Variables: M M' T
H1 : {of' M T}
H2 : {ch M M'}
H3 : {of'' M' T}
============================
 {of'' M' T}

ch_typ_pres_closed < search.
Proof completed.
Abella <