Module Type DivideNotation (A:NZOrdAxiomsSig')(B:Gcd A)(C:NZGcdSpec A B).
Notation "( n | m )" := (divide n m) (at level 0).
End DivideNotation.
Module Type NZGcd (A : NZOrdAxiomsSig) := Gcd A <+ NZGcdSpec A.
Module Type NZGcd' (A : NZOrdAxiomsSig) :=
Gcd A <+ NZGcdSpec A <+ DivideNotation A.
(** Derived properties of gcd *)
Module NZGcdProp
(Import A : NZOrdAxiomsSig')
(Import B : NZGcd' A)
(Import C : NZMulOrderProp A).
(** Results concerning divisibility*)
#[global]
Instance divide_wd : Proper (eq==>eq==>iff) divide.

(* Specifications: *)
Lemma divide_1_l : forall n, (1 | n).
Lemma divide_0_r : forall n, (n | 0).
Lemma divide_0_l : forall n, (0 | n) -> n==0.
Lemma eq_mul_1_nonneg : forall n m,
0<=n -> n*m == 1 -> n==1 /\ m==1.
Lemma eq_mul_1_nonneg' : forall n m,
0<=m -> n*m == 1 -> n==1 /\ m==1.
Lemma divide_1_r_nonneg : forall n, 0<=n -> (n | 1) -> n==1.
Lemma divide_refl : forall n, (n | n).
Lemma divide_trans : forall n m p, (n | m) -> (m | p) -> (n | p).
#[global]
Instance divide_reflexive : Reflexive divide | 5 := divide_refl.