(** Usual operations are morphisms with respect to [Pos.of_nat] for non-zero numbers. *)

(* Specifications: *)
Lemma inj_0 : Pos.of_nat 0 = 1%positive.
Lemma inj_pred (n:nat) : Pos.of_nat (pred n) = Pos.pred (Pos.of_nat n).
Lemma inj_add (n m : nat) : n<>0 -> m<>0 ->
Pos.of_nat (n+m) = (Pos.of_nat n + Pos.of_nat m)%positive.
Lemma inj_mul (n m : nat) : n<>0 -> m<>0 ->
Pos.of_nat (n*m) = (Pos.of_nat n * Pos.of_nat m)%positive.
Lemma inj_compare (n m : nat) : n<>0 -> m<>0 ->
(n ?= m) = (Pos.of_nat n ?= Pos.of_nat m)%positive.
Lemma inj_sub (n m : nat) : m<>0 ->
Pos.of_nat (n-m) = (Pos.of_nat n - Pos.of_nat m)%positive.
Lemma inj_min (n m : nat) :
Pos.of_nat (min n m) = Pos.min (Pos.of_nat n) (Pos.of_nat m).
Lemma inj_max (n m : nat) :
Pos.of_nat (max n m) = Pos.max (Pos.of_nat n) (Pos.of_nat m).
Theorem inj_pow (n m : nat) : m <> 0 ->
Pos.of_nat (n^m) = (Pos.of_nat n ^ Pos.of_nat m)%positive.