simpl; auto.
Qed.
Fixpoint iter {A: Type} (f: A -> A) (n: nat) (x: A) :=
match n with
| O => x
| S n1 => f (iter f n1 x)
end.
(* A bit of ssreflect *)
Coercion b2Prop (x : bool) := x = true.

(* Specifications: *)
Lemma b2PropT: b2Prop true.
(* Some facts about div2 *)
Lemma div2_double_p n m : div2 (2 * n + m) = n + div2 m.
Lemma div2_prop n: n + div2 (n * (n - 1)) = div2 (n.+1 * n).
Lemma minus_minus_le m n: n <= m -> m - (m - n) = n.
Lemma minus0_le m n: m <= n -> m - n = 0.
Fixpoint eq_nat (m n: nat) :=
match m, n with (S m), (S n) => eq_nat m n | 0, 0 => true | _, _ => false end.