Skip to content

Classical.Structures.Group.PartitionSubgroup

Partition subgroups of a finite power

This is the Classical.Structures.Group.PartitionSubgroup module of the Agda Universal Algebra Library.

For the finite power 𝒢 ^ᵍ n of Classical.Structures.Group.Power and a partition π of the index set, the partition subgroup is the set of tuples constant on the blocks of π:

Kπ = { y ∈ Gⁿ | ∀ i j → ker π ≤ ker y }
   = { y ∈ Gⁿ | ∀ i j → π i j → y i ≈ y j }.

This is an equality-respecting subgroup of the power, sandwiched between the diagonal D = K⊤ and the full power Gⁿ = K⊥, and the assignment π ↦ Kπ reverses the refinement order — a finer partition imposes fewer constancy constraints, hence a larger subgroup.

The delicate lemma is order reflection: if Kρ ⊆ Kπ then π ⊑ ρ. Its proof is the one place the base group must be nontrivial. Indeed, for indices i , j in distinct ρ-blocks, the indicator tuple that is s on the ρ-block of i and ε elsewhere lies in , so it lies in ; if π i j, then the indicator would identify s with ε. The hypothesis enters as an explicit witness s with ¬ s ≈ ε — the constructive, positive form of nontriviality.1 Membership in a ρ-block is decided by the parent lookups, so the reflection is fully constructive.

Together, monotonicity and reflection make π ↦ Kπ a dual order embedding of the partition lattice Eq(n) into the interval [D , Gⁿ] of the subgroup lattice.2

{-# OPTIONS --cubical-compatible --exact-split --safe #-}

module Classical.Structures.Group.PartitionSubgroup where

-- Imports from the Agda Standard Library ---------------------------------------
open import Data.Bool.Base      using ( if_then_else_ )
open import Data.Empty          using ( ⊥-elim )
open import Data.Fin.Base       using ( Fin )
open import Data.Fin.Patterns   using ( 0F ; 1F )
open import Data.Fin.Properties using ( _≟_ )
open import Data.Nat.Base       using (  )
open import Data.Product        using ( _,_ ; proj₁ )
open import Function            using ( id )
open import Level               using ( Level )
open import Relation.Binary     using ( Setoid )
open import Relation.Binary.Definitions           using ( _Respects_ )
open import Relation.Binary.PropositionalEquality using ( _≡_ ; refl ; sym ; trans
                                                        ; cong )
open import Relation.Nullary            using ( ¬_ ; Dec ; yes ; no )
open import Relation.Nullary.Decidable  using ( does ; dec-true ; dec-false )
open import Relation.Unary              using ( Pred ; _∈_ ; _⊆_ )

-- Imports from the Agda Universal Algebra Library ------------------------------
open import Classical.Signatures.Group             using  ( ∙-Op ; ⁻¹-Op )
open import Classical.Structures.Group.Basic       using  ( Group ; module Group-Op )
open import Classical.Structures.Group.Diagonal    using  ( module DiagonalSubgroup )
open import Classical.Structures.Group.Power       using  ( module GroupPower )
open import Classical.Structures.Group.Subgroups   using  ( IsSubgroup ; mkIsSubgroup )
open import Classical.Structures.Interpret         using  ( interp-cong )
open import Classical.Structures.Lattice.Partitions
  using  ( SameBlock ; _⊑_ ; _≈ᵖ_ ; ⊤ᵉ ; ⊤ᵉ-related ; ⊥ᵉ ; parent-tab )
open import Setoid.Congruences.Certificates.Schema using  ( ParentVec ; parent )
open import Setoid.Algebras.Basic                  using  ( 𝕌[_] ; 𝔻[_] )

private variable α ρ : Level

The partition subgroup predicate

PartitionSubgroupsn 𝒢 packages the family K for a fixed power, together with the diagonal of Classical.Structures.Group.Diagonal.

module PartitionSubgroups (n : ) (𝒢 : Group α ρ) where

  open GroupPower (Fin n) 𝒢 public
  open DiagonalSubgroup (Fin n) 𝒢 public

  private
    𝑮 = 𝒢 .proj₁
    Π𝑮 = ⨅ᵍ-Group .proj₁

  open Setoid 𝔻[ 𝑮 ] using (reflexive ; _≈_) renaming (sym to ≈sym ; trans to ≈trans)
  open Setoid 𝔻[ Π𝑮 ] using () renaming ( _≈_ to _≈ᴵ_ )
  open Group-Op 𝒢 using ( ε )

  -- Membership: the tuple is constant on every block of the partition.
  K : ParentVec n  Pred 𝕌[ Π𝑮 ] ρ
  K pv x =  {i j}  SameBlock pv i j  x i  x j

Every K pv is an equality-respecting subgroup, by the same coordinatewise rewriting as for the diagonal.

  -- K pv respects the pointwise equality of the power.
  K-respects : (pv : ParentVec n)  K pv Respects _≈ᴵ_
  K-respects pv e k {i} {j} sb = ≈trans (≈sym (e i)) (≈trans (k sb) (e j))

  -- K pv is closed under the power operations, hence a respecting subgroup.
  K-isSubgroup : (pv : ParentVec n)  IsSubgroup ⨅ᵍ-Group (K pv)
  K-isSubgroup pv = mkIsSubgroup ⨅ᵍ-Group (K-respects pv) ∙-closed ε-closed ⁻¹-closed
    where
    open Group-Op ⨅ᵍ-Group  using () renaming ( _∙_ to _⊗_ ; ε to e ; _⁻¹ to inv )

    ∙-closed :  {x y}  x  K pv  y  K pv  x  y  K pv
    ∙-closed {x} {y} kx ky {i} {j} sb =
      ≈trans  (⊗-pointwise x y i)
              (≈trans  (interp-cong 𝑮 ∙-Op λ { 0F  kx sb ; 1F  ky sb })
                       (≈sym (⊗-pointwise x y j)))

    ε-closed : e  K pv
    ε-closed {i} {j} _ = ≈trans (e-pointwise i) (≈sym (e-pointwise j))

    ⁻¹-closed :  {x}  x  K pv  inv x  K pv
    ⁻¹-closed {x} kx {i} {j} sb =
      ≈trans  (inv-pointwise x i)
              (≈trans  (interp-cong 𝑮 ⁻¹-Op λ { 0F  kx sb })
                       (≈sym (inv-pointwise x j)))

The sandwich D ≤ Kπ ≤ Sⁿ

Diagonal tuples are constant outright, so they lie in every partition subgroup; the one-block partition recovers the diagonal exactly, and the discrete partition imposes no constraint at all.

  -- The diagonal lies in every partition subgroup.
  Diag⊆K : (pv : ParentVec n)  Diag  K pv
  Diag⊆K pv d {i} {j} _ = d i j

  -- The one-block partition carves out exactly the diagonal.
  K⊤⊆Diag : K (⊤ᵉ n)  Diag
  K⊤⊆Diag k i j = k (⊤ᵉ-related n i j)

  Diag⊆K⊤ : Diag  K (⊤ᵉ n)
  Diag⊆K⊤ = Diag⊆K (⊤ᵉ n)

  -- The discrete partition constrains nothing: K ⊥ᵉ is the full power.
  K⊥-full : (x : 𝕌[ Π𝑮 ])  x  K (⊥ᵉ n)
  K⊥-full x {i} {j} sb = reflexive (cong x discrete)
    where
    discrete : i  j
    discrete = trans (sym (parent-tab id i)) (trans sb (parent-tab id j))

Order reversal

Refinement reverses under K: a finer partition has more blocks, fewer constancy constraints, and a larger subgroup.

  -- Monotone contravariance: pu ⊑ pw implies K pw ⊆ K pu.
  K-antitone : {pu pw : ParentVec n}  pu  pw  K pw  K pu
  K-antitone h k sb = k (h sb)

Conversely, inclusion of partition subgroups reflects refinement, given a witness that the base group is nontrivial. For π-related i , j, either the ρ-relation of i , j is already decided true, or the indicator of the ρ-block of i — the tuple s on that block and ε off it — lies in K ρ ⊆ K π yet takes the values s at i and ε at j, forcing the contradiction s ≈ ε.

  -- Reflection: K pw ⊆ K pu implies pu ⊑ pw, for a nontrivial base group.
  K-reflects : (s : 𝕌[ 𝑮 ])  ¬ (s  ε)  {pu pw : ParentVec n}
     K pw  K pu  pu  pw
  K-reflects s s≉ε {pu} {pw} incl {i} {j} sbu = decide (parent pw i  parent pw j)
    where
    -- The indicator of the pw-block of i.
    ind : 𝕌[ Π𝑮 ]
    ind k = if does (parent pw k  parent pw i) then s else ε

    -- The indicator is constant on pw-blocks, so it lies in K pw.
    ind∈Kpw : ind  K pw
    ind∈Kpw {k} {l} sb =
      reflexive (cong  t  if does (t  parent pw i) then s else ε) sb)

    decide : Dec (SameBlock pw i j)  SameBlock pw i j
    decide (yes e)   = e
    decide (no ¬e)   = ⊥-elim (s≉ε s≈ε)
      where
      ind-i : ind i  s
      ind-i = cong  b  if b then s else ε) (dec-true (parent pw i  parent pw i) refl)

      ind-j : ind j  ε
      ind-j = cong   b  if b then s else ε)
                    (dec-false (parent pw j  parent pw i)  e  ¬e (sym e)))

      s≈ε : s  ε
      s≈ε = ≈trans  (reflexive (sym ind-i))
                    (≈trans (incl ind∈Kpw sbu) (reflexive ind-j))

Reflection upgrades mutual inclusion of partition subgroups to equality of partitions — the injectivity of π ↦ Kπ, in the setoid sense.

  -- Mutual inclusion of partition subgroups gives equal partitions.
  K-injective : (s : 𝕌[ 𝑮 ])  ¬ s  ε  {pu pw : ParentVec n}
     K pw  K pu  K pu  K pw  pu ≈ᵖ pw
  K-injective s s≉ε {pu} {pw} wu uw =
    K-reflects s s≉ε {pu = pu} {pw = pw} wu , K-reflects s s≉ε {pu = pw} {pw = pu} uw

  1. The negative form Nontrivial of Classical.Structures.Group.MinimalNormal supplies no witness to build the indicator from. 

  2. K is also onto the interval if G is a nonabelian simple group; this is Kurzweil's lemma, registered as an explicit hypothesis where the FLRP program consumes it (FLRP.KurzweilInterval).