(** Left and right shifts *)

Definition Zscale n k :=
  if Zle_bool 0 k then (n * Zpower beta k)%Z else Z.quot n (Zpower beta (-k)).

(* Specifications: *)
Theorem Zdigit_scale : forall n k k', (0 <= k')%Z -> Zdigit (Zscale n k) k' = Zdigit n (k' - k).
Theorem Zscale_0 : forall k, Zscale 0 k = Z0.
Theorem Zsame_sign_scale : forall n k, (0 <= n * Zscale n k)%Z.
Theorem Zscale_mul_pow : forall n k k', (0 <= k)%Z -> Zscale (n * Zpower beta k) k' = Zscale n (k + k').
Theorem Zscale_scale : forall n k k', (0 <= k)%Z -> Zscale (Zscale n k) k' = Zscale n (k + k').
Theorem Zdigit_scale : forall n k k', (0 <= k')%Z -> Zdigit (Zscale n k) k' = Zdigit n (k' - k).
Theorem Zscale_0 : forall k, Zscale 0 k = Z0.
Theorem Zsame_sign_scale : forall n k, (0 <= n * Zscale n k)%Z.
Theorem Zscale_mul_pow : forall n k k', (0 <= k)%Z -> Zscale (n * Zpower beta k) k' = Zscale n (k + k').
Theorem Zscale_scale : forall n k k', (0 <= k)%Z -> Zscale (Zscale n k) k' = Zscale n (k + k').