X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=matita%2Fmatita%2Fcontribs%2Flambda-delta%2FBasic-2%2Freduction%2Ftpr_tpr.ma;h=d0ae3fa90b47403a3f1b8e22d17b0e96f0a36f49;hb=ffe34220d80cba65eccf2396fba7f692cc6448c8;hp=aec243d136babbac559208323ab8a506f4bfe767;hpb=fd991956035d0f1b663aab48325097e53ed9e00e;p=helm.git diff --git a/matita/matita/contribs/lambda-delta/Basic-2/reduction/tpr_tpr.ma b/matita/matita/contribs/lambda-delta/Basic-2/reduction/tpr_tpr.ma index aec243d13..d0ae3fa90 100644 --- a/matita/matita/contribs/lambda-delta/Basic-2/reduction/tpr_tpr.ma +++ b/matita/matita/contribs/lambda-delta/Basic-2/reduction/tpr_tpr.ma @@ -26,48 +26,6 @@ lemma tpr_conf_sort_sort: ∀k. ∃∃X. ⋆k ⇒ X & ⋆k ⇒ X. lemma tpr_conf_lref_lref: ∀i. ∃∃X. #i ⇒ X & #i ⇒ X. /2/ qed. -lemma tpr_conf_bind_bind: - ∀I,V0,V1,T0,T1,V2,T2. ( - ∀X0:term. #X0 < #V0 + #T0 + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X - ) → - V0 ⇒ V1 → V0 ⇒ V2 → T0 ⇒ T1 → T0 ⇒ T2 → - ∃∃X. 𝕓{I} V1. T1 ⇒ X & 𝕓{I} V2. T2 ⇒ X. -#I #V0 #V1 #T0 #T1 #V2 #T2 #IH #HV01 #HV02 #HT01 #HT02 -elim (IH … HV01 … HV02) -HV01 HV02 // #V #HV1 #HV2 -elim (IH … HT01 … HT02) -HT01 HT02 IH /3 width=5/ -qed. - -lemma tpr_conf_bind_delta: - ∀V0,V1,T0,T1,V2,T2,T. ( - ∀X0:term. #X0 < #V0 + #T0 + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X - ) → - V0 ⇒ V1 → V0 ⇒ V2 → - T0 ⇒ T1 → T0 ⇒ T2 → ⋆. 𝕓{Abbr} V2 ⊢ T2 [O,1] ≫ T → - ∃∃X. 𝕓{Abbr} V1. T1 ⇒ X & 𝕓{Abbr} V2. T ⇒ X. -#V0 #V1 #T0 #T1 #V2 #T2 #T #IH #HV01 #HV02 #HT01 #HT02 #HT2 -elim (IH … HV01 … HV02) -HV01 HV02 // #V #HV1 #HV2 -elim (IH … HT01 … HT02) -HT01 HT02 IH // -V0 T0 #T0 #HT10 #HT20 -elim (tpr_tps_bind … HV2 HT20 … HT2) -HT20 HT2 /3 width=5/ -qed. - -lemma tpr_conf_bind_zeta: - ∀X2,V0,V1,T0,T1,T. ( - ∀X0:term. #X0 < #V0 + #T0 +1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X - ) → - V0 ⇒ V1 → T0 ⇒ T1 → T ⇒ X2 → ↑[O, 1] T ≡ T0 → - ∃∃X. 𝕓{Abbr} V1. T1 ⇒ X & X2 ⇒ X. -#X2 #V0 #V1 #T0 #T1 #T #IH #HV01 #HT01 #HTX2 #HT0 -elim (tpr_inv_lift … HT01 … HT0) -HT01 #U #HUT1 #HTU -lapply (tw_lift … HT0) -HT0 #HT0 -elim (IH … HTX2 … HTU) -HTX2 HTU IH /3/ -qed. - lemma tpr_conf_flat_flat: ∀I,V0,V1,T0,T1,V2,T2. ( ∀X0:term. #X0 < #V0 + #T0 + 1 → @@ -110,13 +68,8 @@ elim (IH … HV01 … HV02) -HV01 HV02 // #VV #HVV1 #HVV2 elim (lift_total VV 0 1) #VVV #HVV lapply (tpr_lift … HVV2 … HV2 … HVV) #HVVV elim (tpr_inv_abbr1 … H) -H * -(* case 1: bind *) -[ -HV2 HVV2 #WW #UU #HWW0 #HUU0 #H destruct -T1; - elim (IH … HW02 … HWW0) -HW02 HWW0 // #W #HW2 #HWW - elim (IH … HU02 … HUU0) -HU02 HUU0 IH // #U #HU2 #HUU - @ex2_1_intro [2: @tpr_theta |1:skip |3: @tpr_bind ] /2 width=7/ (**) (* /4 width=7/ is too slow *) -(* case 2: delta *) -| -HV2 HVV2 #WW2 #UU2 #UU #HWW2 #HUU02 #HUU2 #H destruct -T1; +(* case 1: delta *) +[ -HV2 HVV2 #WW2 #UU2 #UU #HWW2 #HUU02 #HUU2 #H destruct -T1; elim (IH … HW02 … HWW2) -HW02 HWW2 // #W #HW02 #HWW2 elim (IH … HU02 … HUU02) -HU02 HUU02 IH // #U #HU2 #HUUU2 elim (tpr_tps_bind … HWW2 HUUU2 … HUU2) -HUU2 HUUU2 #UUU #HUUU2 #HUUU1 @@ -164,16 +117,16 @@ elim (IH … HT01 … HT02) -HT01 HT02 IH /3 width=5/ qed. lemma tpr_conf_delta_delta: - ∀V0,V1,T0,T1,TT1,V2,T2,TT2. ( + ∀I1,V0,V1,T0,T1,TT1,V2,T2,TT2. ( ∀X0:term. #X0 < #V0 +#T0 + 1→ ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → ∃∃X. X1 ⇒ X & X2 ⇒ X ) → V0 ⇒ V1 → V0 ⇒ V2 → T0 ⇒ T1 → T0 ⇒ T2 → - ⋆. 𝕓{Abbr} V1 ⊢ T1 [O, 1] ≫ TT1 → - ⋆. 𝕓{Abbr} V2 ⊢ T2 [O, 1] ≫ TT2 → - ∃∃X. 𝕓{Abbr} V1. TT1 ⇒ X & 𝕓{Abbr} V2. TT2 ⇒ X. -#V0 #V1 #T0 #T1 #TT1 #V2 #T2 #TT2 #IH #HV01 #HV02 #HT01 #HT02 #HTT1 #HTT2 + ⋆. 𝕓{I1} V1 ⊢ T1 [O, 1] ≫ TT1 → + ⋆. 𝕓{I1} V2 ⊢ T2 [O, 1] ≫ TT2 → + ∃∃X. 𝕓{I1} V1. TT1 ⇒ X & 𝕓{I1} V2. TT2 ⇒ X. +#I1 #V0 #V1 #T0 #T1 #TT1 #V2 #T2 #TT2 #IH #HV01 #HV02 #HT01 #HT02 #HTT1 #HTT2 elim (IH … HV01 … HV02) -HV01 HV02 // #V #HV1 #HV2 elim (IH … HT01 … HT02) -HT01 HT02 IH // #T #HT1 #HT2 elim (tpr_tps_bind … HV1 HT1 … HTT1) -HT1 HTT1 #U1 #TTU1 #HTU1 @@ -262,85 +215,67 @@ lemma tpr_conf_aux: lapply (tpr_inv_lref1 … H1) -H1 (* case 2: lref, lref *) #H1 destruct -X2 // -| #I #V0 #V1 #T0 #T1 #HV01 #HT01 #H1 #H2 destruct -Y0; - elim (tpr_inv_bind1 … H1) -H1 * -(* case 3: bind, bind *) - [ #V2 #T2 #HV02 #HT02 #H destruct -X2 - /3 width=7 by tpr_conf_bind_bind/ (**) (* /3 width=7/ is too slow *) -(* case 4: bind, delta *) - | #V2 #T2 #T #HV02 #HT02 #HT2 #H1 #H2 destruct -X2 I - /3 width=9 by tpr_conf_bind_delta/ (**) (* /3 width=9/ is too slow *) -(* case 5: bind, zeta *) - | #T #HT0 #HTX2 #H destruct -I - /3 width=8 by tpr_conf_bind_zeta/ (**) (* /3 width=8/ is too slow *) - ] | #I #V0 #V1 #T0 #T1 #HV01 #HT01 #H1 #H2 destruct -Y0; elim (tpr_inv_flat1 … H1) -H1 * -(* case 6: flat, flat *) +(* case 3: flat, flat *) [ #V2 #T2 #HV02 #HT02 #H destruct -X2 /3 width=7 by tpr_conf_flat_flat/ (**) (* /3 width=7/ is too slow *) -(* case 7: flat, beta *) +(* case 4: flat, beta *) | #V2 #W #U0 #T2 #HV02 #HT02 #H1 #H2 #H3 destruct -T0 X2 I /3 width=8 by tpr_conf_flat_beta/ (**) (* /3 width=8/ is too slow *) -(* case 8: flat, theta *) +(* case 5: flat, theta *) | #V2 #V #W0 #W2 #U0 #U2 #HV02 #HW02 #HT02 #HV2 #H1 #H2 #H3 destruct -T0 X2 I /3 width=11 by tpr_conf_flat_theta/ (**) (* /3 width=11/ is too slow *) -(* case 9: flat, tau *) +(* case 6: flat, tau *) | #HT02 #H destruct -I /3 width=6 by tpr_conf_flat_cast/ (**) (* /3 width=6/ is too slow *) ] | #V0 #V1 #W0 #T0 #T1 #HV01 #HT01 #H1 #H2 destruct -Y0; elim (tpr_inv_appl1 … H1) -H1 * -(* case 10: beta, flat (repeated) *) +(* case 7: beta, flat (repeated) *) [ #V2 #T2 #HV02 #HT02 #H destruct -X2 @ex2_1_comm /3 width=8 by tpr_conf_flat_beta/ -(* case 11: beta, beta *) +(* case 8: beta, beta *) | #V2 #WW0 #TT0 #T2 #HV02 #HT02 #H1 #H2 destruct -W0 T0 X2 /3 width=8 by tpr_conf_beta_beta/ (**) (* /3 width=8/ is too slow *) -(* case 12, beta, theta (excluded) *) +(* case 9, beta, theta (excluded) *) | #V2 #VV2 #WW0 #W2 #TT0 #T2 #_ #_ #_ #_ #H destruct ] -| #V0 #V1 #T0 #T1 #TT1 #HV01 #HT01 #HTT1 #H1 #H2 destruct -Y0; - elim (tpr_inv_abbr1 … H1) -H1 * -(* case 13: delta, bind (repeated) *) - [ #V2 #T2 #HV02 #T02 #H destruct -X2 - @ex2_1_comm /3 width=9 by tpr_conf_bind_delta/ -(* case 14: delta, delta *) - | #V2 #T2 #TT2 #HV02 #HT02 #HTT2 #H destruct -X2 +| #I1 #V0 #V1 #T0 #T1 #TT1 #HV01 #HT01 #HTT1 #H1 #H2 destruct -Y0; + elim (tpr_inv_bind1 … H1) -H1 * +(* case 10: delta, delta *) + [ #V2 #T2 #TT2 #HV02 #HT02 #HTT2 #H destruct -X2 /3 width=11 by tpr_conf_delta_delta/ (**) (* /3 width=11/ is too slow *) -(* case 15: delta, zata *) - | #T2 #HT20 #HTX2 +(* case 11: delta, zata *) + | #T2 #HT20 #HTX2 #H destruct -I1; /3 width=10 by tpr_conf_delta_zeta/ (**) (* /3 width=10/ is too slow *) ] | #VV1 #V0 #V1 #W0 #W1 #T0 #T1 #HV01 #HVV1 #HW01 #HT01 #H1 #H2 destruct -Y0; elim (tpr_inv_appl1 … H1) -H1 * -(* case 16: theta, flat (repeated) *) +(* case 12: theta, flat (repeated) *) [ #V2 #T2 #HV02 #HT02 #H destruct -X2 @ex2_1_comm /3 width=11 by tpr_conf_flat_theta/ -(* case 17: theta, beta (repeated) *) +(* case 13: theta, beta (repeated) *) | #V2 #WW0 #TT0 #T2 #_ #_ #H destruct -(* case 18: theta, theta *) +(* case 14: theta, theta *) | #V2 #VV2 #WW0 #W2 #TT0 #T2 #V02 #HW02 #HT02 #HVV2 #H1 #H2 destruct -W0 T0 X2 - /3 width=14 by tpr_conf_theta_theta/ (**) (* /3 width=14/ is too slow *) + /3 width=14 by tpr_conf_theta_theta/ (**) (* /3 width=14/ is too slow *) ] | #V0 #TT0 #T0 #T1 #HTT0 #HT01 #H1 #H2 destruct -Y0; elim (tpr_inv_abbr1 … H1) -H1 * -(* case 19: zeta, bind (repeated) *) - [ #V2 #T2 #HV02 #T02 #H destruct -X2 - @ex2_1_comm /3 width=8 by tpr_conf_bind_zeta/ -(* case 20: zeta, delta (repeated) *) - | #V2 #T2 #TT2 #HV02 #HT02 #HTT2 #H destruct -X2 +(* case 15: zeta, delta (repeated) *) + [ #V2 #T2 #TT2 #HV02 #HT02 #HTT2 #H destruct -X2 @ex2_1_comm /3 width=10 by tpr_conf_delta_zeta/ -(* case 21: zeta, zeta *) +(* case 16: zeta, zeta *) | #T2 #HTT20 #HTX2 /3 width=9 by tpr_conf_zeta_zeta/ (**) (* /3 width=9/ is too slow *) ] | #V0 #T0 #T1 #HT01 #H1 #H2 destruct -Y0; elim (tpr_inv_cast1 … H1) -H1 -(* case 22: tau, flat (repeated) *) +(* case 17: tau, flat (repeated) *) [ * #V2 #T2 #HV02 #HT02 #H destruct -X2 @ex2_1_comm /3 width=6 by tpr_conf_flat_cast/ -(* case 23: tau, tau *) +(* case 18: tau, tau *) | #HT02 /2 by tpr_conf_tau_tau/ ]