Prenex Implicits prod_mono.
(**********)
(* Chains *)
(**********)
Section Chains.
Variable T : poset.
Definition chain_axiom (s : Pred T) :=
(exists d, d \In s) /\
(forall x y, x \In s -> y \In s -> x <== y \/ y <== x).
Structure chain := Chain {
pred_of :> Pred T;
_ : chain_axiom pred_of}.
Canonical chainPredType := @mkPredType T chain pred_of.
End Chains.

Lemma chainE (T : poset) (s1 s2 : chain T) :
s1 = s2 <-> pred_of s1 =p pred_of s2.