The scatter of one permutation labelling over another is a
permutation of [0, n): the isPerm side condition that
checkAutom_of_isautom consumes, produced from the two labellings'
permutation properties.
The code-1 admission under its explicit isautom guard: the
scatter of the leaf labelling over the first-path labelling passes
checkAutom when the isautom scan accepted it.
The code-2 admission: two permutation labellings presenting equal
leaf rows are joined by an automorphism, so the scatter passes
checkAutom with no isautom scan. Equal rows mean the two
relabelled graphs coincide; transporting one row identity back
through the labellings' inverses shows the scatter preserves every
row.
After scanning an injective source prefix, every scanned source slot contains its corresponding target value.
processnode's effect on the admitted-generator trace: either
nothing is pushed, or exactly one scatter is pushed, connecting the
first-path labelling (code 1, at the recorded first-leaf depth and after
an automorphism scan) or the
incumbent labelling (code 2, under the testcanlab equality on the
freshly completed canong) to the current leaf labelling. The
injectivity and bound hypotheses on the two base labellings are
permutation facts the run-level invariant carries; the scatter
equations feed checkAutom_scatter_of_isautom and, through
leafEvent_faithful's rows account,
checkAutom_scatter_of_leafRows_eq.
The successful code-one arm appends exactly the first-to-current scatter that passed its explicit automorphism scan.
The successful code-one event exposes the exact checked carrier it appended, including its pointwise action from the first leaf to the current leaf.
The row-tied code-two arm appends exactly the incumbent-to-current scatter, independently of which greatest-common-ancestor return it takes.
The code-two event exposes the exact checked carrier it appended from the incumbent leaf to the current leaf.
An injective bounded labelling of full size is a permutation of
[0, n): the side condition of the checkAutom scatter exits,
discharged from the node invariant the descents carry.
If processnode records a generator, the same generator is both
checked and identified as the scatter from the first or incumbent leaf
onto the current leaf.
Every generator processnode admits passes checkAutom, given
the run-level facts per arm: permutation facts for the three
labellings (the run invariant carries them); the code-1 arm's mandatory
isautom scan; and the code-2 arm's rows equality (harm3, discharged from the
incumbent-store account: updatecan_inv completes canong to the
incumbent's leaf rows and testcanlab_fst reads the tie as row
equality).
Every generator the run has recorded is a checked automorphism.
The additional property P records admission facts such as initial
colour preservation. This is the invariant the domination induction threads: processnode is the only primitive that writes
genTrace, so every other event preserves it by its frame.
Equations
Instances For
The invariant survives the admission event. The only row clause is
the incumbent tie behind the testcanlab arm; code 1 is scanned.