Fixpoint iter (n : nat) : (A -> A) -> A -> A :=
  fun (fl : A -> A) (def : A) =>
  match n with
  | O => def
  | S m => fl (iter m fl def)
  end.

(* Specifications: *)
Theorem le_lt_SS x y : x <= y -> x < S (S y).
Theorem Splus_lt x y : y < S (x + y).
Theorem SSplus_lt x y : x < S (S (x + y)).