Groups with an adjoined zero element #
This file describes structures that are not usually studied on their own right in mathematics, namely a special sort of monoid: apart from a distinguished “zero element” they form a group, or in other words, they are groups with an adjoined zero element.
Examples are:
- division rings;
- the value monoid of a multiplicative valuation;
- in particular, the non-negative real numbers.
Main definitions #
Various lemmas about GroupWithZero
and CommGroupWithZero
.
To reduce import dependencies, the type-classes themselves are in
Algebra.GroupWithZero.Defs
.
Implementation details #
As is usual in mathlib, we extend the inverse function to the zero element,
and require 0⁻¹ = 0
.
To match one_mul_eq_id
.
To match mul_one_eq_id
.
Equations
In a monoid with zero, if zero equals one, then zero is the only element.
In a monoid with zero, if zero equals one, then zero is the unique element.
Somewhat arbitrarily, we define the default element to be 0
.
All other elements will be provably equal to it, but not necessarily definitionally equal.
Equations
- uniqueOfZeroEqOne h = { toInhabited := { default := 0 }, uniq := (_ : ∀ (a : M₀), a = 0) }
Instances For
In a monoid with zero, zero equals one if and only if all elements of that semiring are equal.
Alias of the forward direction of subsingleton_iff_zero_eq_one
.
In a monoid with zero, zero equals one if and only if all elements of that semiring are equal.
In a monoid with zero, either zero and one are nonequal, or zero is the only element.
An element of a CancelMonoidWithZero
fixed by right multiplication by an element other
than one must be zero.
An element of a CancelMonoidWithZero
fixed by left multiplication by an element other
than one must be zero.
Equations
- GroupWithZero.toCancelMonoidWithZero = let src := inst; CancelMonoidWithZero.mk
Multiplying a
by itself and then by its inverse results in a
(whether or not a
is zero).
Multiplying a
by its inverse and then by itself results in a
(whether or not a
is zero).
Multiplying a⁻¹
by a
twice results in a
(whether or not a
is zero).
Multiplying a
by itself and then dividing by itself results in a
, whether or not a
is
zero.
Dividing a
by itself and then multiplying by itself results in a
, whether or not a
is
zero.
Dividing a
by the result of dividing a
by itself results in
a
(whether or not a
is zero).
Order dual #
Equations
- instMulZeroClassOrderDual = h
Equations
- instMulZeroOneClassOrderDual = h
Equations
- (_ : NoZeroDivisors αᵒᵈ) = h
Equations
- instSemigroupWithZeroOrderDual = h
Equations
- instMonoidWithZeroOrderDual = h
Equations
- instCancelMonoidWithZeroOrderDual = h
Equations
- instCommMonoidWithZeroOrderDual = h
Equations
- instCancelCommMonoidWithZeroOrderDual = h
Equations
- instGroupWithZeroOrderDual = h
Equations
- instCommGroupWithZeroOrderDual = h
Lexicographic order #
Equations
- instMulZeroClassLex = h
Equations
- instMulZeroOneClassLex = h
Equations
- (_ : NoZeroDivisors (Lex α)) = h
Equations
- instSemigroupWithZeroLex = h
Equations
- instMonoidWithZeroLex = h
Equations
- instCancelMonoidWithZeroLex = h
Equations
- instCommMonoidWithZeroLex = h
Equations
- instCancelCommMonoidWithZeroLex = h
Equations
- instGroupWithZeroLex = h
Equations
- instCommGroupWithZeroLex = h