]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/basic_2/etc_2A1/csup/csup.etc
- exclusion binder in local environments
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / etc_2A1 / csup / csup.etc
1 (* Basic forward lemmas *****************************************************)
2
3 lemma csup_fwd_ldrop: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ →
4                       ∃i. ⇩[0, i] L1 ≡ L2 ∨ ⇩[0, i] L2 ≡ L1.
5 #L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 /3 width=2/ /4 width=2/
6 #I #L1 #K1 #V1 #i #HLK1
7 lapply (ldrop_fwd_ldrop2 … HLK1) -HLK1 /3 width=2/
8 qed-. 
9
10 (* Advanced forward lemmas **************************************************)
11
12 lemma lift_csup_trans_eq: ∀T1,U1,d,e. ⇧[d, e] T1 ≡ U1 →
13                           ∀L,U2. ⦃L, U1⦄ > ⦃L, U2⦄ → 
14                           ∃T2. ⇧[d, e] T2 ≡ U2.
15 #T1 #U1 #d #e * -T1 -U1 -d -e
16 [5: #a #I #V1 #W1 #T1 #U1 #d #e #HVW1 #_ #L #X #H
17     elim (csup_inv_bind1 … H) -H *
18     [ #_ #H destruct /2 width=2/
19     | #H elim (discr_lpair_x_xy … H)
20     ]
21 |6: #I #V1 #W1 #T1 #U1 #d #e #HVW1 #HUT1 #L #X #H
22     elim (csup_inv_flat1 … H) -H #_ * #H destruct /2 width=2/
23 ]
24 #i #d #e [2,3: #_ ] #L #X #H
25 elim (csup_inv_atom1 … H) -H #I #j #HL #H destruct
26 lapply (ldrop_pair2_fwd_cw … HL X) -HL #H
27 elim (lt_refl_false … H)
28 qed-.
29 (*
30 lemma lift_csup_trans_gt: ∀L1,L2,U1,U2. ⦃L1, U1⦄ > ⦃L2, U2⦄ →
31                           ⇩[0, 1] L2 ≡ L1 → ∀T1,d,e. ⇧[d, e] T1 ≡ U1 →
32                           ∃T2. ⇧[d + 1, e] T2 ≡ U2.
33 #L1 #L2 #U1 #U2 * -L1 -L2 -U1 -U2
34 [ #I #L1 #K1 #V #i #HLK1 #HKL1
35   lapply (ldrop_fwd_lw … HLK1) -HLK1 #HLK1
36   lapply (ldrop_fwd_lw … HKL1) -HKL1 #HKL1
37   lapply (transitive_le … HLK1 HKL1) -L1 normalize #H
38   
39   
40 | #a
41 | #a
42 ]
43 #I #L1 #W1 #U1 #HL1
44   
45
46
47  #X #d #e #H
48   lapply (ldrop_inv_refl … HL1) -HL1
49 | #a #I #L1 #W1 #U1 #j #HL1 #X #d #e #H
50   lapply (ldrop_inv_ldrop1 … HL1)
51
52   elim (lift_inv_bind2 … H) -H #W2 #U2 #HW21 #HU21 #H destruct 
53    
54
55  /3 width=2/ /4 width=2/
56
57 *)
58
59
60
61 (* Advanced inversion lemmas ************************************************)
62
63 lemma csup_inv_lref2_be: ∀L,U,i. ⦃L, U⦄ > ⦃L, #i⦄ →
64                          ∀T,d,e. ⇧[d, e] T ≡ U → d ≤ i → i < d + e → ⊥.
65 #L #U #i #H #T #d #e #HTU #Hdi #Hide
66 elim (lift_csup_trans_eq … HTU … H) -H -T #T #H
67 elim (lift_inv_lref2_be … H ? ?) //
68 qed-.
69
70
71 fact csup_inv_all4_refl_aux: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ → L1 = L2 →
72                              ∨∨ ∃∃a,I,U. T1 = ⓑ{a,I}T2.U
73                               | ∃∃I,W. T1 = ⓕ{I}W.T2
74                               | ∃∃I,U. T1 = ⓕ{I}T2.U.
75 #L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 /3 width=3/ /3 width=4/
76 [ #I #L #K #V #i #HLK #H destruct
77   lapply (ldrop_pair2_fwd_cw … HLK V) -HLK #H
78   elim (lt_refl_false … H)
79 | #a #I #L #V #T #H
80   elim (discr_lpair_x_xy … H)
81 ]
82 qed-.
83
84 lemma csup_inv_all4_refl: ∀L,T1,T2. ⦃L, T1⦄ > ⦃L, T2⦄ →
85                           ∨∨ ∃∃a,I,U. T1 = ⓑ{a,I}T2.U
86                            | ∃∃I,W. T1 = ⓕ{I}W.T2
87                            | ∃∃I,U. T1 = ⓕ{I}T2.U.
88 /2 width=4 by csup_inv_all4_refl_aux/ qed-.