Semidirect Product
Statement
Given groups and and a homomorphism , the semidirect product is the Cartesian product with multiplication
The neutral element is and .
When is trivial ( for all ), this reduces to the direct product .
Universal property. is the unique (up to isomorphism) group containing as a normal subgroup and as a subgroup, with , , and conjugation by on given by .
Visualization
Dihedral group .
Let (rotations), (reflections), and (the nontrivial automorphism flips the rotation direction).
Elements: — 6 total.
Multiplication table for selected products:
| Result | Plain name | |
|---|---|---|
The relation (i.e., ) is built into the multiplication — this is exactly the dihedral relation.
Proof Sketch
- Associativity. Direct calculation: using that is a homomorphism.
- Inverses. : check using .
- Normal subgroup. is normal: .
- Complement. is a subgroup isomorphic to , , and .
Connections
The semidirect product unifies many familiar constructions: dihedral groups (), affine groups, and Frobenius groups. It gives the splitting of short exact sequences when a section exists — a consequence of the First Isomorphism TheoremFirst Isomorphism TheoremThe image of a homomorphism is isomorphic to the domain modulo the kernelRead more →. The structure also appears in Sylow TheoremsSylow TheoremsPrime-power subgroups always exist, are conjugate, and their count is constrainedRead more →: when has a normal Sylow -subgroup , any complement makes .
Lean4 Proof
/-- The semidirect product multiplication law.
Mathlib: `SemidirectProduct` in `Mathlib.GroupTheory.SemidirectProduct`.
N ⋊[φ] G has carrier N × G with the twisted product. -/
theorem semidirect_mul_law {N G : Type*} [Group N] [Group G]
(φ : G →* MulAut N) (a b : N ⋊[φ] G) :
a * b = ⟨a.left * φ a.right b.left, a.right * b.right⟩ :=
SemidirectProduct.mul_def a b
/-- The natural embedding of N into N ⋊[φ] G is injective. -/
theorem semidirect_inl_injective {N G : Type*} [Group N] [Group G]
(φ : G →* MulAut N) : Function.Injective (SemidirectProduct.inl (φ := φ)) :=
SemidirectProduct.inl_injective