20  Group Actions — Algebraic Reference

A group action is a way for a group to act on a set — each group element becomes a transformation of the set, and group multiplication corresponds to composition of transformations.

This chapter provides a comprehensive algebraic treatment: the orbit-stabilizer theorem, Burnside’s lemma, the cycle index, and Pólya enumeration, verified across many groups. For conceptual introductions to these ideas, see:

(ns harmonica-book.group-actions
  (:require
   [scicloj.harmonica :as hm]
   [scicloj.kindly.v4.kind :as kind]))

Actions of cyclic groups

The cyclic group \(C_n\) acts on \(\{0, \ldots, n{-}1\}\) by rotation: \(g \cdot x = (x + g) \bmod n\).

(defn rotation-action [n]
  (fn [g x] (mod (+ x g) n)))

The orbit of any point under \(C_n\) is the entire set (the action is transitive).

(let [G (hm/cyclic-group 5)
      act (rotation-action 5)]
  (hm/orbit G act 0))
#{0 1 4 3 2}

There is exactly one orbit.

(let [G (hm/cyclic-group 5)
      act (rotation-action 5)]
  (count (hm/orbits G act (range 5))))
ImportantNo implementation of method: :elements of protocol: #’scicloj.harmonica.protocols/FiniteGroup found for class: scicloj.harmonica.group.cyclic.CyclicGroup
                          clojure.core/eval          core.clj: 3232
                                        ...                       
    harmonica-book.group-actions/eval124561        REPL Input:     
            scicloj.harmonica.action/orbits        action.clj:   35
             scicloj.harmonica.action/orbit        action.clj:   24
scicloj.harmonica.protocols/eval102277/fn/G     protocols.clj:   14
            clojure.core/-cache-protocol-fn  core_deftype.clj:  585
java.lang.IllegalArgumentException: No implementation of method: :elements of protocol: #'scicloj.harmonica.protocols/FiniteGroup found for class: scicloj.harmonica.group.cyclic.CyclicGroup

source: notebooks/harmonica_book/group_actions.clj