Library ConCaT.RELATIONS.Relations
Set Implicit Arguments.
Unset Strict Implicit.
Section Orderings.
Variable U : Type.
Definition Relation := U -> U -> Prop.
Variable R : Relation.
Definition Reflexive := forall x : U, R x x.
Definition Transitive := forall x y z : U, R x y -> R y z -> R x z.
Definition Symmetric := forall x y : U, R x y -> R y x.
Definition Antisymmetric := forall x y : U, R x y -> R y x -> x = y.
Definition Contains (R R' : Relation) := forall x y : U, R' x y -> R x y.
Definition Same_relation (R R' : Relation) := Contains R R' /\ Contains R' R.
Structure Preorder : Prop :=
{Prf_refl1 : Reflexive; Prf_trans1 : Transitive}.
Structure Order : Prop :=
{Prf_preorder :> Preorder; Prf_asym : Antisymmetric}.
Structure Partial_equivalence : Prop :=
{Prf_trans : Transitive; Prf_sym : Symmetric}.
Structure Equivalence : Prop :=
{Prf_refl : Reflexive; Prf_pequiv :> Partial_equivalence}.
Canonical Structure Equiv_preorder (e : Equivalence) :=
Build_Preorder (Prf_refl e) (Prf_trans e).
Coercion Equiv_preorder : Equivalence >-> Preorder.
End Orderings.
Hint Unfold Reflexive.
Hint Unfold Transitive.
Hint Unfold Antisymmetric.
Hint Unfold Symmetric.
Hint Unfold Contains.
Hint Unfold Same_relation.
Hint Resolve Build_Preorder.
Hint Resolve Build_Order.
Hint Resolve Build_Equivalence.
Hint Resolve Build_Partial_equivalence.
