Typeclasses for groups with an adjoined zero element #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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₀.
Instances of this typeclass
- semigroup_with_zero.to_mul_zero_class
- mul_zero_one_class.to_mul_zero_class
- non_unital_non_assoc_semiring.to_mul_zero_class
- pi.mul_zero_class
- order_dual.mul_zero_class
- lex.mul_zero_class
- prod.mul_zero_class
- with_zero.mul_zero_class
- mul_opposite.mul_zero_class
- add_opposite.mul_zero_class
- ulift.mul_zero_class
- with_top.mul_zero_class
- with_bot.mul_zero_class
Instances of other typeclasses for mul_zero_class
- mul_zero_class.has_sizeof_inst
A mixin for left cancellative multiplication by nonzero elements.
Instances of this typeclass
A mixin for right cancellative multiplication by nonzero elements.
Instances of this typeclass
Predicate typeclass for expressing that a * b = 0 implies a = 0 or b = 0
for all a and b of type G₀.
Instances of this typeclass
- cancel_monoid_with_zero.to_no_zero_divisors
- group_with_zero.no_zero_divisors
- euclidean_domain.no_zero_divisors
- is_domain.to_no_zero_divisors
- linear_ordered_ring.no_zero_divisors
- canonically_ordered_comm_semiring.to_no_zero_divisors
- order_dual.no_zero_divisors
- lex.no_zero_divisors
- with_zero.no_zero_divisors
- mul_opposite.no_zero_divisors
- add_opposite.no_zero_divisors
- set.no_zero_divisors
- associates.no_zero_divisors
- with_top.no_zero_divisors
- with_bot.no_zero_divisors
- subsemiring_class.no_zero_divisors
- subsemiring.no_zero_divisors
- subring.no_zero_divisors
- finset.no_zero_divisors
- set_semiring.no_zero_divisors
- ideal.no_zero_divisors
- subalgebra.no_zero_divisors
- ideal.quotient.no_zero_divisors
- ordinal.no_zero_divisors
- polynomial.no_zero_divisors
- mv_polynomial.no_zero_divisors
- mul : S₀ → S₀ → S₀
- mul_assoc : ∀ (a b c : S₀), a * b * c = a * (b * c)
- zero : S₀
- zero_mul : ∀ (a : S₀), 0 * a = 0
- mul_zero : ∀ (a : S₀), a * 0 = 0
A type S₀ is a "semigroup with zero” if it is a semigroup with zero element, and 0 is left
and right absorbing.
Instances of this typeclass
- monoid_with_zero.to_semigroup_with_zero
- non_unital_semiring.to_semigroup_with_zero
- pi.semigroup_with_zero
- order_dual.semigroup_with_zero
- lex.semigroup_with_zero
- prod.semigroup_with_zero
- with_zero.semigroup_with_zero
- mul_opposite.semigroup_with_zero
- add_opposite.semigroup_with_zero
- with_top.semigroup_with_zero
- with_bot.semigroup_with_zero
Instances of other typeclasses for semigroup_with_zero
- semigroup_with_zero.has_sizeof_inst
- one : M₀
- mul : M₀ → M₀ → M₀
- one_mul : ∀ (a : M₀), 1 * a = a
- mul_one : ∀ (a : M₀), a * 1 = a
- zero : M₀
- zero_mul : ∀ (a : M₀), 0 * a = 0
- mul_zero : ∀ (a : M₀), a * 0 = 0
A typeclass for non-associative monoids with zero elements.
Instances of this typeclass
- monoid_with_zero.to_mul_zero_one_class
- non_assoc_semiring.to_mul_zero_one_class
- pi.mul_zero_one_class
- order_dual.mul_zero_one_class
- lex.mul_zero_one_class
- prod.mul_zero_one_class
- with_zero.mul_zero_one_class
- mul_opposite.mul_zero_one_class
- add_opposite.mul_zero_one_class
- ulift.mul_zero_one_class
- with_top.mul_zero_one_class
- with_bot.mul_zero_one_class
Instances of other typeclasses for mul_zero_one_class
- mul_zero_one_class.has_sizeof_inst
- mul : M₀ → M₀ → M₀
- mul_assoc : ∀ (a b c : M₀), a * b * c = a * (b * c)
- one : M₀
- one_mul : ∀ (a : M₀), 1 * a = a
- mul_one : ∀ (a : M₀), a * 1 = a
- npow : ℕ → M₀ → M₀
- npow_zero' : (∀ (x : M₀), monoid_with_zero.npow 0 x = 1) . "try_refl_tac"
- npow_succ' : (∀ (n : ℕ) (x : M₀), monoid_with_zero.npow n.succ x = x * monoid_with_zero.npow n x) . "try_refl_tac"
- zero : M₀
- zero_mul : ∀ (a : M₀), 0 * a = 0
- mul_zero : ∀ (a : M₀), a * 0 = 0
A type M₀ is a “monoid with zero” if it is a monoid with zero element, and 0 is left
and right absorbing.
Instances of this typeclass
- cancel_monoid_with_zero.to_monoid_with_zero
- comm_monoid_with_zero.to_monoid_with_zero
- group_with_zero.to_monoid_with_zero
- semiring.to_monoid_with_zero
- non_unital_ring_hom.monoid_with_zero
- pi.monoid_with_zero
- order_dual.monoid_with_zero
- lex.monoid_with_zero
- prod.monoid_with_zero
- with_zero.monoid_with_zero
- mul_opposite.monoid_with_zero
- add_opposite.monoid_with_zero
- ulift.monoid_with_zero
- with_top.monoid_with_zero
- with_bot.monoid_with_zero
- non_unital_star_alg_hom.monoid_with_zero
- ordinal.monoid_with_zero
- nonneg.monoid_with_zero
- real.monoid_with_zero
- continuous_linear_map.monoid_with_zero
- set.Icc.monoid_with_zero
Instances of other typeclasses for monoid_with_zero
- monoid_with_zero.has_sizeof_inst
Equations
- monoid_with_zero.to_semigroup_with_zero M₀ = {mul := monoid_with_zero.mul _inst_1, mul_assoc := _, zero := monoid_with_zero.zero _inst_1, zero_mul := _, mul_zero := _}
- mul : M₀ → M₀ → M₀
- mul_assoc : ∀ (a b c : M₀), a * b * c = a * (b * c)
- one : M₀
- one_mul : ∀ (a : M₀), 1 * a = a
- mul_one : ∀ (a : M₀), a * 1 = a
- npow : ℕ → M₀ → M₀
- npow_zero' : (∀ (x : M₀), cancel_monoid_with_zero.npow 0 x = 1) . "try_refl_tac"
- npow_succ' : (∀ (n : ℕ) (x : M₀), cancel_monoid_with_zero.npow n.succ x = x * cancel_monoid_with_zero.npow n x) . "try_refl_tac"
- zero : M₀
- zero_mul : ∀ (a : M₀), 0 * a = 0
- mul_zero : ∀ (a : M₀), a * 0 = 0
- mul_left_cancel_of_ne_zero : ∀ {a b c : M₀}, a ≠ 0 → a * b = a * c → b = c
- mul_right_cancel_of_ne_zero : ∀ {a b c : M₀}, b ≠ 0 → a * b = c * b → a = c
A type M is a cancel_monoid_with_zero 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 of this typeclass
Instances of other typeclasses for cancel_monoid_with_zero
- cancel_monoid_with_zero.has_sizeof_inst
A cancel_monoid_with_zero satisfies is_cancel_mul_zero.
- mul : M₀ → M₀ → M₀
- mul_assoc : ∀ (a b c : M₀), a * b * c = a * (b * c)
- one : M₀
- one_mul : ∀ (a : M₀), 1 * a = a
- mul_one : ∀ (a : M₀), a * 1 = a
- npow : ℕ → M₀ → M₀
- npow_zero' : (∀ (x : M₀), comm_monoid_with_zero.npow 0 x = 1) . "try_refl_tac"
- npow_succ' : (∀ (n : ℕ) (x : M₀), comm_monoid_with_zero.npow n.succ x = x * comm_monoid_with_zero.npow n x) . "try_refl_tac"
- mul_comm : ∀ (a b : M₀), a * b = b * a
- zero : M₀
- zero_mul : ∀ (a : M₀), 0 * a = 0
- mul_zero : ∀ (a : M₀), a * 0 = 0
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.
Instances of this typeclass
- cancel_comm_monoid_with_zero.to_comm_monoid_with_zero
- comm_group_with_zero.to_comm_monoid_with_zero
- comm_semiring.to_comm_monoid_with_zero
- linear_ordered_comm_monoid_with_zero.to_comm_monoid_with_zero
- pi.comm_monoid_with_zero
- order_dual.comm_monoid_with_zero
- lex.comm_monoid_with_zero
- prod.comm_monoid_with_zero
- with_zero.comm_monoid_with_zero
- ulift.comm_monoid_with_zero
- associates.comm_monoid_with_zero
- with_top.comm_monoid_with_zero
- with_bot.comm_monoid_with_zero
- cardinal.comm_monoid_with_zero
- nonneg.comm_monoid_with_zero
- real.comm_monoid_with_zero
- nnreal.comm_monoid_with_zero
- set.Icc.comm_monoid_with_zero
- localization.comm_monoid_with_zero
Instances of other typeclasses for comm_monoid_with_zero
- comm_monoid_with_zero.has_sizeof_inst
- mul : M₀ → M₀ → M₀
- mul_assoc : ∀ (a b c : M₀), a * b * c = a * (b * c)
- one : M₀
- one_mul : ∀ (a : M₀), 1 * a = a
- mul_one : ∀ (a : M₀), a * 1 = a
- npow : ℕ → M₀ → M₀
- npow_zero' : (∀ (x : M₀), cancel_comm_monoid_with_zero.npow 0 x = 1) . "try_refl_tac"
- npow_succ' : (∀ (n : ℕ) (x : M₀), cancel_comm_monoid_with_zero.npow n.succ x = x * cancel_comm_monoid_with_zero.npow n x) . "try_refl_tac"
- mul_comm : ∀ (a b : M₀), a * b = b * a
- zero : M₀
- zero_mul : ∀ (a : M₀), 0 * a = 0
- mul_zero : ∀ (a : M₀), a * 0 = 0
- mul_left_cancel_of_ne_zero : ∀ {a b c : M₀}, a ≠ 0 → a * b = a * c → b = c
A type M is a cancel_comm_monoid_with_zero 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 of this typeclass
- comm_group_with_zero.to_cancel_comm_monoid_with_zero
- is_domain.to_cancel_comm_monoid_with_zero
- order_dual.cancel_comm_monoid_with_zero
- lex.cancel_comm_monoid_with_zero
- nat.cancel_comm_monoid_with_zero
- associates.cancel_comm_monoid_with_zero
- punit.cancel_comm_monoid_with_zero
- set.Icc.cancel_comm_monoid_with_zero
Instances of other typeclasses for cancel_comm_monoid_with_zero
- cancel_comm_monoid_with_zero.has_sizeof_inst
Equations
- cancel_comm_monoid_with_zero.to_cancel_monoid_with_zero = {mul := cancel_comm_monoid_with_zero.mul h, mul_assoc := _, one := cancel_comm_monoid_with_zero.one h, one_mul := _, mul_one := _, npow := cancel_comm_monoid_with_zero.npow h, npow_zero' := _, npow_succ' := _, zero := cancel_comm_monoid_with_zero.zero h, zero_mul := _, mul_zero := _, mul_left_cancel_of_ne_zero := _, mul_right_cancel_of_ne_zero := _}
- mul : G₀ → G₀ → G₀
- mul_assoc : ∀ (a b c : G₀), a * b * c = a * (b * c)
- one : G₀
- one_mul : ∀ (a : G₀), 1 * a = a
- mul_one : ∀ (a : G₀), a * 1 = a
- npow : ℕ → G₀ → G₀
- npow_zero' : (∀ (x : G₀), group_with_zero.npow 0 x = 1) . "try_refl_tac"
- npow_succ' : (∀ (n : ℕ) (x : G₀), group_with_zero.npow n.succ x = x * group_with_zero.npow n x) . "try_refl_tac"
- zero : G₀
- zero_mul : ∀ (a : G₀), 0 * a = 0
- mul_zero : ∀ (a : G₀), a * 0 = 0
- inv : G₀ → G₀
- div : G₀ → G₀ → G₀
- div_eq_mul_inv : (∀ (a b : G₀), a / b = a * b⁻¹) . "try_refl_tac"
- zpow : ℤ → G₀ → G₀
- zpow_zero' : (∀ (a : G₀), group_with_zero.zpow 0 a = 1) . "try_refl_tac"
- zpow_succ' : (∀ (n : ℕ) (a : G₀), group_with_zero.zpow (int.of_nat n.succ) a = a * group_with_zero.zpow (int.of_nat n) a) . "try_refl_tac"
- zpow_neg' : (∀ (n : ℕ) (a : G₀), group_with_zero.zpow -[1+ n] a = (group_with_zero.zpow ↑(n.succ) a)⁻¹) . "try_refl_tac"
- exists_pair_ne : ∃ (x y : G₀), x ≠ y
- inv_zero : 0⁻¹ = 0
- mul_inv_cancel : ∀ (a : G₀), a ≠ 0 → a * a⁻¹ = 1
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.
Instances of this typeclass
Instances of other typeclasses for group_with_zero
- group_with_zero.has_sizeof_inst
- mul : G₀ → G₀ → G₀
- mul_assoc : ∀ (a b c : G₀), a * b * c = a * (b * c)
- one : G₀
- one_mul : ∀ (a : G₀), 1 * a = a
- mul_one : ∀ (a : G₀), a * 1 = a
- npow : ℕ → G₀ → G₀
- npow_zero' : (∀ (x : G₀), comm_group_with_zero.npow 0 x = 1) . "try_refl_tac"
- npow_succ' : (∀ (n : ℕ) (x : G₀), comm_group_with_zero.npow n.succ x = x * comm_group_with_zero.npow n x) . "try_refl_tac"
- mul_comm : ∀ (a b : G₀), a * b = b * a
- zero : G₀
- zero_mul : ∀ (a : G₀), 0 * a = 0
- mul_zero : ∀ (a : G₀), a * 0 = 0
- inv : G₀ → G₀
- div : G₀ → G₀ → G₀
- div_eq_mul_inv : (∀ (a b : G₀), a / b = a * b⁻¹) . "try_refl_tac"
- zpow : ℤ → G₀ → G₀
- zpow_zero' : (∀ (a : G₀), comm_group_with_zero.zpow 0 a = 1) . "try_refl_tac"
- zpow_succ' : (∀ (n : ℕ) (a : G₀), comm_group_with_zero.zpow (int.of_nat n.succ) a = a * comm_group_with_zero.zpow (int.of_nat n) a) . "try_refl_tac"
- zpow_neg' : (∀ (n : ℕ) (a : G₀), comm_group_with_zero.zpow -[1+ n] a = (comm_group_with_zero.zpow ↑(n.succ) a)⁻¹) . "try_refl_tac"
- exists_pair_ne : ∃ (x y : G₀), x ≠ y
- inv_zero : 0⁻¹ = 0
- mul_inv_cancel : ∀ (a : G₀), a ≠ 0 → a * a⁻¹ = 1
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.
Instances of this typeclass
Instances of other typeclasses for comm_group_with_zero
- comm_group_with_zero.has_sizeof_inst
In a nontrivial monoid with zero, zero and one are different.
Pullback a nontrivial instance along a function sending 0 to 0 and 1 to 1.
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.