Module Type NZBasicFunsSig := NZDomainSig <+ AddSubMul <+ IsAddSubMul.
Module Type NZBasicFunsSig' := NZDomainSig' <+ AddSubMul' <+IsAddSubMul.
(** Old name for the same interface: *)
Module Type NZAxiomsSig := NZBasicFunsSig.
Module Type NZAxiomsSig' := NZBasicFunsSig'.
(** ** Axiomatization of order *)
(** The module type [HasLt] (resp. [HasLe]) is just a type equipped with a relation [lt] (resp. [le]) in [Prop]. *)
Module Type NZOrd := NZDomainSig <+ HasLt <+ HasLe.
Module Type NZOrd' := NZDomainSig' <+ HasLt <+ HasLe <+
LtNotation <+ LeNotation <+ LtLeNotation.
Module Type IsNZOrd (Import NZ : NZOrd').
#[global]
Declare Instance lt_wd : Proper (eq ==> eq ==> iff) lt.

Axiom lt_eq_cases : forall n m, n <= m <-> n < m \/ n == m.