A fold preserves any invariant its step preserves.
The trace-driven producer always returns a candidate under an absent budget: nothing in the walk can exhaust it.
checkAutom is closed under the producer's witness
composition.
The identity image of a set is itself.
checkAutom is closed under inversion, for bounded row sets.
The identity array is a checked automorphism of any graph with bounded rows: the base case of witness composition.
isautom returns true exactly when every edge maps to an edge
under γ: the loop's specification, consumable with the rowsOf
dischargers.
The counting argument: for a permutation of [0, n), the
admission filter's isautom implies the replay's checkAutom, over
any symmetric, loopless, per-row-bounded row array. rowsOf_symm,
rowsOf_loopless and rowsOf_bounded discharge the row hypotheses
for rowsOf G. scatter_isPerm supplies the permutation hypothesis
at the use site in Invariant/Store.
The store invariant: every stored generator pair passes
checkAutom in both components.
Equations
Instances For
Admission preserves the store invariant: the filter re-verifies
size, bounds, and isautom, so with the candidate's permutation
side (hypothesis hγ) checkAutom_of_isautom validates the stored
pair.
A fold preserves any invariant its step preserves on the list's elements.
The fresh store is trivially valid.
An admission fold over candidates that are permutations
whenever they pass the admission filter (hypothesis hautos) stores
only checkAutom-valid generator pairs.
Over a store of checkAutom-valid generator pairs, every
witness witness? returns passes checkAutom. The breadth-first
queue holds only the identity and checkAutom-closed
compositions.