# Library Coq.Numbers.NatInt.NZBase

Require Import NZAxioms.
Module Type NZBaseProp (Import NZ : NZDomainSig').
An artificial scope meant to be substituted later
Delimit Scope abstract_scope with abstract.
Include BackportEq NZ NZ.
eq_refl, eq_sym, eq_trans
Lemma eq_sym_iff : forall x y, x==y <-> y==x.
Theorem neq_sym : forall n m, n ~= m -> m ~= n.
Theorem eq_stepl : forall x y z, x == y -> x == z -> z == y.
Declare Left Step eq_stepl.
Declare Right Step (@Equivalence_Transitive _ _ eq_equiv).
Theorem succ_inj : forall n1 n2, S n1 == S n2 -> n1 == n2.
Theorem succ_inj_wd : forall n1 n2, S n1 == S n2 <-> n1 == n2.
Theorem succ_inj_wd_neg : forall n m, S n ~= S m <-> n ~= m.
Section CentralInduction.
Variable A : t -> Prop.
Hypothesis A_wd : Proper (eq==>iff) A.
Theorem central_induction :
forall z, A z ->
(forall n, A n <-> A (S n)) ->
forall n, A n.
End CentralInduction.
Tactic Notation "nzinduct" ident(n) :=
induction_maker n ltac:(apply bi_induction).
Tactic Notation "nzinduct" ident(n) constr(u) :=
induction_maker n ltac:(apply central_induction with (z := u)).
End NZBaseProp.