(** The above [pow_neg_r] specification is useless (and trivially provable) for N. Having it here already allows deriving some slightly more general statements. *)
Module Type NZPow (A : NZOrdAxiomsSig) := Pow A <+ NZPowSpec A.
Module Type NZPow' (A : NZOrdAxiomsSig) := Pow' A <+ NZPowSpec A.
(** Derived properties of power *)
Module Type NZPowProp
(Import A : NZOrdAxiomsSig')
(Import B : NZPow' A)
(Import C : NZMulOrderProp A).
Global Hint Rewrite pow_0_r pow_succ_r : nz.
(** Power and basic constants *)

(* Specifications: *)
Lemma pow_0_l : forall a, 0<a -> 0^a == 0.
Lemma pow_0_l' : forall a, a~=0 -> 0^a == 0.
Lemma pow_1_r : forall a, a^1 == a.
Lemma pow_1_l : forall a, 0<=a -> 1^a == 1.
Global Hint Rewrite pow_1_r pow_1_l : nz.
Lemma pow_2_r : forall a, a^2 == a*a.
Global Hint Rewrite pow_2_r : nz.