(* no need to put canonical here, because the system won't be *)
(* able to get the proof C from the {x : T | x \In s} syntax *)
Definition subPoset := Eval hnf in Poset tp subPosetMixin.
End SubPoset.
(* pairing of posets *)
Section PairPoset.
Variable (A B : poset).
Local Notation tp := (A * B)%type.
Definition pair_bot : tp := (bot, bot).
Definition pair_leq (p1 p2 : tp) := p1.1 <== p2.1 /\ p1.2 <== p2.2.

(* Specifications: *)
Lemma pair_botP x : pair_leq pair_bot x.
Lemma pair_trans x y z : pair_leq x y -> pair_leq y z -> pair_leq x z.
Definition pairPosetMixin :=
PosetMixin pair_botP pair_refl pair_asym pair_trans.