]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqg.ma
milestone update in basic_2
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / rt_transition / fpb_feqg.ma
index 27f3df4e378f645d4e588c23d5bc80412a8b7e16..22219566dbf428ddf17fd741534dd3dc8a9b00e7 100644 (file)
 (*                                                                        *)
 (**************************************************************************)
 
-include "static_2/s_transition/fqu_teqg.ma".
-include "static_2/static/feqg.ma".
-include "basic_2/rt_transition/fpb_reqg.ma".
+include "static_2/static/feqg_fqus.ma".
+include "static_2/static/feqg_feqg.ma".
+include "basic_2/rt_transition/cpx_feqg.ma".
+include "basic_2/rt_transition/lpx_reqg.ma".
+include "basic_2/rt_transition/fpb.ma".
 
-(* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************)
+(* PARALLEL RST-TRANSITION FOR CLOSURES *************************************)
 
-(* Properties with generic equivalence for closures *************************)
+(* Propreties with generic equivalence on referred closures *****************)
 
-(* Basic_2A1: uses: fleq_fpb_trans *)
-lemma feqg_fpb_trans (S):
-      reflexive … S → symmetric … S → Transitive … S →
-      ∀F1,F2,K1,K2,T1,T2. ❪F1,K1,T1❫ ≛[S] ❪F2,K2,T2❫ →
-      ∀G2,L2,U2. ❪F2,K2,T2❫ ≻ ❪G2,L2,U2❫ →
-      ∃∃G1,L1,U1. ❪F1,K1,T1❫ ≻ ❪G1,L1,U1❫ & ❪G1,L1,U1❫ ≛[S] ❪G2,L2,U2❫.
-#S #H1S #H2S #H3S #F1 #F2 #K1 #K2 #T1 #T2 * -F2 -K2 -T2
-#K2 #T2 #HK12 #HT12 #G2 #L2 #U2 #H12
-elim (teqg_fpb_trans … HT12 … H12) -T2 // #K0 #T0 #H #HT0 #HK0
-elim (reqg_fpb_trans … HK12 … H) -K2 // #L0 #U0 #H #HUT0 #HLK0
-@(ex2_3_intro … H) -H (**) (* full auto too slow *)
-/4 width=5 by feqg_intro_dx, reqg_trans, teqg_reqg_conf_sn, teqg_trans/
-qed-.
+(* Basic_2A1: includes: fleq_fpbq fpbq_lleq *)
+(* Basic_2A1: uses: fpbq_feqx *)
+lemma feqg_fpb (S) (G1) (G2) (L1) (L2) (T1) (T2):
+      reflexive … S → symmetric … S →
+      ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫.
+#S #G1 #G2 #L1 #L2 #T1 #T2 #HS1 #HS2 #H
+elim (feqg_inv_gen_sn … H) -H #H #HL12 #HT12 destruct
+/4 width=8 by reqg_rpx, teqg_cpx, fpb_intro/
+qed.
 
-(* Inversion lemmas with generic equivalence for closures *******************)
-
-(* Basic_2A1: uses: fpb_inv_fleq *)
-lemma fpb_inv_feqg (S):
-      ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ →
-      ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ⊥.
-#S #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
-[ #G2 #L2 #T2 #H12 #H elim (feqg_inv_gen_sn … H) -H
-  /3 width=11 by reqg_fwd_length, fqu_inv_teqg/
-| #T2 #_ #HnT #H elim (feqg_inv_gen_sn … H) -H /3 width=2 by teqg_teqx/
-| #L2 #_ #HnL #H elim (feqg_inv_gen_sn … H) -H /3 width=2 by reqg_reqx/
-]
+lemma feqg_fpb_trans (S) (G) (L) (T):
+      reflexive … S → symmetric … S → Transitive … S →
+      ∀G1,L1,T1. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ →
+      ∀G2,L2,T2. ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫.
+#S #G #L #T #H1S #H2S #H3S #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2
+elim (fpb_inv_gen … H2) -H2 #L0 #T0 #H0 #HT02 #H
+elim (rpx_inv_reqg_lpx S … H) -H // #L3 #HL03 #HL32
+elim (feqg_fquq_trans … H1 … H0) -G -L -T // #G #L #T #H1 #H0
+lapply (feqg_cpx_trans_cpx … H0 … HT02) // -HT02 #HT2
+lapply (feqg_reqg_trans … H0 … HL03) -H0 -HL03 // #H
+elim (feqg_inv_gen_sn … H) -H #H #HL3 #_ destruct -T0
+/3 width=10 by fpb_intro, reqg_lpx_trans_rpx/
 qed-.