(***********************************************************************
  **********************************************************************
  **********************************************************************
  	FACTORIAL*)
 
Fixpoint factorial (n : nat) : nat :=
  match n with
  | O => 1
  | S n' => n * factorial n'
  end.(***********************************************************************
  **********************************************************************
  **********************************************************************
  	POWER*)
 
Fixpoint power (x n : nat) {struct n} : nat :=
  match n with
  | O => 1
  | S n' => x * power x n'
  end.

(* Specifications: *)
Lemma power_SO : forall x : nat, power 1 x = 1.
Lemma power_lt_O : forall x n : nat, 0 < x -> 0 < power x n.
Lemma power_le : forall x n : nat, 0 < n -> x <= power x n.
Lemma power_mult : forall x a b : nat, power x a * power x b = power x (a + b).
Lemma power_power : forall x a b : nat, power (power x a) b = power x (a * b).
Lemma SO_power : forall x : nat, power 1 x = 1.
Lemma power_O : forall n : nat, 1 <= n -> power 0 n = 0.