mathlib documentation

group_theory.​semidirect_product

group_theory.​semidirect_product

Semidirect product

This file defines semidirect products of groups, and the canonical maps in and out of the semidirect product. The semidirect product of N and G given a hom φ from φ from G to the automorphism group of N is the product of sets with the group ⟨n₁, g₁⟩ * ⟨n₂, g₂⟩ = ⟨n₁ * φ g₁ n₂, g₁ * g₂⟩

Key definitions

There are two homs into the semidirect product inl : N →* N ⋊[φ] G and inr : G →* N ⋊[φ] G, and lift can be used to define maps N ⋊[φ] G →* H out of the semidirect product given maps f₁ : N →* H and f₂ : G →* H that satisfy the condition ∀ n g, f₁ (φ g n) = f₂ g * f₁ n * f₂ g⁻¹

Notation

This file introduces the global notation N ⋊[φ] G for semidirect_product N G φ

Tags

group, semidirect product

@[ext]
structure semidirect_product (N : Type u_1) (G : Type u_2) [group N] [group G] :
(G →* mul_aut N)Type (max u_1 u_2)
  • left : N
  • right : G

The semidirect product of groups N and G, given a map φ from G to the automorphism group of N. It the product of sets with the group operation ⟨n₁, g₁⟩ * ⟨n₂, g₂⟩ = ⟨n₁ * φ g₁ n₂, g₁ * g₂⟩

theorem semidirect_product.​ext_iff {N : Type u_1} {G : Type u_2} {_inst_1 : group N} {_inst_2 : group G} {φ : G →* mul_aut N} (x y : N ⋊[φ] G) :
x = y x.left = y.left x.right = y.right

theorem semidirect_product.​ext {N : Type u_1} {G : Type u_2} {_inst_1 : group N} {_inst_2 : group G} {φ : G →* mul_aut N} (x y : N ⋊[φ] G) :
x.left = y.leftx.right = y.rightx = y

@[instance]
def semidirect_product.​decidable_eq (N : Type u_1) [a : decidable_eq N] (G : Type u_2) [a_1 : decidable_eq G] [group N] [group G] (φ : G →* mul_aut N) :

@[instance]
def semidirect_product.​group {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :
group (N ⋊[φ] G)

Equations
@[instance]
def semidirect_product.​inhabited {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :

Equations
@[simp]
theorem semidirect_product.​one_left {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :
1.left = 1

@[simp]
theorem semidirect_product.​one_right {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :
1.right = 1

@[simp]
theorem semidirect_product.​inv_left {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (a : N ⋊[φ] G) :

@[simp]
theorem semidirect_product.​inv_right {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (a : N ⋊[φ] G) :

@[simp]
theorem semidirect_product.​mul_left {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (a b : N ⋊[φ] G) :
(a * b).left = a.left * (φ a.right) b.left

@[simp]
theorem semidirect_product.​mul_right {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (a b : N ⋊[φ] G) :
(a * b).right = a.right * b.right

def semidirect_product.​inl {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :
N →* N ⋊[φ] G

The canonical map N →* N ⋊[φ] G sending n to ⟨n, 1⟩

Equations
@[simp]
theorem semidirect_product.​left_inl {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (n : N) :

@[simp]
theorem semidirect_product.​right_inl {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (n : N) :

@[simp]
theorem semidirect_product.​inl_inj {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {n₁ n₂ : N} :

def semidirect_product.​inr {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :
G →* N ⋊[φ] G

The canonical map G →* N ⋊[φ] G sending g to ⟨1, g⟩

Equations
@[simp]
theorem semidirect_product.​left_inr {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (g : G) :

@[simp]
theorem semidirect_product.​right_inr {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (g : G) :

@[simp]
theorem semidirect_product.​inr_inj {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {g₁ g₂ : G} :

@[simp]
theorem semidirect_product.​mk_eq_inl_mul_inr {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (g : G) (n : N) :

@[simp]
theorem semidirect_product.​inl_left_mul_inr_right {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (x : N ⋊[φ] G) :

def semidirect_product.​right_hom {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :
N ⋊[φ] G →* G

The canonical projection map N ⋊[φ] G →* G, as a group hom.

Equations
@[simp]
theorem semidirect_product.​right_hom_inl {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (n : N) :

@[simp]
theorem semidirect_product.​right_hom_inr {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} (g : G) :

def semidirect_product.​lift {N : Type u_1} {G : Type u_2} {H : Type u_3} [group N] [group G] [group H] {φ : G →* mul_aut N} (f₁ : N →* H) (f₂ : G →* H) :
(∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (mul_aut.conj (f₂ g))).comp f₁)N ⋊[φ] G →* H

Define a group hom N ⋊[φ] G →* H, by defining maps N →* H and G →* H

Equations
@[simp]
theorem semidirect_product.​lift_inl {N : Type u_1} {G : Type u_2} {H : Type u_3} [group N] [group G] [group H] {φ : G →* mul_aut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (mul_aut.conj (f₂ g))).comp f₁) (n : N) :

@[simp]
theorem semidirect_product.​lift_comp_inl {N : Type u_1} {G : Type u_2} {H : Type u_3} [group N] [group G] [group H] {φ : G →* mul_aut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (mul_aut.conj (f₂ g))).comp f₁) :

@[simp]
theorem semidirect_product.​lift_inr {N : Type u_1} {G : Type u_2} {H : Type u_3} [group N] [group G] [group H] {φ : G →* mul_aut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (mul_aut.conj (f₂ g))).comp f₁) (g : G) :

@[simp]
theorem semidirect_product.​lift_comp_inr {N : Type u_1} {G : Type u_2} {H : Type u_3} [group N] [group G] [group H] {φ : G →* mul_aut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (mul_aut.conj (f₂ g))).comp f₁) :

theorem semidirect_product.​lift_unique {N : Type u_1} {G : Type u_2} {H : Type u_3} [group N] [group G] [group H] {φ : G →* mul_aut N} (F : N ⋊[φ] G →* H) :

theorem semidirect_product.​hom_ext {N : Type u_1} {G : Type u_2} {H : Type u_3} [group N] [group G] [group H] {φ : G →* mul_aut N} {f g : N ⋊[φ] G →* H} :

Two maps out of the semidirect product are equal if they're equal after composition with both inl and inr

def semidirect_product.​map {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) :
(∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁)N ⋊[φ] G →* N₁ ⋊[φ₁] G₁

Define a map from N ⋊[φ] G to N₁ ⋊[φ₁] G₁ given maps N →* N₁ and G →* G₁ that satisfy a commutativity condition ∀ n g, f₁ (φ g n) = φ₁ (f₂ g) (f₁ n).

Equations
@[simp]
theorem semidirect_product.​map_left {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁) (g : N ⋊[φ] G) :
((semidirect_product.map f₁ f₂ h) g).left = f₁ g.left

@[simp]
theorem semidirect_product.​map_right {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁) (g : N ⋊[φ] G) :
((semidirect_product.map f₁ f₂ h) g).right = f₂ g.right

@[simp]
theorem semidirect_product.​right_hom_comp_map {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁) :

@[simp]
theorem semidirect_product.​map_inl {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁) (n : N) :

@[simp]
theorem semidirect_product.​map_comp_inl {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁) :

@[simp]
theorem semidirect_product.​map_inr {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁) (g : G) :

@[simp]
theorem semidirect_product.​map_comp_inr {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} {N₁ : Type u_4} {G₁ : Type u_5} [group N₁] [group G₁] {φ₁ : G₁ →* mul_aut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (mul_equiv.to_monoid_hom (φ g)) = (mul_equiv.to_monoid_hom (φ₁ (f₂ g))).comp f₁) :