Library CatSem.CAT.orders_bis
Require Export CatSem.CAT.orders.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Automatic Introduction.
Inductive smallest_rel (V : TYPE) : relation V :=
| t_eq : forall (x : V), smallest_rel x x.
Program Instance sm_po_struct (V : TYPE) : PO_obj_struct V := {
Rel := smallest_rel (V:=V)
}.
Next Obligation.
Proof.
constructor.
unfold Reflexive.
constructor.
unfold Transitive.
intros x y z H H'.
induction H.
auto.
Qed.
Canonical Structure sm_po (V : TYPE) : Ord :=
Build_PO_obj (sm_po_struct V).
Section sm_po_mor.
Variables V W : TYPE.
Variable f : V ---> W.
Program Instance sm_po_mor_s :
PO_mor_struct (a:=sm_po V) (b:=sm_po W) f.
Next Obligation.
Proof.
unfold Proper.
red.
intros x y H.
induction H.
constructor.
Qed.
Canonical Structure sm_po_mor : sm_po V ---> sm_po W :=
Build_PO_mor sm_po_mor_s.
End sm_po_mor.
Program Instance SM_po_s : Functor_struct sm_po_mor.
Next Obligation.
Proof.
unfold Proper.
red.
intros.
simpl.
auto.
Qed.
Definition SM_po := Build_Functor SM_po_s.
Definition Delta := SM_po.
Section Sm_ind.
Variable V : TYPE.
Variable W : Ord.
Variable f : V -> W.
Program Instance Sm_ind_s : PO_mor_struct
(a:=SM_po V) (b:=W) f.
Next Obligation.
Proof.
unfold Proper;
red.
intros x y H.
induction H.
reflexivity.
Qed.
Canonical Structure Sm_ind := Build_PO_mor Sm_ind_s.
End Sm_ind.