Section POSITIVE_ITERATION.
Variable A: Type.
Variable v1: A.
Variable f: positive -> A -> A.
Let iter (x: positive) (P: forall y, Plt y x -> A) : A :=
match peq x xH with
| left EQ => v1
| right NOTEQ => f (Pos.pred x) (P (Pos.pred x) (Ppred_Plt x NOTEQ))
end.
Definition positive_rec : positive -> A :=
Fix Plt_wf (fun _ => A) iter.
End POSITIVE_ITERATION.
(** * Definitions and theorems over the type [Z] *)
Definition zeq: forall (x y: Z), {x = y} + {x <> y} := Z.eq_dec.
Open Scope Z_scope.
Definition zlt: forall (x y: Z), {x < y} + {x >= y} := Z_lt_dec.
Definition zle: forall (x y: Z), {x <= y} + {x > y} := Z_le_gt_dec.
(** Properties of powers of two. *)
(** Properties of [Zmin] and [Zmax] *)

Lemma Zmax_spec:
forall x y, Z.max x y = if zlt y x then x else y.