X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Flib%2Flambda-delta%2Freduction%2Fpr_defs.ma;h=d45cbd0d84393512a72683057868b6f2eff38a3d;hb=d9c872a9203fb4f69d9962d68b8ee64881f8a949;hp=b8ddd5aceb69ae7036a6a7880dfc030d74c4eee2;hpb=c7731146663b37f09dc62f4f22924993203c1ba6;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..d45cbd0d8 100644 --- a/matita/matita/lib/lambda-delta/reduction/pr_defs.ma +++ b/matita/matita/lib/lambda-delta/reduction/pr_defs.ma @@ -38,9 +38,44 @@ interpretation "single step parallel reduction (term)" 'PR L T1 T2 = (pr L T1 T2). -(* The basic properties *****************************************************) +(* Basic properties *********************************************************) 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.