--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+include "o-algebra.ma".
+
+definition hint1: OA → Type ≝ λc:OA.carr (oa_P c).
+coercion hint1.
+
+definition hint2: ∀C.hint1 C → carr1 ((λx.x) (setoid1_of_setoid (oa_P C))).
+intros; assumption;
+qed.
+coercion hint2.
+
+alias symbol "eq" = "setoid1 eq".
+definition is_saturation ≝
+ λC:OA.λA:C → C.
+ ∀U,V. (U ≤ A V) = (A U ≤ A V).
+
+definition is_reduction ≝
+ λC:OA.λJ:C → C.
+ ∀U,V. (J U ≤ V) = (J U ≤ J V).
+
+theorem saturation_expansive: ∀C,A. is_saturation C A → ∀U. U ≤ A U.
+ intros; apply (fi ?? (H ??)); apply (oa_leq_refl C).
+qed.
+
+theorem saturation_monotone:
+ ∀C,A. is_saturation C A →
+ ∀U,V:C. U ≤ V → A U ≤ A V.
+ intros; apply (if ?? (H ??)); apply (oa_leq_trans C);
+ [apply V|3: apply saturation_expansive ]
+ assumption.
+qed.
+
+theorem saturation_idempotent: ∀C,A. is_saturation C A → ∀U.
+ eq (oa_P C) (A (A U)) (A U).
+ intros; apply (oa_leq_antisym C);
+ [ apply (if ?? (H (A U) U)); apply (oa_leq_refl C).
+ | apply saturation_expansive; assumption]
+qed.