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.

Lemma sup_clos_idemp (s : Pred T) : sup_closed s -> sup_closure s =p s.