X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Flib%2Fbasics%2Fjmeq.ma;h=274ce3d5b32329b4b3cbd07a70a8cf924b79f098;hb=ddc80515997a3f56085c6234d4db326141e189aa;hp=9f2d758c158bf3810ca85ab8cb5bc8bf04a37036;hpb=0e81e658803822599b5e015aab67bc282afc9c4d;p=helm.git diff --git a/matita/matita/lib/basics/jmeq.ma b/matita/matita/lib/basics/jmeq.ma index 9f2d758c1..274ce3d5b 100644 --- a/matita/matita/lib/basics/jmeq.ma +++ b/matita/matita/lib/basics/jmeq.ma @@ -11,10 +11,10 @@ include "basics/logic.ma". -inductive Sigma: Type[1] ≝ - mk_Sigma: ∀p1: Type[0]. p1 → Sigma. +inductive Sigma: Type[2] ≝ + mk_Sigma: ∀p1: Type[1]. p1 → Sigma. -definition p1: Sigma → Type[0]. +definition p1: Sigma → Type[1]. #S cases S #Y #_ @Y qed. @@ -22,8 +22,19 @@ definition p2: ∀S:Sigma. p1 S. #S cases S #Y #x @x qed. -inductive jmeq (A:Type[0]) (x:A) : ∀B:Type[0]. B →Prop ≝ -jmrefl : jmeq A x A x. +inductive jmeq (A:Type[1]) (x:A) : ∀B:Type[1]. B →Prop ≝ +refl_jmeq : jmeq A x A x. + +notation < "hvbox(term 46 a break maction (≃) (≃\sub(t,u)) term 46 b)" + non associative with precedence 45 +for @{ 'jmsimeq $t $a $u $b }. + +notation > "hvbox(n break ≃ m)" + non associative with precedence 45 +for @{ 'jmsimeq ? $n ? $m }. + +interpretation "john major's equality" 'jmsimeq t x u y = (jmeq t x u y). +interpretation "john major's reflexivity" 'refl = refl_jmeq. definition eqProp ≝ λA:Prop.eq A. @@ -32,7 +43,7 @@ lemma K : ∀A.∀x:A.∀h:x=x. eqProp ? h (refl A x). qed. definition cast: - ∀A,B:Type[0].∀E:A=B. A → B. + ∀A,B:Type[1].∀E:A=B. A → B. #A #B #E cases E #X @X qed. @@ -46,14 +57,14 @@ qed. lemma gral: ∀A.∀x,y:A. mk_Sigma A x = mk_Sigma A y → x=y. #A #x #y #E lapply (tech1 ?? E) - generalize in ⊢ (??(???%?)? → ?) #E1 - normalize in E1; >(K ?? E1) normalize + generalize {⊢ (??(???%?)? → ?)} #E1 + normalize {E1}; >(K ?? E1) normalize #H @H qed. lemma jm_to_eq_sigma: ∀A,x,y. jmeq A x A y → mk_Sigma A x = mk_Sigma A y. - #A #x #y #E cases E in ⊢ (???%); % + #A #x #y #E cases E {⊢ (???%)} % qed. definition curry: @@ -66,7 +77,7 @@ qed. lemma G : ∀A.∀x:A.∀P:∀y:A.mk_Sigma A x = mk_Sigma A y →Type[0]. P x (refl ? (mk_Sigma A x)) → ∀y.∀h:mk_Sigma A x = mk_Sigma A y. P y h. - #A #x #P #H #y #E lapply (gral ??? E) #G generalize in match E; + #A #x #P #H #y #E lapply (gral ??? E) #G generalize {match E} @(match G return λy.λ_. ∀e:mk_Sigma A x = mk_Sigma A y. P y e with @@ -79,12 +90,25 @@ definition PP: ∀A:Prop.∀P:A → Type[0]. A → Type[0]. qed. lemma E : ∀A.∀x:A.∀P:∀y:A.jmeq A x A y→Type[0]. - PP ? (P x) (jmrefl A x) → ∀y.∀h:jmeq A x A y.PP ? (P y) h. + PP ? (P x) (refl_jmeq A x) → ∀y.∀h:jmeq A x A y.PP ? (P y) h. #A #a #P #H #b #E letin F ≝ (jm_to_eq_sigma ??? E) lapply (G ?? (curry ?? P) ?? F) [ normalize // - | #H whd in H; @(H : PP ? (P b) ?) ] + | #H whd {H} @(H : PP ? (P b) ?) ] qed. lemma jmeq_elim : ∀A.∀x:A.∀P:∀y:A.jmeq A x A y→Type[0]. - P x (jmrefl A x) → ∀y.∀h:jmeq A x A y.P y h ≝ E. + P x (refl_jmeq A x) → ∀y.∀h:jmeq A x A y.P y h ≝ E. + +lemma jmeq_to_eq: ∀A:Type[1]. ∀x,y:A. x≃y → x=y. + #A #x #y #JMEQ @(jmeq_elim ? x … JMEQ) % +qed. + +coercion jmeq_to_eq: ∀A:Type[1]. ∀x,y:A. ∀p:x≃y.x=y ≝ jmeq_to_eq on _p:?≃? to ?=?. + +lemma eq_to_jmeq: + ∀A: Type[1]. + ∀x, y: A. + x = y → x ≃ y. + // +qed.