Typeclasses for groups with an adjoined zero element #
This file provides just the typeclass definitions, and the projection lemmas that expose their members.
Main definitions #
Typeclass for expressing that a type M₀ with multiplication and a zero satisfies
0 * a = 0 and a * 0 = 0 for all a : M₀.
- mul : M₀ → M₀ → M₀
- zero : M₀
Zero is a left absorbing element for multiplication
Zero is a right absorbing element for multiplication
Instances
A mixin for cancellative multiplication by nonzero elements.
Instances
Predicate typeclass for expressing that a * b = 0 implies a = 0 or b = 0
for all a and b of type G₀.
For all
aandbofG₀,a * b = 0impliesa = 0orb = 0.
Instances
A type S₀ is a "semigroup with zero” if it is a semigroup with zero element, and 0 is left
and right absorbing.
- mul : S₀ → S₀ → S₀
- zero : S₀
Zero is a left absorbing element for multiplication
Zero is a right absorbing element for multiplication
Instances
A typeclass for non-associative monoids with zero elements.
- one : M₀
- mul : M₀ → M₀ → M₀
- zero : M₀
Zero is a left absorbing element for multiplication
Zero is a right absorbing element for multiplication
Instances
A type M₀ is a “monoid with zero” if it is a monoid with zero element, and 0 is left
and right absorbing.
- mul : M₀ → M₀ → M₀
- one : M₀
- npow : ℕ → M₀ → M₀
- npow_zero : ∀ (x : M₀), Monoid.npow 0 x = 1
- npow_succ : ∀ (n : ℕ) (x : M₀), Monoid.npow (n + 1) x = x * Monoid.npow n x
- zero : M₀
Zero is a left absorbing element for multiplication
Zero is a right absorbing element for multiplication
Instances
A type M is a CancelMonoidWithZero if it is a monoid with zero element, 0 is left
and right absorbing, and left/right multiplication by a non-zero element is injective.
Instances
A type M is a commutative “monoid with zero” if it is a commutative monoid with zero
element, and 0 is left and right absorbing.
- mul : M₀ → M₀ → M₀
- one : M₀
- npow : ℕ → M₀ → M₀
- npow_zero : ∀ (x : M₀), Monoid.npow 0 x = 1
- npow_succ : ∀ (n : ℕ) (x : M₀), Monoid.npow (n + 1) x = x * Monoid.npow n x
- zero : M₀
Zero is a left absorbing element for multiplication
Zero is a right absorbing element for multiplication
Instances
A type M is a CancelCommMonoidWithZero if it is a commutative monoid with zero element,
0 is left and right absorbing,
and left/right multiplication by a non-zero element is injective.
Instances
Equations
- CancelCommMonoidWithZero.toCancelMonoidWithZero = let src := (_ : IsCancelMulZero M₀); CancelMonoidWithZero.mk
A type G₀ is a “group with zero” if it is a monoid with zero element (distinct from 1)
such that every nonzero element is invertible.
The type is required to come with an “inverse” function, and the inverse of 0 must be 0.
Examples include division rings and the ordered monoids that are the target of valuations in general valuation theory.
- mul : G₀ → G₀ → G₀
- one : G₀
- npow : ℕ → G₀ → G₀
- npow_zero : ∀ (x : G₀), Monoid.npow 0 x = 1
- npow_succ : ∀ (n : ℕ) (x : G₀), Monoid.npow (n + 1) x = x * Monoid.npow n x
- zero : G₀
- inv : G₀ → G₀
- div : G₀ → G₀ → G₀
a / b := a * b⁻¹- zpow : ℤ → G₀ → G₀
The power operation:
a ^ n = a * ··· * a;a ^ (-n) = a⁻¹ * ··· a⁻¹(ntimes) - zpow_zero' : ∀ (a : G₀), GroupWithZero.zpow 0 a = 1
a ^ 0 = 1 - zpow_succ' : ∀ (n : ℕ) (a : G₀), GroupWithZero.zpow (Int.ofNat (Nat.succ n)) a = a * GroupWithZero.zpow (Int.ofNat n) a
a ^ (n + 1) = a * a ^ n - zpow_neg' : ∀ (n : ℕ) (a : G₀), GroupWithZero.zpow (Int.negSucc n) a = (GroupWithZero.zpow (↑(Nat.succ n)) a)⁻¹
a ^ -(n + 1) = (a ^ (n + 1))⁻¹ - exists_pair_ne : ∃ (x : G₀), ∃ (y : G₀), x ≠ y
The inverse of
0in a group with zero is0.Every nonzero element of a group with zero is invertible.
Instances
A type G₀ is a commutative “group with zero”
if it is a commutative monoid with zero element (distinct from 1)
such that every nonzero element is invertible.
The type is required to come with an “inverse” function, and the inverse of 0 must be 0.
- mul : G₀ → G₀ → G₀
- one : G₀
- npow : ℕ → G₀ → G₀
- npow_zero : ∀ (x : G₀), Monoid.npow 0 x = 1
- npow_succ : ∀ (n : ℕ) (x : G₀), Monoid.npow (n + 1) x = x * Monoid.npow n x
- zero : G₀
- inv : G₀ → G₀
- div : G₀ → G₀ → G₀
a / b := a * b⁻¹- zpow : ℤ → G₀ → G₀
The power operation:
a ^ n = a * ··· * a;a ^ (-n) = a⁻¹ * ··· a⁻¹(ntimes) - zpow_zero' : ∀ (a : G₀), CommGroupWithZero.zpow 0 a = 1
a ^ 0 = 1 - zpow_succ' : ∀ (n : ℕ) (a : G₀), CommGroupWithZero.zpow (Int.ofNat (Nat.succ n)) a = a * CommGroupWithZero.zpow (Int.ofNat n) a
a ^ (n + 1) = a * a ^ n - zpow_neg' : ∀ (n : ℕ) (a : G₀), CommGroupWithZero.zpow (Int.negSucc n) a = (CommGroupWithZero.zpow (↑(Nat.succ n)) a)⁻¹
a ^ -(n + 1) = (a ^ (n + 1))⁻¹ - exists_pair_ne : ∃ (x : G₀), ∃ (y : G₀), x ≠ y
The inverse of
0in a group with zero is0.Every nonzero element of a group with zero is invertible.
Instances
If α has no zero divisors, then the product of two elements equals zero iff one of them
equals zero.
If α has no zero divisors, then the product of two elements equals zero iff one of them
equals zero.
If α has no zero divisors, then the product of two elements is nonzero iff both of them
are nonzero.
If α has no zero divisors, then for elements a, b : α, a * b equals zero iff so is
b * a.
If α has no zero divisors, then for elements a, b : α, a * b is nonzero iff so is
b * a.