Classical.Structures.Group.IndexAction¶
Right actions of a group on an index set¶
This is the Classical.Structures.Group.IndexAction module of the Agda Universal Algebra Library.
A right action of a group G on a set I assigns to each group element a
map I → I, contravariantly: acting by x ∙ y is acting by x, then by y.
This is the gadget the wreath product construction consumes: the multiplication of
S ≀ G twists the base tuple of the right factor by the action of the left
factor's second component:
(s , x) (t , y) = (s₁ tₓ₁ , … , sₙ tₓₙ , x y).
Coordinate i of the product is s i ∙ t (x i).1
Associativity of the wreath product multiplication comes from the contravariant
law (x ∙ y) i = y (x i).
Three design points.
-
The index set is a bare type, acted on up to propositional equality
≡, not a setoid. The intended instances are finite index setsFin n(the cosets of a finite-index subgroup, enumerated), where≡is the right equality; keeping the index side propositional lets tuplesI → Sbe permuted by plain precomposition, with noFuncbookkeeping. The group side is a setoid, so the action carries a congruence field. -
No bijectivity field. Invertibility of each
act xis a consequence of the action laws (act-invˡ,act-invʳ,act-injective), not an axiom; every group action is by bijections. -
Relation to Classical.Structures.Group.GSet. The library encoding of G-sets presents the coset action as a unary algebra on the coset setoid (one operation per group element); that form feeds the congruence bridge of FLRP.Bridge. The present module is the enumerated counterpart: an action on a bare index set, which is what underlies
Sᴵand the wreath product. The two meet in the coset-action specification below.
Kernel–core correspondence. The module closes with the observation that, for
an action satisfying the (pointed) coset-action specification for a subgroup H,
the action is faithful precisely when H is core-free.2 Both directions are
proved outright; nothing here is assumed.
The right-action record¶
RightActionI 𝒢 packages an action of 𝒢 on the index type
I: the map act, its congruence in the group argument (the group
carrier is a setoid, and ≈-equal elements must act identically), the identity
law, and the contravariant compatibility law.
record RightAction (I : Type ι) (𝒢 : Group β σ) : Type (ι ⊔ β ⊔ σ) where open Group-Op 𝒢 using ( _∙_ ; ε ; _⁻¹ ; invˡ-law ; invʳ-law ) open Setoid 𝔻[ 𝒢 .proj₁ ] using ( _≈_ ) field act : 𝕌[ 𝒢 .proj₁ ] → I → I act-cong : ∀ {x y} → x ≈ y → ∀ i → act x i ≡ act y i act-ε : ∀ i → act ε i ≡ i act-∙ : ∀ x y i → act (x ∙ y) i ≡ act y (act x i)
Every group element acts invertibly: acting by x ⁻¹ undoes acting by x on
either side, by one compatibility step, one congruence step along the inverse
law, and the identity law. Injectivity of each act x follows.
-- Acting by x, then by x ⁻¹, is the identity. act-invˡ : ∀ x i → act (x ⁻¹) (act x i) ≡ i act-invˡ x i = trans (sym (act-∙ x (x ⁻¹) i)) (trans (act-cong (invʳ-law x) i) (act-ε i)) -- Acting by x ⁻¹, then by x, is the identity. act-invʳ : ∀ x i → act x (act (x ⁻¹) i) ≡ i act-invʳ x i = trans (sym (act-∙ (x ⁻¹) x i)) (trans (act-cong (invˡ-law x) i) (act-ε i)) -- Each group element acts injectively on the index set. act-injective : ∀ x {i j} → act x i ≡ act x j → i ≡ j act-injective x {i} {j} e = trans (sym (act-invˡ x i)) (trans (cong (act (x ⁻¹)) e) (act-invˡ x j))
An action is faithful when only the identity class acts as the identity map — the vanishing of the kernel of the induced permutation representation, in pointwise form.
-- Only elements ≈ ε act as the identity on every index. Faithful : Type (ι ⊔ β ⊔ σ) Faithful = ∀ {x} → (∀ i → act x i ≡ i) → x ≈ ε
The coset-action specification¶
The action Kurzweil's construction uses is the action of G on the (right)
cosets of a subgroup H, enumerated by an index set.
We specify it precisely as follows:
- Some index plays the role of the coset
Hitself, its stabilizer is exactlyH, in both directions. - Every index is reachable from it (transitivity).
This ties the abstract action to the pair (G , H) up to isomorphism of G-sets,
which is all any consumer needs, while staying indifferent to the way cosets are
enumerated.
record IsCosetAction {I : Type ι} {𝒢 : Group β σ} (A : RightAction I 𝒢) (H : Pred 𝕌[ 𝒢 .proj₁ ] ℓ) : Type (ι ⊔ β ⊔ σ ⊔ ℓ) where open RightAction A field basepoint : I stab-in : ∀ {g} → g ∈ H → act g basepoint ≡ basepoint stab-out : ∀ {g} → act g basepoint ≡ basepoint → g ∈ H reach : ∀ i → Σ[ g ∈ 𝕌[ 𝒢 .proj₁ ] ] (act g basepoint ≡ i)
The kernel–core correspondence¶
For a coset action of H, faithfulness is equivalent to core-freeness of
H; classically, the kernel of the action of G on the cosets of H is the
normal core Core_G(H).
Both directions are proved outright below, against the library's constructive core
(the meet of all conjugates, Classical.Structures.Group.NormalCore);
"core-free" is the containment of the core in the ≈-class of the identity, exactly
the form CoreFree of FLRP.Enforceable unfolds to.
ActionKernel fixes the data once for both directions.
module ActionKernel {I : Type ι} (𝒢@(𝑮 , eqns) : Group β σ) (H : Pred 𝕌[ 𝑮 ] ℓ) (H-sg : IsSubgroup 𝒢 H) (A : RightAction I 𝒢) (spec : IsCosetAction A H) where open Setoid 𝔻[ 𝑮 ] using ( _≈_ ) renaming ( refl to ≈refl ; sym to ≈sym ) open SetoidReasoning 𝔻[ 𝑮 ] open Group-Op 𝒢 using ( _∙_ ; ε ; _⁻¹ ; assoc-law ; idʳ-law ; invˡ-law ; ∙-cong ) open Conjugate 𝒢 using ( conj-syntax ) open Core 𝒢 H H-sg using ( core ; core-mem-conj ; conj-mem-core ) open RightAction A open IsCosetAction spec
One algebraic step is shared by the second direction: multiplying a conjugate
g ∙ x ∙ g ⁻¹ by g on the right recovers g ∙ x.
private -- (g ∙ x ∙ g ⁻¹) ∙ g ≈ g ∙ x, by reassociating and cancelling the inverse. conj-slide : ∀ g x → (x ^ g) ∙ g ≈ g ∙ x conj-slide g x = begin g ∙ x ∙ g ⁻¹ ∙ g ≈⟨ assoc-law (g ∙ x) (g ⁻¹) g ⟩ g ∙ x ∙ (g ⁻¹ ∙ g) ≈⟨ ∙-cong ≈refl (invˡ-law g) ⟩ g ∙ x ∙ ε ≈⟨ idʳ-law (g ∙ x) ⟩ g ∙ x ∎
Core-free implies faithful. If x acts as the identity on every index,
then every conjugate g ∙ x ∙ g ⁻¹ stabilizes the basepoint — unfold the
conjugate along the action laws and let x disappear — so by the stabilizer
specification every conjugate of x lies in H; that puts x in the core,
which core-freeness collapses to the identity class.
coreFree→faithful : core .proj₁ ⊆ trivialSubgroup 𝒢 .proj₁ → Faithful coreFree→faithful cf {x} fix = cf (conj-mem-core conj∈H) where -- Every conjugate of x stabilizes the basepoint, hence lies in H. conj∈H : ∀ g → x ^ g ∈ H conj∈H g = stab-out (trans (act-∙ (g ∙ x) (g ⁻¹) basepoint) (trans (cong (act (g ⁻¹)) (trans (act-∙ g x basepoint) (fix (act g basepoint)))) (act-invˡ g basepoint)))
Faithful implies core-free. A member x of the core has all conjugates in
H; to see x fixes an arbitrary index i, reach i from the basepoint by
some g and slide the action of g ∙ x through the conjugate: the conjugate
stabilizes the basepoint, so act x i ≡ i. Faithfulness then collapses x
to the identity class.
faithful→coreFree : Faithful → core .proj₁ ⊆ trivialSubgroup 𝒢 .proj₁ faithful→coreFree faith {x} x∈core = faith fix where fix : ∀ i → act x i ≡ i fix i = trans (cong (act x) (sym gb≡i)) (trans (sym (act-∙ g x basepoint)) (trans (act-cong (≈sym (conj-slide g x)) basepoint) (trans (act-∙ (x ^ g) g basepoint) (trans (cong (act g) (stab-in (core-mem-conj x∈core g))) gb≡i)))) where g : 𝕌[ 𝑮 ] g = reach i .proj₁ gb≡i : act g basepoint ≡ i gb≡i = reach i .proj₂
-
arXiv:1205.1927 ("the note"), proof of Lemma
lem:IE-must-have-wreaths, vendored atdocs/papers/flrp/ieprops/; the wreath product itself is Classical.Structures.Group.Wreath. ↩ -
This is the fact
ker φ = 1 ⟺ Core_G(H) = 1that the wreath no-go argument of RP-4 turns on. ↩