A balanced RArray holding xs[j] at index j, for nonempty xs.
Equations
- Hex.PermGroup.Kernel.rarrayOf xs = Hex.PermGroup.Kernel.rarrayOf.go✝ xs xs.size 0 xs.size
Instances For
Equations
- Hex.PermGroup.Kernel.instInhabitedPerm = { default := Hex.Perm.id n }
Instances For
One step of a linear congruential generator, for deterministic sampling.
Equations
Instances For
The orbit of b under gens in breadth-first order. Each later point
records its Schreier-tree edge (i, k), meaning point j is gens[i] applied
to point k < j, and its transversal element.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Add generators to a complete chain by extension, skipping those it already contains.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The order of the group generated by gens, from a complete chain built by
extension only. Such chains are not stored in groups, but their orbit sizes
give the order.
Equations
Instances For
A partial stabilizer chain built from elements of a group H: base points,
the generators added at each level (level i uses those of levels ≥ i, all of
which fix the earlier base points), and each level's transversal, indexed by
point. Each level's orbit lies in the orbit of its base point under the
corresponding point stabilizer of H, so the product of the orbit sizes is at
most |H|, whether or not the chain is complete.
Instances For
The orbit sizes' product, a lower bound on the order of the group.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Recompute the transversals of levels 0 to i.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Sift g, adding its residue as a new generator when it is not the identity.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Whether the group generated by gens, known to lie in a group of order
target, is all of it: sift pseudo-random elements of the group, made by
product replacement, into a partial chain until its lower bound reaches
target. Stops with false after patience consecutive elements that do not
raise the bound, or after 100000 elements. A true answer is certain; false
does not show that gens fails to generate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The product of the candidates at the given indices, leftmost outermost.
Equations
- Hex.PermGroup.Kernel.product cands w = List.foldr (fun (i : Nat) (p : Hex.Perm n) => cands[i]!.comp p) (Hex.Perm.id n) w
Instances For
A few products of elements of cands, as index lists, generating a group of
order target. A single candidate of order target is taken if there is one.
Otherwise pseudo-random sets of start (clamped to two or three) up to three
products of three candidates are tried, each first compared on orbits and then
accepted when reachesOrder shows that it generates a group of order target. Failing those, candidates are added singly, in order, whenever
they enlarge the group.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The levels of a certificate for the group of order order generated by the
non-identity permutations gens. Each level's base is the least point moved
by its generators, and the next level's generators are a few of its Schreier
generators that generate the stabilizer.
Equations
- One or more equations did not get rendered due to their size.
- Hex.PermGroup.Kernel.certLevels n 0 x✝² x✝¹ x✝ = throw "certificate construction did not terminate"
Instances For
The kernel certificate of the group generated by S. The first level's
generators are a few products of the distinct non-identity inputs that generate
the group, found by sampling sets of products of three and then of eight
inputs, or those inputs themselves when sampling finds no smaller set.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Estimated kernel work, in field operations, of one sift through rest.
Equations
- Hex.PermGroup.Kernel.siftCost n rest = List.foldl (fun (acc : Nat) (L : Hex.PermGroup.Kernel.Level) => acc + n + L.size.log2 + 2) n rest
Instances For
Estimated work of one Schreier pair of L followed by rest.
Equations
- Hex.PermGroup.Kernel.pairCost n L rest = 2 * n + L.size.log2 + Hex.PermGroup.Kernel.siftCost n rest
Instances For
Estimated work of levelOk for L followed by rest.
Equations
Instances For
Estimated work of inputsOk.
Equations
- One or more equations did not get rendered due to their size.
- Hex.PermGroup.Kernel.inputsCost n inputCount [] = inputCount * Hex.PermGroup.Kernel.siftCost n [] + 0
Instances For
Split [0, total) into adjacent ranges of at most step pairs.
Equations
Instances For
For each level, adjacent ranges of Schreier pairs whose estimated work is at
most budget, or the first check that cannot fit.
Equations
- One or more equations did not get rendered due to their size.