Monoid homomorphisms and units #
This file allows to lift monoid homomorphisms to group homomorphisms of their units subgroups. It
also contains unrelated results about Units that depend on MonoidHom.
Main declarations #
Units.map: Turn a homomorphism fromαtoβmonoids into a homomorphism fromαˣtoβˣ.MonoidHom.toHomUnits: Turn a homomorphism from a groupαtoβinto a homomorphism fromαtoβˣ.IsLocalHom: A predicate on monoid maps, requiring that it maps nonunits to nonunits. For the local rings, that is, applied to their multiplicative monoids, this means that the image of the unique maximal ideal is again contained in the unique maximal ideal. This is developed earlier, and in the generality of monoids, as it allows its use in non-local-ring related contexts, but it does have the strange consequence that it does not require local rings, or even rings.
TODO #
The results that don't mention homomorphisms should be proved (earlier?) in a different file and be
used to golf the basic Group lemmas.
Add a @[to_additive] version of IsLocalHom.
If two homomorphisms from a division monoid to a monoid are equal at a unit x, then they are
equal at x⁻¹.
If two homomorphisms from a subtraction monoid to an additive monoid are equal at an
additive unit x, then they are equal at -x.
The additive homomorphism on AddUnits induced by an AddMonoidHom.
Equations
- AddUnits.map f = AddMonoidHom.mk' (fun (u : AddUnits M) => { val := f ↑u, neg := f u.neg, val_neg := ⋯, neg_val := ⋯ }) ⋯
Instances For
Coercion AddUnits M → M as an AddMonoid homomorphism.
Equations
- AddUnits.coeHom M = { toFun := AddUnits.val, map_zero' := ⋯, map_add' := ⋯ }
Instances For
If a map g : M → Nˣ agrees with a homomorphism f : M →* N, then
this map is a monoid homomorphism too.
Equations
- Units.liftRight f g h = { toFun := g, map_one' := ⋯, map_mul' := ⋯ }
Instances For
If a map g : M → AddUnits N agrees with a homomorphism f : M →+ N, then this map
is an AddMonoid homomorphism too.
Equations
- AddUnits.liftRight f g h = { toFun := g, map_zero' := ⋯, map_add' := ⋯ }
Instances For
If f is a homomorphism from a group G to a monoid M,
then its image lies in the units of M,
and f.toHomUnits is the corresponding monoid homomorphism from G to Mˣ.
Equations
- f.toHomUnits = Units.liftRight f (fun (g : G) => { val := f g, inv := f g⁻¹, val_inv := ⋯, inv_val := ⋯ }) ⋯
Instances For
If f is a homomorphism from an additive group G to an additive monoid M,
then its image lies in the AddUnits of M,
and f.toHomUnits is the corresponding homomorphism from G to AddUnits M.
Equations
- f.toHomAddUnits = AddUnits.liftRight f (fun (g : G) => { val := f g, neg := f (-g), val_neg := ⋯, neg_val := ⋯ }) ⋯
Instances For
MonoidHom.toHomUnits as a MulEquiv.
Equations
- MonoidHom.toHomUnitsMulEquiv = { toFun := MonoidHom.toHomUnits, invFun := fun (f : G →* Mˣ) => (Units.coeHom M).comp f, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Prefer IsLocalHom.of_leftInverse, but we can't get rid of this because of ToAdditive.
If a homomorphism f : M →* N sends each element to an IsUnit, then it can be lifted
to f : M →* Nˣ. See also Units.liftRight for a computable version.
Equations
- IsUnit.liftRight f hf = Units.liftRight f (fun (x : M) => ⋯.unit) ⋯
Instances For
If a homomorphism f : M →+ N sends each element to an IsAddUnit, then it can be
lifted to f : M →+ AddUnits N. See also AddUnits.liftRight for a computable version.
Equations
- IsAddUnit.liftRight f hf = AddUnits.liftRight f (fun (x : M) => ⋯.addUnit) ⋯
Instances For
A map f between monoids is local if any a in the domain is a unit
whenever f a is a unit. See IsLocalRing.local_hom_TFAE for other equivalent
definitions in the local ring case - from where this concept originates, but it is useful in
other contexts, so we allow this generalisation in mathlib.
A local homomorphism
f : R ⟶ Swill send nonunits ofRto nonunits ofS.
Instances
Alias of IsUnit.of_map.