Canonical pairPoset := Eval hnf in Poset tp pairPosetMixin.
End PairPoset.
(* functions into a poset form a poset *)
Section FunPoset.
Variable (A : Type) (B : poset).
Local Notation tp := (A -> B).
Definition fun_bot : tp := fun x => bot.
Definition fun_leq (p1 p2 : tp) := forall x, p1 x <== p2 x.

(* Specifications: *)
Lemma fun_botP x : fun_leq fun_bot x.
Lemma fun_trans x y z : fun_leq x y -> fun_leq y z -> fun_leq x z.
Lemma dfun_trans x y z : dfun_leq x y -> dfun_leq y z -> dfun_leq x z.
Lemma ideal_trans x y z : ideal_leq x y -> ideal_leq y z -> ideal_leq x z.
Lemma tarski_lfp_least f : forall x : T, f x = x -> tarski_lfp f <== x.
Lemma tarski_gfp_greatest f : forall x : T, f x = x -> x <== tarski_gfp f.
Lemma sup_clos_idemp (s : Pred T) : sup_closed s -> sup_closure s =p s.
End BasicProperties.