Orbit closure #
dfsChildren skips a child that is marked in orb.mark, the set of children in the orbit of the
already-processed ones under the automorphisms fixing the node's path. This file proves the one
fact that makes the skip legitimate: everything the closure marks is reachable from a seed by the
generators, in the form
orbitClosure_P/closureLoop_P— if a predicatePholds on the seeds and is closed under the generators, then it holds on everything marked.
Instantiated with P w := "the subtree below the child w is dominated" and combined with
Autos.reach_child_auto, this says that skipping a marked child loses no leaf key.
Orbit closure #
One closure step keeps the invariant. If P is closed under the generators, marking the
images of a point satisfying P only ever marks points satisfying P.
Orbit closure is sound. Everything orbitClosure marks satisfies any predicate that
holds on the seeds and is closed under the generators. Instantiated with "the subtree below this
child is dominated", this is exactly what makes orbit pruning legitimate.