Section Iter_nat.
Context {T : Type}.
Context (op : T -> T -> T).
Context (x0 : T).
Context (neutral_l : forall x, op x0 x = x).
Context (neutral_r : forall x, op x x0 = x).
Context (assoc : forall x y z, op x (op y z) = op (op x y) z).
Definition iter_nat (a : nat -> T) n m :=
iter op x0 (iota n (S m - n)) a.

Lemma iter_nat_S a n m :
iter_nat (fun n => a (S n)) n m = iter_nat a (S n) (S m).