Every level of a chain, including the terminal one, has a symmetric working generator array.
Equations
- (Hex.PermGroup.Chain.leaf S words).AllWorking = Hex.PermGroup.Chain.Working S
- (Hex.PermGroup.Chain.cons level tail).AllWorking = (Hex.PermGroup.Chain.Working level.generators ∧ tail.AllWorking)
Instances For
The chain below the first level; a terminal chain is its own suffix.
Equations
- (Hex.PermGroup.Chain.leaf S words).suffix = Hex.PermGroup.Chain.leaf S words
- (Hex.PermGroup.Chain.cons level tail).suffix = tail
Instances For
A symmetric working array normalizes to itself, with one generator reference as the provenance of each element.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Adding an input generator keeps every normalized generator.
A one-reference program for an element of U, or the identity if it is
absent.
Equations
- Hex.PermGroup.embedWord U x = match U.finIdxOf? x with | some i => { nodes := #[Hex.PermGroup.Node.generator ↑i], root := 0 } | none => { nodes := #[Hex.PermGroup.Node.id], root := 0 }
Instances For
Programs for the elements of T as references into an array U containing
them.
Equations
- Hex.PermGroup.embedWords U T = Hex.Vector.ofFn' fun (j : Fin T.size) => Hex.PermGroup.embedWord U T[↑j]
Instances For
Move programs over T to programs over a larger array U.
Equations
- Hex.PermGroup.transferWords U h words hw = Hex.Vector.ofFn' fun (j : Fin R.size) => Hex.PermGroup.Program.substitute U T (Hex.PermGroup.embedWords U T) ⋯ words[↑j] ⋯
Instances For
A complete suffix for a supplied input, retaining its normalization map for provenance transfer when used beneath another chain level.
- normal : Normalized S
- chain : Chain n
- working : self.chain.AllWorking
- extensions : Nat
Strict subgroup insertions made while constructing this suffix, including those in its own suffixes.
Instances For
Give a complete suffix provenance in its preceding level.
Instances For
Reuse a checked chain as a complete suffix for its own top-level generators.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Retained generators, with provenance in the preceding level and fixed-point conditions for the complete suffix being rebuilt.
- words : Vector Program self.generators.size
- fixed : Chain.Fixed base self.generators
Instances For
Equations
- s.push p w hw hf = { generators := s.generators.push p, words := Vector.cast ⋯ (s.words.push w), valid := ⋯, fixed := ⋯ }
Instances For
Filtering always keeps a complete chain for exactly the retained generators.
- seeds : Seeds S base
- result : Construction self.seeds.generators base
- extensions : Nat
Extensions made so far, including those inside suffix extensions.
Instances For
A candidate's program is delayed until insertion, so discarded Schreier elements allocate neither copied transporter programs nor provenance arrays.
- value : Perm n
Instances For
Extend a complete suffix by one input generator.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Inspect one candidate using a complete sift. A successful sift leaves the state alone; a failure inserts the generator and extends the current suffix.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A failed complete sift supplies a witness that insertion strictly enlarges the retained subgroup. The same claim is not made for an unfinished chain.
Stream candidates in their supplied order, extending the suffix only after an exact nonmembership verdict from the current complete suffix.
Equations
- Hex.PermGroup.Build.State.scan build family s [] = s
- Hex.PermGroup.Build.State.scan build family s (i :: is) = Hex.PermGroup.Build.State.scan build family (Hex.PermGroup.Build.State.insert build s (family i).value (family i).word ⋯ ⋯) is
Instances For
The Schreier candidates of one level: h(s, x) for each symmetric
generator s and orbit point x, with delayed words in the level generators.
Equations
- One or more equations did not get rendered due to their size.
Instances For
All Schreier pairs of a level, generator-major.
Equations
- Hex.PermGroup.Build.pairs r q = List.flatMap (fun (i : Fin r) => List.map (fun (x : Fin q) => (i, x)) (List.finRange q)) (List.finRange r)
Instances For
Assemble a level from a final scan state whose retained generators generate every Schreier candidate of the level.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Complete one level from a starting state for its suffix: stream every Schreier pair against the current complete suffix, extending it at each rejection. The starting state may already contain retained generators.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The terminal level: every generator fixes every point.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The starting state for extending a complete suffix by one generator: the suffix below its first level, with provenance moved to the new level's generators, which contain the old ones.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Add one generator to a complete suffix. The previous suffix below this level becomes the starting state of the new level's scan, so only Schreier generators that it rejects cause recursive extensions; nothing is rebuilt from scratch.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A complete chain for the trivial subgroup.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Deterministic Schreier-Sims construction. The first level streams its Schreier generators against a complete chain for those retained so far, starting from the trivial chain and extended at each rejection; that chain is the suffix.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Construct a complete checked group for every input generator array. Original indices are retained even when normalization removes identities or duplicates.
Equations
- Hex.PermGroup.Group.ofGenerators S = { generators := S, chain := (Hex.PermGroup.Build.build 0 ⋯ S ⋯).chain, valid := ⋯ }