Definition natPosetMixin := PosetMixin nat_botP nat_refl nat_asym nat_trans.Canonical natPoset := Eval hnf in Poset nat natPosetMixin.Record class_of (T : Type) := Class {
  base : Poset.class_of T;
  mixin : mixin_of (Poset.Pack base T)}.Record class_of (T : Type) := Class {
  base : Poset.class_of T;
  mixin : mixin_of (Poset.Pack base T)}.Record class_of (T : Type) := Class {
  base : Poset.class_of T;
  mixin : mixin_of (Poset.Pack base T)}.Record class_of (T : Type) := Class {
  base : Poset.class_of T;
  mixin : mixin_of (Poset.Pack base T)}.Structure type : Type := Pack {sort : Type; _ : class_of sort; _ : Type}.Structure type : Type := Pack {sort : Type; _ : class_of sort; _ : Type}.Structure type : Type := Pack {sort : Type; _ : class_of sort; _ : Type}.Definition clone c of phant_id class c := @Pack T c T.Definition sup (s : Pred cT) : cT := mx_sup (mixin class) s.Definition poset := Poset.Pack class cT.Notation lattice := Lattice.type.Notation LatticeMixin := Lattice.Mixin.Notation Lattice T m := (@pack T _ _ m id).Notation "[ 'lattice' 'of' T 'for' cT ]" := (@clone T cT _ id)
  (at level 0, format "[ 'lattice'  'of'  T  'for' cT ]") : form_scope.Notation "[ 'lattice' 'of' T ]" := (@clone T _ _ id)
  (at level 0, format "[ 'lattice'  'of'  T ]") : form_scope.Notation sup := Lattice.sup.

(* Specifications: *)
Lemma supE (s1 s2 : Pred T) : s1 =p s2 -> sup s1 = sup s2.
Lemma tarski_lfp_fixed (f : T -> T) : monotone f -> f (tarski_lfp f) = tarski_lfp f.
Lemma tarski_gfp_fixed (f : T -> T) : monotone f -> f (tarski_gfp f) = tarski_gfp f.
Lemma sup_clos_sub (s : Pred T) : s <=p sup_closure s.
Lemma sup_clos_min (s : Pred T) : forall t, s <=p t -> sup_closed t -> sup_closure s <=p t.
Lemma sup_closP (s : Pred T) : sup_closed (sup_closure s).
Lemma sup_clos_idemp (s : Pred T) : sup_closed s -> sup_closure s =p s.
Lemma sup_clos_mono (s1 s2 : Pred T) : s1 <=p s2 -> sup_closure s1 <=p sup_closure s2.