Infix "+" := Z.add : Z_scope.Notation "- x" := (Z.opp x) : Z_scope.Infix "-" := Z.sub : Z_scope.Infix "*" := Z.mul : Z_scope.Infix "^" := Z.pow : Z_scope.Infix "/" := Z.div : Z_scope.Infix "mod" := Z.modulo (at level 40, no associativity) : Z_scope.Infix "÷" := Z.quot (at level 40, left associativity) : Z_scope.Infix "?=" := Z.compare (at level 70, no associativity) : Z_scope.Infix "=?" := Z.eqb (at level 70, no associativity) : Z_scope.Infix "<=?" := Z.leb (at level 70, no associativity) : Z_scope.Infix "<?" := Z.ltb (at level 70, no associativity) : Z_scope.Infix ">=?" := Z.geb (at level 70, no associativity) : Z_scope.Infix ">?" := Z.gtb (at level 70, no associativity) : Z_scope.Notation "( x | y )" := (Z.divide x y) (at level 0) : Z_scope.Infix "<=" := Z.le : Z_scope.Infix "<" := Z.lt : Z_scope.Infix ">=" := Z.ge : Z_scope.Infix ">" := Z.gt : Z_scope.

Lemma inj_mul p q : Z.pos (p*q) = Z.pos p * Z.pos q.