Section PACO1.
Variable T0 : Type.
(** ** Signatures *)
Record sig1T  :=
exist1T {
proj1T0: @T0;
}.
Definition uncurry1  (R: rel1 T0): rel1 sig1T :=
fun x => R (proj1T0 x).
Definition curry1  (R: rel1 sig1T): rel1 T0 :=
fun x0 => R (@exist1T x0).
(** ** Predicates of Arity 1 *)
Definition paco1(gf : rel1 T0 -> rel1 T0)(r: rel1 T0) : rel1 T0 :=
curry1 (paco (fun R0 => uncurry1 (gf (curry1 R0))) (uncurry1 r)).
Definition upaco1(gf : rel1 T0 -> rel1 T0)(r: rel1 T0) := paco1 gf r \1/ r.
Arguments paco1 : clear implicits.
Arguments upaco1 : clear implicits.
Hint Unfold upaco1 : core.
Definition monotone1 (gf: rel1 T0 -> rel1 T0) :=
forall x0 r r' (IN: gf r x0) (LE: r <1= r'), gf r' x0.
Definition _monotone1 (gf: rel1 T0 -> rel1 T0) :=
forall r r'(LE: r <1= r'), gf r <1== gf r'.

Lemma monotone1_union (gf gf': rel1 T0 -> rel1 T0)
(MON1: monotone1 gf)
(MON2: monotone1 gf'):
monotone1 (gf \2/ gf').