X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2FPOPLmark%2FFsub%2Fpart1a.ma;h=4ae057be907365ea35af4d02f8a13996f58dbc16;hb=efd683d260c9daefaf9e2c9a437d2aa00e965d89;hp=7ae8763cfeddeedaf1c56e1c556ccb203c481362;hpb=11852aa9c64848457d84af63186d2317772e74bf;p=helm.git diff --git a/helm/software/matita/contribs/POPLmark/Fsub/part1a.ma b/helm/software/matita/contribs/POPLmark/Fsub/part1a.ma index 7ae8763cf..4ae057be9 100644 --- a/helm/software/matita/contribs/POPLmark/Fsub/part1a.ma +++ b/helm/software/matita/contribs/POPLmark/Fsub/part1a.ma @@ -50,39 +50,52 @@ theorem narrowing:∀X,G,G1,U,P,M,N. G1 ⊢ P ⊴ U → (∀G2,T.G2@G1 ⊢ U ⊴ T → G2@G1 ⊢ P ⊴ T) → G ⊢ M ⊴ N → ∀l.G=l@(mk_bound true X U::G1) → l@(mk_bound true X P::G1) ⊢ M ⊴ N. intros 10.elim H2 - [apply SA_Top - [rewrite > H5 in H3; - apply (WFE_Typ_subst ? ? ? ? ? ? ? H3 (JS_to_WFT1 ? ? ? H)) - |rewrite > H5 in H4;apply (WFT_env_incl ? ? H4);apply incl_fv_env] - |apply SA_Refl_TVar - [rewrite > H5 in H3;apply (WFE_Typ_subst ? ? ? ? ? ? ? H3); - apply (JS_to_WFT1 ? ? ? H) - |rewrite > H5 in H4;rewrite < fv_env_extends;apply H4] + [letin x \def fv_env. letin y ≝incl. + (* autobatch depth=4 size=8 by SA_Top, WFE_Typ_subst, H3, JS_to_WFT1, H, H4, WFT_env_incl, incl_fv_env]*) + apply SA_Top + [autobatch by WFE_Typ_subst, H3, JS_to_WFT1, H. + (* + rewrite > H5 in H3; + apply (WFE_Typ_subst ? ? ? ? ? ? ? H3 (JS_to_WFT1 ? ? ? H)) *) + |autobatch by H4, WFT_env_incl, incl_fv_env] + (* rewrite > H5 in H4;apply (WFT_env_incl ? ? H4);apply incl_fv_env] *) + |autobatch depth=4 by SA_Refl_TVar, WFE_Typ_subst, H3, JS_to_WFT1, H, H4. + (* + apply SA_Refl_TVar; + [autobatch by WFE_Typ_subst, H3, JS_to_WFT1, H. + (* + rewrite > H5 in H3;apply (WFE_Typ_subst ? ? ? ? ? ? ? H3); + apply (JS_to_WFT1 ? ? ? H) *) + |autobatch by H4. (* rewrite > H5 in H4;rewrite < fv_env_extends;apply H4*)] *) |elim (decidable_eq_nat X n) [apply (SA_Trans_TVar ? ? ? P) [rewrite < H7;elim l1;simplify [constructor 1|constructor 2;assumption] - |rewrite > append_cons;apply H1; - lapply (WFE_bound_bound true n t1 U ? ? H3) - [apply (JS_to_WFE ? ? ? H4) - |rewrite < Hletin;rewrite < append_cons;apply (H5 ? H6) - |rewrite < H7;rewrite > H6;elim l1;simplify - [constructor 1|constructor 2;assumption]]] - |apply (SA_Trans_TVar ? ? ? t1) - [rewrite > H6 in H3;apply (lookup_env_extends ? ? ? ? ? ? ? ? ? ? H3); - unfold;intro;apply H7;symmetry;assumption + |applyS H1. + lapply (WFE_bound_bound true n t1 U ? ? H3); + [autobatch. (* apply (JS_to_WFE ? ? ? H4) *) + |autobatch. (* rewrite < Hletin;rewrite < append_cons;apply (H5 ? H6) *) + |destruct.elim l1;autobatch. + ]] + |(* autobatch depth=4 size=7 by SA_Trans_TVar, lookup_env_extends, H3, sym_neq, H5, H6, H7. *) + apply (SA_Trans_TVar ? ? ? t1); + [autobatch by lookup_env_extends, H3, sym_neq, H7. + (* rewrite > H6 in H3; apply (lookup_env_extends ? ? ? ? ? ? ? ? ? ? H3); + unfold;intro;apply H7;symmetry;assumption *) |apply (H5 ? H6)]] - |apply (SA_Arrow ? ? ? ? ? (H4 ? H7) (H6 ? H7)) - |apply (SA_All ? ? ? ? ? (H4 ? H7));intros; + |autobatch; (* apply (SA_Arrow ? ? ? ? ? (H4 ? H7) (H6 ? H7)) *) + |apply (SA_All ? ? ? ? ? (H4 ? H7));intros;autobatch] + (* apply (H6 ? ? (mk_bound true X1 t2::l1)) [rewrite > H7;rewrite > fv_env_extends;apply H8 - |simplify;rewrite < H7;reflexivity]] + |simplify;rewrite < H7;reflexivity]] *) qed. lemma JS_trans_prova: ∀T,G1.WFType G1 T → ∀G,R,U.incl ? (fv_env G1) (fv_env G) → G ⊢ R ⊴ T → G ⊢ T ⊴ U → G ⊢ R ⊴ U. intros 3;elim H;clear H; try autobatch; - [rewrite > (JSubtype_Top ? ? H3);autobatch + [ + rewrite > (JSubtype_Top ? ? H3);autobatch |generalize in match H7;generalize in match H4;generalize in match H2; generalize in match H5;clear H7 H4 H2 H5; generalize in match (refl_eq ? (Arrow t t1));