]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/library/logic/equality.ma
restored coercions between eq and eq
[helm.git] / helm / software / matita / library / logic / equality.ma
index c26449c4261595031deaf05fd8b104816a384c18..510f0c5c6fe3144b395840770c1f8dbe15084163 100644 (file)
@@ -1,5 +1,5 @@
 (**************************************************************************)
-(*       ___                                                               *)
+(*       ___                                                             *)
 (*      ||M||                                                             *)
 (*      ||A||       A project by Andrea Asperti                           *)
 (*      ||T||                                                             *)
@@ -27,31 +27,31 @@ interpretation "leibnitz's non-equality"
   'neq x y = (cic:/matita/logic/connectives/Not.con
     (cic:/matita/logic/equality/eq.ind#xpointer(1/1) _ x y)).
 
-theorem eq_ind':
- \forall A. \forall x:A. \forall P: \forall y:A. x=y \to Prop.
+theorem eq_rect':
+ \forall A. \forall x:A. \forall P: \forall y:A. x=y \to Type.
   P ? (refl_eq ? x) \to \forall y:A. \forall p:x=y. P y p.
  intros.
  exact
-  (match p return \lambda y. \lambda p.P y p with
-    [refl_eq \Rightarrow H]).
+  (match p1 return \lambda y. \lambda p.P y p with
+    [refl_eq \Rightarrow p]).
 qed.
  
-theorem reflexive_eq : \forall A:Type. reflexive A (eq A).
-simplify.intros.apply refl_eq.
-qed.
+variant reflexive_eq : \forall A:Type. reflexive A (eq A)
+\def refl_eq.
+(* simplify.intros.apply refl_eq. *)
     
 theorem symmetric_eq: \forall A:Type. symmetric A (eq A).
 unfold symmetric.intros.elim H. apply refl_eq.
 qed.
 
-theorem sym_eq : \forall A:Type.\forall x,y:A. x=y  \to y=x
+variant sym_eq : \forall A:Type.\forall x,y:A. x=y  \to y=x
 \def symmetric_eq.
 
 theorem transitive_eq : \forall A:Type. transitive A (eq A).
 unfold transitive.intros.elim H1.assumption.
 qed.
 
-theorem trans_eq : \forall A:Type.\forall x,y,z:A. x=y  \to y=z \to x=z
+variant trans_eq : \forall A:Type.\forall x,y,z:A. x=y  \to y=z \to x=z
 \def transitive_eq.
 
 theorem eq_elim_r:
@@ -62,20 +62,32 @@ qed.
 
 theorem eq_f: \forall  A,B:Type.\forall f:A\to B.
 \forall x,y:A. x=y \to f x = f y.
-intros.elim H.reflexivity.
+intros.elim H.apply refl_eq.
+qed.
+
+theorem eq_f': \forall  A,B:Type.\forall f:A\to B.
+\forall x,y:A. x=y \to f y = f x.
+intros.elim H.apply refl_eq.
 qed.
 
+(*  *)
 coercion cic:/matita/logic/equality/sym_eq.con.
 coercion cic:/matita/logic/equality/eq_f.con.
+(* *)
 
 default "equality"
  cic:/matita/logic/equality/eq.ind
  cic:/matita/logic/equality/sym_eq.con
- cic:/matita/logic/equality/trans_eq.con
+ cic:/matita/logic/equality/transitive_eq.con
  cic:/matita/logic/equality/eq_ind.con
  cic:/matita/logic/equality/eq_elim_r.con
  cic:/matita/logic/equality/eq_f.con
- cic:/matita/logic/equality/eq_OF_eq.con. (* \x.sym (eq_f x) *)
+(* *)
+ cic:/matita/logic/equality/eq_OF_eq.con.
+(* *)
+(*  
+ cic:/matita/logic/equality/eq_f'.con. (* \x.sym (eq_f x) *)
+ *)
  
 theorem eq_f2: \forall  A,B,C:Type.\forall f:A\to B \to C.
 \forall x1,x2:A. \forall y1,y2:B.
@@ -96,7 +108,7 @@ lemma trans_sym_eq:
    \forall u:x=y.
     comp ? ? ? ? u u = refl_eq ? y.
  intros.
- apply (eq_ind' ? ? ? ? ? u).
+ apply (eq_rect' ? ? ? ? ? u).
  reflexivity.
 qed.
 
@@ -136,7 +148,7 @@ theorem nu_left_inv:
     \forall u:x=y.
      nu_inv ? H ? ? (nu ? H ? ? u) = u.
  intros.
- apply (eq_ind' ? ? ? ? ? u).
+ apply (eq_rect' ? ? ? ? ? u).
  unfold nu_inv.
  apply trans_sym_eq.
 qed.
@@ -172,11 +184,11 @@ cut
 focus 8.
  clear q; clear p.
  intro.
- apply (eq_ind' ? ? ? ? ? q);
+ apply (eq_rect' ? ? ? ? ? q);
  fold simplify (nu ? ? (refl_eq ? x)).
  generalize in match (nu ? ? (refl_eq ? x)); intro.
  apply
-  (eq_ind' A x
+  (eq_rect' A x
    (\lambda y. \lambda u.
     eq_ind A x (\lambda a.a=y) u y u = refl_eq ? y)
    ? x H1).