Averaging identities for the outer hash
Provedmme_stothers_general_hash_incidence_sumsAveraging identities for the outer affine hash, at any profile.
Fix an integral ten-class profile , a scale , a prime modulus that is odd, and a residue set below . Summing over all affine hash states, where is the address length:
where is the set of all exact-profile addresses and the set of all ordered target--ambient pairs sharing a mode word.
The first is an exact double count: a single marginal-supported address is retained at exactly states, because once the common hash value and the free weights are chosen, the affine offset is determined -- this uses that the address contains the grade somewhere in each mode word, which is where positivity of the ten class counts enters. The second is an inequality because a colliding pair is retained at most at states: sharing one mode word forces the two addresses to differ in another, and a nonzero coordinate difference cuts the parameter space by a factor .
Together they are the counting input to the averaging argument: some state must retain at least the average number of targets while retaining at most a controlled number of collisions.
import Definitions.Def_mme_stothers_general_affine_hash open MME BigOperators set_option autoImplicit false
theorem mme_stothers_general_hash_incidence_sums
(base : Fin 10 → ℕ) (hbase : ∀ r, 0 < base r) (m p : ℕ) (hm : 0 < m) [Fact p.Prime]
(hp9 : 9 ≤ p) (hpodd : Odd p)
(S : Finset ℕ) (hSrange : S ⊆ Finset.range (p / 2)) :
(∑ q ∈ MME.StothersFourth.genHashStateUniverse base m p,
(MME.StothersFourth.genExactTargetEdges (MME.StothersFourth.genHashEdgesAtState base m p S q)).card) =
(MME.StothersFourth.genHashAllTargetEdges base m).card * S.card *
p ^ MME.StothersFourth.genOuterLength base m ∧
(∑ q ∈ MME.StothersFourth.genHashStateUniverse base m p,
(MME.StothersFourth.genTargetAmbientCollisions
(MME.StothersFourth.genHashEdgesAtState base m p S q)).card) ≤
(MME.StothersFourth.genHashAllTargetAmbientCollisions base m).card *
p ^ MME.StothersFourth.genOuterLength base m := by
sorry