Jordan-Hölder Theorem #
This file proves the Jordan Hölder theorem for a JordanHolderLattice
, a class also defined in
this file. Examples of JordanHolderLattice
include Subgroup G
if G
is a group, and
Submodule R M
if M
is an R
-module. Using this approach the theorem need not be proved
separately for both groups and modules, the proof in this file can be applied to both.
Main definitions #
The main definitions in this file are JordanHolderLattice
and CompositionSeries
,
and the relation Equivalent
on CompositionSeries
A JordanHolderLattice
is the class for which the Jordan Hölder theorem is proved. A
Jordan Hölder lattice is a lattice equipped with a notion of maximality, IsMaximal
, and a notion
of isomorphism of pairs Iso
. In the example of subgroups of a group, IsMaximal H K
means that
H
is a maximal normal subgroup of K
, and Iso (H₁, K₁) (H₂, K₂)
means that the quotient
H₁ / K₁
is isomorphic to the quotient H₂ / K₂
. Iso
must be symmetric and transitive and must
satisfy the second isomorphism theorem Iso (H, H ⊔ K) (H ⊓ K, K)
.
A CompositionSeries X
is a finite nonempty series of elements of the lattice X
such that
each element is maximal inside the next. The length of a CompositionSeries X
is
one less than the number of elements in the series. Note that there is no stipulation
that a series start from the bottom of the lattice and finish at the top.
For a composition series s
, s.top
is the largest element of the series,
and s.bot
is the least element.
Two CompositionSeries X
, s₁
and s₂
are equivalent if there is a bijection
e : Fin s₁.length ≃ Fin s₂.length
such that for any i
,
Iso (s₁ i, s₁ i.succ) (s₂ (e i), s₂ (e i.succ))
Main theorems #
The main theorem is CompositionSeries.jordan_holder
, which says that if two composition
series have the same least element and the same largest element,
then they are Equivalent
.
TODO #
Provide instances of JordanHolderLattice
for both submodules and subgroups, and potentially
for modular lattices.
It is not entirely clear how this should be done. Possibly there should be no global instances
of JordanHolderLattice
, and the instances should only be defined locally in order to prove
the Jordan-Hölder theorem for modules/groups and the API should be transferred because many of the
theorems in this file will have stronger versions for modules. There will also need to be an API for
mapping composition series across homomorphisms. It is also probably possible to
provide an instance of JordanHolderLattice
for any ModularLattice
, and in this case the
Jordan-Hölder theorem will say that there is a well defined notion of length of a modular lattice.
However an instance of JordanHolderLattice
for a modular lattice will not be able to contain
the correct notion of isomorphism for modules, so a separate instance for modules will still be
required and this will clash with the instance for modular lattices, and so at least one of these
instances should not be a global instance.
A JordanHolderLattice
is the class for which the Jordan Hölder theorem is proved. A
Jordan Hölder lattice is a lattice equipped with a notion of maximality, IsMaximal
, and a notion
of isomorphism of pairs Iso
. In the example of subgroups of a group, IsMaximal H K
means that
H
is a maximal normal subgroup of K
, and Iso (H₁, K₁) (H₂, K₂)
means that the quotient
H₁ / K₁
is isomorphic to the quotient H₂ / K₂
. Iso
must be symmetric and transitive and must
satisfy the second isomorphism theorem Iso (H, H ⊔ K) (H ⊓ K, K)
.
Examples include Subgroup G
if G
is a group, and Submodule R M
if M
is an R
-module.
- IsMaximal : X → X → Prop
- lt_of_isMaximal : ∀ {x y : X}, JordanHolderLattice.IsMaximal x y → x < y
- sup_eq_of_isMaximal : ∀ {x y z : X}, JordanHolderLattice.IsMaximal x z → JordanHolderLattice.IsMaximal y z → x ≠ y → x ⊔ y = z
- isMaximal_inf_left_of_isMaximal_sup : ∀ {x y : X}, JordanHolderLattice.IsMaximal x (x ⊔ y) → JordanHolderLattice.IsMaximal y (x ⊔ y) → JordanHolderLattice.IsMaximal (x ⊓ y) x
- iso_symm : ∀ {x y : X × X}, JordanHolderLattice.Iso x y → JordanHolderLattice.Iso y x
- iso_trans : ∀ {x y z : X × X}, JordanHolderLattice.Iso x y → JordanHolderLattice.Iso y z → JordanHolderLattice.Iso x z
- second_iso : ∀ {x y : X}, JordanHolderLattice.IsMaximal x (x ⊔ y) → JordanHolderLattice.Iso (x, x ⊔ y) (x ⊓ y, y)
Instances
A CompositionSeries X
is a finite nonempty series of elements of a
JordanHolderLattice
such that each element is maximal inside the next. The length of a
CompositionSeries X
is one less than the number of elements in the series.
Note that there is no stipulation that a series start from the bottom of the lattice and finish at
the top. For a composition series s
, s.top
is the largest element of the series,
and s.bot
is the least element.
- length : ℕ
- step' : ∀ (i : Fin self.length), JordanHolderLattice.IsMaximal (self.series (Fin.castSucc i)) (self.series (Fin.succ i))
Instances For
Equations
- CompositionSeries.coeFun = { coe := CompositionSeries.series }
Equations
- CompositionSeries.inhabited = { default := { length := 0, series := default, step' := ⋯ } }
Equations
- CompositionSeries.membership = { mem := fun (x : X) (s : CompositionSeries X) => x ∈ Set.range s.series }
The ordered List X
of elements of a CompositionSeries X
.
Equations
- CompositionSeries.toList s = List.ofFn s.series
Instances For
Two CompositionSeries
are equal if they are the same length and
have the same i
th element for every i
Make a CompositionSeries X
from the ordered list of its elements.
Equations
- CompositionSeries.ofList l hl hc = { length := List.length l - 1, series := fun (i : Fin (List.length l - 1 + 1)) => List.nthLe l ↑i ⋯, step' := ⋯ }
Instances For
Two CompositionSeries
are equal if they have the same elements. See also ext_fun
.
The largest element of a CompositionSeries
Equations
- CompositionSeries.top s = s.series (Fin.last s.length)
Instances For
The smallest element of a CompositionSeries
Equations
- CompositionSeries.bot s = s.series 0
Instances For
Remove the largest element from a CompositionSeries
. If the series s
has length zero, then s.eraseTop = s
Equations
Instances For
Append two composition series s₁
and s₂
such that
the least element of s₁
is the maximum element of s₂
.
Equations
- CompositionSeries.append s₁ s₂ h = { length := s₁.length + s₂.length, series := Matrix.vecAppend ⋯ (s₁.series ∘ Fin.castSucc) s₂.series, step' := ⋯ }
Instances For
Add an element to the top of a CompositionSeries
Equations
- CompositionSeries.snoc s x hsat = { length := s.length + 1, series := Fin.snoc s.series x, step' := ⋯ }
Instances For
Two CompositionSeries X
, s₁
and s₂
are equivalent if there is a bijection
e : Fin s₁.length ≃ Fin s₂.length
such that for any i
,
Iso (s₁ i) (s₁ i.succ) (s₂ (e i), s₂ (e i.succ))
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given a CompositionSeries
, s
, and an element x
such that x
is maximal inside s.top
there is a series, t
,
such that t.top = x
, t.bot = s.bot
and snoc t s.top _
is equivalent to s
.
The Jordan-Hölder theorem, stated for any JordanHolderLattice
.
If two composition series start and finish at the same place, they are equivalent.