Adjoining a zero to a group #
This file proves that one can adjoin a new zero element to a group and get a group with zero.
Main definitions #
WithZero.map'
: theMonoidWithZero
homomorphismWithZero α →* WithZero β
induced by a monoid homomorphismf : α →* β
.
Equations
- WithZero.one = { one := ↑One.one }
Equations
- WithZero.instMulZeroClass = { mul := Option.map₂ fun (x1 x2 : α) => x1 * x2, toZero := WithZero.instZero, zero_mul := ⋯, mul_zero := ⋯ }
Equations
- WithZero.instSemigroupWithZero = { toMul := MulZeroClass.toMul, mul_assoc := ⋯, toZero := MulZeroClass.toZero, zero_mul := ⋯, mul_zero := ⋯ }
Equations
- WithZero.instCommSemigroup = { toSemigroup := SemigroupWithZero.toSemigroup, mul_comm := ⋯ }
Equations
- WithZero.instMulZeroOneClass = { toOne := WithZero.one, toMul := MulZeroClass.toMul, one_mul := ⋯, mul_one := ⋯, toZero := MulZeroClass.toZero, zero_mul := ⋯, mul_zero := ⋯ }
Coercion as a monoid hom.
Equations
- WithZero.coeMonoidHom = { toFun := WithZero.coe, map_one' := ⋯, map_mul' := ⋯ }
Instances For
@[simp]
theorem
WithZero.monoidWithZeroHom_ext
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulZeroOneClass β]
⦃f g : WithZero α →*₀ β⦄
(h : (↑f).comp coeMonoidHom = (↑g).comp coeMonoidHom)
:
theorem
WithZero.monoidWithZeroHom_ext_iff
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulZeroOneClass β]
{f g : WithZero α →*₀ β}
:
noncomputable def
WithZero.lift'
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulZeroOneClass β]
:
The (multiplicative) universal property of WithZero
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
WithZero.lift'_symm_apply_apply
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulZeroOneClass β]
(F : WithZero α →*₀ β)
(a✝ : α)
:
theorem
WithZero.lift'_zero
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulZeroOneClass β]
(f : α →* β)
:
@[simp]
theorem
WithZero.lift'_coe
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulZeroOneClass β]
(f : α →* β)
(x : α)
:
theorem
WithZero.lift'_unique
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulZeroOneClass β]
(f : WithZero α →*₀ β)
:
noncomputable def
WithZero.map'
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulOneClass β]
(f : α →* β)
:
The MonoidWithZero
homomorphism WithZero α →* WithZero β
induced by a monoid homomorphism
f : α →* β
.
Equations
Instances For
theorem
WithZero.map'_zero
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulOneClass β]
(f : α →* β)
:
@[simp]
theorem
WithZero.map'_coe
{α : Type u_1}
{β : Type u_2}
[MulOneClass α]
[MulOneClass β]
(f : α →* β)
(x : α)
:
@[simp]
theorem
WithZero.map'_map'
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[MulOneClass α]
[MulOneClass β]
[MulOneClass γ]
(f : α →* β)
(g : β →* γ)
(x : WithZero α)
:
@[simp]
theorem
WithZero.map'_comp
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[MulOneClass α]
[MulOneClass β]
[MulOneClass γ]
(f : α →* β)
(g : β →* γ)
:
Equations
- One or more equations did not get rendered due to their size.
Equations
- WithZero.instCommMonoidWithZero = { toMonoid := MonoidWithZero.toMonoid, mul_comm := ⋯, toZero := MonoidWithZero.toZero, zero_mul := ⋯, mul_zero := ⋯ }
Extend the inverse operation on α
to WithZero α
by sending 0
to 0
.
Equations
- WithZero.inv = { inv := fun (a : WithZero α) => Option.map (fun (x : α) => x⁻¹) a }
Equations
- WithZero.invOneClass = { toOne := WithZero.one, toInv := WithZero.inv, inv_one := ⋯ }
Equations
- WithZero.div = { div := Option.map₂ fun (x1 x2 : α) => x1 / x2 }
Equations
- One or more equations did not get rendered due to their size.
Equations
- WithZero.instDivInvOneMonoid = { toDivInvMonoid := WithZero.instDivInvMonoid, inv_one := ⋯ }
Equations
- WithZero.instInvolutiveInv = { toInv := WithZero.inv, inv_inv := ⋯ }
Equations
- WithZero.instDivisionMonoid = { toDivInvMonoid := WithZero.instDivInvMonoid, inv_inv := ⋯, mul_inv_rev := ⋯, inv_eq_of_mul := ⋯ }
Equations
- WithZero.instDivisionCommMonoid = { toDivisionMonoid := WithZero.instDivisionMonoid, mul_comm := ⋯ }
If α
is a group then WithZero α
is a group with zero.
Equations
- One or more equations did not get rendered due to their size.
Any group is isomorphic to the units of itself adjoined with 0
.
Equations
- WithZero.unitsWithZeroEquiv = { toFun := fun (a : (WithZero α)ˣ) => WithZero.unzero ⋯, invFun := fun (a : α) => Units.mk0 ↑a ⋯, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
def
WithZero.withZeroUnitsEquiv
{G : Type u_4}
[GroupWithZero G]
[DecidablePred fun (a : G) => a = 0]
:
Any group with zero is isomorphic to adjoining 0
to the units of itself.
Equations
- One or more equations did not get rendered due to their size.
Instances For
noncomputable def
MulEquiv.withZero
{α : Type u_1}
{β : Type u_2}
[Group α]
[Group β]
(e : α ≃* β)
:
A version of Equiv.optionCongr
for WithZero
.
Equations
- e.withZero = { toFun := ⇑(WithZero.map' e.toMonoidHom), invFun := ⇑(WithZero.map' e.symm.toMonoidHom), left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
noncomputable def
MulEquiv.unzero
{α : Type u_1}
{β : Type u_2}
[Group α]
[Group β]
(e : WithZero α ≃* WithZero β)
:
The inverse of MulEquiv.withZero
.
Equations
- e.unzero = { toFun := fun (x : α) => WithZero.unzero ⋯, invFun := fun (x : β) => WithZero.unzero ⋯, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- WithZero.instAddMonoidWithOne = { natCast := fun (n : ℕ) => if n = 0 then 0 else ↑↑n, toAddMonoid := WithZero.instAddMonoid, toOne := WithZero.one, natCast_zero := ⋯, natCast_succ := ⋯ }