(* Basic forward lemmas *****************************************************)
lemma lsubf_fwd_bind_tl:
- â\88\80f1,f2,I,L1,L2. â\9dªL1.â\93\98[I],f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\98[I],f2â\9d« â\86\92 â\9dªL1,⫱f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,⫱f2❫.
+ â\88\80f1,f2,I,L1,L2. â\9dªL1.â\93\98[I],f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\98[I],f2â\9d« â\86\92 â\9dªL1,â«°f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,â«°f2❫.
#f1 #f2 #I #L1 #L2 #H
elim (pn_split f1) * #g1 #H0 destruct
[ elim (lsubf_inv_push_sn … H) | elim (lsubf_inv_bind_sn … H) ] -H
/2 width=3 by lsubf_eq_repl_back2/ qed.
lemma lsubf_bind_tl_dx:
- â\88\80g1,f2,I,L1,L2. â\9dªL1,g1â\9d« â«\83ð\9d\90\85+ â\9dªL2,⫱f2❫ →
- â\88\83â\88\83f1. â\9dªL1.â\93\98[I],f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\98[I],f2â\9d« & g1 = ⫱f1.
+ â\88\80g1,f2,I,L1,L2. â\9dªL1,g1â\9d« â«\83ð\9d\90\85+ â\9dªL2,â«°f2❫ →
+ â\88\83â\88\83f1. â\9dªL1.â\93\98[I],f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\98[I],f2â\9d« & g1 = â«°f1.
#g1 #f2 #I #L1 #L2 #H
elim (pn_split f2) * #g2 #H2 destruct
@ex2_intro [1,2,4,5: /2 width=2 by lsubf_push, lsubf_bind/ ] // (**) (* constructor needed *)
lemma lsubf_beta_tl_dx:
∀f,f0,g1,L1,V. L1 ⊢ 𝐅+❪V❫ ≘ f → f0 ⋓ f ≘ g1 →
- â\88\80f2,L2,W. â\9dªL1,f0â\9d« â«\83ð\9d\90\85+ â\9dªL2,⫱f2❫ →
- â\88\83â\88\83f1. â\9dªL1.â\93\93â\93\9dW.V,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\9bW,f2â\9d« & ⫱f1 ⊆ g1.
+ â\88\80f2,L2,W. â\9dªL1,f0â\9d« â«\83ð\9d\90\85+ â\9dªL2,â«°f2❫ →
+ â\88\83â\88\83f1. â\9dªL1.â\93\93â\93\9dW.V,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\9bW,f2â\9d« & â«°f1 ⊆ g1.
#f #f0 #g1 #L1 #V #Hf #Hg1 #f2
elim (pn_split f2) * #x2 #H2 #L2 #W #HL12 destruct
[ /3 width=4 by lsubf_push, sor_inv_sle_sn, ex2_intro/