Library CatSem.CAT.rich_monads


Require Export CatSem.CAT.monad_h_module.
Require Export CatSem.CAT.cat_INDEXED_TYPE.
Require Export CatSem.CAT.orders.
Require Export CatSem.CAT.ind_potype.

Generalizable All Variables.

Set Implicit Arguments.
Unset Strict Implicit.

Unset Automatic Introduction.

Section defs.

Variable T : Type.

Notation "'IT'" := (ITYPE T).
Notation "'IP'" := (IPO T).

Section order_stuff.

Class Rel (X : Type) := rel : relation X.

Class ITrel (X : IT) := itrel :> forall t, Rel (X t).

Class ITpo (X : IT)(H:ITrel X) : Prop :=
  itpo :> forall t, PreOrder (@itrel _ _ t).

Variables A B : IT.
Variable f : A ---> B.

Class ITproper (Xa : ITrel A) (Xb : ITrel B) :=
   itproper :> forall t, Proper (itrel (t:=t) ==> @itrel _ _ t) (@f t).

End order_stuff.

End defs.