The search meets its specification #
The two halves of the correctness proof meet here.
dfsNode_reach(soundness,IsoGraph/Canon/Search.lean) says the leaf the search settles on really is a leaf of the whole tree.dfsNode_dom(optimality,IsoGraph/Canon/Optimal.lean) says every leaf of the whole tree is dominated by it.
Instantiating the second at the root gives canonSt_dom, and together they give
canonSt_bestKey — the search's answer satisfies BestKey, the specification stated back in
IsoGraph/Canon/Search.lean. Since BestKey is manifestly an isomorphism invariant
(bestKey_transfer) and determines its key uniquely (bestKey_unique), the certificate the
search returns does not depend on how the vertices were named: canonical_cert_relabel.
That is exactly what Spec.LabellingInvariant needs, once certOf_get is used to read the
adjacency matrix back out of the packed certificate (canonical_get).
The winner's certificate is an isomorphism invariant. The search on the renamed graph settles on a leaf with the same certificate as the search on the original.