(* *)
(**************************************************************************)
-set "baseuri" "cic:/matita/Fsub/defn".
include "Fsub/util.ma".
(*** representation of Fsub types ***)
[elim H;elim H1;lapply (not_in_list_nil ? ? H2);elim Hletin
|elim H1;elim H2;elim (in_list_cons_case ? ? ? ? H3)
[rewrite < H4;simplify;apply in_list_head
- |simplify;apply in_list_cons;apply H;apply (ex_intro ? ? a);
- apply (ex_intro ? ? a1);assumption]]
+ |simplify;apply in_list_cons;apply H;apply (ex_intro ? ? a1);
+ apply (ex_intro ? ? a2);assumption]]
qed.
lemma natinfv_boundinenv : \forall x,G.(in_list ? x (fv_env G)) \to
\exists B,T.(in_list ? (mk_bound B x T) G).
intros 2;elim G 0
[simplify;intro;lapply (not_in_list_nil ? ? H);elim Hletin
- |intros 3;elim t;simplify in H1;elim (in_list_cons_case ? ? ? ? H1)
- [rewrite < H2;apply (ex_intro ? ? b);apply (ex_intro ? ? t1);apply in_list_head
- |elim (H H2);elim H3;apply (ex_intro ? ? a);
- apply (ex_intro ? ? a1);apply in_list_cons;assumption]]
+ |intros 3;
+ elim a;simplify in H1;elim (in_list_cons_case ? ? ? ? H1)
+ [rewrite < H2;apply (ex_intro ? ? b);apply (ex_intro ? ? t);apply in_list_head
+ |elim (H H2);elim H3;apply (ex_intro ? ? a1);
+ apply (ex_intro ? ? a2);apply in_list_cons;assumption]]
qed.
lemma incl_bound_fv : \forall l1,l2.(incl ? l1 l2) \to
(fv_env (H @ ((mk_bound B x T) :: G))) =
(fv_env (H @ ((mk_bound C x U) :: G))).
intros;elim H
- [simplify;reflexivity|elim t;simplify;rewrite > H1;reflexivity]
+ [simplify;reflexivity|elim a;simplify;rewrite > H1;reflexivity]
qed.
lemma lookup_env_extends : \forall G,H,B,C,D,T,U,V,x,y.
|intros;elim l
[apply (ex_intro ? ? O);intros;unfold;intro;elim (not_in_list_nil ? ? H1)
|elim H;
- apply (ex_intro ? ? (S (max a t))).
+ apply (ex_intro ? ? (S (max a1 a))).
intros.unfold. intro.
elim (in_list_cons_case ? ? ? ? H3)
[rewrite > H4 in H2.autobatch
|elim H4
- [apply (H1 m ? H4).apply (trans_le ? (max a t));autobatch
+ [apply (H1 m ? H4).apply (trans_le ? (max a1 a));autobatch
|assumption]]]]
qed.
[simplify;intros;(*FIXME*)generalize in match H1;intro;inversion H1;intros
[lapply (nil_cons ? G (mk_bound B x T));elim (Hletin H4)
|destruct H8;apply (WFE_cons ? ? ? ? H4 H6 H2)]
- |intros;simplify;generalize in match H2;elim t;simplify in H4;
+ |intros;simplify;generalize in match H2;elim a;simplify in H4;
inversion H4;intros
[destruct H5
|destruct H9;apply WFE_cons