(* no point in declaring this canonical, since it's keyed on forall *)
(* and forall is not a symbol *)
Definition dfunPosetMixin :=
  PosetMixin dfun_refl dfun_asym dfun_trans.Definition dfunPoset := Eval hnf in Poset tp dfunPosetMixin.

(* Specifications: *)
Lemma ideal_refl x : ideal_leq x x.
Lemma ideal_asym x y : ideal_leq x y -> ideal_leq y x -> x = y.
Lemma ideal_trans x y z : ideal_leq x y -> ideal_leq y z -> ideal_leq x z.