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.Definition predLatticeMixin := funLatticeMixin A propLattice.Canonical predLattice := Eval hnf in Lattice (Pred A) predLatticeMixin.Structure chain := Chain {
  pred_of :> Pred T;
  _ : chain_axiom pred_of}.Structure chain := Chain {
  pred_of :> Pred T;
  _ : chain_axiom pred_of}.Structure chain := Chain {
  pred_of :> Pred T;
  _ : chain_axiom pred_of}.Canonical chainPredType := @mkPredType T chain pred_of.

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