(** we now generalize the theorem to the nth-root *)
Fixpoint power (x n:nat) {struct n} : nat :=
  match n with
    O => 1
    | (S n) => (x*(power x n))
  end.

(* Specifications: *)
Lemma power_mult_lemma1 : forall (n x y:nat),(power (x*y) n)=(power x n)*(power y n).
Lemma power_plus_lemma1 : forall (n m x:nat),(power x (n+m))=(power x n)*(power x m).
Lemma power_divides_lemma1 : forall (n x:nat),(0<n)->(divides (power x n) x).
Lemma power_power_lemma1 : forall (n m x:nat),(power (power x n) m)=(power x (n*m)).
Lemma power_zero : forall (n x:nat),(power x n)=O->x=O.
Lemma power_lt : forall (p m:nat),(1<p)->(0<m)->1<(power p m).
Lemma power_one : forall (n:nat),(power 1 n)=1.
Lemma power_divides_power : forall (x n m:nat),(x>1)->(divides (power x n) (power x m))->(m<=n).