(** * Correctness of the up-to techniques corresponding to the notions of (weak) monotonic functions, or controlled simulations *)
Require Export WeakMonotonic.
Set Implicit Arguments.
Section Global.
Variables A X Y: Type.
Variable TX: reduction_t A X.
Variable TY: reduction_t A Y.
(** ** Correctness with a monotonic function *)
Section MonotonicCorrect.
Variable F: function X Y.
Hypothesis HF: monotonic TX TY F.
Variable R: relation2 X Y.
Hypothesis HR: evolve TX TY R (F R).
(** predicate for the induction *)
Let phi: forall n, evolve TX TY (UExp F R n) (UExp F R (S n)).

(** Proposition 1.6 *)
Theorem monotonic_correct: simulation TX TY (UIter F R).
End MonotonicCorrect.