Units (i.e., invertible elements) of a monoid #
An element of a Monoid
is a unit if it has a two-sided inverse.
Main declarations #
Units M
: the group of units (i.e., invertible elements) of a monoid.IsUnit x
: a predicate asserting thatx
is a unit (i.e., invertible element) of a monoid.
For both declarations, there is an additive counterpart: AddUnits
and IsAddUnit
.
See also Prime
, Associated
, and Irreducible
in Mathlib.Algebra.Associated
.
Notation #
We provide Mˣ
as notation for Units M
,
resembling the notation
TODO #
The results here should be used to golf the basic Group
lemmas.
Units of a Monoid
, bundled version. Notation: αˣ
.
An element of a Monoid
is a unit if it has a two-sided inverse.
This version bundles the inverse element so that it can be computed.
For a predicate see IsUnit
.
- val : α
The underlying value in the base
Monoid
. - inv : α
Instances For
- AlgEquiv.instMulDistribMulActionAlgEquivUnitsToMonoidToMonoidWithZeroToMonoidToDivInvMonoidAutInstMonoid
- Algebra.instMulDistribMulActionAlgHomUnitsToMonoidToMonoidWithZeroEndInstMonoid
- Associates.uniqueUnits
- FreeMonoid.uniqueUnits
- Ideal.uniqueUnits
- LinearMap.CompatibleSMul.units
- Nat.unique_units
- TensorProduct.CompatibleSMul.unit
- Units.continuousConstSMul
- Units.continuousSMul
- Units.instCoeHeadUnits
- Units.instCommGroupUnits
- Units.instContinuousMulUnitsInstTopologicalSpaceUnitsToMulInstMulOneClass
- Units.instDiscreteTopology
- Units.instDistribMulAction
- Units.instDistribSMulUnits
- Units.instFaithfulSMulUnitsInstSMulUnits
- Units.instGroup
- Units.instHasDistribNegUnitsToMulInstMulOneClass
- Units.instInhabitedUnits
- Units.instInv
- Units.instIsScalarTowerUnitsInstSMulUnitsInstSMulUnits
- Units.instLinearOrderUnits
- Units.instMeasurableSpace
- Units.instMonoid
- Units.instMulAction
- Units.instMulDistribMulAction
- Units.instMulOneClass
- Units.instNegUnits
- Units.instPartialOrderUnits
- Units.instPreorderUnits
- Units.instReprUnits
- Units.instSMulUnits
- Units.instSMulZeroClass
- Units.instStarModuleUnitsToStarToInvolutiveStarToMulInstMulOneClassInstStarMulUnitsToMulInstMulOneClassInstSMulUnits
- Units.instStarMulUnitsToMulInstMulOneClass
- Units.instT2Space
- Units.instTopologicalGroupUnitsInstTopologicalSpaceUnitsInstGroup
- Units.instTopologicalSpaceUnits
- Units.isScalarTower'
- Units.isScalarTower'_left
- Units.isometricSMul
- Units.measurableSMul
- Units.mulAction'
- Units.mulDistribMulAction'
- Units.orderedCommGroup
- Units.smulCommClass'
- Units.smulCommClass_left
- Units.smulCommClass_right
- UnitsInt.fintype
- ZMod.subsingleton_units
- instCanLiftUnitsValIsUnit
- instContinuousStarUnitsInstTopologicalSpaceUnitsToStarToInvolutiveStarToMulInstMulOneClassInstStarMulUnitsToMulInstMulOneClass
- instFiniteUnits
- instFiniteZModUnits
- instFintypeUnits
- instIsCyclicUnitsToMonoidToMonoidWithZeroToSemiringToCommSemiringInstGroup
- instUniqueUnits
Units of a Monoid
, bundled version. Notation: αˣ
.
An element of a Monoid
is a unit if it has a two-sided inverse.
This version bundles the inverse element so that it can be computed.
For a predicate see IsUnit
.
Equations
- «term_ˣ» = Lean.ParserDescr.trailingNode `term_ˣ 1024 1024 (Lean.ParserDescr.symbol "ˣ")
Units of an AddMonoid
, bundled version.
An element of an AddMonoid
is a unit if it has a two-sided additive inverse.
This version bundles the inverse element so that it can be computed.
For a predicate see isAddUnit
.
- val : α
The underlying value in the base
AddMonoid
. - neg : α
Instances For
- AddUnits.continuousConstVAdd
- AddUnits.continuousVAdd
- AddUnits.instAddAction
- AddUnits.instAddCommGroupAddUnits
- AddUnits.instAddGroup
- AddUnits.instAddMonoid
- AddUnits.instAddZeroClass
- AddUnits.instCoeHeadAddUnits
- AddUnits.instContinuousAddAddUnitsInstTopologicalSpaceAddUnitsToAddInstAddZeroClass
- AddUnits.instDiscreteTopology
- AddUnits.instFaithfulVAddAddUnitsInstVAddAddUnits
- AddUnits.instInhabitedAddUnits
- AddUnits.instLinearOrderAddUnits
- AddUnits.instMeasurableSpace
- AddUnits.instNeg
- AddUnits.instPartialOrderAddUnits
- AddUnits.instPreorderAddUnits
- AddUnits.instReprAddUnits
- AddUnits.instT2Space
- AddUnits.instTopologicalAddGroupAddUnitsInstTopologicalSpaceAddUnitsInstAddGroup
- AddUnits.instTopologicalSpaceAddUnits
- AddUnits.instVAddAddUnits
- AddUnits.isometricVAdd
- AddUnits.measurableVAdd
- AddUnits.orderedAddCommGroup
- ENNReal.instUniqueAddUnitsENNRealToAddMonoidToAddMonoidWithOneInstENNRealAddCommMonoidWithOne
- FreeAddMonoid.uniqueAddUnits
- Nat.unique_addUnits
- instCanLiftAddUnitsValIsAddUnit
- instUniqueAddUnits
See Note [custom simps projection]
Equations
- AddUnits.Simps.val_neg u = ↑(-u)
See Note [custom simps projection]
Equations
- Units.Simps.val_inv u = ↑u⁻¹
Equations
- ⋯ = ⋯
Additive units have decidable equality
if the base AddMonoid
has deciable equality.
Equations
- AddUnits.instDecidableEqAddUnits x✝ x = decidable_of_iff' (↑x✝ = ↑x) ⋯
Units have decidable equality if the base Monoid
has decidable equality.
Equations
- Units.instDecidableEqUnits x✝ x = decidable_of_iff' (↑x✝ = ↑x) ⋯
Additive units of an additive monoid have an addition and an additive identity.
Equations
- AddUnits.instAddZeroClass = AddZeroClass.mk ⋯ ⋯
Units of a monoid form have a multiplication and multiplicative identity.
Equations
- Units.instMulOneClass = MulOneClass.mk ⋯ ⋯
Equations
- AddUnits.instAddGroup.match_1 motive n a h_1 h_2 = Int.casesOn n (fun (a_1 : ℕ) => h_1 a_1 a) fun (a_1 : ℕ) => h_2 a_1 a
Additive units of an additive monoid form an additive group.
Equations
- AddUnits.instAddGroup = let __src := inferInstance; AddGroup.mk ⋯
Additive units of an additive commutative monoid form an additive commutative group.
Equations
- AddUnits.instAddCommGroupAddUnits = AddCommGroup.mk ⋯
Units of a commutative monoid form a commutative group.
Equations
- Units.instCommGroupUnits = CommGroup.mk ⋯
For a, b
in an AddCommMonoid
such that a + b = 0
, makes an addUnit out of a
.
Equations
- AddUnits.mkOfAddEqZero a b hab = { val := a, neg := b, val_neg := hab, neg_val := ⋯ }
For a, b
in a CommMonoid
such that a * b = 1
, makes a unit out of a
.
Equations
- Units.mkOfMulEqOne a b hab = { val := a, inv := b, val_inv := hab, inv_val := ⋯ }
Partial division. It is defined when the
second argument is invertible, and unlike the division operator
in DivisionRing
it is not totalized at zero.
Equations
- «term_/ₚ_» = Lean.ParserDescr.trailingNode `term_/ₚ_ 70 70 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " /ₚ ") (Lean.ParserDescr.cat `term 71))
Used for field_simp
to deal with inverses of units. This form of the lemma
is essential since field_simp
likes to use inv_eq_one_div
to rewrite
↑u⁻¹ = ↑(1 / u)
.
The element of the group of units, corresponding to an element of a monoid which is a unit. When
α
is a DivisionMonoid
, use IsUnit.unit'
instead.
Equations
- IsUnit.unit h = Units.copy (Classical.choose h) a ⋯ ↑(Classical.choose h)⁻¹ ⋯
"The element of the additive group of additive units, corresponding to an element of
an additive monoid which is an additive unit. When α
is a SubtractionMonoid
, use
IsAddUnit.addUnit'
instead.
Equations
- IsAddUnit.addUnit h = AddUnits.copy (Classical.choose h) a ⋯ ↑(-Classical.choose h) ⋯
The element of the additive group of additive units, corresponding to an element of
an additive monoid which is an additive unit. As opposed to IsAddUnit.addUnit
, the negation is
computable and comes from the negation on α
. This is useful to transfer properties of negation
in AddUnits α
to α
. See also toAddUnits
.
Equations
- IsAddUnit.addUnit' h = { val := a, neg := -a, val_neg := ⋯, neg_val := ⋯ }
The element of the group of units, corresponding to an element of a monoid which is a unit. As
opposed to IsUnit.unit
, the inverse is computable and comes from the inversion on α
. This is
useful to transfer properties of inversion in Units α
to α
. See also toUnits
.
Equations
- IsUnit.unit' h = { val := a, inv := a⁻¹, val_inv := ⋯, inv_val := ⋯ }
Constructs a CommGroup
structure on a CommMonoid
consisting only of units.
Equations
Alias of IsUnit.mul_div_cancel
.
Alias of IsAddUnit.add_sub_cancel
.