A module over the natural numbers, i.e. a type with zero, addition, and scalar multiplication by natural numbers, satisfying appropriate compatibilities.
Equivalently, an additive commutative monoid.
Use IntModule if the type has negation.
- zero : M
- add : M → M → M
- Scalar multiplication by natural numbers. 
- Scalar multiplication by zero is zero. 
- Scalar multiplication by a successor. 
Instances
A module over the integers, i.e. a type with zero, addition, negation, subtraction, and scalar multiplication by integers, satisfying appropriate compatibilities.
Equivalently, an additive commutative group.
- zero : M
- add : M → M → M
- neg : M → M
- sub : M → M → M
- Scalar multiplication by natural numbers. 
- Scalar multiplication by integers. 
- Scalar multiplication by zero is zero. 
- Scalar multiplication by one is the identity. 
- Scalar multiplication is distributive over addition in the integers. 
- Scalar multiplication by natural numbers is consistent with scalar multiplication by integers. 
Instances
Equations
- Lean.Grind.IntModule.toNatModule = { toAddCommMonoid := I.toAddCommMonoid, nsmul := Lean.Grind.IntModule.nsmul, zero_nsmul := ⋯, add_one_nsmul := ⋯ }
We say a module has no natural number zero divisors if
k ≠ 0 and k * a = k * b implies a = b (here k is a natural number and a and b are element of the module).
For a module over the integers this is equivalent to
k ≠ 0 and k * a = 0 implies a = 0.
(See the alternative constructor NoNatZeroDivisors.mk',
and the theorem eq_zero_of_mul_eq_zero.)
- If - k * a ≠ k * bthen- k ≠ 0or- a ≠ b.