# mathlibdocumentation

algebra.group.units_hom

# Lift monoid homomorphisms to group homomorphisms of their units subgroups.

def units.map {M : Type u} {N : Type v} [monoid M] [monoid N] :
(M →* N) →*

The group homomorphism on units induced by a monoid_hom.

Equations
(M →+ N)

The add_group homomorphism on add_units induced by an add_monoid_hom.

@[simp]
theorem units.coe_map {M : Type u} {N : Type v} [monoid M] [monoid N] (f : M →* N) (x : units M) :

@[simp]
theorem add_units.coe_map {M : Type u} {N : Type v} [add_monoid M] [add_monoid N] (f : M →+ N) (x : add_units M) :
( x) = f x

@[simp]
theorem add_units.map_comp {M : Type u} {N : Type v} {P : Type w} [add_monoid M] [add_monoid N] [add_monoid P] (f : M →+ N) (g : N →+ P) :

@[simp]
theorem units.map_comp {M : Type u} {N : Type v} {P : Type w} [monoid M] [monoid N] [monoid P] (f : M →* N) (g : N →* P) :

@[simp]
theorem units.map_id (M : Type u) [monoid M] :

@[simp]

def units.coe_hom (M : Type u) [monoid M] :
→* M

Coercion units M → M as a monoid homomorphism.

Equations
→+ M

Coercion add_units M → M as an add_monoid homomorphism.

@[simp]
theorem units.coe_hom_apply {M : Type u} [monoid M] (x : units M) :
x = x

@[simp]
x = x

def units.lift_right {M : Type u} {N : Type v} [monoid M] [monoid N] (f : M →* N) (g : M → ) :
(∀ (x : M), (g x) = f x)M →*

If a map g : M → units N agrees with a homomorphism f : M →* N, then this map is a monoid homomorphism too.

Equations
def add_units.lift_right {M : Type u} {N : Type v} [add_monoid M] [add_monoid N] (f : M →+ N) (g : M → ) :
(∀ (x : M), (g x) = f x)M →+

If a map g : M → add_units N agrees with a homomorphism f : M →+ N, then this map is an add_monoid homomorphism too.

@[simp]
theorem add_units.coe_lift_right {M : Type u} {N : Type v} [add_monoid M] [add_monoid N] {f : M →+ N} {g : M → } (h : ∀ (x : M), (g x) = f x) (x : M) :
( h) x) = f x

@[simp]
theorem units.coe_lift_right {M : Type u} {N : Type v} [monoid M] [monoid N] {f : M →* N} {g : M → } (h : ∀ (x : M), (g x) = f x) (x : M) :
( g h) x) = f x

@[simp]
theorem add_units.add_lift_right_neg {M : Type u} {N : Type v} [add_monoid M] [add_monoid N] {f : M →+ N} {g : M → } (h : ∀ (x : M), (g x) = f x) (x : M) :
f x + - h) x = 0

@[simp]
theorem units.mul_lift_right_inv {M : Type u} {N : Type v} [monoid M] [monoid N] {f : M →* N} {g : M → } (h : ∀ (x : M), (g x) = f x) (x : M) :
(f x) * ( g h) x)⁻¹ = 1

@[simp]
theorem add_units.lift_right_neg_add {M : Type u} {N : Type v} [add_monoid M] [add_monoid N] {f : M →+ N} {g : M → } (h : ∀ (x : M), (g x) = f x) (x : M) :
- h) x + f x = 0

@[simp]
theorem units.lift_right_inv_mul {M : Type u} {N : Type v} [monoid M] [monoid N] {f : M →* N} {g : M → } (h : ∀ (x : M), (g x) = f x) (x : M) :
(( g h) x)⁻¹) * f x = 1

(G →+ M)G →+

If f is a homomorphism from an additive group G to an additive monoid M, then its image lies in the add_units of M, and f.to_hom_units is the corresponding homomorphism from G to add_units M.

def monoid_hom.to_hom_units {G : Type u_1} {M : Type u_2} [group G] [monoid M] :
(G →* M)G →*

If f is a homomorphism from a group G to a monoid M, then its image lies in the units of M, and f.to_hom_units is the corresponding monoid homomorphism from G to units M.

Equations
@[simp]
theorem monoid_hom.coe_to_hom_units {G : Type u_1} {M : Type u_2} [group G] [monoid M] (f : G →* M) (g : G) :

theorem is_unit.map {M : Type u_1} {N : Type u_2} [monoid M] [monoid N] (f : M →* N) {x : M} :
is_unit (f x)

theorem is_add_unit.map {M : Type u_1} {N : Type u_2} [add_monoid M] [add_monoid N] (f : M →+ N) {x : M} :

def is_unit.lift_right {M : Type u_1} {N : Type u_2} [monoid M] [monoid N] (f : M →* N) :
(∀ (x : M), is_unit (f x))M →*

If a homomorphism f : M →* N sends each element to an is_unit, then it can be lifted to f : M →* units N. See also units.lift_right for a computable version.

Equations
• = (λ (x : M), _
def is_add_unit.lift_right {M : Type u_1} {N : Type u_2} [add_monoid M] [add_monoid N] (f : M →+ N) :
(∀ (x : M), is_add_unit (f x))M →+

If a homomorphism f : M →+ N sends each element to an is_add_unit, then it can be lifted to f : M →+ add_units N. See also add_units.lift_right for a computable version.

theorem is_unit.coe_lift_right {M : Type u_1} {N : Type u_2} [monoid M] [monoid N] (f : M →* N) (hf : ∀ (x : M), is_unit (f x)) (x : M) :
( hf) x) = f x

theorem is_add_unit.coe_lift_right {M : Type u_1} {N : Type u_2} [add_monoid M] [add_monoid N] (f : M →+ N) (hf : ∀ (x : M), is_add_unit (f x)) (x : M) :
( hf) x) = f x

@[simp]
theorem is_unit.mul_lift_right_inv {M : Type u_1} {N : Type u_2} [monoid M] [monoid N] (f : M →* N) (h : ∀ (x : M), is_unit (f x)) (x : M) :
(f x) * ( h) x)⁻¹ = 1

@[simp]
theorem is_add_unit.add_lift_right_neg {M : Type u_1} {N : Type u_2} [add_monoid M] [add_monoid N] (f : M →+ N) (h : ∀ (x : M), is_add_unit (f x)) (x : M) :
f x + - x = 0

@[simp]
theorem is_unit.lift_right_inv_mul {M : Type u_1} {N : Type u_2} [monoid M] [monoid N] (f : M →* N) (h : ∀ (x : M), is_unit (f x)) (x : M) :
(( h) x)⁻¹) * f x = 1

@[simp]
theorem is_add_unit.lift_right_neg_add {M : Type u_1} {N : Type u_2} [add_monoid M] [add_monoid N] (f : M →+ N) (h : ∀ (x : M), is_add_unit (f x)) (x : M) :
- x + f x = 0