(* sqrd *)

Definition sqrd n := n * n.

(* Specifications: *)
Lemma sqrd_S n: sqrd (S n) = sqrd n + n + n + 1.
Lemma sqrd_plus x y: sqrd x + sqrd y <= sqrd (x + y).
Lemma sqrd_le x y: x <= y -> sqrd x <= sqrd y.
Lemma div2_preserves_le x y: x <= y -> div2 x <= div2 y.
Lemma Sdiv2_eq_div2SS x: S (div2 x) = div2 (S (S x)).
Lemma div2S_le_Sdiv2 x: div2 (S x) <= S (div2 x).
Lemma div2_x_plus_Sx b: div2 (b + S b) = b.
Lemma div2_x_plus_2y a b: div2 (a + 2 * b) = div2 a + b.
Lemma div2_sqrdSn n: div2 (sqrd n) + n <= div2 (sqrd (S n)).
Lemma le_div2 n: div2 n <= n.
Lemma div2_lt_inv0 x y: div2 x < div2 y -> x < y.
Lemma div2_lt_inv x y: div2 x < div2 y -> x <= y.
Lemma div2_le_div2_inv x y: div2 x <= div2 y -> x <= S y.
Lemma div2_cancel n: div2 (2 * n) = n.
Lemma div2_le_inv x n: div2 x <= n -> x <= S (2 * n).