ROM Birthday Bound #
Per-pair collision bounds and union bound birthday argument for random oracle collision probability. Covers both log-based and cache-based collision bounds, with per-index corollaries.
Per-Pair Collision Bound (Textbook Step 3) #
For each pair (i,j) of positions in the log with distinct inputs, Pr[outputs equal] ≤ 1/|C|. This is because in the evalDist model, each query returns an independent uniform sample.
ROM uniformity at a log position: For any loggingOracle trace, the
probability that the k-th log entry matches a fixed sigma-typed value ⟨t, v⟩
is at most 1/|Range t|. Each query response is an independent uniform draw.
Uniformized log entry bound: the probability that position k of a loggingOracle
trace equals a fixed sigma-typed entry is at most 1/|Range default|, assuming |Range default|
is minimal across all oracle indices.
This is a corollary of probEvent_log_entry_eq_le (which gives 1/|Range entry.1|) combined
with the hrange monotonicity hypothesis.
Probability that the k-th log entry's output is HEq to a fixed value u₀ : spec.Range t₀.
Unlike probEvent_log_entry_eq_le which matches the full sigma entry, this only constrains
the output component. The bound uses hrange to get 1/|Range default|.
Per-pair collision bound: For any two positions in a loggingOracle trace
with distinct inputs, the probability that their outputs are HEq-equal is ≤ 1/|C|.
This is the core ROM property: distinct oracle inputs yield independent uniform outputs.
The hrange hypothesis ensures |Range default| is minimal across all oracle indices,
so the bound holds uniformly with |C| = |Range default|.
Union Bound Birthday (Textbook Steps 4-5) #
Collision = ∃ pair with collision. Union bound over C(n,2) pairs gives n²/(2|C|).
Tight birthday bound for loggingOracle (total query bound):
The probability of a collision in the query log is ≤ C(n,2)/|C|, where C(n,2)
is the exact number of unordered pairs of query positions.
Birthday bound for loggingOracle (total query bound):
The probability of a collision in the query log is ≤ n²/(2|C|).
A loose corollary of probEvent_logCollision_le_birthday_total_tight.
Tight birthday bound for cachingOracle (total query bound):
The probability of a collision in the cache is ≤ n*(n-1)/(2|C|).
Loose birthday bound for cachingOracle (total query bound):
The probability of a collision in the cache is ≤ n²/(2|C|).
A loose corollary of probEvent_cacheCollision_le_birthday_total_tight.
Per-Index Bound Versions #
Birthday bound for cachingOracle with per-index query bound.
WARNING: vacuously true. The [Unique ι] hypothesis means ι has exactly one element,
but CacheHasCollision requires two distinct oracle indices t₁ ≠ t₂ : ι, which is impossible.
The event CacheHasCollision z.2 is therefore always false, making the bound trivially 0 ≤ ....
The non-vacuous birthday bound is probEvent_cacheCollision_le_birthday_total_tight.