Documentation

HexGraphIso.Nauty.Correct.Generation.Internal

theorem Hex.GraphIso.Nauty.Generation.other_internal {n : Nat} {ctx : Ctx n} {inf tcLevel fuel level numcells tc : Nat} {st : SearchSt n} {targets : List Nat} {key : Key n} (hnum : (refine ctx level st.lab st.ptn st.active numcells).numcells < n) (hok : IterOk ctx level (refine ctx level st.lab st.ptn st.active numcells)) (heq : Equitable ctx level (refine ctx level st.lab st.ptn st.active numcells).lab (refine ctx level st.lab st.ptn st.active numcells).ptn) (hm : Matches ctx level st (tc :: targets) key) (hleaf : HasLeaf ctx tcLevel level (refine ctx level st.lab st.ptn st.active numcells) (tc :: targets) key) (hlevel : st.eqlevFirst = level - 1) (hclear : st.needshortprune = false) :
have rs := refine ctx level st.lab st.ptn st.active numcells; have pre := otherLeafSt ctx level numcells st; have mt := specMaketargetcell ctx rs.lab rs.ptn level tcLevel; have target := { lab := pre.lab, ptn := pre.ptn, active := pre.active, orbits := pre.orbits, fixedpts := pre.fixedpts, autos := pre.autos, wsCap := pre.wsCap, firstcode := pre.firstcode, canoncode := pre.canoncode, firsttc := pre.firsttc, firstlab := pre.firstlab, canonlab := pre.canonlab, canong := pre.canong, samerows := pre.samerows, compCanon := pre.compCanon, eqlevFirst := pre.eqlevFirst, eqlevCanon := pre.eqlevCanon, gcaFirst := pre.gcaFirst, gcaCanon := pre.gcaCanon, canonlevel := pre.canonlevel, noncheaplevel := pre.noncheaplevel, allsamelevel := pre.allsamelevel, cosetindex := pre.cosetindex, stabvertex := pre.stabvertex, needshortprune := pre.needshortprune, numnodes := pre.numnodes, tctotal := pre.tctotal + mt.snd.snd, canupdates := pre.canupdates, numorbits := pre.numorbits, numgenerators := pre.numgenerators, numbadleaves := pre.numbadleaves, maxlevel := pre.maxlevel, genTrace := pre.genTrace }; have ready := if ¬cheapautom target.ptn level n = true then { lab := target.lab, ptn := target.ptn, active := target.active, orbits := target.orbits, fixedpts := target.fixedpts, autos := target.autos, wsCap := target.wsCap, firstcode := target.firstcode, canoncode := target.canoncode, firsttc := target.firsttc, firstlab := target.firstlab, canonlab := target.canonlab, canong := target.canong, samerows := target.samerows, compCanon := target.compCanon, eqlevFirst := target.eqlevFirst, eqlevCanon := target.eqlevCanon, gcaFirst := target.gcaFirst, gcaCanon := target.gcaCanon, canonlevel := target.canonlevel, noncheaplevel := level + 1, allsamelevel := target.allsamelevel, cosetindex := target.cosetindex, stabvertex := target.stabvertex, needshortprune := target.needshortprune, numnodes := target.numnodes, tctotal := target.tctotal, canupdates := target.canupdates, numorbits := target.numorbits, numgenerators := target.numgenerators, numbadleaves := target.numbadleaves, maxlevel := target.maxlevel, genTrace := target.genTrace } else target; have result := otherChildLoop ctx inf tcLevel fuel (n + 1) level rs.numcells mt.fst ((mt.snd.fst.nextElem none).getD 0) (mt.snd.fst.nextElem none) mt.snd.fst ready; otherNode ctx inf tcLevel (fuel + 1) level numcells st = match result.fst with | some r => (r, result.snd) | none => (Int.ofNat level - 1, result.snd)

A matching internal occurrence reaches the specification target sweep. Neither the canonical comparison nor the saved pruning boundaries can cause an immediate return from this node.