Definition comMixin := ComRingMixin mulzA mulzC mul1z mulz_addl nonzero1z.Canonical int_Ring := Eval hnf in RingType int intRing.comMixin.Canonical int_comRing := Eval hnf in ComRingType int intRing.mulzC.Implicit Types m n p : int.Implicit Types m n : int.Definition invz n : int := n.Definition comMixin := ComUnitRingMixin mulVz unitzPl invz_out.Canonical int_unitRingType :=
  Eval hnf in UnitRingType int intUnitRing.comMixin.Canonical int_iDomain :=
  Eval hnf in IdomainType int intUnitRing.idomain_axiomz.Notation "m - n" :=
  (@GRing.add int_ZmodType m%N (@GRing.opp int_ZmodType n%N)) : distn_scope.Local Notation "`| m |" := (absz m) : nat_scope.Implicit Types m n p : int.Definition lez m n :=
  match m, n with
    | Posz m', Posz n' => (m' <= n')%N
    | Posz m', Negz n' => false
    | Negz m', Posz n' => true
    | Negz m', Negz n' => (n' <= m')%N
  end.Definition ltz m n :=
  match m, n with
    | Posz m', Posz n' => (m' < n')%N
    | Posz m', Negz n' => false
    | Negz m', Posz n' => true
    | Negz m', Negz n' => (n' < m')%N
  end.Fact lez_norm_add x y : lez (normz (x + y)) (normz x + normz y).Fact ltz_add x y : ltz 0 x -> ltz 0 y -> ltz 0 (x + y).Fact eq0_normz x : normz x = 0 -> x = 0.Fact lez_total x y : lez x y || lez y x.

(* Specifications: *)
Lemma subz_ge0 m n : lez 0 (n - m) = lez m n.