mathlib documentation

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 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

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) (h : x.left = y.left) (h_1 : x.right = y.right) :
x = y
@[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₂⟩

Instances for semidirect_product
@[protected, 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) :
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
@[protected, 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
  • semidirect_product.group = {mul := mul_aux φ, mul_assoc := _, one := one_aux φ, one_mul := _, mul_one := _, npow := div_inv_monoid.npow._default one_aux mul_aux one_mul_aux mul_one_aux, npow_zero' := _, npow_succ' := _, inv := inv_aux φ, div := div_inv_monoid.div._default mul_aux mul_assoc_aux one_aux one_mul_aux mul_one_aux (div_inv_monoid.npow._default one_aux mul_aux one_mul_aux mul_one_aux) semidirect_product.group._proof_3 semidirect_product.group._proof_4 inv_aux, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default mul_aux mul_assoc_aux one_aux one_mul_aux mul_one_aux (div_inv_monoid.npow._default one_aux mul_aux one_mul_aux mul_one_aux) semidirect_product.group._proof_6 semidirect_product.group._proof_7 inv_aux, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _}
@[protected, 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) :
theorem semidirect_product.inl_injective {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut 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) :
theorem semidirect_product.inr_injective {N : Type u_1} {G : Type u_2} [group N] [group G] {φ : G →* mul_aut N} :
@[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]
@[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) (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} (hl : f.comp semidirect_product.inl = g.comp semidirect_product.inl) (hr : f.comp semidirect_product.inr = g.comp semidirect_product.inr) :
f = g

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₁) (h : ∀ (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₁) :