Documentation

LeanPool.KrohnRhodes.FactorTower

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.

References #

Division is reflexive for semigroups. S divides itself via the identity homomorphism on the whole semigroup.

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.

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

      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.

      Instances For

        Build an aperiodic factor from a finite aperiodic monoid.

        Equations
        Instances For

          Build a simple-group factor from a finite simple group.

          Equations
          Instances For

            The recursive division predicate of a factor tower.

            DivTowerWreath M factors records the following recursive wreath divisions:

            • [] — M divides the trivial monoid PUnit (the empty product; this forces M to be a single point up to division).
            • F :: rest — there is a finite base monoid B that itself decomposes via the tail rest (DivTowerWreath B rest), and M divides WreathProduct F.carrier B Y for some finite type Y on which B acts: the head factor F.carrier sits in the decoration slot over the base B.

            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
            Instances For
              theorem LeanPool.KrohnRhodes.divTowerWreath_cons (M : Type u) [Monoid M] [Finite M] (F : KRFactor) (rest : List KRFactor) :
              DivTowerWreath M (F :: rest) ↔ ∃ (B : Type u) (x : Monoid B) (x_1 : Finite B) (Y : Type u) (x_2 : Fintype Y) (x_3 : MulAction B Y), DivTowerWreath B rest ∧ SgDiv M (WreathProduct F.carrier B Y)

              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.

              A single-factor tower over a factor F: DivTowerWreath F.carrier [F], witnessed by the PUnit base. (Stated directly over F.carrier with its canonical F.mon/F.fin instances so the wreath-product instances coincide with the recursive predicate's.)

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

              theorem LeanPool.KrohnRhodes.divTowerWreath_of_sgDiv {S T : Type u} [Monoid S] [Finite S] [Monoid T] [Finite T] (h : SgDiv S T) {factors : List KRFactor} :
              DivTowerWreath T factors → DivTowerWreath S factors

              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.

              @[instance_reducible]
              def LeanPool.KrohnRhodes.WreathAssoc.actW (B' B Y X : Type u) [Monoid B'] [Monoid B] [MulAction B' Y] [MulAction B X] :
              MulAction (WreathProduct B' B X) (Y × X)

              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
                  theorem LeanPool.KrohnRhodes.WreathAssoc.Phi_injective (G B' B Y X : Type u) [Monoid G] [Monoid B'] [Monoid B] [MulAction B' Y] [MulAction B X] :
                  Function.Injective ⇑(Phi G B' B Y X)
                  theorem LeanPool.KrohnRhodes.sgDiv_wreath_assoc (G B' B Y X : Type u) [Monoid G] [Monoid B'] [Monoid B] [MulAction B' Y] [MulAction B X] :

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

                  theorem LeanPool.KrohnRhodes.sgDiv_wreath_decoration_mono (A A' B X : Type u) [Monoid A] [Monoid A'] [Monoid B] [MulAction B X] (h : SgDiv A A') :

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

                  theorem LeanPool.KrohnRhodes.divTowerWreath_wreathStep (towA : List KRFactor) {S A B X : Type u} [Monoid S] [Finite S] [Monoid A] [Finite A] [Monoid B] [Finite B] [Finite X] [MulAction B X] :
                  SgDiv S (WreathProduct A B X) → DivTowerWreath A towA → ∀ {towB : List KRFactor}, DivTowerWreath B towB → DivTowerWreath S (towA ++ towB)

                  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
                  Instances For
                    theorem LeanPool.KrohnRhodes.subFactorsDivide_of_divides {A M : Type u} [Monoid A] [Monoid M] (hAM : MonoidDivides A M) {factors : List KRFactor} (h : SubFactorsDivide A factors) :

                    If every factor of factors divides A, and A divides M, then every factor divides M (transitivity of division).

                    theorem LeanPool.KrohnRhodes.subFactorsDivide_append {M : Type u} [Monoid M] {towA towB : List KRFactor} (hA : SubFactorsDivide M towA) (hB : SubFactorsDivide M towB) :
                    SubFactorsDivide M (towA ++ towB)

                    The append of two divides-witnessed factor lists.

                    structure LeanPool.KrohnRhodes.KRFactorTowerSub (M : Type u) [Monoid M] [Finite M] :
                    Type (u + 1)

                    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.

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