Skip to main content

SymmetryProfile

Struct SymmetryProfile 

Source
pub struct SymmetryProfile {
Show 30 fields pub order: u128, pub generators: usize, pub num_orbits: usize, pub rank: usize, pub transitivity: usize, pub primitive: bool, pub blocks: Option<usize>, pub abelian: bool, pub solvable: Option<bool>, pub nilpotent: Option<bool>, pub derived_length: Option<usize>, pub nilpotency_class: Option<usize>, pub derived_order: u128, pub conjugacy_classes: Option<usize>, pub center_order: Option<u128>, pub exponent: Option<u128>, pub assignment_orbits: Option<u128>, pub abelianization: Option<(u128, u128)>, pub subgroups: Option<usize>, pub simple: Option<bool>, pub composition_factors: Option<Vec<u128>>, pub sylow: Option<Vec<(u128, usize)>>, pub real_classes: Option<usize>, pub rational_classes: Option<usize>, pub irreducible_degrees: Option<Vec<u128>>, pub frobenius_schur: Option<Vec<i8>>, pub isotypic_multiplicities: Option<Vec<u128>>, pub automorphism_order: Option<u128>, pub outer_automorphism_order: Option<u128>, pub coherent_rank: Option<usize>,
}
Expand description

The structural profile of a formula’s variable-symmetry group|Aut|, the orbit/rank/transitivity ladder, primitivity, and block structure. The data a surfacing layer (e.g. a Studio panel) needs to explain why an instance is symmetric.

Fields§

§order: u128

|Aut| of the phase-free variable-symmetry group (1 when there is no symmetry).

§generators: usize

Number of detected generators.

§num_orbits: usize

Variable orbits (points moved together).

§rank: usize

Rank — orbits on ordered pairs (2 iff 2-transitive); 0 when not computed (group too large).

§transitivity: usize

Transitivity degree, capped (1 = transitive, 2 = 2-transitive, …).

§primitive: bool

Whether the (transitive) group is primitive.

§blocks: Option<usize>

The number of minimal blocks when the group is transitive and imprimitive, else None.

§abelian: bool

Whether the group is abelian.

§solvable: Option<bool>

Whether the group is solvable (its derived series reaches the trivial group); None when not computed (group too large for the derived-series walk).

§nilpotent: Option<bool>

Whether the group is nilpotent (its lower central series reaches the trivial group); strictly stronger than solvable. None when not computed.

§derived_length: Option<usize>

Derived length (solvability class) — the depth of the derived series; None if unsolvable / not computed.

§nilpotency_class: Option<usize>

Nilpotency class — the depth of the lower central series; None if not nilpotent / not computed.

§derived_order: u128

Order of the derived (commutator) subgroup [G, G]; 0 when not computed.

§conjugacy_classes: Option<usize>

Number of conjugacy classes (= number of irreducible representations); None when the group is too large to enumerate.

§center_order: Option<u128>

Order of the centre Z(G); None when too large to enumerate.

§exponent: Option<u128>

The exponent — lcm of element orders (smallest e with gᵉ = id for all g); None when too large to enumerate.

§assignment_orbits: Option<u128>

The number of distinct {0,1} assignments to the variables up to symmetry (Pólya with 2 colours) — the symmetry-reduced size of the search space; None when too large to enumerate.

§abelianization: Option<(u128, u128)>

The abelianisation G/[G,G] as (order, exponent) — the largest abelian quotient; None when too large to enumerate.

§subgroups: Option<usize>

The number of subgroups (size of the subgroup lattice); None for larger groups (the lattice walk is gated more tightly than the other invariants).

§simple: Option<bool>

Whether the group is simple (non-trivial, no normal subgroup but itself and {id}); None when too large to enumerate.

§composition_factors: Option<Vec<u128>>

The composition factors (Jordan–Hölder) as the sorted multiset of their orders; their product is |G|. None when the lattice walk is out of range.

§sylow: Option<Vec<(u128, usize)>>

The Sylow structure as (p, n_p) pairs — the number of Sylow p-subgroups per prime; None when the lattice walk is out of range.

§real_classes: Option<usize>

The number of real conjugacy classes (= number of real irreducible characters); None when too large to enumerate.

§rational_classes: Option<usize>

The number of rational conjugacy classes (= number of rational-valued irreducible characters) — the singleton Galois orbits. Strictly refines Self::real_classes (rational ≤ real); they differ exactly when a character is real but irrational. None when too large to enumerate.

§irreducible_degrees: Option<Vec<u128>>

The irreducible-representation degrees χ_s(1) (sorted, Σ dᵢ² = |G|) from the Burnside–Dixon character table — the complete representation-theoretic fingerprint of the symmetry; None when the character table is out of range.

§frobenius_schur: Option<Vec<i8>>

The Frobenius–Schur indicators (one per irreducible, aligned with the character table): +1 real, 0 complex, −1 quaternionic. Refines Self::real_classes and separates groups with identical character tables (D₄ vs Q₈). None when the character table is out of range.

§isotypic_multiplicities: Option<Vec<u128>>

The isotypic decomposition of the variable-permutation representation: the multiplicity m_s of each irreducible in π = Σ_s m_s χ_s (aligned with the character table). Bridges the action and the linear theory — m_trivial = num_orbits, Σ m_s² = rank, Σ m_s·d_s = num_vars. None when out of range.

§automorphism_order: Option<u128>

The order of Aut(G) — the automorphism group of the symmetry group itself. The intrinsic symmetry of G as an abstract group. None when out of range. Separates groups indistinguishable by character table / Frobenius–Schur / rationality (e.g. |Aut(D₄)|=8 vs |Aut(Q₈)|=24).

§outer_automorphism_order: Option<u128>

The order of Out(G) = Aut(G)/Inn(G) — the outer automorphisms (those not realised by conjugation). None when out of range.

§coherent_rank: Option<usize>

The coherent (association-scheme) rank — the number of relations in the coherent configuration that 2-WL stabilizes to (= two_wl_pair_cells), the combinatorial analog of the orbital rank. It is ≤ rank (2-WL can only be coarser than the true orbitals), so a value below rank witnesses that the polynomial pre-filter cannot resolve the full pair structure. Clause-derived: Some only from symmetry_structure (None for the pseudo-Boolean coefficient profile, which has no clauses).

Trait Implementations§

Source§

impl Clone for SymmetryProfile

Source§

fn clone(&self) -> SymmetryProfile

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SymmetryProfile

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for SymmetryProfile

Source§

fn eq(&self, other: &SymmetryProfile) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for SymmetryProfile

Source§

impl StructuralPartialEq for SymmetryProfile

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.