Definition int_ind := int_rect.
Variant int_spec (x : int) : int -> Type :=
| ZintNull : int_spec x 0
| ZintPos n : int_spec x n.+1
| ZintNeg n : int_spec x (- (n.+1)%:Z).

(* Specifications: *)
Lemma intP x : int_spec x x.
Lemma subzSS (m n : nat) : m.+1%:Z - n.+1%:Z = m%:Z - n%:Z.
Lemma mulNz (m n : int) : ((- m) * n)%Z = - (m * n)%Z.
Lemma mul1z : left_id 1%Z mulz.
Lemma mulz_addl : left_distributive mulz (+%R).
Lemma nonzero1z : 1%Z != 0. Proof. by []. Qed.
Definition comMixin := ComRingMixin mulzA mulzC mul1z mulz_addl nonzero1z.