intros E; try assumption.
cut (transitive (Equal (s:=E))); auto with algebra.
Qed.
Hint Resolve Refl: algebra.
Hint Immediate Sym: algebra.
Comments
"Every type in Coq can be seen as a set, with the Leibnitz equality:".
Let eqT_equiv : forall A : Type, equivalence (eq (A:=A)).
intros A; try assumption.
red in |- *.
split; [ try assumption | idtac ].
red in |- *.
unfold app_rel in |- *; auto with algebra.
red in |- *.
split; [ try assumption | idtac ].
red in |- *.
unfold app_rel in |- *; auto with algebra.
intros x y z H' H'0; try assumption.
rewrite H'; auto with algebra.
red in |- *.
unfold app_rel in |- *; auto with algebra.
Qed.
Definition Leibnitz_set (A : Type) : Setoid := Build_Setoid (eqT_equiv A).

(* Specifications: *)
Lemma Leibnitz_set_prop :
forall (A : Type) (x y : Leibnitz_set A), Equal x y -> x = y.