pub struct Bsgs {
pub degree: usize,
pub base: Vec<usize>,
/* private fields */
}Expand description
A base and strong generating set, with the per-level basic transversals.
Fields§
§degree: usize§base: Vec<usize>Implementations§
Source§impl Bsgs
impl Bsgs
Sourcepub fn order(&self) -> u128
pub fn order(&self) -> u128
|G| = Π |Δᵢ| — exact for |G| up to the u128 range (any degree below ~33 factorial).
Sourcepub fn elements(&self, cap: usize) -> Option<Vec<Perm>>
pub fn elements(&self, cap: usize) -> Option<Vec<Perm>>
Enumerate all |G| group elements, as the unique products u_k·…·u₂·u₁ of one transversal
element per level. (sift divides g by the level-i transversal element on the right, so
g = h·u₁ with h ∈ G⁽²⁾, recursing to g = u_k·…·u₁ — deepest level innermost; we accumulate
from the deepest level outward.) Returns None if |G| > cap — the BSGS knows the order without
enumerating, so the caller gates on it. The basis of complete symmetry breaking.
Sourcepub fn transversal_elements(&self) -> Vec<Perm> ⓘ
pub fn transversal_elements(&self) -> Vec<Perm> ⓘ
All coset representatives across the stabilizer chain — the transversal elements at every level.
There are Σ |Δᵢ| of them (polynomial: at most degree²), spread across the group, so a lex-leader
symmetry break over them (together with the generators) is stronger than the bare generators yet
still polynomial, unlike the complete enumeration (|G|). This is the stabilizer chain breaking the
symmetry level by level — “symmetry break again” at each base point.