X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Flib%2Flambda-delta%2Freduction%2Fpr_defs.ma;fp=matita%2Fmatita%2Flib%2Flambda-delta%2Freduction%2Fpr_defs.ma;h=b817d34ad7988339282aeb82a219dfaf1638903d;hb=b4d7d16ff7635d9430e92ba86eaf513a9ad9ff8e;hp=b8ddd5aceb69ae7036a6a7880dfc030d74c4eee2;hpb=1e6b9fe97056bdffc515e1951de67d85d40e964c;p=helm.git diff --git a/matita/matita/lib/lambda-delta/reduction/pr_defs.ma b/matita/matita/lib/lambda-delta/reduction/pr_defs.ma index b8ddd5ace..b817d34ad 100644 --- a/matita/matita/lib/lambda-delta/reduction/pr_defs.ma +++ b/matita/matita/lib/lambda-delta/reduction/pr_defs.ma @@ -44,3 +44,38 @@ lemma pr_refl: ∀T,L. L ⊢ T ⇒ T. #T elim T -T // #I elim I -I /2/ qed. + +(* The basic inversion lemmas ***********************************************) + +lemma pr_inv_lref2_aux: ∀L,T1,T2. L ⊢ T1 ⇒ T2 → ∀i. T2 = #i → + ∨∨ T1 = #i + | ∃∃K,V1,j. j < i & K ⊢ V1 ⇒ #(i-j-1) & + ↑[O,j] K. 𝕓{Abbr} V1 ≡ L & T1 = #j + | ∃∃V,T,T0. ↑[O,1] T0 ≡ T & L ⊢ T0 ⇒ #i & + T1 = 𝕓{Abbr} V. T + | ∃∃V,T. L ⊢ T ⇒ #i & T1 = 𝕗{Cast} V. T. +#L #T1 #T2 #H elim H -H L T1 T2 +[ #L #k #i #H destruct +| #L #j #i /2/ +| #L #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #i #H destruct +| #L #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #i #H destruct +| #L #V1 #V2 #W #T1 #T2 #_ #_ #_ #_ #i #H destruct +| #L #K #V1 #V2 #V #j #HLK #HV12 #HV2 #_ #i #H destruct -V; + elim (lift_inv_lref2 … HV2) -HV2 * #H1 #H2 + [ elim (lt_zero_false … H1) + | destruct -V2 /3 width=7/ + ] +| #L #V #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #_ #i #H destruct +| #L #V #T #T1 #T2 #HT1 #HT12 #_ #i #H destruct /3 width=6/ +| #L #V #T1 #T2 #HT12 #_ #i #H destruct /3/ +] +qed. + +lemma pr_inv_lref2: ∀L,T1,i. L ⊢ T1 ⇒ #i → + ∨∨ T1 = #i + | ∃∃K,V1,j. j < i & K ⊢ V1 ⇒ #(i-j-1) & + ↑[O,j] K. 𝕓{Abbr} V1 ≡ L & T1 = #j + | ∃∃V,T,T0. ↑[O,1] T0 ≡ T & L ⊢ T0 ⇒ #i & + T1 = 𝕓{Abbr} V. T + | ∃∃V,T. L ⊢ T ⇒ #i & T1 = 𝕗{Cast} V. T. +/2/ qed.