Fixpoint iter (l : list I) (f : I -> T) :=
  match l with
  | nil => x0
  | cons h l' => op (f h) (iter l' f)
  end.Definition iter' (l : list I) (f : I -> T) :=
  fold_right (fun i acc => op (f i) acc) x0 l.

(* Specifications: *)
Lemma iter_iter' l f : iter l f = iter' l f.
Lemma iter_cat l1 l2 f : iter (l1 ++ l2) f = op (iter l1 f) (iter l2 f).
Lemma iter_ext l f1 f2 : (forall x, In x l -> f1 x = f2 x) -> iter l f1 = iter l f2.
Lemma iter_comp (l : list I) f (g : I -> I) : iter l (fun x => f (g x)) = iter (map g l) f.
Lemma iter_const {I} (l : list I) (a : R) : iter Rplus 0 l (fun _ => a) = INR (length l) * a.
Lemma In_mem {T : eqType} (x : T) l : reflect (In x l) (in_mem x (mem l)).
Lemma In_iota (n m k : nat) : (n <= m <= k)%nat <-> In m (iota n (S k - n)).