X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2FPOPLmark%2FFsub%2Fdefn.ma;h=d9e4e4695f387c3d1f821590567f19afd21f2646;hb=f261b8315d0b14781ae78740feb476327083d664;hp=7907405ff9057c62e9644697ee0336eb10cb0764;hpb=a7d6e83ed805988b82f35e8f39934855b156f97a;p=helm.git diff --git a/helm/software/matita/contribs/POPLmark/Fsub/defn.ma b/helm/software/matita/contribs/POPLmark/Fsub/defn.ma index 7907405ff..d9e4e4695 100644 --- a/helm/software/matita/contribs/POPLmark/Fsub/defn.ma +++ b/helm/software/matita/contribs/POPLmark/Fsub/defn.ma @@ -12,7 +12,6 @@ (* *) (**************************************************************************) -set "baseuri" "cic:/matita/Fsub/defn". include "Fsub/util.ma". (*** representation of Fsub types ***) @@ -153,18 +152,19 @@ intros 2;elim G [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 @@ -200,7 +200,7 @@ lemma fv_env_extends : \forall H,x,B,C,T,U,G. (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. @@ -237,19 +237,18 @@ cut (\forall l:(list nat).\exists n.\forall m. |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. (*** lemmata on well-formedness ***) -lemma fv_WFT : \forall T,x,G.(WFType G T) \to (in_list ? x (fv_type T)) \to - (in_list ? x (fv_env G)). +lemma fv_WFT : \forall T,x,G.(WFType G T) → x ∈ fv_type T → x ∈ fv_env G. intros 4.elim H [simplify in H2;elim (in_list_cons_case ? ? ? ? H2) [rewrite > H3;assumption|elim (not_in_list_nil ? ? H3)] @@ -309,7 +308,7 @@ intros 7;elim H 0 [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 @@ -361,6 +360,7 @@ intros.inversion H;intros |destruct H5|*:destruct H6] qed. +(* (* elim vs inversion *) lemma JS_trans_TFree: ∀G,T,X.G ⊢ T ⊴ (TFree X) → ∀U.G ⊢ (TFree X) ⊴ U → G ⊢ T ⊴ U. @@ -372,6 +372,7 @@ intros 4.cut (∀Y.TFree Y = TFree X → ∀U.G ⊢ (TFree Y) ⊴ U → G ⊢ T |apply (SA_Trans_TVar ? ? ? ? H1);apply (H3 Y);assumption |*:destruct H5]] qed. +*) lemma fv_append : ∀G,H.fv_env (G @ H) = (fv_env G @ fv_env H). intro;elim G;simplify;autobatch paramodulation;