A discovery tree. Parent edges refer to earlier entries and retain the generator's input index. Lookup entries use natural numbers during construction, so appending a point does not traverse the lookup vector to cast indices.
Instances For
def
Hex.PermGroup.Orbit.Tree.push
{n : Nat}
{S : Array (Perm n)}
{a : Fin n}
(t : Tree S a)
(j : Fin t.points.size)
(i : Fin S.size)
(hnew : ¬S[↑i].get t.points[↑j] ∈ t.points)
:
Tree S a
Append a previously unseen neighbor and its parent edge.
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[irreducible]
def
Hex.PermGroup.Orbit.Tree.finish
{n : Nat}
{S : Array (Perm n)}
{a : Fin n}
(t : Tree S a)
(cursor : Nat)
(hp : t.Processed cursor)
:
Process each discovered point exactly once. Termination uses the degree,
with the duplicate-free queue proving that no more than n points are visited.
Equations
Instances For
Deterministic breadth-first discovery with constant-time point lookup and parent edges. Every generator edge from the returned point set stays in it.
Equations
- Hex.PermGroup.Orbit.breadthFirst S a = ⟨((Hex.PermGroup.Orbit.Tree.root S a).finish 0 ⋯).val, ⋯⟩