Generalizable Variables A B C D R S T U l eqA eqB eqC eqD.Definition crelation (A : Type) := A -> A -> Type.Definition arrow (A B : Type) := A -> B.Definition flip {A B C : Type} (f : A -> B -> C) := fun x y => f y x.Definition iffT (A B : Type) := ((A -> B) * (B -> A))%type.(** We rebind crelational properties in separate classes to be able to overload each proof. *)

  Class Reflexive (R : crelation A) :=
    reflexivity : forall x : A, R x x.(** We rebind crelational properties in separate classes to be able to overload each proof. *)

  Class Reflexive (R : crelation A) :=
    reflexivity : forall x : A, R x x.Definition complement (R : crelation A) : crelation A := 
    fun x y => R x y -> False.

(* Specifications: *)
Lemma complement_inverse R : complement (flip R) = flip (complement R).