Definition sub_sup (u : Pred tp) : tp :=
  exist _ (sub_sup' u) (sub_supX u).Definition subLatticeMixin := LatticeMixin sub_supP sub_supM.Definition pairLatticeMixin := LatticeMixin pair_supP pair_supM.Canonical pairLattice := Eval hnf in Lattice tp pairLatticeMixin.Definition funLatticeMixin := LatticeMixin fun_supP fun_supM.Canonical funLattice := Eval hnf in Lattice tp funLatticeMixin.Definition dfunLatticeMixin := LatticeMixin dfun_supP dfun_supM.Definition dfunLattice := Eval hnf in Lattice (forall x, B x) dfunLatticeMixin.Definition ideal_sup (s : Pred (ideal P)) := Ideal (ideal_supP' s).Definition idealLatticeMixin := LatticeMixin ideal_supP ideal_supM.Canonical idealLattice := Eval hnf in Lattice (ideal P) idealLatticeMixin.Definition propLatticeMixin := LatticeMixin prop_supP prop_supM.Canonical propLattice := Eval hnf in Lattice Prop propLatticeMixin.

(* Specifications: *)
Lemma id_mono (T : poset) : monotone (@id T).
Lemma const_mono (T1 T2 : poset) (y : T2) : monotone (fun x : T1 => y).
Lemma proj1_mono (T1 T2 : poset) : monotone (@fst T1 T2).
Lemma proj2_mono (T1 T2 : poset) : monotone (@snd T1 T2).
Lemma diag_mono (T : poset) : monotone (fun x : T => (x, x)).
Lemma app_mono A (T : poset) (x : A) : monotone (fun f : A -> T => f x).
Lemma dapp_mono A (T : A -> poset) (x : A) : monotone (fun f : dfunPoset T => f x).