Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2019 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov

! This file was ported from Lean 3 source module deprecated.group
! leanprover-community/mathlib commit 5a3e819569b0f12cbec59d740a2613018e7b8eec
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Group.TypeTags
import Mathlib.Algebra.Hom.Equiv.Basic
import Mathlib.Algebra.Hom.Ring
import Mathlib.Algebra.Hom.Units

/-!
# Unbundled monoid and group homomorphisms

This file is deprecated, and is no longer imported by anything in mathlib other than other
deprecated files, and test files. You should not need to import it.

This file defines predicates for unbundled monoid and group homomorphisms. Instead of using
this file, please use `MonoidHom`, defined in `Algebra.Hom.Group`, with notation `→*`, for
morphisms between monoids or groups. For example use `φ : G →* H` to represent a group
homomorphism between multiplicative groups, and `ψ : A →+ B` to represent a group homomorphism
between additive groups.

## Main Definitions

`IsMonoidHom` (deprecated), `IsGroupHom` (deprecated)

## Tags

IsGroupHom, IsMonoidHom

-/


universe u v

variable {
α: Type u
α
:
Type u: Type (u+1)
Type u
} {
β: Type v
β
:
Type v: Type (v+1)
Type v
} /-- Predicate for maps which preserve an addition. -/ structure
IsAddHom: ∀ {α : Type u_1} {β : Type u_2} [inst : Add α] [inst_1 : Add β] {f : αβ}, (∀ (x y : α), f (x + y) = f x + f y) → IsAddHom f
IsAddHom
{
α: Type ?u.10
α
β: Type ?u.13
β
:
Type _: Type (?u.10+1)
Type _
} [
Add: Type ?u.16 → Type ?u.16
Add
α: Type ?u.10
α
] [
Add: Type ?u.19 → Type ?u.19
Add
β: Type ?u.13
β
] (
f: αβ
f
:
α: Type ?u.10
α
β: Type ?u.13
β
) :
Prop: Type
Prop
where /-- The proposition that `f` preserves addition. -/
map_add: ∀ {α : Type u_1} {β : Type u_2} [inst : Add α] [inst_1 : Add β] {f : αβ}, IsAddHom f∀ (x y : α), f (x + y) = f x + f y
map_add
: ∀
x: ?m.28
x
y: ?m.31
y
,
f: αβ
f
(
x: ?m.28
x
+
y: ?m.31
y
) =
f: αβ
f
x: ?m.28
x
+
f: αβ
f
y: ?m.31
y
#align is_add_hom
IsAddHom: {α : Type u_1} → {β : Type u_2} → [inst : Add α] → [inst : Add β] → (αβ) → Prop
IsAddHom
/-- Predicate for maps which preserve a multiplication. -/ @[
to_additive: {α : Type u_1} → {β : Type u_2} → [inst : Add α] → [inst : Add β] → (αβ) → Prop
to_additive
] structure
IsMulHom: {α : Type u_1} → {β : Type u_2} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
{
α: Type ?u.138
α
β: Type ?u.141
β
:
Type _: Type (?u.141+1)
Type _
} [
Mul: Type ?u.144 → Type ?u.144
Mul
α: Type ?u.138
α
] [
Mul: Type ?u.147 → Type ?u.147
Mul
β: Type ?u.141
β
] (
f: αβ
f
:
α: Type ?u.138
α
β: Type ?u.141
β
) :
Prop: Type
Prop
where /-- The proposition that `f` preserves multiplication. -/
map_mul: ∀ {α : Type u_1} {β : Type u_2} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
: ∀
x: ?m.156
x
y: ?m.159
y
,
f: αβ
f
(
x: ?m.156
x
*
y: ?m.159
y
) =
f: αβ
f
x: ?m.156
x
*
f: αβ
f
y: ?m.159
y
#align is_mul_hom
IsMulHom: {α : Type u_1} → {β : Type u_2} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
namespace IsMulHom variable [
Mul: Type ?u.925 → Type ?u.925
Mul
α: Type u
α
] [
Mul: Type ?u.429 → Type ?u.429
Mul
β: Type v
β
] {
γ: Type ?u.432
γ
:
Type _: Type (?u.290+1)
Type _
} [
Mul: Type ?u.435 → Type ?u.435
Mul
γ: Type ?u.290
γ
] /-- The identity map preserves multiplication. -/ @[
to_additive: ∀ {α : Type u} [inst : Add α], IsAddHom _root_.id
to_additive
"The identity map preserves addition"] theorem
id: ∀ {α : Type u} [inst : Mul α], IsMulHom _root_.id
id
:
IsMulHom: {α : Type ?u.313} → {β : Type ?u.312} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
(
id: {α : Sort ?u.359} → αα
id
:
α: Type u
α
α: Type u
α
) := { map_mul := fun
_: ?m.390
_
_: ?m.393
_
=>
rfl: ∀ {α : Sort ?u.395} {a : α}, a = a
rfl
} #align is_mul_hom.id
IsMulHom.id: ∀ {α : Type u} [inst : Mul α], IsMulHom _root_.id
IsMulHom.id
#align is_add_hom.id
IsAddHom.id: ∀ {α : Type u} [inst : Add α], IsAddHom _root_.id
IsAddHom.id
/-- The composition of maps which preserve multiplication, also preserves multiplication. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : Add α] [inst_1 : Add β] {γ : Type u_1} [inst_2 : Add γ] {f : αβ} {g : βγ}, IsAddHom fIsAddHom gIsAddHom (g f)
to_additive
"The composition of addition preserving maps also preserves addition"] theorem
comp: ∀ {f : αβ} {g : βγ}, IsMulHom fIsMulHom gIsMulHom (g f)
comp
{
f: αβ
f
:
α: Type u
α
β: Type v
β
} {
g: βγ
g
:
β: Type v
β
γ: Type ?u.432
γ
} (
hf: IsMulHom f
hf
:
IsMulHom: {α : Type ?u.447} → {β : Type ?u.446} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
f: αβ
f
) (
hg: IsMulHom g
hg
:
IsMulHom: {α : Type ?u.514} → {β : Type ?u.513} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
g: βγ
g
) :
IsMulHom: {α : Type ?u.572} → {β : Type ?u.571} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
(
g: βγ
g
f: αβ
f
) := { map_mul := fun
x: ?m.661
x
y: ?m.664
y
=>

Goals accomplished! 🐙
α: Type u

β: Type v

inst✝²: Mul α

inst✝¹: Mul β

γ: Type u_1

inst✝: Mul γ

f: αβ

g: βγ

hf: IsMulHom f

hg: IsMulHom g

x, y: α


(g f) (x * y) = (g f) x * (g f) y

Goals accomplished! 🐙
} #align is_mul_hom.comp
IsMulHom.comp: ∀ {α : Type u} {β : Type v} [inst : Mul α] [inst_1 : Mul β] {γ : Type u_1} [inst_2 : Mul γ] {f : αβ} {g : βγ}, IsMulHom fIsMulHom gIsMulHom (g f)
IsMulHom.comp
#align is_add_hom.comp
IsAddHom.comp: ∀ {α : Type u} {β : Type v} [inst : Add α] [inst_1 : Add β] {γ : Type u_1} [inst_2 : Add γ] {f : αβ} {g : βγ}, IsAddHom fIsAddHom gIsAddHom (g f)
IsAddHom.comp
/-- A product of maps which preserve multiplication, preserves multiplication when the target is commutative. -/ @[
to_additive: ∀ {α : Type u_1} {β : Type u_2} [inst : AddSemigroup α] [inst_1 : AddCommSemigroup β] {f g : αβ}, IsAddHom fIsAddHom gIsAddHom fun a => f a + g a
to_additive
"A sum of maps which preserves addition, preserves addition when the target is commutative."] theorem
mul: ∀ {α : Type u_1} {β : Type u_2} [inst : Semigroup α] [inst_1 : CommSemigroup β] {f g : αβ}, IsMulHom fIsMulHom gIsMulHom fun a => f a * g a
mul
{
α: Type u_1
α
β: ?m.940
β
} [
Semigroup: Type ?u.943 → Type ?u.943
Semigroup
α: ?m.937
α
] [
CommSemigroup: Type ?u.946 → Type ?u.946
CommSemigroup
β: ?m.940
β
] {
f: αβ
f
g: αβ
g
:
α: ?m.937
α
β: ?m.940
β
} (
hf: IsMulHom f
hf
:
IsMulHom: {α : Type ?u.958} → {β : Type ?u.957} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
f: αβ
f
) (
hg: IsMulHom g
hg
:
IsMulHom: {α : Type ?u.1608} → {β : Type ?u.1607} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
g: αβ
g
) :
IsMulHom: {α : Type ?u.1657} → {β : Type ?u.1656} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
fun
a: ?m.1701
a
=>
f: αβ
f
a: ?m.1701
a
*
g: αβ
g
a: ?m.1701
a
:= { map_mul := fun
a: ?m.2843
a
b: ?m.2846
b
=>

Goals accomplished! 🐙
α✝: Type u

β✝: Type v

inst✝⁴: Mul α✝

inst✝³: Mul β✝

γ: Type ?u.931

inst✝²: Mul γ

α: Type u_1

β: Type u_2

inst✝¹: Semigroup α

inst✝: CommSemigroup β

f, g: αβ

hf: IsMulHom f

hg: IsMulHom g

a, b: α


f (a * b) * g (a * b) = f a * g a * (f b * g b)

Goals accomplished! 🐙
} #align is_mul_hom.mul
IsMulHom.mul: ∀ {α : Type u_1} {β : Type u_2} [inst : Semigroup α] [inst_1 : CommSemigroup β] {f g : αβ}, IsMulHom fIsMulHom gIsMulHom fun a => f a * g a
IsMulHom.mul
#align is_add_hom.add
IsAddHom.add: ∀ {α : Type u_1} {β : Type u_2} [inst : AddSemigroup α] [inst_1 : AddCommSemigroup β] {f g : αβ}, IsAddHom fIsAddHom gIsAddHom fun a => f a + g a
IsAddHom.add
/-- The inverse of a map which preserves multiplication, preserves multiplication when the target is commutative. -/ @[
to_additive: ∀ {α : Type u_1} {β : Type u_2} [inst : Add α] [inst_1 : AddCommGroup β] {f : αβ}, IsAddHom fIsAddHom fun a => -f a
to_additive
"The negation of a map which preserves addition, preserves addition when the target is commutative."] theorem
inv: ∀ {α : Type u_1} {β : Type u_2} [inst : Mul α] [inst_1 : CommGroup β] {f : αβ}, IsMulHom fIsMulHom fun a => (f a)⁻¹
inv
{
α: ?m.3713
α
β: Type u_2
β
} [
Mul: Type ?u.3719 → Type ?u.3719
Mul
α: ?m.3713
α
] [
CommGroup: Type ?u.3722 → Type ?u.3722
CommGroup
β: ?m.3716
β
] {
f: αβ
f
:
α: ?m.3713
α
β: ?m.3716
β
} (
hf: IsMulHom f
hf
:
IsMulHom: {α : Type ?u.3730} → {β : Type ?u.3729} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
f: αβ
f
) :
IsMulHom: {α : Type ?u.3994} → {β : Type ?u.3993} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
fun
a: ?m.4038
a
=> (
f: αβ
f
a: ?m.4038
a
)⁻¹ := { map_mul := fun
a: ?m.4339
a
b: ?m.4342
b
=> (
hf: IsMulHom f
hf
.
map_mul: ∀ {α : Type ?u.4345} {β : Type ?u.4344} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
a: ?m.4339
a
b: ?m.4342
b
).
symm: ∀ {α : Sort ?u.4352} {a b : α}, a = bb = a
symm
mul_inv: ∀ {α : Type ?u.4364} [inst : DivisionCommMonoid α] (a b : α), (a * b)⁻¹ = a⁻¹ * b⁻¹
mul_inv
_: ?m.4365
_
_: ?m.4365
_
} #align is_mul_hom.inv
IsMulHom.inv: ∀ {α : Type u_1} {β : Type u_2} [inst : Mul α] [inst_1 : CommGroup β] {f : αβ}, IsMulHom fIsMulHom fun a => (f a)⁻¹
IsMulHom.inv
#align is_add_hom.neg
IsAddHom.neg: ∀ {α : Type u_1} {β : Type u_2} [inst : Add α] [inst_1 : AddCommGroup β] {f : αβ}, IsAddHom fIsAddHom fun a => -f a
IsAddHom.neg
end IsMulHom /-- Predicate for additive monoid homomorphisms (deprecated -- use the bundled `MonoidHom` version). -/ structure
IsAddMonoidHom: {α : Type u} → {β : Type v} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
IsAddMonoidHom
[
AddZeroClass: Type ?u.4464 → Type ?u.4464
AddZeroClass
α: Type u
α
] [
AddZeroClass: Type ?u.4467 → Type ?u.4467
AddZeroClass
β: Type v
β
] (
f: αβ
f
:
α: Type u
α
β: Type v
β
) extends
IsAddHom: {α : Type ?u.4476} → {β : Type ?u.4475} → [inst : Add α] → [inst : Add β] → (αβ) → Prop
IsAddHom
f: αβ
f
:
Prop: Type
Prop
where /-- The proposition that `f` preserves the additive identity. -/
map_zero: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom ff 0 = 0
map_zero
:
f: αβ
f
0: ?m.4725
0
=
0: ?m.5045
0
#align is_add_monoid_hom
IsAddMonoidHom: {α : Type u} → {β : Type v} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
IsAddMonoidHom
/-- Predicate for monoid homomorphisms (deprecated -- use the bundled `MonoidHom` version). -/ @[
to_additive: {α : Type u} → {β : Type v} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
to_additive
] structure
IsMonoidHom: {α : Type u} → {β : Type v} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
[
MulOneClass: Type ?u.5398 → Type ?u.5398
MulOneClass
α: Type u
α
] [
MulOneClass: Type ?u.5401 → Type ?u.5401
MulOneClass
β: Type v
β
] (
f: αβ
f
:
α: Type u
α
β: Type v
β
) extends
IsMulHom: {α : Type ?u.5410} → {β : Type ?u.5409} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
f: αβ
f
:
Prop: Type
Prop
where /-- The proposition that `f` preserves the multiplicative identity. -/
map_one: ∀ {α : Type u} {β : Type v} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom ff 1 = 1
map_one
:
f: αβ
f
1: ?m.5813
1
=
1: ?m.6048
1
#align is_monoid_hom
IsMonoidHom: {α : Type u} → {β : Type v} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
namespace MonoidHom variable {
M: Type ?u.6322
M
:
Type _: Type (?u.6338+1)
Type _
} {
N: Type ?u.6341
N
:
Type _: Type (?u.6325+1)
Type _
} {mM :
MulOneClass: Type ?u.6344 → Type ?u.6344
MulOneClass
M: Type ?u.7682
M
} {mN :
MulOneClass: Type ?u.6331 → Type ?u.6331
MulOneClass
N: Type ?u.6325
N
} /-- Interpret a map `f : M → N` as a homomorphism `M →* N`. -/ @[
to_additive: {M : Type u_1} → {N : Type u_2} → {mM : AddZeroClass M} → {mN : AddZeroClass N} → {f : MN} → IsAddMonoidHom fM →+ N
to_additive
"Interpret a map `f : M → N` as a homomorphism `M →+ N`."] def
of: {f : MN} → IsMonoidHom fM →* N
of
{
f: MN
f
:
M: Type ?u.6338
M
N: Type ?u.6341
N
} (h :
IsMonoidHom: {α : Type ?u.6355} → {β : Type ?u.6354} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: MN
f
) :
M: Type ?u.6338
M
→*
N: Type ?u.6341
N
where toFun :=
f: MN
f
map_one' := h.
2: ∀ {α : Type ?u.6904} {β : Type ?u.6903} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom ff 1 = 1
2
map_mul' := h.
1: ∀ {α : Type ?u.6921} {β : Type ?u.6920} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom fIsMulHom f
1
.
1: ∀ {α : Type ?u.6929} {β : Type ?u.6928} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
1
#align monoid_hom.of
MonoidHom.of: {M : Type u_1} → {N : Type u_2} → {mM : MulOneClass M} → {mN : MulOneClass N} → {f : MN} → IsMonoidHom fM →* N
MonoidHom.of
#align add_monoid_hom.of
AddMonoidHom.of: {M : Type u_1} → {N : Type u_2} → {mM : AddZeroClass M} → {mN : AddZeroClass N} → {f : MN} → IsAddMonoidHom fM →+ N
AddMonoidHom.of
@[
to_additive: ∀ {M : Type u_1} {N : Type u_2} {mM : AddZeroClass M} {mN : AddZeroClass N} {f : MN} (hf : IsAddMonoidHom f), ↑(AddMonoidHom.of hf) = f
to_additive
(attr := simp)] theorem
coe_of: ∀ {M : Type u_1} {N : Type u_2} {mM : MulOneClass M} {mN : MulOneClass N} {f : MN} (hf : IsMonoidHom f), ↑(of hf) = f
coe_of
{
f: MN
f
:
M: Type ?u.7682
M
N: Type ?u.7685
N
} (hf :
IsMonoidHom: {α : Type ?u.7699} → {β : Type ?u.7698} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: MN
f
) : ⇑(
MonoidHom.of: {M : Type ?u.7733} → {N : Type ?u.7732} → {mM : MulOneClass M} → {mN : MulOneClass N} → {f : MN} → IsMonoidHom fM →* N
MonoidHom.of
hf) =
f: MN
f
:=
rfl: ∀ {α : Sort ?u.8266} {a : α}, a = a
rfl
#align monoid_hom.coe_of
MonoidHom.coe_of: ∀ {M : Type u_1} {N : Type u_2} {mM : MulOneClass M} {mN : MulOneClass N} {f : MN} (hf : IsMonoidHom f), ↑(of hf) = f
MonoidHom.coe_of
#align add_monoid_hom.coe_of
AddMonoidHom.coe_of: ∀ {M : Type u_1} {N : Type u_2} {mM : AddZeroClass M} {mN : AddZeroClass N} {f : MN} (hf : IsAddMonoidHom f), ↑(AddMonoidHom.of hf) = f
AddMonoidHom.coe_of
@[
to_additive: ∀ {M : Type u_1} {N : Type u_2} {mM : AddZeroClass M} {mN : AddZeroClass N} (f : M →+ N), IsAddMonoidHom f
to_additive
] theorem
isMonoidHom_coe: ∀ {M : Type u_1} {N : Type u_2} {mM : MulOneClass M} {mN : MulOneClass N} (f : M →* N), IsMonoidHom f
isMonoidHom_coe
(
f: M →* N
f
:
M: Type ?u.8382
M
→*
N: Type ?u.8385
N
) :
IsMonoidHom: {α : Type ?u.8411} → {β : Type ?u.8410} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
(
f: M →* N
f
:
M: Type ?u.8382
M
N: Type ?u.8385
N
) := { map_mul :=
f: M →* N
f
.
map_mul: ∀ {M : Type ?u.9326} {N : Type ?u.9327} [inst : MulOneClass M] [inst_1 : MulOneClass N] (f : M →* N) (a b : M), f (a * b) = f a * f b
map_mul
map_one :=
f: M →* N
f
.
map_one: ∀ {M : Type ?u.9356} {N : Type ?u.9357} [inst : MulOneClass M] [inst_1 : MulOneClass N] (f : M →* N), f 1 = 1
map_one
} #align monoid_hom.is_monoid_hom_coe
MonoidHom.isMonoidHom_coe: ∀ {M : Type u_1} {N : Type u_2} {mM : MulOneClass M} {mN : MulOneClass N} (f : M →* N), IsMonoidHom f
MonoidHom.isMonoidHom_coe
#align add_monoid_hom.is_add_monoid_hom_coe
AddMonoidHom.isAddMonoidHom_coe: ∀ {M : Type u_1} {N : Type u_2} {mM : AddZeroClass M} {mN : AddZeroClass N} (f : M →+ N), IsAddMonoidHom f
AddMonoidHom.isAddMonoidHom_coe
end MonoidHom namespace MulEquiv variable {
M: Type ?u.9403
M
:
Type _: Type (?u.9419+1)
Type _
} {
N: Type ?u.9406
N
:
Type _: Type (?u.9422+1)
Type _
} [
MulOneClass: Type ?u.9409 → Type ?u.9409
MulOneClass
M: Type ?u.9403
M
] [
MulOneClass: Type ?u.9412 → Type ?u.9412
MulOneClass
N: Type ?u.9406
N
] /-- A multiplicative isomorphism preserves multiplication (deprecated). -/ @[
to_additive: ∀ {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (h : M ≃+ N), IsAddHom h
to_additive
"An additive isomorphism preserves addition (deprecated)."] theorem
isMulHom: ∀ (h : M ≃* N), IsMulHom h
isMulHom
(
h: M ≃* N
h
:
M: Type ?u.9419
M
≃*
N: Type ?u.9422
N
) :
IsMulHom: {α : Type ?u.9790} → {β : Type ?u.9789} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
h: M ≃* N
h
:= ⟨
h: M ≃* N
h
.
map_mul: ∀ {M : Type ?u.9938} {N : Type ?u.9939} [inst : Mul M] [inst_1 : Mul N] (f : M ≃* N) (x y : M), f (x * y) = f x * f y
map_mul
#align mul_equiv.is_mul_hom
MulEquiv.isMulHom: ∀ {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] (h : M ≃* N), IsMulHom h
MulEquiv.isMulHom
#align add_equiv.is_add_hom
AddEquiv.isAddHom: ∀ {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (h : M ≃+ N), IsAddHom h
AddEquiv.isAddHom
/-- A multiplicative bijection between two monoids is a monoid hom (deprecated -- use `MulEquiv.toMonoidHom`). -/ @[
to_additive: ∀ {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (h : M ≃+ N), IsAddMonoidHom h
to_additive
"An additive bijection between two additive monoids is an additive monoid hom (deprecated). "] theorem
isMonoidHom: ∀ (h : M ≃* N), IsMonoidHom h
isMonoidHom
(
h: M ≃* N
h
:
M: Type ?u.10350
M
≃*
N: Type ?u.10353
N
) :
IsMonoidHom: {α : Type ?u.10721} → {β : Type ?u.10720} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
h: M ≃* N
h
:= { map_mul :=
h: M ≃* N
h
.
map_mul: ∀ {M : Type ?u.11175} {N : Type ?u.11176} [inst : Mul M] [inst_1 : Mul N] (f : M ≃* N) (x y : M), f (x * y) = f x * f y
map_mul
map_one :=
h: M ≃* N
h
.
map_one: ∀ {M : Type ?u.11201} {N : Type ?u.11202} [inst : MulOneClass M] [inst_1 : MulOneClass N] (h : M ≃* N), h 1 = 1
map_one
} #align mul_equiv.is_monoid_hom
MulEquiv.isMonoidHom: ∀ {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] (h : M ≃* N), IsMonoidHom h
MulEquiv.isMonoidHom
#align add_equiv.is_add_monoid_hom
AddEquiv.isAddMonoidHom: ∀ {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (h : M ≃+ N), IsAddMonoidHom h
AddEquiv.isAddMonoidHom
end MulEquiv namespace IsMonoidHom variable [
MulOneClass: Type ?u.11295 → Type ?u.11295
MulOneClass
α: Type u
α
] [
MulOneClass: Type ?u.11298 → Type ?u.11298
MulOneClass
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (hf :
IsMonoidHom: {α : Type ?u.11259} → {β : Type ?u.11258} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: αβ
f
) /-- A monoid homomorphism preserves multiplication. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom f∀ (x y : α), f (x + y) = f x + f y
to_additive
"An additive monoid homomorphism preserves addition."] theorem
map_mul': ∀ {α : Type u} {β : Type v} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom f∀ (x y : α), f (x * y) = f x * f y
map_mul'
(
x: α
x
y: ?m.11341
y
) :
f: αβ
f
(
x: ?m.11338
x
*
y: ?m.11341
y
) =
f: αβ
f
x: ?m.11338
x
*
f: αβ
f
y: ?m.11341
y
:= hf.
map_mul: ∀ {α : Type ?u.12048} {β : Type ?u.12047} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
x: α
x
y: α
y
#align is_monoid_hom.map_mul
IsMonoidHom.map_mul': ∀ {α : Type u} {β : Type v} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom f∀ (x y : α), f (x * y) = f x * f y
IsMonoidHom.map_mul'
#align is_add_monoid_hom.map_add
IsAddMonoidHom.map_add': ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom f∀ (x y : α), f (x + y) = f x + f y
IsAddMonoidHom.map_add'
/-- The inverse of a map which preserves multiplication, preserves multiplication when the target is commutative. -/ @[
to_additive: ∀ {α : Type u_1} {β : Type u_2} [inst : AddZeroClass α] [inst_1 : AddCommGroup β] {f : αβ}, IsAddMonoidHom fIsAddMonoidHom fun a => -f a
to_additive
"The negation of a map which preserves addition, preserves addition when the target is commutative."] theorem
inv: ∀ {α : Type u_1} {β : Type u_2} [inst : MulOneClass α] [inst_1 : CommGroup β] {f : αβ}, IsMonoidHom fIsMonoidHom fun a => (f a)⁻¹
inv
{
α: Type u_1
α
β: ?m.12425
β
} [
MulOneClass: Type ?u.12428 → Type ?u.12428
MulOneClass
α: ?m.12422
α
] [
CommGroup: Type ?u.12431 → Type ?u.12431
CommGroup
β: ?m.12425
β
] {
f: αβ
f
:
α: ?m.12422
α
β: ?m.12425
β
} (hf :
IsMonoidHom: {α : Type ?u.12439} → {β : Type ?u.12438} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: αβ
f
) :
IsMonoidHom: {α : Type ?u.12580} → {β : Type ?u.12579} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
fun
a: ?m.12598
a
=> (
f: αβ
f
a: ?m.12598
a
)⁻¹ := { map_one := hf.
map_one: ∀ {α : Type ?u.13251} {β : Type ?u.13250} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom ff 1 = 1
map_one
.
symm: ∀ {α : Sort ?u.13258} {a b : α}, a = bb = a
symm
inv_one: ∀ {G : Type ?u.13266} [inst : InvOneClass G], 1⁻¹ = 1
inv_one
map_mul := fun
a: ?m.13167
a
b: ?m.13170
b
=> (hf.
map_mul: ∀ {α : Type ?u.13181} {β : Type ?u.13180} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
a: ?m.13167
a
b: ?m.13170
b
).
symm: ∀ {α : Sort ?u.13188} {a b : α}, a = bb = a
symm
mul_inv: ∀ {α : Type ?u.13200} [inst : DivisionCommMonoid α] (a b : α), (a * b)⁻¹ = a⁻¹ * b⁻¹
mul_inv
_: ?m.13201
_
_: ?m.13201
_
} #align is_monoid_hom.inv
IsMonoidHom.inv: ∀ {α : Type u_1} {β : Type u_2} [inst : MulOneClass α] [inst_1 : CommGroup β] {f : αβ}, IsMonoidHom fIsMonoidHom fun a => (f a)⁻¹
IsMonoidHom.inv
#align is_add_monoid_hom.neg
IsAddMonoidHom.neg: ∀ {α : Type u_1} {β : Type u_2} [inst : AddZeroClass α] [inst_1 : AddCommGroup β] {f : αβ}, IsAddMonoidHom fIsAddMonoidHom fun a => -f a
IsAddMonoidHom.neg
end IsMonoidHom /-- A map to a group preserving multiplication is a monoid homomorphism. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddGroup β] {f : αβ}, IsAddHom fIsAddMonoidHom f
to_additive
"A map to an additive group preserving addition is an additive monoid homomorphism."] theorem
IsMulHom.to_isMonoidHom: ∀ [inst : MulOneClass α] [inst_1 : Group β] {f : αβ}, IsMulHom fIsMonoidHom f
IsMulHom.to_isMonoidHom
[
MulOneClass: Type ?u.13370 → Type ?u.13370
MulOneClass
α: Type u
α
] [
Group: Type ?u.13373 → Type ?u.13373
Group
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (
hf: IsMulHom f
hf
:
IsMulHom: {α : Type ?u.13381} → {β : Type ?u.13380} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
f: αβ
f
) :
IsMonoidHom: {α : Type ?u.13810} → {β : Type ?u.13809} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: αβ
f
:= { map_one :=
mul_right_eq_self: ∀ {M : Type ?u.14338} [inst : LeftCancelMonoid M] {a b : M}, a * b = a b = 1
mul_right_eq_self
.
1: ∀ {a b : Prop}, (a b) → ab
1
<|

Goals accomplished! 🐙
α: Type u

β: Type v

inst✝¹: MulOneClass α

inst✝: Group β

f: αβ

hf: IsMulHom f


?m.14380 hf * f 1 = ?m.14380 hf
α: Type u

β: Type v

inst✝¹: MulOneClass α

inst✝: Group β

f: αβ

hf: IsMulHom f


?m.14380 hf * f 1 = ?m.14380 hf
α: Type u

β: Type v

inst✝¹: MulOneClass α

inst✝: Group β

f: αβ

hf: IsMulHom f


f (?m.14400 hf * 1) = f (?m.14400 hf)
α: Type u

β: Type v


[inst : MulOneClass α] → [inst_1 : Group β] → {f : αβ} → IsMulHom fα
α: Type u

β: Type v

inst✝¹: MulOneClass α

inst✝: Group β

f: αβ

hf: IsMulHom f


?m.14380 hf * f 1 = ?m.14380 hf
α: Type u

β: Type v

inst✝¹: MulOneClass α

inst✝: Group β

f: αβ

hf: IsMulHom f


f 1 = f 1

Goals accomplished! 🐙
map_mul :=
hf: IsMulHom f
hf
.
map_mul: ∀ {α : Type ?u.14322} {β : Type ?u.14321} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
} #align is_mul_hom.to_is_monoid_hom
IsMulHom.to_isMonoidHom: ∀ {α : Type u} {β : Type v} [inst : MulOneClass α] [inst_1 : Group β] {f : αβ}, IsMulHom fIsMonoidHom f
IsMulHom.to_isMonoidHom
#align is_add_hom.to_is_add_monoid_hom
IsAddHom.to_isAddMonoidHom: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddGroup β] {f : αβ}, IsAddHom fIsAddMonoidHom f
IsAddHom.to_isAddMonoidHom
namespace IsMonoidHom variable [
MulOneClass: Type ?u.14733 → Type ?u.14733
MulOneClass
α: Type u
α
] [
MulOneClass: Type ?u.14736 → Type ?u.14736
MulOneClass
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} /-- The identity map is a monoid homomorphism. -/ @[
to_additive: ∀ {α : Type u} [inst : AddZeroClass α], IsAddMonoidHom _root_.id
to_additive
"The identity map is an additive monoid homomorphism."] theorem
id: IsMonoidHom _root_.id
id
:
IsMonoidHom: {α : Type ?u.14744} → {β : Type ?u.14743} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
(@
id: {α : Sort ?u.14761} → αα
id
α: Type u
α
) := { map_one :=
rfl: ∀ {α : Sort ?u.14990} {a : α}, a = a
rfl
map_mul := fun
_: ?m.14973
_
_: ?m.14976
_
=>
rfl: ∀ {α : Sort ?u.14978} {a : α}, a = a
rfl
} #align is_monoid_hom.id
IsMonoidHom.id: ∀ {α : Type u} [inst : MulOneClass α], IsMonoidHom _root_.id
IsMonoidHom.id
#align is_add_monoid_hom.id
IsAddMonoidHom.id: ∀ {α : Type u} [inst : AddZeroClass α], IsAddMonoidHom _root_.id
IsAddMonoidHom.id
/-- The composite of two monoid homomorphisms is a monoid homomorphism. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom f∀ {γ : Type u_1} [inst_2 : AddZeroClass γ] {g : βγ}, IsAddMonoidHom gIsAddMonoidHom (g f)
to_additive
"The composite of two additive monoid homomorphisms is an additive monoid homomorphism."] theorem
comp: ∀ {α : Type u} {β : Type v} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom f∀ {γ : Type u_1} [inst_2 : MulOneClass γ] {g : βγ}, IsMonoidHom gIsMonoidHom (g f)
comp
(hf :
IsMonoidHom: {α : Type ?u.15023} → {β : Type ?u.15022} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: αβ
f
) {
γ: Type u_1
γ
} [
MulOneClass: Type ?u.15058 → Type ?u.15058
MulOneClass
γ: ?m.15055
γ
] {
g: βγ
g
:
β: Type v
β
γ: ?m.15055
γ
} (hg :
IsMonoidHom: {α : Type ?u.15066} → {β : Type ?u.15065} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
g: βγ
g
) :
IsMonoidHom: {α : Type ?u.15096} → {β : Type ?u.15095} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
(
g: βγ
g
f: αβ
f
) := {
IsMulHom.comp: ∀ {α : Type ?u.15142} {β : Type ?u.15141} [inst : Mul α] [inst_1 : Mul β] {γ : Type ?u.15143} [inst_2 : Mul γ] {f : αβ} {g : βγ}, IsMulHom fIsMulHom gIsMulHom (g f)
IsMulHom.comp
hf.
toIsMulHom: ∀ {α : Type ?u.15210} {β : Type ?u.15209} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom fIsMulHom f
toIsMulHom
hg.
toIsMulHom: ∀ {α : Type ?u.15245} {β : Type ?u.15244} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom fIsMulHom f
toIsMulHom
with map_one := show
g: βγ
g
_: β
_
=
1: ?m.15845
1
by
α: Type u

β: Type v

inst✝²: MulOneClass α

inst✝¹: MulOneClass β

f: αβ

hf: IsMonoidHom f

γ: Type u_1

inst✝: MulOneClass γ

g: βγ

hg: IsMonoidHom g

src✝:= IsMulHom.comp hf.toIsMulHom hg.toIsMulHom: IsMulHom (g f)


g (f 1) = 1
α: Type u

β: Type v

inst✝²: MulOneClass α

inst✝¹: MulOneClass β

f: αβ

hf: IsMonoidHom f

γ: Type u_1

inst✝: MulOneClass γ

g: βγ

hg: IsMonoidHom g

src✝:= IsMulHom.comp hf.toIsMulHom hg.toIsMulHom: IsMulHom (g f)


g 1 = 1
α: Type u

β: Type v

inst✝²: MulOneClass α

inst✝¹: MulOneClass β

f: αβ

hf: IsMonoidHom f

γ: Type u_1

inst✝: MulOneClass γ

g: βγ

hg: IsMonoidHom g

src✝:= IsMulHom.comp hf.toIsMulHom hg.toIsMulHom: IsMulHom (g f)


g (f 1) = 1
α: Type u

β: Type v

inst✝²: MulOneClass α

inst✝¹: MulOneClass β

f: αβ

hf: IsMonoidHom f

γ: Type u_1

inst✝: MulOneClass γ

g: βγ

hg: IsMonoidHom g

src✝:= IsMulHom.comp hf.toIsMulHom hg.toIsMulHom: IsMulHom (g f)


1 = 1

Goals accomplished! 🐙
} #align is_monoid_hom.comp
IsMonoidHom.comp: ∀ {α : Type u} {β : Type v} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom f∀ {γ : Type u_1} [inst_2 : MulOneClass γ] {g : βγ}, IsMonoidHom gIsMonoidHom (g f)
IsMonoidHom.comp
#align is_add_monoid_hom.comp
IsAddMonoidHom.comp: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom f∀ {γ : Type u_1} [inst_2 : AddZeroClass γ] {g : βγ}, IsAddMonoidHom gIsAddMonoidHom (g f)
IsAddMonoidHom.comp
end IsMonoidHom namespace IsAddMonoidHom /-- Left multiplication in a ring is an additive monoid morphism. -/ theorem
isAddMonoidHom_mul_left: ∀ {γ : Type u_1} [inst : NonUnitalNonAssocSemiring γ] (x : γ), IsAddMonoidHom fun y => x * y
isAddMonoidHom_mul_left
{
γ: Type ?u.16200
γ
:
Type _: Type (?u.16200+1)
Type _
} [
NonUnitalNonAssocSemiring: Type ?u.16203 → Type ?u.16203
NonUnitalNonAssocSemiring
γ: Type ?u.16200
γ
] (
x: γ
x
:
γ: Type ?u.16200
γ
) :
IsAddMonoidHom: {α : Type ?u.16209} → {β : Type ?u.16208} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
IsAddMonoidHom
fun
y: γ
y
:
γ: Type ?u.16200
γ
=>
x: γ
x
*
y: γ
y
:= { map_zero :=
mul_zero: ∀ {M₀ : Type ?u.16860} [self : MulZeroClass M₀] (a : M₀), a * 0 = 0
mul_zero
x: γ
x
map_add := fun
y: ?m.16781
y
z: ?m.16784
z
=>
mul_add: ∀ {R : Type ?u.16786} [inst : Mul R] [inst_1 : Add R] [inst_2 : LeftDistribClass R] (a b c : R), a * (b + c) = a * b + a * c
mul_add
x: γ
x
y: ?m.16781
y
z: ?m.16784
z
} #align is_add_monoid_hom.is_add_monoid_hom_mul_left
IsAddMonoidHom.isAddMonoidHom_mul_left: ∀ {γ : Type u_1} [inst : NonUnitalNonAssocSemiring γ] (x : γ), IsAddMonoidHom fun y => x * y
IsAddMonoidHom.isAddMonoidHom_mul_left
/-- Right multiplication in a ring is an additive monoid morphism. -/ theorem
isAddMonoidHom_mul_right: ∀ {γ : Type u_1} [inst : NonUnitalNonAssocSemiring γ] (x : γ), IsAddMonoidHom fun y => y * x
isAddMonoidHom_mul_right
{
γ: Type ?u.16887
γ
:
Type _: Type (?u.16887+1)
Type _
} [
NonUnitalNonAssocSemiring: Type ?u.16890 → Type ?u.16890
NonUnitalNonAssocSemiring
γ: Type ?u.16887
γ
] (
x: γ
x
:
γ: Type ?u.16887
γ
) :
IsAddMonoidHom: {α : Type ?u.16896} → {β : Type ?u.16895} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
IsAddMonoidHom
fun
y: γ
y
:
γ: Type ?u.16887
γ
=>
y: γ
y
*
x: γ
x
:= { map_zero :=
zero_mul: ∀ {M₀ : Type ?u.17547} [self : MulZeroClass M₀] (a : M₀), 0 * a = 0
zero_mul
x: γ
x
map_add := fun
y: ?m.17468
y
z: ?m.17471
z
=>
add_mul: ∀ {R : Type ?u.17473} [inst : Mul R] [inst_1 : Add R] [inst_2 : RightDistribClass R] (a b c : R), (a + b) * c = a * c + b * c
add_mul
y: ?m.17468
y
z: ?m.17471
z
x: γ
x
} #align is_add_monoid_hom.is_add_monoid_hom_mul_right
IsAddMonoidHom.isAddMonoidHom_mul_right: ∀ {γ : Type u_1} [inst : NonUnitalNonAssocSemiring γ] (x : γ), IsAddMonoidHom fun y => y * x
IsAddMonoidHom.isAddMonoidHom_mul_right
end IsAddMonoidHom /-- Predicate for additive group homomorphism (deprecated -- use bundled `MonoidHom`). -/ structure
IsAddGroupHom: {α : Type u} → {β : Type v} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
[
AddGroup: Type ?u.17574 → Type ?u.17574
AddGroup
α: Type u
α
] [
AddGroup: Type ?u.17577 → Type ?u.17577
AddGroup
β: Type v
β
] (
f: αβ
f
:
α: Type u
α
β: Type v
β
) extends
IsAddHom: {α : Type ?u.17586} → {β : Type ?u.17585} → [inst : Add α] → [inst : Add β] → (αβ) → Prop
IsAddHom
f: αβ
f
:
Prop: Type
Prop
#align is_add_group_hom
IsAddGroupHom: {α : Type u} → {β : Type v} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
/-- Predicate for group homomorphisms (deprecated -- use bundled `MonoidHom`). -/ @[
to_additive: {α : Type u} → {β : Type v} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
to_additive
] structure
IsGroupHom: {α : Type u} → {β : Type v} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
[
Group: Type ?u.17963 → Type ?u.17963
Group
α: Type u
α
] [
Group: Type ?u.17966 → Type ?u.17966
Group
β: Type v
β
] (
f: αβ
f
:
α: Type u
α
β: Type v
β
) extends
IsMulHom: {α : Type ?u.17975} → {β : Type ?u.17974} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
f: αβ
f
:
Prop: Type
Prop
#align is_group_hom
IsGroupHom: {α : Type u} → {β : Type v} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
@[
to_additive: ∀ {G : Type u_1} {H : Type u_2} {x : AddGroup G} {x_1 : AddGroup H} (f : G →+ H), IsAddGroupHom f
to_additive
] theorem
MonoidHom.isGroupHom: ∀ {G : Type u_1} {H : Type u_2} {x : Group G} {x_1 : Group H} (f : G →* H), IsGroupHom f
MonoidHom.isGroupHom
{
G: Type ?u.18456
G
H: Type ?u.18459
H
:
Type _: Type (?u.18459+1)
Type _
} {
_: Group G
_
:
Group: Type ?u.18462 → Type ?u.18462
Group
G: Type ?u.18456
G
} {
_: Group H
_
:
Group: Type ?u.18465 → Type ?u.18465
Group
H: Type ?u.18459
H
} (
f: G →* H
f
:
G: Type ?u.18456
G
→*
H: Type ?u.18459
H
) :
IsGroupHom: {α : Type ?u.18697} → {β : Type ?u.18696} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
(
f: G →* H
f
:
G: Type ?u.18456
G
H: Type ?u.18459
H
) := { map_mul :=
f: G →* H
f
.
map_mul: ∀ {M : Type ?u.19676} {N : Type ?u.19677} [inst : MulOneClass M] [inst_1 : MulOneClass N] (f : M →* N) (a b : M), f (a * b) = f a * f b
map_mul
} #align monoid_hom.is_group_hom
MonoidHom.isGroupHom: ∀ {G : Type u_1} {H : Type u_2} {x : Group G} {x_1 : Group H} (f : G →* H), IsGroupHom f
MonoidHom.isGroupHom
#align add_monoid_hom.is_add_group_hom
AddMonoidHom.isAddGroupHom: ∀ {G : Type u_1} {H : Type u_2} {x : AddGroup G} {x_1 : AddGroup H} (f : G →+ H), IsAddGroupHom f
AddMonoidHom.isAddGroupHom
@[
to_additive: ∀ {G : Type u_1} {H : Type u_2} {x : AddGroup G} {x_1 : AddGroup H} (h : G ≃+ H), IsAddGroupHom h
to_additive
] theorem
MulEquiv.isGroupHom: ∀ {G : Type u_1} {H : Type u_2} {x : Group G} {x_1 : Group H} (h : G ≃* H), IsGroupHom h
MulEquiv.isGroupHom
{
G: Type u_1
G
H: Type u_2
H
:
Type _: Type (?u.19906+1)
Type _
} {
_: Group G
_
:
Group: Type ?u.19912 → Type ?u.19912
Group
G: Type ?u.19906
G
} {
_: Group H
_
:
Group: Type ?u.19915 → Type ?u.19915
Group
H: Type ?u.19909
H
} (
h: G ≃* H
h
:
G: Type ?u.19906
G
≃*
H: Type ?u.19909
H
) :
IsGroupHom: {α : Type ?u.20333} → {β : Type ?u.20332} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
h: G ≃* H
h
:= { map_mul :=
h: G ≃* H
h
.
map_mul: ∀ {M : Type ?u.20839} {N : Type ?u.20840} [inst : Mul M] [inst_1 : Mul N] (f : M ≃* N) (x y : M), f (x * y) = f x * f y
map_mul
} #align mul_equiv.is_group_hom
MulEquiv.isGroupHom: ∀ {G : Type u_1} {H : Type u_2} {x : Group G} {x_1 : Group H} (h : G ≃* H), IsGroupHom h
MulEquiv.isGroupHom
#align add_equiv.is_add_group_hom
AddEquiv.isAddGroupHom: ∀ {G : Type u_1} {H : Type u_2} {x : AddGroup G} {x_1 : AddGroup H} (h : G ≃+ H), IsAddGroupHom h
AddEquiv.isAddGroupHom
/-- Construct `IsGroupHom` from its only hypothesis. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, (∀ (x y : α), f (x + y) = f x + f y) → IsAddGroupHom f
to_additive
"Construct `IsAddGroupHom` from its only hypothesis."] theorem
IsGroupHom.mk': ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, (∀ (x y : α), f (x * y) = f x * f y) → IsGroupHom f
IsGroupHom.mk'
[
Group: Type ?u.20901 → Type ?u.20901
Group
α: Type u
α
] [
Group: Type ?u.20904 → Type ?u.20904
Group
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (
hf: ∀ (x y : α), f (x * y) = f x * f y
hf
: ∀
x: ?m.20912
x
y: ?m.20915
y
,
f: αβ
f
(
x: ?m.20912
x
*
y: ?m.20915
y
) =
f: αβ
f
x: ?m.20912
x
*
f: αβ
f
y: ?m.20915
y
) :
IsGroupHom: {α : Type ?u.21701} → {β : Type ?u.21700} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
:= { map_mul :=
hf: ∀ (x y : α), f (x * y) = f x * f y
hf
} #align is_group_hom.mk'
IsGroupHom.mk': ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, (∀ (x y : α), f (x * y) = f x * f y) → IsGroupHom f
IsGroupHom.mk'
#align is_add_group_hom.mk'
IsAddGroupHom.mk': ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, (∀ (x y : α), f (x + y) = f x + f y) → IsAddGroupHom f
IsAddGroupHom.mk'
namespace IsGroupHom variable [
Group: Type ?u.23735 → Type ?u.23735
Group
α: Type u
α
] [
Group: Type ?u.24324 → Type ?u.24324
Group
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (hf :
IsGroupHom: {α : Type ?u.22180} → {β : Type ?u.22179} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) open IsMulHom (map_mul) theorem
map_mul': ∀ (x y : α), f (x * y) = f x * f y
map_mul'
: ∀
x: ?m.22209
x
y: ?m.22212
y
,
f: αβ
f
(
x: ?m.22209
x
*
y: ?m.22212
y
) =
f: αβ
f
x: ?m.22209
x
*
f: αβ
f
y: ?m.22212
y
:= hf.
toIsMulHom: ∀ {α : Type ?u.22997} {β : Type ?u.22996} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
.
map_mul: ∀ {α : Type ?u.23015} {β : Type ?u.23014} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
#align is_group_hom.map_mul
IsGroupHom.map_mul': ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f∀ (x y : α), f (x * y) = f x * f y
IsGroupHom.map_mul'
/-- A group homomorphism is a monoid homomorphism. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom fIsAddMonoidHom f
to_additive
"An additive group homomorphism is an additive monoid homomorphism."] theorem
to_isMonoidHom: IsMonoidHom f
to_isMonoidHom
:
IsMonoidHom: {α : Type ?u.23399} → {β : Type ?u.23398} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: αβ
f
:= hf.
toIsMulHom: ∀ {α : Type ?u.23647} {β : Type ?u.23646} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
.
to_isMonoidHom: ∀ {α : Type ?u.23665} {β : Type ?u.23664} [inst : MulOneClass α] [inst_1 : Group β] {f : αβ}, IsMulHom fIsMonoidHom f
to_isMonoidHom
#align is_group_hom.to_is_monoid_hom
IsGroupHom.to_isMonoidHom: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMonoidHom f
IsGroupHom.to_isMonoidHom
#align is_add_group_hom.to_is_add_monoid_hom
IsAddGroupHom.to_isAddMonoidHom: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom fIsAddMonoidHom f
IsAddGroupHom.to_isAddMonoidHom
/-- A group homomorphism sends 1 to 1. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom ff 0 = 0
to_additive
"An additive group homomorphism sends 0 to 0."] theorem
map_one: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom ff 1 = 1
map_one
:
f: αβ
f
1: ?m.23776
1
=
1: ?m.23906
1
:= hf.
to_isMonoidHom: ∀ {α : Type ?u.24051} {β : Type ?u.24050} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMonoidHom f
to_isMonoidHom
.
map_one: ∀ {α : Type ?u.24069} {β : Type ?u.24068} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom ff 1 = 1
map_one
#align is_group_hom.map_one
IsGroupHom.map_one: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom ff 1 = 1
IsGroupHom.map_one
#align is_add_group_hom.map_zero
IsAddGroupHom.map_zero: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom ff 0 = 0
IsAddGroupHom.map_zero
/-- A group homomorphism sends inverses to inverses. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f∀ (a : α), f (-a) = -f a
to_additive
"An additive group homomorphism sends negations to negations."] theorem
map_inv: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f∀ (a : α), f a⁻¹ = (f a)⁻¹
map_inv
(hf :
IsGroupHom: {α : Type ?u.24361} → {β : Type ?u.24360} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) (
a: α
a
:
α: Type u
α
) :
f: αβ
f
a: α
a
⁻¹ = (
f: αβ
f
a: α
a
)⁻¹ :=
eq_inv_of_mul_eq_one_left: ∀ {α : Type ?u.24507} [inst : DivisionMonoid α] {a b : α}, a * b = 1a = b⁻¹
eq_inv_of_mul_eq_one_left
<|

Goals accomplished! 🐙
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a: α


f a⁻¹ * f a = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a: α


f a⁻¹ * f a = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a: α


f (a⁻¹ * a) = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a: α


f a⁻¹ * f a = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a: α


f 1 = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a: α


f a⁻¹ * f a = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a: α


1 = 1

Goals accomplished! 🐙
#align is_group_hom.map_inv
IsGroupHom.map_inv: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f∀ (a : α), f a⁻¹ = (f a)⁻¹
IsGroupHom.map_inv
#align is_add_group_hom.map_neg
IsAddGroupHom.map_neg: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f∀ (a : α), f (-a) = -f a
IsAddGroupHom.map_neg
@[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f∀ (a b : α), f (a - b) = f a - f b
to_additive
] theorem
map_div: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f∀ (a b : α), f (a / b) = f a / f b
map_div
(hf :
IsGroupHom: {α : Type ?u.25130} → {β : Type ?u.25129} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) (
a: α
a
b: α
b
:
α: Type u
α
) :
f: αβ
f
(
a: α
a
/
b: α
b
) =
f: αβ
f
a: α
a
/
f: αβ
f
b: α
b
:=

Goals accomplished! 🐙
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a, b: α


f (a / b) = f a / f b
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a, b: α


f (a / b) = f a / f b
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a, b: α


f (a * b⁻¹) = f a * (f b)⁻¹
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a, b: α


f (a / b) = f a / f b
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a, b: α


f a * f b⁻¹ = f a * (f b)⁻¹
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f: αβ

hf✝, hf: IsGroupHom f

a, b: α


f (a / b) = f a / f b

Goals accomplished! 🐙

Goals accomplished! 🐙
#align is_group_hom.map_div
IsGroupHom.map_div: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f∀ (a b : α), f (a / b) = f a / f b
IsGroupHom.map_div
#align is_add_group_hom.map_sub
IsAddGroupHom.map_sub: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f∀ (a b : α), f (a - b) = f a - f b
IsAddGroupHom.map_sub
/-- The identity is a group homomorphism. -/ @[
to_additive: ∀ {α : Type u} [inst : AddGroup α], IsAddGroupHom _root_.id
to_additive
"The identity is an additive group homomorphism."] theorem
id: ∀ {α : Type u} [inst : Group α], IsGroupHom _root_.id
id
:
IsGroupHom: {α : Type ?u.26253} → {β : Type ?u.26252} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
(@
id: {α : Sort ?u.26268} → αα
id
α: Type u
α
) := { map_mul := fun
_: ?m.26507
_
_: ?m.26510
_
=>
rfl: ∀ {α : Sort ?u.26512} {a : α}, a = a
rfl
} #align is_group_hom.id
IsGroupHom.id: ∀ {α : Type u} [inst : Group α], IsGroupHom _root_.id
IsGroupHom.id
#align is_add_group_hom.id
IsAddGroupHom.id: ∀ {α : Type u} [inst : AddGroup α], IsAddGroupHom _root_.id
IsAddGroupHom.id
/-- The composition of two group homomorphisms is a group homomorphism. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f∀ {γ : Type u_1} [inst_2 : AddGroup γ] {g : βγ}, IsAddGroupHom gIsAddGroupHom (g f)
to_additive
"The composition of two additive group homomorphisms is an additive group homomorphism."] theorem
comp: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f∀ {γ : Type u_1} [inst_2 : Group γ] {g : βγ}, IsGroupHom gIsGroupHom (g f)
comp
(hf :
IsGroupHom: {α : Type ?u.26583} → {β : Type ?u.26582} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) {
γ: Type u_1
γ
} [
Group: Type ?u.26614 → Type ?u.26614
Group
γ: ?m.26611
γ
] {
g: βγ
g
:
β: Type v
β
γ: ?m.26611
γ
} (hg :
IsGroupHom: {α : Type ?u.26622} → {β : Type ?u.26621} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
g: βγ
g
) :
IsGroupHom: {α : Type ?u.26648} → {β : Type ?u.26647} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
(
g: βγ
g
f: αβ
f
) :=
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
{
IsMulHom.comp: ∀ {α : Type ?u.26691} {β : Type ?u.26690} [inst : Mul α] [inst_1 : Mul β] {γ : Type ?u.26692} [inst_2 : Mul γ] {f : αβ} {g : βγ}, IsMulHom fIsMulHom gIsMulHom (g f)
IsMulHom.comp
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
hf
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
.
toIsMulHom: ∀ {α : Type ?u.26759} {β : Type ?u.26758} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
hg
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
.
toIsMulHom: ∀ {α : Type ?u.26792} {β : Type ?u.26791} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
with
{ IsMulHom.comp hf.toIsMulHom hg.toIsMulHom with }: IsGroupHom ?m.27438
}
#align is_group_hom.comp
IsGroupHom.comp: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f∀ {γ : Type u_1} [inst_2 : Group γ] {g : βγ}, IsGroupHom gIsGroupHom (g f)
IsGroupHom.comp
#align is_add_group_hom.comp
IsAddGroupHom.comp: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f∀ {γ : Type u_1} [inst_2 : AddGroup γ] {g : βγ}, IsAddGroupHom gIsAddGroupHom (g f)
IsAddGroupHom.comp
/-- A group homomorphism is injective iff its kernel is trivial. -/ @[
to_additive: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f → (Function.Injective f ∀ (a : α), f a = 0a = 0)
to_additive
"An additive group homomorphism is injective if its kernel is trivial."] theorem
injective_iff: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f → (Function.Injective f ∀ (a : α), f a = 1a = 1)
injective_iff
{
f: αβ
f
:
α: Type u
α
β: Type v
β
} (hf :
IsGroupHom: {α : Type ?u.27582} → {β : Type ?u.27581} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) :
Function.Injective: {α : Sort ?u.27611} → {β : Sort ?u.27610} → (αβ) → Prop
Function.Injective
f: αβ
f
↔ ∀
a: ?m.27618
a
,
f: αβ
f
a: ?m.27618
a
=
1: ?m.27624
1
a: ?m.27618
a
=
1: ?m.27768
1
:= ⟨fun
h: ?m.27925
h
_: ?m.27928
_
=>

Goals accomplished! 🐙
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: Function.Injective f

x✝: α


f x✝ = 1x✝ = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: Function.Injective f

x✝: α


f x✝ = 1x✝ = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: Function.Injective f

x✝: α


f x✝ = f 1x✝ = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: Function.Injective f

x✝: α


f x✝ = f 1x✝ = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: Function.Injective f

x✝: α


f x✝ = f 1x✝ = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: Function.Injective f

x✝: α


f x✝ = 1x✝ = 1

Goals accomplished! 🐙
, fun
h: ?m.27936
h
x: ?m.27939
x
y: ?m.27942
y
hxy: ?m.27945
hxy
=>
eq_of_div_eq_one: ∀ {α : Type ?u.27947} [inst : DivisionMonoid α] {a b : α}, a / b = 1a = b
eq_of_div_eq_one
<|
h: ?m.27936
h
_: α
_
<|

Goals accomplished! 🐙
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: ∀ (a : α), f a = 1a = 1

x, y: α

hxy: f x = f y


f (x / y) = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: ∀ (a : α), f a = 1a = 1

x, y: α

hxy: f x = f y


f (x / y) = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: ∀ (a : α), f a = 1a = 1

x, y: α

hxy: f x = f y


f x / f y = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: ∀ (a : α), f a = 1a = 1

x, y: α

hxy: f x = f y


f (x / y) = 1
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: ∀ (a : α), f a = 1a = 1

x, y: α

hxy: f x = f y


f x = f y
α: Type u

β: Type v

inst✝¹: Group α

inst✝: Group β

f✝: αβ

hf✝: IsGroupHom f✝

f: αβ

hf: IsGroupHom f

h: ∀ (a : α), f a = 1a = 1

x, y: α

hxy: f x = f y


f x = f y
#align is_group_hom.injective_iff
IsGroupHom.injective_iff: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom f → (Function.Injective f ∀ (a : α), f a = 1a = 1)
IsGroupHom.injective_iff
#align is_add_group_hom.injective_iff
IsAddGroupHom.injective_iff: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom f → (Function.Injective f ∀ (a : α), f a = 0a = 0)
IsAddGroupHom.injective_iff
/-- The product of group homomorphisms is a group homomorphism if the target is commutative. -/ @[
to_additive: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroup α] [inst_1 : AddCommGroup β] {f g : αβ}, IsAddGroupHom fIsAddGroupHom gIsAddGroupHom fun a => f a + g a
to_additive
"The sum of two additive group homomorphisms is an additive group homomorphism if the target is commutative."] theorem
mul: ∀ {α : Type u_1} {β : Type u_2} [inst : Group α] [inst_1 : CommGroup β] {f g : αβ}, IsGroupHom fIsGroupHom gIsGroupHom fun a => f a * g a
mul
{
α: Type u_1
α
β: ?m.28218
β
} [
Group: Type ?u.28221 → Type ?u.28221
Group
α: ?m.28215
α
] [
CommGroup: Type ?u.28224 → Type ?u.28224
CommGroup
β: ?m.28218
β
] {
f: αβ
f
g: αβ
g
:
α: ?m.28215
α
β: ?m.28218
β
} (hf :
IsGroupHom: {α : Type ?u.28236} → {β : Type ?u.28235} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) (hg :
IsGroupHom: {α : Type ?u.28268} → {β : Type ?u.28267} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
g: αβ
g
) :
IsGroupHom: {α : Type ?u.28289} → {β : Type ?u.28288} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
fun
a: ?m.28305
a
=>
f: αβ
f
a: ?m.28305
a
*
g: αβ
g
a: ?m.28305
a
:= { map_mul := (hf.
toIsMulHom: ∀ {α : Type ?u.29154} {β : Type ?u.29153} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
.
mul: ∀ {α : Type ?u.29161} {β : Type ?u.29162} [inst : Semigroup α] [inst_1 : CommSemigroup β] {f g : αβ}, IsMulHom fIsMulHom gIsMulHom fun a => f a * g a
mul
hg.
toIsMulHom: ∀ {α : Type ?u.29328} {β : Type ?u.29327} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
).
map_mul: ∀ {α : Type ?u.29337} {β : Type ?u.29336} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
} #align is_group_hom.mul
IsGroupHom.mul: ∀ {α : Type u_1} {β : Type u_2} [inst : Group α] [inst_1 : CommGroup β] {f g : αβ}, IsGroupHom fIsGroupHom gIsGroupHom fun a => f a * g a
IsGroupHom.mul
#align is_add_group_hom.add
IsAddGroupHom.add: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroup α] [inst_1 : AddCommGroup β] {f g : αβ}, IsAddGroupHom fIsAddGroupHom gIsAddGroupHom fun a => f a + g a
IsAddGroupHom.add
/-- The inverse of a group homomorphism is a group homomorphism if the target is commutative. -/ @[
to_additive: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroup α] [inst_1 : AddCommGroup β] {f : αβ}, IsAddGroupHom fIsAddGroupHom fun a => -f a
to_additive
"The negation of an additive group homomorphism is an additive group homomorphism if the target is commutative."] theorem
inv: ∀ {α : Type u_1} {β : Type u_2} [inst : Group α] [inst_1 : CommGroup β] {f : αβ}, IsGroupHom fIsGroupHom fun a => (f a)⁻¹
inv
{
α: ?m.29461
α
β: Type u_2
β
} [
Group: Type ?u.29467 → Type ?u.29467
Group
α: ?m.29461
α
] [
CommGroup: Type ?u.29470 → Type ?u.29470
CommGroup
β: ?m.29464
β
] {
f: αβ
f
:
α: ?m.29461
α
β: ?m.29464
β
} (hf :
IsGroupHom: {α : Type ?u.29478} → {β : Type ?u.29477} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) :
IsGroupHom: {α : Type ?u.29510} → {β : Type ?u.29509} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
fun
a: ?m.29526
a
=> (
f: αβ
f
a: ?m.29526
a
)⁻¹ := { map_mul := hf.
toIsMulHom: ∀ {α : Type ?u.30044} {β : Type ?u.30043} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
.
inv: ∀ {α : Type ?u.30051} {β : Type ?u.30052} [inst : Mul α] [inst_1 : CommGroup β] {f : αβ}, IsMulHom fIsMulHom fun a => (f a)⁻¹
inv
.
map_mul: ∀ {α : Type ?u.30067} {β : Type ?u.30066} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
} #align is_group_hom.inv
IsGroupHom.inv: ∀ {α : Type u_1} {β : Type u_2} [inst : Group α] [inst_1 : CommGroup β] {f : αβ}, IsGroupHom fIsGroupHom fun a => (f a)⁻¹
IsGroupHom.inv
#align is_add_group_hom.neg
IsAddGroupHom.neg: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroup α] [inst_1 : AddCommGroup β] {f : αβ}, IsAddGroupHom fIsAddGroupHom fun a => -f a
IsAddGroupHom.neg
end IsGroupHom namespace RingHom /-! These instances look redundant, because `Deprecated.Ring` provides `IsRingHom` for a `→+*`. Nevertheless these are harmless, and helpful for stripping out dependencies on `Deprecated.Ring`. -/ variable {
R: Type ?u.30135
R
:
Type _: Type (?u.30135+1)
Type _
} {
S: Type ?u.30128
S
:
Type _: Type (?u.30128+1)
Type _
} section variable [
NonAssocSemiring: Type ?u.30864 → Type ?u.30864
NonAssocSemiring
R: Type ?u.30135
R
] [
NonAssocSemiring: Type ?u.30144 → Type ?u.30144
NonAssocSemiring
S: Type ?u.30138
S
] theorem
to_isMonoidHom: ∀ (f : R →+* S), IsMonoidHom f
to_isMonoidHom
(
f: R →+* S
f
:
R: Type ?u.30151
R
→+*
S: Type ?u.30154
S
) :
IsMonoidHom: {α : Type ?u.30180} → {β : Type ?u.30179} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: R →+* S
f
:= { map_one :=
f: R →+* S
f
.
map_one: ∀ {α : Type ?u.30835} {β : Type ?u.30836} {x : NonAssocSemiring α} {x_1 : NonAssocSemiring β} (f : α →+* β), f 1 = 1
map_one
map_mul :=
f: R →+* S
f
.
map_mul: ∀ {α : Type ?u.30800} {β : Type ?u.30801} {x : NonAssocSemiring α} {x_1 : NonAssocSemiring β} (f : α →+* β) (a b : α), f (a * b) = f a * f b
map_mul
} #align ring_hom.to_is_monoid_hom
RingHom.to_isMonoidHom: ∀ {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (f : R →+* S), IsMonoidHom f
RingHom.to_isMonoidHom
theorem
to_isAddMonoidHom: ∀ {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (f : R →+* S), IsAddMonoidHom f
to_isAddMonoidHom
(
f: R →+* S
f
:
R: Type ?u.30858
R
→+*
S: Type ?u.30861
S
) :
IsAddMonoidHom: {α : Type ?u.30887} → {β : Type ?u.30886} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
IsAddMonoidHom
f: R →+* S
f
:= { map_zero :=
f: R →+* S
f
.
map_zero: ∀ {α : Type ?u.31700} {β : Type ?u.31701} {x : NonAssocSemiring α} {x_1 : NonAssocSemiring β} (f : α →+* β), f 0 = 0
map_zero
map_add :=
f: R →+* S
f
.
map_add: ∀ {α : Type ?u.31665} {β : Type ?u.31666} {x : NonAssocSemiring α} {x_1 : NonAssocSemiring β} (f : α →+* β) (a b : α), f (a + b) = f a + f b
map_add
} #align ring_hom.to_is_add_monoid_hom
RingHom.to_isAddMonoidHom: ∀ {R : Type u_1} {S : Type u_2} [inst : NonAssocSemiring R] [inst_1 : NonAssocSemiring S] (f : R →+* S), IsAddMonoidHom f
RingHom.to_isAddMonoidHom
end section variable [
Ring: Type ?u.31729 → Type ?u.31729
Ring
R: Type ?u.31723
R
] [
Ring: Type ?u.31732 → Type ?u.31732
Ring
S: Type ?u.31726
S
] theorem
to_isAddGroupHom: ∀ (f : R →+* S), IsAddGroupHom f
to_isAddGroupHom
(
f: R →+* S
f
:
R: Type ?u.31739
R
→+*
S: Type ?u.31742
S
) :
IsAddGroupHom: {α : Type ?u.31808} → {β : Type ?u.31807} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
f: R →+* S
f
:= { map_add :=
f: R →+* S
f
.
map_add: ∀ {α : Type ?u.32358} {β : Type ?u.32359} {x : NonAssocSemiring α} {x_1 : NonAssocSemiring β} (f : α →+* β) (a b : α), f (a + b) = f a + f b
map_add
} #align ring_hom.to_is_add_group_hom
RingHom.to_isAddGroupHom: ∀ {R : Type u_1} {S : Type u_2} [inst : Ring R] [inst_1 : Ring S] (f : R →+* S), IsAddGroupHom f
RingHom.to_isAddGroupHom
end end RingHom /-- Inversion is a group homomorphism if the group is commutative. -/ @[
to_additive: ∀ {α : Type u} [inst : AddCommGroup α], IsAddGroupHom Neg.neg
to_additive
"Negation is an `AddGroup` homomorphism if the `AddGroup` is commutative."] theorem
Inv.isGroupHom: ∀ [inst : CommGroup α], IsGroupHom inv
Inv.isGroupHom
[
CommGroup: Type ?u.32407 → Type ?u.32407
CommGroup
α: Type u
α
] :
IsGroupHom: {α : Type ?u.32411} → {β : Type ?u.32410} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
(
Inv.inv: {α : Type ?u.32433} → [self : Inv α] → αα
Inv.inv
:
α: Type u
α
α: Type u
α
) := { map_mul :=
mul_inv: ∀ {α : Type ?u.32741} [inst : DivisionCommMonoid α] (a b : α), (a * b)⁻¹ = a⁻¹ * b⁻¹
mul_inv
} #align inv.is_group_hom
Inv.isGroupHom: ∀ {α : Type u} [inst : CommGroup α], IsGroupHom Inv.inv
Inv.isGroupHom
#align neg.is_add_group_hom
Neg.isAddGroupHom: ∀ {α : Type u} [inst : AddCommGroup α], IsAddGroupHom Neg.neg
Neg.isAddGroupHom
/-- The difference of two additive group homomorphisms is an additive group homomorphism if the target is commutative. -/ theorem
IsAddGroupHom.sub: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroup α] [inst_1 : AddCommGroup β] {f g : αβ}, IsAddGroupHom fIsAddGroupHom gIsAddGroupHom fun a => f a - g a
IsAddGroupHom.sub
{
α: ?m.32802
α
β: Type u_2
β
} [
AddGroup: Type ?u.32808 → Type ?u.32808
AddGroup
α: ?m.32802
α
] [
AddCommGroup: Type ?u.32811 → Type ?u.32811
AddCommGroup
β: ?m.32805
β
] {
f: αβ
f
g: αβ
g
:
α: ?m.32802
α
β: ?m.32805
β
} (hf :
IsAddGroupHom: {α : Type ?u.32823} → {β : Type ?u.32822} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
f: αβ
f
) (hg :
IsAddGroupHom: {α : Type ?u.32890} → {β : Type ?u.32889} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
g: αβ
g
) :
IsAddGroupHom: {α : Type ?u.32913} → {β : Type ?u.32912} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
fun
a: ?m.32931
a
=>
f: αβ
f
a: ?m.32931
a
-
g: αβ
g
a: ?m.32931
a
:=

Goals accomplished! 🐙
α✝: Type u

β✝: Type v

α: Type u_1

β: Type u_2

inst✝¹: AddGroup α

inst✝: AddCommGroup β

f, g: αβ

hf: IsAddGroupHom f

hg: IsAddGroupHom g


IsAddGroupHom fun a => f a - g a

Goals accomplished! 🐙
#align is_add_group_hom.sub
IsAddGroupHom.sub: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroup α] [inst_1 : AddCommGroup β] {f g : αβ}, IsAddGroupHom fIsAddGroupHom gIsAddGroupHom fun a => f a - g a
IsAddGroupHom.sub
namespace Units variable {
M: Type ?u.33408
M
:
Type _: Type (?u.33812+1)
Type _
} {
N: Type ?u.33815
N
:
Type _: Type (?u.33411+1)
Type _
} [
Monoid: Type ?u.33818 → Type ?u.33818
Monoid
M: Type ?u.33408
M
] [
Monoid: Type ?u.33433 → Type ?u.33433
Monoid
N: Type ?u.33411
N
] /-- The group homomorphism on units induced by a multiplicative morphism. -/ @[reducible] def
map': {f : MN} → IsMonoidHom fMˣ →* Nˣ
map'
{
f: MN
f
:
M: Type ?u.33424
M
N: Type ?u.33427
N
} (hf :
IsMonoidHom: {α : Type ?u.33441} → {β : Type ?u.33440} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: MN
f
) :
M: Type ?u.33424
M
ˣ →*
N: Type ?u.33427
N
ˣ :=
map: {M : Type ?u.33695} → {N : Type ?u.33694} → [inst : Monoid M] → [inst_1 : Monoid N] → (M →* N) → Mˣ →* Nˣ
map
(
MonoidHom.of: {M : Type ?u.33735} → {N : Type ?u.33734} → {mM : MulOneClass M} → {mN : MulOneClass N} → {f : MN} → IsMonoidHom fM →* N
MonoidHom.of
hf) #align units.map'
Units.map': {M : Type u_1} → {N : Type u_2} → [inst : Monoid M] → [inst_1 : Monoid N] → {f : MN} → IsMonoidHom fMˣ →* Nˣ
Units.map'
@[simp] theorem
coe_map': ∀ {f : MN} (hf : IsMonoidHom f) (x : Mˣ), ↑(↑(map' hf) x) = f x
coe_map'
{
f: MN
f
:
M: Type ?u.33812
M
N: Type ?u.33815
N
} (hf :
IsMonoidHom: {α : Type ?u.33829} → {β : Type ?u.33828} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: MN
f
) (
x: Mˣ
x
:
M: Type ?u.33812
M
ˣ) : ↑((
map': {M : Type ?u.35372} → {N : Type ?u.35371} → [inst : Monoid M] → [inst_1 : Monoid N] → {f : MN} → IsMonoidHom fMˣ →* Nˣ
map'
hf :
M: Type ?u.33812
M
ˣ →
N: Type ?u.33815
N
ˣ)
x: Mˣ
x
) =
f: MN
f
x: Mˣ
x
:=
rfl: ∀ {α : Sort ?u.37295} {a : α}, a = a
rfl
#align units.coe_map'
Units.coe_map': ∀ {M : Type u_1} {N : Type u_2} [inst : Monoid M] [inst_1 : Monoid N] {f : MN} (hf : IsMonoidHom f) (x : Mˣ), ↑(↑(map' hf) x) = f x
Units.coe_map'
theorem
coe_isMonoidHom: IsMonoidHom fun x => x
coe_isMonoidHom
:
IsMonoidHom: {α : Type ?u.37371} → {β : Type ?u.37370} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
(↑· :
M: Type ?u.37358
M
ˣ →
M: Type ?u.37358
M
) := (
coeHom: (M : Type ?u.38809) → [inst : Monoid M] → Mˣ →* M
coeHom
M: Type ?u.37358
M
).
isMonoidHom_coe: ∀ {M : Type ?u.38819} {N : Type ?u.38820} {mM : MulOneClass M} {mN : MulOneClass N} (f : M →* N), IsMonoidHom f
isMonoidHom_coe
#align units.coe_is_monoid_hom
Units.coe_isMonoidHom: ∀ {M : Type u_1} [inst : Monoid M], IsMonoidHom fun x => x
Units.coe_isMonoidHom
end Units namespace IsUnit variable {
M: Type ?u.38869
M
:
Type _: Type (?u.38869+1)
Type _
} {
N: Type ?u.38854
N
:
Type _: Type (?u.38854+1)
Type _
} [
Monoid: Type ?u.38857 → Type ?u.38857
Monoid
M: Type ?u.38851
M
] [
Monoid: Type ?u.38860 → Type ?u.38860
Monoid
N: Type ?u.38872
N
] {
x: M
x
:
M: Type ?u.38851
M
} theorem
map': ∀ {M : Type u_1} {N : Type u_2} [inst : Monoid M] [inst_1 : Monoid N] {f : MN}, IsMonoidHom f∀ {x : M}, IsUnit xIsUnit (f x)
map'
{
f: MN
f
:
M: Type ?u.38869
M
N: Type ?u.38872
N
} (hf :
IsMonoidHom: {α : Type ?u.38888} → {β : Type ?u.38887} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: MN
f
) {
x: M
x
:
M: Type ?u.38869
M
} (
h: IsUnit x
h
:
IsUnit: {M : Type ?u.39104} → [inst : Monoid M] → MProp
IsUnit
x: M
x
) :
IsUnit: {M : Type ?u.39126} → [inst : Monoid M] → MProp
IsUnit
(
f: MN
f
x: M
x
) :=
h: IsUnit x
h
.
map: ∀ {F : Type ?u.39155} {M : Type ?u.39156} {N : Type ?u.39157} [inst : Monoid M] [inst_1 : Monoid N] [inst_2 : MonoidHomClass F M N] (f : F) {x : M}, IsUnit xIsUnit (f x)
map
(
MonoidHom.of: {M : Type ?u.39174} → {N : Type ?u.39173} → {mM : MulOneClass M} → {mN : MulOneClass N} → {f : MN} → IsMonoidHom fM →* N
MonoidHom.of
hf) #align is_unit.map'
IsUnit.map': ∀ {M : Type u_1} {N : Type u_2} [inst : Monoid M] [inst_1 : Monoid N] {f : MN}, IsMonoidHom f∀ {x : M}, IsUnit xIsUnit (f x)
IsUnit.map'
end IsUnit theorem
Additive.isAddHom: ∀ [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom fIsAddHom f
Additive.isAddHom
[
Mul: Type ?u.39290 → Type ?u.39290
Mul
α: Type u
α
] [
Mul: Type ?u.39293 → Type ?u.39293
Mul
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (
hf: IsMulHom f
hf
:
IsMulHom: {α : Type ?u.39301} → {β : Type ?u.39300} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
f: αβ
f
) : @
IsAddHom: {α : Type ?u.39368} → {β : Type ?u.39367} → [inst : Add α] → [inst : Add β] → (αβ) → Prop
IsAddHom
(
Additive: Type ?u.39369 → Type ?u.39369
Additive
α: Type u
α
) (
Additive: Type ?u.39370 → Type ?u.39370
Additive
β: Type v
β
) _ _
f: αβ
f
:= { map_add :=
hf: IsMulHom f
hf
.
map_mul: ∀ {α : Type ?u.39456} {β : Type ?u.39455} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
} #align additive.is_add_hom
Additive.isAddHom: ∀ {α : Type u} {β : Type v} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom fIsAddHom f
Additive.isAddHom
theorem
Multiplicative.isMulHom: ∀ [inst : Add α] [inst_1 : Add β] {f : αβ}, IsAddHom fIsMulHom f
Multiplicative.isMulHom
[
Add: Type ?u.39509 → Type ?u.39509
Add
α: Type u
α
] [
Add: Type ?u.39512 → Type ?u.39512
Add
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (
hf: IsAddHom f
hf
:
IsAddHom: {α : Type ?u.39520} → {β : Type ?u.39519} → [inst : Add α] → [inst : Add β] → (αβ) → Prop
IsAddHom
f: αβ
f
) : @
IsMulHom: {α : Type ?u.39571} → {β : Type ?u.39570} → [inst : Mul α] → [inst : Mul β] → (αβ) → Prop
IsMulHom
(
Multiplicative: Type ?u.39572 → Type ?u.39572
Multiplicative
α: Type u
α
) (
Multiplicative: Type ?u.39573 → Type ?u.39573
Multiplicative
β: Type v
β
) _ _
f: αβ
f
:= { map_mul :=
hf: IsAddHom f
hf
.
map_add: ∀ {α : Type ?u.39659} {β : Type ?u.39658} [inst : Add α] [inst_1 : Add β] {f : αβ}, IsAddHom f∀ (x y : α), f (x + y) = f x + f y
map_add
} #align multiplicative.is_mul_hom
Multiplicative.isMulHom: ∀ {α : Type u} {β : Type v} [inst : Add α] [inst_1 : Add β] {f : αβ}, IsAddHom fIsMulHom f
Multiplicative.isMulHom
-- defeq abuse theorem
Additive.isAddMonoidHom: ∀ [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom fIsAddMonoidHom f
Additive.isAddMonoidHom
[
MulOneClass: Type ?u.39706 → Type ?u.39706
MulOneClass
α: Type u
α
] [
MulOneClass: Type ?u.39709 → Type ?u.39709
MulOneClass
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (hf :
IsMonoidHom: {α : Type ?u.39717} → {β : Type ?u.39716} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
f: αβ
f
) : @
IsAddMonoidHom: {α : Type ?u.39750} → {β : Type ?u.39749} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
IsAddMonoidHom
(
Additive: Type ?u.39751 → Type ?u.39751
Additive
α: Type u
α
) (
Additive: Type ?u.39752 → Type ?u.39752
Additive
β: Type v
β
) _ _
f: αβ
f
:= {
Additive.isAddHom: ∀ {α : Type ?u.39788} {β : Type ?u.39787} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom fIsAddHom f
Additive.isAddHom
hf.
toIsMulHom: ∀ {α : Type ?u.39833} {β : Type ?u.39832} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom fIsMulHom f
toIsMulHom
with map_zero := hf.
map_one: ∀ {α : Type ?u.40567} {β : Type ?u.40566} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom ff 1 = 1
map_one
} #align additive.is_add_monoid_hom
Additive.isAddMonoidHom: ∀ {α : Type u} {β : Type v} [inst : MulOneClass α] [inst_1 : MulOneClass β] {f : αβ}, IsMonoidHom fIsAddMonoidHom f
Additive.isAddMonoidHom
theorem
Multiplicative.isMonoidHom: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom fIsMonoidHom f
Multiplicative.isMonoidHom
[
AddZeroClass: Type ?u.40588 → Type ?u.40588
AddZeroClass
α: Type u
α
] [
AddZeroClass: Type ?u.40591 → Type ?u.40591
AddZeroClass
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (hf :
IsAddMonoidHom: {α : Type ?u.40599} → {β : Type ?u.40598} → [inst : AddZeroClass α] → [inst : AddZeroClass β] → (αβ) → Prop
IsAddMonoidHom
f: αβ
f
) : @
IsMonoidHom: {α : Type ?u.40628} → {β : Type ?u.40627} → [inst : MulOneClass α] → [inst : MulOneClass β] → (αβ) → Prop
IsMonoidHom
(
Multiplicative: Type ?u.40629 → Type ?u.40629
Multiplicative
α: Type u
α
) (
Multiplicative: Type ?u.40630 → Type ?u.40630
Multiplicative
β: Type v
β
) _ _
f: αβ
f
:= {
Multiplicative.isMulHom: ∀ {α : Type ?u.40666} {β : Type ?u.40665} [inst : Add α] [inst_1 : Add β] {f : αβ}, IsAddHom fIsMulHom f
Multiplicative.isMulHom
hf.
toIsAddHom: ∀ {α : Type ?u.40701} {β : Type ?u.40700} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom fIsAddHom f
toIsAddHom
with map_one := hf.
map_zero: ∀ {α : Type ?u.41179} {β : Type ?u.41178} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom ff 0 = 0
map_zero
} #align multiplicative.is_monoid_hom
Multiplicative.isMonoidHom: ∀ {α : Type u} {β : Type v} [inst : AddZeroClass α] [inst_1 : AddZeroClass β] {f : αβ}, IsAddMonoidHom fIsMonoidHom f
Multiplicative.isMonoidHom
theorem
Additive.isAddGroupHom: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsAddGroupHom f
Additive.isAddGroupHom
[
Group: Type ?u.41200 → Type ?u.41200
Group
α: Type u
α
] [
Group: Type ?u.41203 → Type ?u.41203
Group
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (hf :
IsGroupHom: {α : Type ?u.41211} → {β : Type ?u.41210} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
f: αβ
f
) : @
IsAddGroupHom: {α : Type ?u.41240} → {β : Type ?u.41239} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
(
Additive: Type ?u.41241 → Type ?u.41241
Additive
α: Type u
α
) (
Additive: Type ?u.41242 → Type ?u.41242
Additive
β: Type v
β
) _ _
f: αβ
f
:= { map_add := hf.
toIsMulHom: ∀ {α : Type ?u.41748} {β : Type ?u.41747} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsMulHom f
toIsMulHom
.
map_mul: ∀ {α : Type ?u.41766} {β : Type ?u.41765} [inst : Mul α] [inst_1 : Mul β] {f : αβ}, IsMulHom f∀ (x y : α), f (x * y) = f x * f y
map_mul
} #align additive.is_add_group_hom
Additive.isAddGroupHom: ∀ {α : Type u} {β : Type v} [inst : Group α] [inst_1 : Group β] {f : αβ}, IsGroupHom fIsAddGroupHom f
Additive.isAddGroupHom
theorem
Multiplicative.isGroupHom: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom fIsGroupHom f
Multiplicative.isGroupHom
[
AddGroup: Type ?u.42115 → Type ?u.42115
AddGroup
α: Type u
α
] [
AddGroup: Type ?u.42118 → Type ?u.42118
AddGroup
β: Type v
β
] {
f: αβ
f
:
α: Type u
α
β: Type v
β
} (hf :
IsAddGroupHom: {α : Type ?u.42126} → {β : Type ?u.42125} → [inst : AddGroup α] → [inst : AddGroup β] → (αβ) → Prop
IsAddGroupHom
f: αβ
f
) : @
IsGroupHom: {α : Type ?u.42159} → {β : Type ?u.42158} → [inst : Group α] → [inst : Group β] → (αβ) → Prop
IsGroupHom
(
Multiplicative: Type ?u.42160 → Type ?u.42160
Multiplicative
α: Type u
α
) (
Multiplicative: Type ?u.42161 → Type ?u.42161
Multiplicative
β: Type v
β
) _ _
f: αβ
f
:= { map_mul := hf.
toIsAddHom: ∀ {α : Type ?u.42585} {β : Type ?u.42584} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom fIsAddHom f
toIsAddHom
.
map_add: ∀ {α : Type ?u.42605} {β : Type ?u.42604} [inst : Add α] [inst_1 : Add β] {f : αβ}, IsAddHom f∀ (x y : α), f (x + y) = f x + f y
map_add
} #align multiplicative.is_group_hom
Multiplicative.isGroupHom: ∀ {α : Type u} {β : Type v} [inst : AddGroup α] [inst_1 : AddGroup β] {f : αβ}, IsAddGroupHom fIsGroupHom f
Multiplicative.isGroupHom