Pair-sparsity guard for direct incidence-table search #
theorem
Erdos97Octagon.RawIncidence.pairCount_le_pairMultiplicity
(Q : OctagonIncidence)
(assignments : List (Vertex × UInt64))
(a b : Vertex)
(hcentres : (List.map Prod.fst assignments).Nodup)
(hrows : ∀ (centre : Vertex) (row : UInt64), (centre, row) ∈ assignments → Q.targets centre = packedRow row)
:
The processed-row count of a pair is bounded by its full incidence multiplicity.
theorem
Erdos97Octagon.RawIncidence.pairCompatibleB_of_pairSparse
(Q : OctagonIncidence)
(hSparse : Q.PairSparse)
(assignments : List (Vertex × UInt64))
(nextCentre : Vertex)
(nextMask : UInt64)
(hcentres : (nextCentre :: List.map Prod.fst assignments).Nodup)
(hrows : ∀ (centre : Vertex) (row : UInt64), (centre, row) ∈ assignments → Q.targets centre = packedRow row)
(hnext : Q.targets nextCentre = packedRow nextMask)
:
Pair sparsity makes the direct-search pair guard accept the actual next row.
theorem
Erdos97Octagon.RawIncidence.pairCompatibleB_of_pairSparse_prefix
(Q : OctagonIncidence)
(hSparse : Q.PairSparse)
(assignments : List (Vertex × UInt64))
(nextCentre : Vertex)
(remaining : List Vertex)
(nextMask : UInt64)
(hcentres : List.map Prod.fst assignments ++ nextCentre :: remaining = List.finRange 8)
(hrows : ∀ (centre : Vertex) (row : UInt64), (centre, row) ∈ assignments → Q.targets centre = packedRow row)
(hnext : Q.targets nextCentre = packedRow nextMask)
:
The pair guard accepts the next row of a prefix partitioning all eight centres.