Krohn–Rhodes factor towers #
This file supplies the vocabulary for the aperiodic/simple-group decomposition variant, and the wreath-product algebra used to assemble factor towers.
KRFactor— a finite monoid together with a witnessed flag: either every element is aperiodic, or the carrier carries a simple group structure whose underlying monoid is the factor's monoid. ConstructorsKRFactor.ofAperiodicandKRFactor.ofSimpleGroup.DivTowerWreath M [F₁, …, Fₖ]— a recursive sequence of wreath divisions. It is defined by recursion on the list:MdividesWreathProduct F₁ B Yfor some finite monoidBacting on a finite typeY, whereBin turn satisfiesDivTowerWreath B [F₂, …, Fₖ]; the empty list meansMis trivial.- Wreath-product algebra: associativity up to division (
sgDiv_wreath_assoc, via the embeddingWreathAssoc.Phi), monotonicity in the decoration (sgDiv_wreath_decoration_mono), the concatenation stepdivTowerWreath_wreathStep, anddivTowerWreath_of_sgDiv(towers pull back along division). group_subquotient_faithful_aux— every finite group has a factor tower all of whose factors divide the group; the construction uses only simple groups (induction along a normal subgroup, using the Krasner–Kaloujnine embedding ofKrasnerKaloujnine.lean).
References #
- [K. Krohn, J. Rhodes, Algebraic Theory of Machines. I. Prime Decomposition Theorem for Finite Semigroups and Machines, Trans. AMS 116 (1965), 450–464]
- [Eilenberg, Automata, Languages, and Machines, Vol. B, 1976]
Factor towers #
A factor tower of a finite monoid M is an explicit list of Krohn–Rhodes factors
[F₁, …, Fₖ], each flagged and witnessed as aperiodic or simple group, together with a proof
of the recursive division predicate DivTowerWreath M [F₁, …, Fₖ].
The intermediate base monoids and their actions are existential witnesses at each step;
this file does not identify the tower with a single prescribed transformation wreath product.
KRFactorKind,KRFactor— the two factor kinds, and one flagged, witnessed factor.DivTowerWreath M factors— the recursive division predicate.divTowerWreath_wreathStep— concatenation of towers along a wreath division; the hard step (wreath associativity) issgDiv_wreath_assoc.
The two kinds of factors used here: a finite aperiodic monoid or a finite simple group. The aperiodic factors need not be irreducible or three-element reset monoids.
- aperiodic : KRFactorKind
The factor is a finite aperiodic monoid.
- simpleGroup : KRFactorKind
The factor is a finite simple group.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
A single Krohn-Rhodes factor: a finite monoid carrier together with a
flag kind and a proof that carrier really satisfies its flag. The
proof field is what makes the decomposition genuinely informative (not a
vacuous existential): an aperiodic factor must actually be aperiodic
(every element has a trivial H-class), and a simpleGroup factor must
actually carry a Group instance that is IsSimpleGroup.
- carrier : Type u
The carrier monoid of the factor.
The factor's monoid structure.
The factor is finite.
- kind : KRFactorKind
Whether the factor is an aperiodic factor or a simple-group factor.
- isKind : (self.kind = KRFactorKind.aperiodic ∧ ∀ (a : self.carrier), Green.IsAperiodicElem a) ∨ self.kind = KRFactorKind.simpleGroup ∧ ∃ (g : Group self.carrier), g.toMonoid = self.mon ∧ IsSimpleGroup self.carrier
The flag is witnessed: an
aperiodic-flagged factor is genuinely aperiodic; asimpleGroup-flagged factor genuinely carries a finite simple-group structure oncarrierwhose underlying monoid is the factor's own monoid field (g.toMonoid = mon). Recording theg.toMonoid = moncompatibility lets one transport monoid-indexed data betweenF.monand the witnessed group instanceg.
Instances For
Build an aperiodic factor from a finite aperiodic monoid.
Equations
- LeanPool.KrohnRhodes.KRFactor.ofAperiodic A hA = { carrier := A, mon := inst✝¹, fin := inst✝, kind := LeanPool.KrohnRhodes.KRFactorKind.aperiodic, isKind := ⋯ }
Instances For
Build a simple-group factor from a finite simple group.
Equations
- LeanPool.KrohnRhodes.KRFactor.ofSimpleGroup G = { carrier := G, mon := g.toMonoid, fin := inst✝¹, kind := LeanPool.KrohnRhodes.KRFactorKind.simpleGroup, isKind := ⋯ }
Instances For
The recursive division predicate of a factor tower.
DivTowerWreath M factors records the following recursive wreath divisions:
[]—Mdivides the trivial monoidPUnit(the empty product; this forcesMto be a single point up to division).F :: rest— there is a finite base monoidBthat itself decomposes via the tailrest(DivTowerWreath B rest), andMdividesWreathProduct F.carrier B Yfor some finite typeYon whichBacts: the head factorF.carriersits in the decoration slot over the baseB.
No action-lifting or equivalence with a single iterated transformation wreath product is asserted by this definition. The intermediate base at each step has its own tower.
Equations
- One or more equations did not get rendered due to their size.
- LeanPool.KrohnRhodes.DivTowerWreath x✝² [] = LeanPool.KrohnRhodes.SgDiv x✝² PUnit.{?u.1 + 1}
Instances For
Base-case constructors for the factor tower #
A single finite factor A over a subsingleton base B divides A ≀_B B
(the wreath of A over the trivial base, with B acting on itself). This
is the "one rung" building block: when B is a single point the wreath
multiplication collapses to a copy of A.
Stated for a general subsingleton B (rather than literally PUnit) so that
the wreath-product instances match exactly those produced by the cons case of
DivTowerWreath at the call site (avoiding MulAction PUnit PUnit instance
ambiguity).
The empty factor tower for a subsingleton monoid: a subsingleton M
divides PUnit.
Single aperiodic factor tower. A finite aperiodic monoid M has the
one-element factor tower [KRFactor.ofAperiodic M hAper].
Single simple-group factor tower. A finite simple group G has the
one-element factor tower [KRFactor.ofSimpleGroup G].
Division compatibility of the factor tower #
The tower predicate is monotone under semigroup division on the left: if S
divides T and T has a recursive wreath-division tower, then so does
S. It is used to transfer a tower along a division
SgDiv S (WreathProduct A B X).
Division transfers the factor tower. If SgDiv S T and
DivTowerWreath T factors, then DivTowerWreath S factors.
Wreath associativity (the inductive-step engine) #
To combine towers of the decoration factor A and the base factor B (in
S ≼ A ≀ B) into a single factor list we need the classical associativity
of the wreath product up to division: a wreath nested in the decoration slot
re-associates into the base.
For the left-action convention
(p * q).func x = p.func (q.base • x) * q.func x, the precise associativity is
(G ≀_{B'} B') ≀_X B ≼ G ≀_W (B' × X), where W = B' ≀_X B,
with W acting on the product state space B' × X by the imprimitive action
⟨γ, b⟩ • (p, x) = (γ x * p, b • x). This is the standard wreath-associativity
theorem (Eilenberg, Automata, Languages and Machines, Vol. B, Ch. III; Wells,
"Some applications of the wreath product construction", 1976), realised by the
canonical "unscrambling" embedding Phi below. The q.base • x cocycle threads
through both levels exactly because the inner state action of B' on B' is left
multiplication.
The imprimitive action of the base wreath W = B' ≀_X B on the product state
space Y × X: ⟨γ, b⟩ • (y, x) = (γ x • y, b • x) — the inner base B'
acts on the inner state Y, the outer base B acts on the outer state X.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The canonical unscrambling embedding
(G ≀_{B'} Y) ≀_X B →ₙ* G ≀_W (Y × X) realising wreath associativity:
the two-level decoration F becomes the one-level decoration
(y, x) ↦ (F.func x).func y, and the bases collect to
⟨fun x => (F.func x).base, F.base⟩.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Wreath associativity, up to division. (G ≀_{B'} Y) ≀_X B divides
G ≀_W (Y × X) where the base W = B' ≀_X B acts on Y × X by
WreathAssoc.actW (the inner base on the inner state, the outer base on the
outer state). Fully proved via the unscrambling embedding WreathAssoc.Phi
(an injective semigroup homomorphism).
Wreath product is monotone in the decoration factor. If A divides
A', then A ≀_X B divides A' ≀_X B: lift the surjection
U' ↠ A pointwise over the decoration, restricting to the subsemigroup of
A' ≀_X B whose decorations land in U'.
SgDiv A PUnit forces A to be a subsingleton (it is a quotient of a
subsemigroup of the one-point monoid).
When the decoration factor A is a subsingleton, A ≀_X B ≅ B, so A ≀_X B
divides B (the projection onto the base is an isomorphism).
The factor-tower concatenation step.
If S divides A ≀_X B, the decoration factor A has a factor tower
towA, and the base factor B has a factor tower towB, then S has the
concatenated factor tower towA ++ towB.
It flattens the two sub-decompositions into one explicit list. The proof is by
induction on towA, using sgDiv_wreath_decoration_mono to push the
decomposition of A into the decoration slot and sgDiv_wreath_assoc to
re-associate the nested wreath into the base.
Factor towers whose factors divide the monoid #
KRFactorTowerSub M is a factor tower of M in which every factor divides M. For finite
groups such a tower is built by induction along a normal subgroup
(group_subquotient_faithful_aux); the main theorem uses it in its group case.
Monoid-division helpers #
A surjective monoid homomorphism φ : M ↠ N exhibits N as a quotient of
M, hence N divides M.
Monoid division is reflexive.
A subgroup N ≤ G divides G.
The quotient group G/N divides G.
The subquotient-faithful factor tower #
SubFactorsDivide M factors asserts every factor's carrier divides M.
Equations
- LeanPool.KrohnRhodes.SubFactorsDivide M factors = ∀ F ∈ factors, LeanPool.KrohnRhodes.MonoidDivides F.carrier M
Instances For
If every factor of factors divides A, and A divides M, then every
factor divides M (transitivity of division).
The append of two divides-witnessed factor lists.
A factor tower whose factors divide M. A factor list, a proof that M
has the recursive wreath-division tower, and the guarantee that every
factor's carrier divides M.
The explicit list of Krohn-Rhodes factors.
- divides : DivTowerWreath M self.factors
The recursive wreath-division tower for
Moverfactors. - factorsDivide : SubFactorsDivide M self.factors
Every factor's carrier divides
M(the subquotient-faithful condition).
Instances For
Subquotient-faithful Krohn-Rhodes for finite groups #
Subquotient-faithful Krohn-Rhodes for finite groups. Every finite group
G has a subquotient-faithful factor tower: simple-group factors, each
dividing G, together with a recursive wreath-division tower for G. Proved by strong
induction on Nat.card G, peeling a proper normal subgroup N and recursing
on the subgroup ↥N (÷ G) and the quotient G/N (÷ G), threading the
MonoidDivides-to-G witness through every factor (subgroup-divides /
quotient-divides + transitivity).