definition symmetric1 ≝ λC:Type1.λlt:C→C→CProp1. ∀x,y:C.lt x y → lt y x.
definition transitive1 ≝ λA:Type1.λR:A→A→CProp1.∀x,y,z:A.R x y → R y z → R x z.
-record equivalence_relation1 (A:Type1) : Type1 ≝
+record equivalence_relation1 (A:Type1) : Type2 ≝
{ eq_rel1:2> A → A → CProp1;
refl1: reflexive1 ? eq_rel1;
sym1: symmetric1 ? eq_rel1;
definition symmetric2 ≝ λC:Type2.λlt:C→C→CProp2. ∀x,y:C.lt x y → lt y x.
definition transitive2 ≝ λA:Type2.λR:A→A→CProp2.∀x,y,z:A.R x y → R y z → R x z.
-record equivalence_relation2 (A:Type2) : Type2 ≝
+record equivalence_relation2 (A:Type2) : Type3 ≝
{ eq_rel2:2> A → A → CProp2;
refl2: reflexive2 ? eq_rel2;
sym2: symmetric2 ? eq_rel2;
(* bug grande come una casa?
Ma come fa a passare la quantificazione larga??? *)
-definition unary_morphism_setoid: setoid → setoid → setoid.
+definition unary_morphism_setoid: setoid → setoid → setoid1.
intros;
constructor 1;
[ apply (unary_morphism s s1);