(* 2 at the n *)
(**************)

Fixpoint two_power (m : nat) : nat :=
  match m with
  | O => 1
  | S n => two * two_power n
  end.

(* Specifications: *)
Lemma zero_lt_pow : forall a : nat, 0 < two_power a.
Lemma two_power_S : forall n : nat, two_power (S n) = two_power n * two.
Lemma two_power_S_lt : forall n : nat, two_power n < two_power (S n).
Lemma two_power_mono : forall n p : nat, n < p -> two_power n < two_power p.
Lemma two_power_le : forall n p : nat, n <= p -> two_power n <= two_power p.
Lemma two_power_monoR : forall n p : nat, two_power n < two_power p -> n < p.
Lemma holes_in_powers : forall n z : nat, two_power n < z -> z < two_power (S n) -> forall p : nat, z <> two_power p.
Lemma log2_unicity : forall n p z : nat, two_power n < z -> z < two_power (S n) -> two_power p < z -> z < two_power (S p) -> n = p.