Definition If (T : Set) (b : bool) (t e : T) :=
   (* If T b t e  =  if b then t else e *)
  match b with
  | true => t
  | false => e
  end.

(* Specifications: *)
Lemma Z_to_inject_nat : forall x : Z, 0 <= x -> Z_of_nat (Zabs_nat x) = x.
Lemma Zlt_0_power_nat : forall i : nat, 0 < Zpower_nat 2 i.
Lemma Zpower_nat_Zpower : forall i : nat, Zpower_nat 2 i = 2 ^ Z_of_nat i.
Lemma Zpower_Zpower_nat : forall i : Z, 0 <= i -> 2 ^ i = Zpower_nat 2 (Zabs_nat i).
Lemma lt_0_Zpow : forall x : Z, 0 <= x -> 0 < 2 ^ x.
Lemma Zlt_pow_lt : forall i j : Z, 0 <= i -> i < j -> 2 ^ i < 2 ^ j.
Lemma Zle_pow_le : forall i j : Z, 0 <= i -> i <= j -> 2 ^ i <= 2 ^ j.
Lemma lt_pow_lt : forall i j : Z, 0 <= i -> 0 <= j -> 2 ^ i < 2 ^ j -> i < j.