mhpow B4 (R15-07): the composed accepted-proof energy statement, its losses and the encoded-state answer (NOT RUN)

Track B item B4, documents only. docs/analysis/mhpow/b4/README.md: the pROM model and the MTP/DRSample construction exactly as
Blocki-Smearsoll TCC 2025 (eprint 2025/1456, full PDF sha256 13c3646e...) states them, its theorems and constants with numbers
(Thm 4 to 7, Cor 1 to 3, Lemma 5, Fact 8), the composed three-term statement (hashing, transfers, retention) with the status of
each term, what the 2024 bandwidth paper (2018/221, 2a466b97...) and Ren-Devadas (2017/225) give, what is new, the reduction-loss
table (generic route at most 0.151 of honest energy at log2 N = 22; red-blue route at least 256/(1-rho) loss), R4's encoded-state
question as BLOCKED row B4-B07, the quantum sentence, ten BLOCKED rows and the obligations for B2 and B1 by row.
tools/mhpow/b4/params.py (closed-form arithmetic, standard library) ran on build-9; params.txt is its output; RUNS.md the runs;
registry-batch-b4.json one NOT RUN cell for the steward, not recorded. Research paths added to tools/ci/export-exclude.txt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-09 09:18:47 +00:00
parent 197a7fe39d
commit d27064242f
6 changed files with 557 additions and 0 deletions

View file

@ -0,0 +1,355 @@
# B4 (R15-07): the energy cost of accepted proofs, as a statement first
Track B item B4 of the 1.5x research programme (plan: docs/plans/igneum-2.0-master/1p5x/, the research plan sha256
269ceaa5824d0914..., sections 2, 3.5, 4.2 to 4.5, 6 B4, 8, 9, 10 R15-07). Lane: B4, the theory lane. Written 9 October 2026,
10:1x to 12:xx UK. Documents only: no code of Igneum's is changed, nothing activates.
**Decision: NOT RUN.** This is a statement and an audit of what the published theorems give, not a proof and not a pass. Every
NEW line below is a proof obligation until the independent panel reads it. The composed claim is a theorem shape with named holes;
where a hole is decision-critical it is a BLOCKED row with its exact question.
**The result in four lines.**
1. The 2025 theorem (Blocki and Smearsoll) proves, in the parallel random oracle model, that any prover whose MTP/DRSample
certificate is accepted had cumulative memory (bits held, summed over rounds) at least (lambda/4)(e d/2), except with an
explicit small probability. Cumulative memory is capacity times time. It is not memory traffic and it is not joules.
2. The 2024 bandwidth paper (Blocki, Liu, Ren and Zhou, the corrected JoC version) gives two bridges from that to energy: a
generic one (Theorem 4.5, any trace) that loses a square root, and a pebbling one (Theorem 3.3 with Lemma 5.5) that loses a
factor of at least 256/(1 - rho) in its published constants and says nothing once the adversary's cache holds about
C N / log2 N labels. Neither bridge has been proved for the MTP certificate setting; that composition is the NEW part.
3. Through the published constants, the best composed lower bound L is at most about 1/6.6 (generic route, ideal
depth-robustness constants c1 c2 = 1, equal transfer and hash costs, log2 N = 22) and 1/341 or less (pebbling route) of an
honest specialist's energy. A 1.5x certificate
(G_upper / L <= 1.5, plan section 2) is therefore not reachable from the published constants; it needs new theorems with
tight constants, and it cannot survive an adversary whose on-die SRAM holds C N / log2 N labels unless the bound prices the
SRAM itself (section 8). This is a negative screening result for the Track B route as published, kept as a control.
4. R4's encoded-state warning does not break the 2025 cumulative-memory theorem (its model counts the state in bits under any
representation, and R4 says itself that its separations do not reach data-independent functions in the parallel model);
it does bind every Igneum-specific change that makes the graph data-dependent or the label function structured (row B4-B07).
## 1. Sources, by sha256
Fetched on build-9 under the pid file /srv/queue/pids/build-9-b4.pid (mirrors build-9:/srv/builds/b4/run.pid, ended 10:12 UK;
SHA256SUMS in build-9:/srv/builds/b4/). Never fetched on the Mac. eprint.iacr.org answers the box with a Cloudflare
"Just a moment" page (a 5.4 KB HTML file, which is what build-9:/srv/builds/b2/2025-1456.pdf holds), and the challenge was not
bypassed: the full PDFs came from the Internet Archive's copies of the eprint PDF URLs. Two further papers (eprint 2017/443, the
DRSample construction, and 2016/875, the cc >= e d bound) returned archived error pages and were not retried (row B4-B01).
| ref | paper | full PDF | snapshot (UTC) | pages | sha256 |
|---|---|---|---|---|---|
| R1 | Blocki, Smearsoll, *Provably Memory-Hard Proofs of Work With Memory-Easy Verification*, TCC 2025, eprint 2025/1456 | eprint.iacr.org/2025/1456.pdf | 2025-12-31 15:20:15 | 46 | 13c3646e7d85c1aa58a92914582caab5798d90cf2a3cad33e58d81d49c1d31db |
| R2 | Blocki, Liu, Ren, Zhou, *Bandwidth-Hard Functions: Reductions and Lower Bounds*, JoC 2024 version dated 22 January 2024, eprint 2018/221 | eprint.iacr.org/2018/221.pdf | 2026-01-06 14:44:18 | 50 | 2a466b97f536e37169b334c826a9b30caf044e8e11ed0d41252c5fcb58679568 |
| R3 | Ren, Devadas, *Bandwidth Hard Functions for ASIC Resistance*, TCC 2017, eprint 2017/225 | eprint.iacr.org/2017/225.pdf | 2026-10-02 01:58:35 | 26 | 29c5a9c0a31044b708b25fdca07413ebff9cd65896aa10544bc4549e8c16e080 |
| R4 | de Rezende, Engstrom, Reyzin, *Separating the Pebbling Model from the Random Oracle Model*, dated 21 May 2026, eprint 2026/1024 | eprint.iacr.org/2026/1024.pdf | 2026-05-25 20:25:56 | 26 | aa6caa39cbc70cfd83b0f9689955b4877dcfda41981bf1e52818de9168aa07c4 |
| R16 | Bhattacharyya, Mandal, *Bandwidth-Hard Functions from Random Permutations*, arXiv 2207.11519v1 | arxiv.org/pdf/2207.11519 | live, 9 Oct 2026 | 14 | ac2733933e64a3cf27d69e5c8d9371b83bf8c71fee70f6b626988b5c140c34c3 |
Reading depth, stated exactly: R1 sections 1 to 7 and appendix A line by line (appendix B, the attack proofs, skimmed);
R2 sections 1 to 4, section 5.1 and 5.4 and Theorem B.2 (section 6 on scrypt and appendix D on NP-hardness not read); R3
abstract and sections 3 to 4 (the model, the energy limit and Table 1), its theorem list only beyond that; R4 sections 1 and 2
(the claims, the models, what is and is not separated); R16 abstract and Theorems 1 and 3. No independent proof audit is claimed.
## 2. The model, exactly as R1 uses it
**Parallel random oracle model (pROM), R1 section 2.1.** A random oracle H : {0,1}* -> {0,1}^lambda drawn uniformly. The prover
A runs in rounds. In round i+1 it receives its state sigma_i = (tau_i, Q_i) and the answers H(Q_i) to the batch of queries it
issued, performs arbitrary computation (unbounded, even exponential, R1 footnote 4; only RO queries between rounds are forbidden),
and outputs a new state and a new batch Q_{i+1} of any size. The initial state encodes the input chi. Fixing A, H, chi and the
coins R fixes the trace sigma_0, ..., sigma_t.
**Cost measure.** Cumulative memory complexity cmc(trace) = sum over i of |sigma_i| in bits (R1 Definition 4). The state is a bit
string with no assumed representation: the pebbling is never assumed of the adversary, it is extracted ex post facto from the RO
queries and the state size is bounded by a compression argument (section 9 below).
**The construction (R1 section 3.2, the MTP framework).** G = G_N a DAG on [N], N = 2^n, constant in-degree delta (delta = 2
for DRSample). Labels l_1 = H(chi, 1), l_v = H(chi, v, l_{v_1}, ..., l_{v_delta}). Merkle commitment with chi as salt:
tau_v = H(chi, tau_{v||0}, tau_{v||1}), root tau. Challenges c_i = H(chi, i, tau) mod N for i = 1..k (Fiat-Shamir). The
certificate opens each challenged label and its parents with their Merkle paths. The verifier recomputes the challenges, checks
the openings and checks local consistency of each challenged node. Honest prover: O(N + k log N) sequential time, O(N lambda)
space, proof O(k lambda log N) bits, verifier O(k log N) RO calls.
**The adversary's bounds.** q = total RO queries over the whole trace, t = rounds, n_in = bit length of a query input (the "n"
of R1 Lemmas 8 to 10, not log2 N). Hypothesis of R1 Lemma 3: lambda/4 >= 2 log2 q + log2 indeg(G). No bound on time per round,
on parallelism, or on non-RO computation. Success = the verifier accepts (R1 Definition 5 item 4 and section 3.2).
**The energy variant (R2 section 3.1), used for every joule line below.** The state splits into a cache sigma_i of at most m w
bits, where RO queries are issued and answered (at most m queries per round), and a memory xi_i of any size. Memory may run
arbitrary functions F2, F3 of its own contents and the messages it receives but may not query the RO. Cost of a trace:
sum over i of (c_r |Q_i| + c_b NBits_i / w), with NBits_i the bits moved between cache and memory in round i, c_r the cost of
one RO call, c_b the cost of moving w bits (R2 Definition 3.2). Every lower bound in R2 is a lower bound for this cost.
## 3. What R1 proves, restated with its numbers
Bad events (R1 section 2.1 and appendix A): Collision, Pr <= C(q,2) 2^-lambda (Lemma 7); BadOrder, Pr <= n_in q^2 2^-lambda
(Lemma 10); MisColor, Pr <= N 2^-lambda (Lemma 2); implausible extraction IE, Pr <= t 2^(-lambda/2) (Lemma 3); LuckyQuery,
Pr <= q (1 - beta)^k (Lemma 4).
* **Theorem 4.** Without Collision, BadOrder, MisColor, the ex-post-facto pebbling is a legal pebbling of the ex-post-facto graph
G' = G - S_red (S_red = the locally inconsistent nodes of the labelling traced from the root the prover output).
* **Theorem 5 and Lemma 3.** An extractor given sigma_i and a hint of (2 log2 q + log2 indeg)|P'_i| bits outputs |P'_i| fresh RO
input/output pairs, hence |sigma_i| >= |P'_i| lambda/4 for every round except with probability t 2^(-lambda/2).
* **Theorem 6.** Without the four bad events, cmc(trace) >= (lambda/4) cc(G').
* **Theorem 7 and Corollary 1.** If A succeeds with probability at least alpha after t rounds,
Pr_H[cmc < (lambda/4) min over |S| <= beta N of cc(G - S)] <= alpha - (C(q,2) 2^-lambda + n_in q^2 2^-lambda + N 2^-lambda
+ t 2^(-lambda/2) + q (1 - beta)^k), read as: with probability at least alpha - eps_bad the prover succeeds AND pays the bound
(row B4-B02 records the printed direction of the inequality).
* **Lemma 5.** For (e, d)-depth-robust G and e' < e: min over |S| <= e' of cc(G - S) >= (e - e') d (from cc >= e d, [ABP17]).
* **Corollary 2.** With beta = e/(2N) and k = 2 N ln2 lambda / e: cmc >= (lambda/4)(e d / 2) except with the error
eps_bad = C(q,2) 2^-lambda + n_in q^2 2^-lambda + N 2^-lambda + t 2^(-lambda/2) + q 2^-lambda.
* **Fact 8 and Corollary 3 (DRSample).** There exist constants c1, c2 > 0 with indeg(G_N) = 2 and G_N
(c1 N/log N, c2 N)-depth-robust; with k = 2 lambda log N / c1: cmc >= (lambda/4)(c1 c2/2) N^2 / log N, error term q e^-lambda
for the lucky challenges.
* **Section 7 (Theorems 9, 10).** Attacks: for any constant in-degree DAG, k must be omega(log N / log log N); for Argon2i a set
of N/k deletions gives cc O(N k^(12/5)). The paper's construction sets k = O(lambda log N).
## 4. The constants table
| symbol | meaning | value in the paper | source | Igneum status |
|---|---|---|---|---|
| lambda | RO output = label width, and the security parameter (the paper uses one symbol for both) | free | R1 sec. 2.1, 3.2 | B2 must split: label width w and soundness lambda_s (row B4-B08) |
| delta | in-degree of G | 2 (DRSample) | R1 Fact 8 | fixed by B1 |
| N = 2^n | nodes = labels | free | R1 sec. 3.2 | exploratory 32, 128, 512 MiB states (plan B3); params.txt sec. 6 |
| e, d | depth-robustness of G | e = c1 N/log N, d = c2 N | R1 Fact 8 (from ABH17, ABP17) | **c1, c2 have no value in R1** (row B4-B03) |
| beta | red fraction a lucky root may hide | e/(2N) (Cor. 2); c1/(2 log N) (sec. 6) | R1 Cor. 2, sec. 6 | follows c1 |
| 1 - beta | soundness error per challenge | 1 - c1/(2 log N) | R1 Lemma 4 | follows c1 |
| k | number of challenges | 2 N ln2 lambda / e (Cor. 2); 2 lambda log N / c1 (Cor. 3) | R1 Cor. 2, 3 | with lambda_s = 128, log2 N = 22, c1 = 0.25: k = 22,528 (params.txt sec. 3) |
| cmc bound | cumulative memory of any accepted prover | (lambda/4)(e d/2) = (lambda/4)(c1 c2/2) N^2/log N bit-rounds | R1 Cor. 2, 3 | constant open with c1 c2 |
| 1/4 | bits per pebble kept after the hint | lambda/4 | R1 Lemma 3, Thm 6 | general form theta = lambda - 2 log2 q - log2 delta - s (B4 restatement, NOT RUN; params.txt sec. 2) |
| q ceiling | queries the cmc theorem covers | lambda/4 >= 2 log2 q + 1, so q <= 2^31.5 at lambda = 256 | R1 Lemma 3 | a network lifetime exceeds 2^31.5 RO calls: 256-bit labels are outside the theorem; >= 520-bit labels cover q = 2^64 (params.txt sec. 1) |
| eps_bad | failure probability | C(q,2) 2^-lambda + n_in q^2 2^-lambda + N 2^-lambda + t 2^(-lambda/2) + q 2^-lambda | R1 Cor. 1, 2 | computable once w, lambda_s, q are fixed |
| Merkle | binary, salt chi, node = H(chi, left, right), lambda-bit nodes | as stated | R1 sec. 3.2, Def. 15 | B1: explicit domain tags (row B4-B09) |
| proof size | k (delta+1) openings, each a label and log N siblings | O(lambda^2 log^2 N) | R1 sec. 6.1 | 11.9 to 278 MiB uncompressed at log2 N = 22 for c1 from 1 to 0.1 (params.txt sec. 3); a B6 cost |
| c_b, c_r | energy of moving w bits across the cache boundary; of one RO call | free parameters | R2 Def. 3.2 | technology inputs, BOUND (L) only if each is itself a justified lower bound |
| 9m | red pebbles the extracted pebbling may use for a cache of m words | 9 | R2 Thm 3.3 | cache inflation loss |
| eps/16 | probability-to-cost factor of the red-blue reduction | 1/16 | R2 Thm 3.3 | loss |
| q, w ceiling (R2) | q < 2^(w/20) and 20 log2 n < w | q < 2^12.8 at w = 256 | R2 Thm 3.3, Lemma 3.9 | labels of 1,280 bits or more for q = 2^64 |
| DRSample red-blue | per interval of length l >= 16m/(1-rho): min((1-rho) l c_b / 8, ((1-rho) l/16) sqrt(N/(64 l)) c_r) | as stated | R2 Lemma 5.5, Thm 5.2, Thm 1.3 | summed: min((1-rho) N c_b/16, ...) for m = O(N^rho) |
| DRSample cache cut-off | above m = C N / log N there is no blue-move bound (a sequential pebbling in space C N/log N, time N) | C not given | R2 sec. 5.4, citing Blocki et al. CRYPTO 2019 | 186 MiB of cache for a 4 GiB, 1 KiB-label state, times C (params.txt sec. 6) |
## 5. THE COMPOSED THEOREM STATEMENT (draft, NOT RUN)
**Setting.** The R2 energy variant of the pROM (section 2), with: G = DRSample on N = 2^n nodes, delta = 2; label width w bits,
the RO H : {0,1}* -> {0,1}^w; k challenges per certificate; a prover A with cache m w bits, total queries q, rounds t, success
probability alpha over H, on an input chi that B2 binds to one lottery trial (network, version, epoch, template, trial id).
Physical coefficients, each a LOWER bound over the permitted technology set of plan section 8: c_H = joules per RO evaluation
(the hash circuit, excluding operand delivery); e_x = joules per bit moved across the boundary of the hashing cache; p_ret =
watts per bit to retain state; tau_H = the minimum wall time of one dependent RO round.
**Claim (shape).** There is an explicit eps_total such that, with probability at least alpha - eps_total over H, A outputs an
accepted certificate and its energy E(A) satisfies
E(A) >= c_H * (2 (1 - beta) N - 1) [term 1: hashing]
+ e_x * L_x(m) [term 2: transfers across the cache boundary]
+ p_ret * tau_H * theta * (e/2) * d [term 3: retention over the forced rounds]
with theta = w - 2 log2 q - log2 delta - s, e = c1 N/log N, d = c2 N, beta = e/(2N), k = 2 N ln2 lambda_s / e, and
eps_total = eps_bad (R1 Cor. 2, with w for lambda in the label terms and lambda_s in the challenge term) + t 2^-s + eps_x
(the transfer term's own error, open). The three terms count disjoint physical activity (RO evaluation, boundary crossings,
holding bits over time), so they add in the additive energy model; no term double-counts another (plan B4: "do not add unrelated
lower bounds when they double-count the same work"). Under R2's convention, where c_r already charges an RO call, term 1 IS the
c_r q part of R2's ecost and must not be added to it a second time.
**The status of each term.**
* **Term 1 is the strongest and is new but short (B4 Lemma A, NOT RUN).** With no Collision and no MisColor, every green node's
prelabel (chi, v, parents) was queried (R1 Lemma 2 and the proof of Theorem 5), and every green leaf was traced through the
Merkle tree, which needs one distinct query per traced internal node (R1 proof of Theorem 4, the MT procedure). Without
LuckyQuery there are more than (1 - beta) N green nodes (R1 Theorem 7 proof). Hence q >= (1 - beta) N + ((1 - beta) N - 1).
Because every prelabel and every Merkle node carries chi, queries for distinct trials are distinct: across J accepted
certificates with distinct chi the bound is additive, q >= J (2 (1 - beta) N - 1). This term holds at ANY cache size, including
the full-SRAM adversary of plan B5, and it is immune to multi-instance amortisation. It prices hashing only: it says nothing
about memory, and on its own it is exactly the hashing floor that an ASIC wins on (R3 section 4: the ASIC SHA-256 cost was
0.0012 nJ per byte against 30 nJ per byte on a 2016 CPU).
* **Term 2 is the memory-energy bridge and is OPEN.** R2 proves a transfer lower bound only for a full evaluation of an iMHF
(Theorem 3.3: ecost >= (eps/16 - 2^(-2mw/5) - (q+1)/2^w) rbpeb(G, 9m)) and only for DRSample's complete graph (Lemma 5.5,
Theorem 1.3, Theorem B.2). The accepted-certificate version needs (i) the red-blue extension pebbling of R2 section 3.2 built
from R1's ex-post-facto pebbling of G' (the ex-post-facto labelling replaces the honest one, as R1 did for the black pebbling),
and (ii) a red-blue lower bound for G - S, |S| <= beta N, in place of G: R2's dispersion argument (Lemma 5.5) must survive the
deletion of beta N nodes chosen by the adversary after seeing G. Until both are proved, L_x(m) = 0 in any certified number.
Even when proved with R2's constants it gives L_x(m) >= (1 - rho) N w / 256 bits for m <= C' N^rho (a loss of 256/(1 - rho)
against an honest prover's N w), and nothing for m >= C N / log N.
* **Term 3 follows from R1 plus two short steps (B4 Lemma B, NOT RUN).** (a) G - S is (e/2, d)-depth-robust for |S| <= e/2, so G'
contains a path of d nodes and the legal ex-post-facto pebbling of G' (R1 Theorem 4) needs t >= d rounds: an accepted prover
performed at least d = c2 N dependent RO rounds (this is the "sequential work" of the claim; R1 states no time bound itself).
(b) The general extraction count gives cmc >= theta (e/2) d bit-rounds except with probability t 2^-s. Holding sum |sigma_i|
bit-rounds for rounds of at least tau_H costs at least p_ret tau_H cmc joules. (c) The memory held: the peak state is at least
cmc / t, i.e. at least theta c1 N / (2 log N) bits for a prover finishing in d rounds; R1 gives no sustained-space bound (that is
R8's territory and is not used here).
Consequence: term 3 is the only joule line that cumulative memory buys by itself, and it prices holding bits, not moving them.
Retention power per bit (DRAM refresh, SRAM retention leakage) is small, so term 3 is expected to be small against term 1; its
size is a calibration question for the WITNESS rows, not something this lane asserts.
**What the claim does NOT say.** It is not a bound on the specialist's energy per hash of Igneum's current work; it is per accepted
certificate of the published construction under the pROM. It gives no G_upper. It certifies nothing about the GPU side.
## 6. What each source gives, and what is new
**R1 (2025) gives:** soundness of the MTP framework for data-independent depth-robust graphs in the pROM; cmc of any accepted prover
>= (lambda/4)(e d/2) with an explicit additive error; the DRSample instance with k = O(lambda log N) and polylog proofs; matching
attacks showing k = omega(log N / log log N) is necessary. It gives capacity-time, not energy, and no numeric constants for c1, c2.
**R2 (2024 corrected) gives:** (i) Theorem 3.3, the first pROM reduction from energy to red-blue pebbling for iMHFs, robust to
arbitrary encodings of the bits moved between cache and memory; (ii) Theorem 4.5, cost(trace) >= (cmc/(t w) - m) c_b + t c_r for
ANY pROM trace, hence cost >= 2 sqrt(cmc c_b c_r / w) - m c_b; (iii) Lemma 5.5 and Theorems 1.3 and B.2, DRSample's red-blue cost
min(Omega(N) c_b, Omega(N^(3/2 - rho/2)) c_r) for m = O(N^rho), with the stated constants; (iv) the cut-off: no meaningful bound for
m = omega(N / log N). Note: the intro's Theorem 1.3 and the appendix's Theorem B.2 give different DRSample forms for different cache
ranges; the composed statement uses the weaker one in each range.
**R3 (2017) gives:** the red-blue energy model and section 4's limit: whatever the function, an adversary running the honest
algorithm on better hardware has advantage at least (c_b,GPU + c_r,GPU R0/B0) / (c_b,ASIC + c_r,ASIC R0/B0); with equal memory
energy, the floor is about 1 + c_r,GPU / c_b,GPU. This is the theorem form of the plan's section 3.5 bridge and it binds Track B:
a 1.5x certificate needs the GPU's per-label hashing energy at most half its per-label memory-transfer energy AND the specialist's
memory energy per bit no lower than the GPU's, before any reduction loss. R3 also flags that a Merkle-Damgard or chunk-absorbing
hash breaks the pebbling analogy (section 4.2), an obligation on B1.
**R16 gives:** a permutation-based instantiation of the RO for bandwidth-hard graph functions, with ecost >= (eps/(40 delta))
rbcost(G, 20 delta m) - eps m c_b/2, for q <= 2^(n/(10 delta)) and |V| <= 2^(n/(4 delta)) (Theorem 1), and the wide-label form
(Theorem 3). It applies only if B1 builds wide labels from a permutation; its losses then multiply into section 7.
**NEW in composing them for Igneum (each a proof obligation, none claimed):**
1. The red-blue reduction for MTP certificates (term 2 (i)).
2. Red-blue lower bounds for DRSample minus an adversarial beta N set (term 2 (ii)).
3. B4 Lemma A (hash-call floor, additive across trials) and B4 Lemma B (rounds >= d, retention joules), both short, both unreviewed.
4. The general-theta restatement of R1 Lemma 3 (q above 2^31.5).
5. The physical translation: a lower bound on joules from the three terms with technology coefficients that are themselves lower
bounds over the permitted technology set (plan section 8), i.e. BOUND (L), kept apart from X5's chip rows, which are WITNESS (E_D)
(section 8 below).
6. Multi-instance amortisation for terms 2 and 3 (R1's theorem is per input chi and per trace; only term 1 is additive for free).
7. The binding of chi to a lottery trial, the outer target check, grinding of roots against the target, and rejected trials: all B2.
## 7. Reduction losses, from the paper's theorem to the composed claim
| # | step | factor lost (published constants) | source | removable? |
|---|---|---|---|---|
| L1 | state bits per pebble after the extraction hint | lambda -> lambda/4 (4x); general theta = w - 2 log2 q - 1 - s (0.976 of w at w = 8192, q = 2^64, s = 64) | R1 Lemma 3, Thm 6; params.txt sec. 2 | mostly, with wide labels (B4 restatement, NOT RUN) |
| L2 | red nodes the prover may hide behind lucky challenges | cc(G) -> min over |S| <= beta N of cc(G - S) >= (e - beta N) d = e d/2 (2x) | R1 Lemma 5, Cor. 2 | trade against k (smaller beta, more challenges) |
| L3 | depth-robustness to cumulative pebbling | cc >= e d = c1 c2 N^2 / log N against the N^2 an honest prover holds: c1 c2 / log N | R1 Fact 8, [ABP17] | log N is inherent to DRSample (R2 sec. 5.4); c1 c2 unknown (B4-B03) |
| L4 | success probability | alpha -> alpha - eps_bad (additive) | R1 Cor. 1 | negligible at wide labels |
| L5 | generic cmc-to-energy | E >= 2 sqrt(cmc c_b c_r / w) - m c_b: share of an honest N (c_b + c_r) <= sqrt(2 c1 c2 / log2 N) x sqrt(c_b c_r)/(c_b + c_r): 0.151 at log2 N = 22 with c1 c2 = 1 and c_b = c_r; 0.030 at c_b/c_r = 100 | R2 Thm 4.5; params.txt sec. 4 | no: the square root is inherent to the route |
| L6 | energy-to-red-blue reduction | eps/16, cache m -> 9m, minus 2^(-2mw/5) + (q+1)/2^w; needs q < 2^(w/20), 20 log2 N < w | R2 Thm 3.3, Lemma 3.9 | constants not shown tight |
| L7 | DRSample red-blue bound | (1 - rho)/16 of N c_b for m <= C' N^rho; nothing for m >= C N / log N | R2 Lemma 5.5, Thm 5.2, sec. 5.4 | constants not shown tight; the cut-off is a real pebbling |
| L8 | combined L6 x L7 | >= 256/(1 - rho): 341x at rho = 0.25, 512x at 0.5 | params.txt sec. 5 | needs new theorems |
| L9 | RO instantiated by a permutation (only if used) | eps/(40 delta), cache 20 delta m | R16 Thm 1 | B1's choice |
| L10 | MTP certificate instead of full evaluation | unknown | none (open) | B4 obligation O1, O2 |
| L11 | amortisation across instances | unknown for terms 2 and 3; none for term 1 | none (open) | B4 obligation O6 |
| L12 | technology coefficients | each must be a lower bound over the permitted set; an estimate is not a bound | plan sec. 8 | evidence work, not proof |
The arithmetic consequence (params.txt sec. 7): if the composed theorem proves only L = E_honest / loss, a 1.5x certificate needs
G_upper <= (1.5 / loss) E_honest. At loss 6.6 that is a GPU at 0.23 of the honest specialist's energy; at loss 341, at 0.0044.
Neither is credible, so the published constants cannot carry P04 (plan section 11 rule 2: an unknown decision-critical assumption
is BLOCKED, not PASS).
## 8. The memory-energy bridge and the two labels
Plan section 3.5: r = 1 / (f/s + (1 - f)/c), and the certificate of section 2 needs L <= E*. In this lane's terms:
* **BOUND (L).** L = c_H q_min + e_x L_x(m) + p_ret tau_H cmc_min, with q_min, L_x(m), cmc_min from section 5 and each coefficient
the minimum over the permitted technology set at the node (the cheapest credible hash circuit, the cheapest credible memory per
bit moved, the lowest retention power), never a central estimate. Today only the first and third terms have a proof route, the
second is 0 in any certified number, and no coefficient has a lower-bound certificate; so L is BLOCKED (row B4-B05), not a number.
* **WITNESS (E_D).** X5's opponent-sweep rows (the six designs on build-2, 3, 5, 6, 7, 8) are witnesses: a design D gives E_D >= E*,
so G / E_D is a lower bound on the advantage and never a ceiling. They calibrate the coefficients (which term dominates, the real
c_b/c_r, the SRAM size where transfers vanish) and they falsify a proposed L if any witness falls below it. A witness row never
enters L.
* **The full-SRAM confrontation (plan B5) in this language.** "Cheapest credible memory" decides the bridge. If the adversary's
hashing cache holds C N / log2 N labels (params.txt sec. 6: 7.5 MiB for a 128 MiB state of 1 KiB labels, 186 MiB for a 4 GiB
state, each times the unknown C), then L_x = 0 by a legal pebbling (R2 sec. 5.4), and the bound reduces to hashing plus retention
plus the in-cache operand reads, which the pROM prices at zero. A Track B certificate must then price on-die SRAM reads and
leakage as part of c_H (a physical lemma outside the pROM), or restrict m by an argument that belongs to P12, not P04. The plan's
rule holds: if the energy test fails against the full-SRAM design, P04 stays failed.
## 9. R4's encoded-state warning
**What R1's model assumes about the state's representation: nothing.** cmc counts |sigma_i| in bits of an arbitrary string (R1
Definition 4), the in-round computation is unrestricted (footnote 4), and the pebbles are extracted from the RO query transcript,
not assumed of the adversary. The bound |sigma_i| >= |P'_i| lambda/4 is an incompressibility argument (R1 Lemma 1, Theorem 5,
Lemma 3): any encoding, compression or XOR combination of labels that lets A later issue the prelabel queries is itself a hint from
which the extractor recovers the labels, so it cannot be shorter than the bound. A prover that stores an encoded state and decodes
on demand is inside the model; decoding is free in the model, which only makes the lower bound conservative.
**What R4 says itself.** Its separations are for sequential-time proofs of space and for DAG-based data-dependent MHFs (R4
sections 1.3 and 2.2, Theorems 1.1, 1.2); it states that its results cannot hold in the parallel model, where pebbling and RO models
are equivalent for proofs of space [Pie19], and that for data-independent MHFs storing labels in another form does not improve CMC
[AS15] (R4 section 2.2). R1's MHPoW is data-independent and analysed in the parallel model; its extraction is the AS15 method.
**Verdict on survival.** The R1 cumulative-memory theorem survives an encoded state. R2's Theorem 3.3 also handles arbitrary
encodings of the bits moved (R2 section 1.2, the encryption remark), and Theorem 4.5 is a pure bit count. What does NOT survive
automatically, and so remains as obligations:
1. any data dependence Igneum adds (addresses or parents chosen from label values, window-dependent reads, challenge-dependent
recomputation inside the state construction): R4's dMHF separation then applies and every pebbling bound must be re-proved in
the entangled model or directly in the pROM;
2. any label function that is not a random oracle on the whole prelabel with w-bit output: a chunk-absorbing (Merkle-Damgard or
sponge-streamed) hash (R3 section 4.2), or a function with linear structure, such as the exact reg64 prefix-XOR alternative in the
Igneum reviews, can make XOR-combined or partial labels genuinely useful, which is precisely R4's mechanism;
3. memory that can compute the RO (processing in memory with hash units, plan section 9): R2's model forbids memory from querying
the RO; with hashing in memory the cache/memory split, and term 2, are void (terms 1 and 3 stand).
**Row B4-B07 (BLOCKED), the exact question:** "For the binding B2 lands and the reference B1 builds, (a) is every label the output of
one RO call, modelled as a random oracle with w-bit output, over the complete prelabel (chi, v, all parent labels) with unambiguous
encoding, and (b) is the parent set of every node fixed before chi is known (no edge, address or window depending on any label or
on chi)? If (a) and (b) hold, R1's cmc bound and R2's transfer reduction apply to an encoded state unchanged. If either fails, which
node or step breaks it, and is there a pROM proof (not a pebbling proof) of the cost for that step?"
## 10. Quantum
The statement is classical: every bound here is proved in the classical parallel random oracle model, and no quantum random-oracle
analysis of this MHPoW exists in the sources (R1 cites quantum results only for proofs of sequential work), so no quantum speedup
or quantum resistance is claimed or estimated.
## 11. Text issues in R1 for the reference lane
Found while reading; each is a question for B1 to settle against the authors' latest revision, not a claimed error.
1. Corollaries 2 to 4 print Pr_H[cmc < bound] <= alpha_N - f(...); the informal Theorem 3 and Corollary 1's proof read
Pr[Success and cmc < bound] <= f. Section 5 uses the latter.
2. Lemma 1 prints the prediction bound as |h| 2^(-lambda |S|); Lemma 3's proof uses 2^|h| 2^(-lambda |S|).
3. The n in the BadOrder bound n q^2 2^-lambda is the query bit length (Lemma 8), while n = log2 N elsewhere.
4. Fact 8 and Corollary 3 name the depth-robustness constants c1, c2 and c3, c4 interchangeably; Corollary 3 sets k with c1 and
then with c3.
5. Corollary 2's k = 2 N ln2 lambda / e gives a q 2^-lambda term; Corollary 3's k = 2 lambda log N / c1 gives q e^-lambda.
6. Section 3.2 indexes the challenged label as l_{c_i + 1} in the reveal but checks node c_i in the verifier.
7. Label queries H(chi, v, ...), Merkle queries H(chi, left, right) and challenge queries H(chi, i, tau) are separated only by
their lengths and positions; for a node with one parent the label query and a challenge query have the same shape. B1 adds
explicit domain tags and checks the proof's bad-event counts still hold.
## 12. BLOCKED rows
| row | question | owner |
|---|---|---|
| B4-B01 | eprint.iacr.org serves build-9 a Cloudflare challenge; the PDFs are Internet Archive copies. Is each the authors' latest revision (R1 especially: the TCC version vs the eprint)? ABH17 (2017/443) and ABP17 (2016/875) are not fetched (archived error pages). | coordinator: a fetch route the founder approves (not a bypass) |
| B4-B02 | The direction of R1 Corollaries 2 to 4 (section 11 item 1). | B1 against the authors' revision |
| B4-B03 | The numeric constants c1, c2 of DRSample's depth-robustness (R1 Fact 8 gives none; ABH17 not fetched), and the C, C' of R2's cache cut-off and Lemma 5.5. Without them k, beta and every bound are symbolic. | B4 with B1, from ABH17 and Blocki et al. CRYPTO 2019 |
| B4-B04 | Term 2: the red-blue reduction for MTP certificates and the red-blue bound for DRSample minus beta N adversarial nodes (section 5). | B4 (new theorem work; NOT RUN) |
| B4-B05 | L as a number: lower-bound certificates for c_H, e_x, p_ret, tau_H over the permitted technology set; until then L is BLOCKED and X5's rows stay WITNESS (E_D). | B4 with the adversary lane's chip model |
| B4-B06 | The full-SRAM case: with m >= C N / log N there is no transfer term. Does the programme accept a physical lemma pricing in-cache operand reads and leakage, and on what evidence? | the panel |
| B4-B07 | The encoded-state question of section 9. | B2 and B1 |
| B4-B08 | Split lambda: label width w (must exceed about 520 bits for the cmc theorem and 1,280 bits for R2's reduction at q = 2^64) and soundness lambda_s for k. | B2 |
| B4-B09 | Domain separation of the three query kinds (section 11 item 7). | B1 |
| B4-B10 | Proof size: k (delta+1) openings at 128-bit soundness is 11.9 MiB at best (c1 = 1, log2 N = 22, 256-bit labels) and grows as 1/c1. Pool shares carry proofs too. | B6 (plan), via the coordinator |
## 13. Obligations for the B2 binding lane (a717f5c9730229ea6) and the B1 reference lane (a4490b2dfe9114a55)
| row | owner | obligation | why it matters to the composed claim |
|---|---|---|---|
| O-B2-1 | B2 | chi commits to network, version, epoch, template and trial id, and EVERY lottery trial needs a fresh certificate on its own chi (no cheap outer nonce after one expensive commitment) | term 1 is additive across trials only through distinct chi; R1 is per chi |
| O-B2-2 | B2 | the parent set of every node is fixed before chi (no data or chi dependence in edges, addresses or windows) | B4-B07 (b); R4's dMHF separation |
| O-B2-3 | B2 | label width w >= 520 bits for q up to 2^64 under R1 Lemma 3 (or the general theta), and >= 1,280 bits if term 2 is to use R2 Theorem 3.3; soundness lambda_s separate | B4-B08; the theorems' hypotheses |
| O-B2-4 | B2 | grinding: the number of roots a miner can try against the outer target enters q in the LuckyQuery term q (1 - beta)^k; size k for the network's lifetime q, not one proof's | R1 Lemma 4 union bound |
| O-B2-5 | B2 | rejected trials and cancellation: the cost per accepted block is the cost per certificate times trials; a certificate that can be reused across trials breaks O-B2-1 | plan B2 |
| O-B1-1 | B1 | the exact R1 section 3.2 prover and verifier with explicit domain tags for label, Merkle and challenge queries | B4-B09 |
| O-B1-2 | B1 | the label function is one RO call over the complete prelabel (no chunk-absorbing hash, no linear structure); if a wide label is built from a permutation, follow R16 and record its losses | B4-B07 (a); R3 sec. 4.2; L9 |
| O-B1-3 | B1 | malicious fixtures for the section 7 attacks: delete an (e, d)-reducing set and pass with probability (1 - e/N)^k; record the cmc of the attack against the R1 bound at the fixture's N | the attack side of the frontier |
| O-B1-4 | B1 | settle the text issues of section 11 against the authors' latest revision | B4-B02 |
| O-B1-5 | B1 | measure, on a box, q, t and the peak state of the honest prover at small N, and of the streaming prover that keeps C N / log N labels (the R2 sec. 5.4 pebbling), as the first witness of the cache cut-off | B4-B06; the SRAM case |
## 14. Figures and how they were made
Every number above that is not quoted from a paper comes from tools/mhpow/b4/params.py (standard library, closed forms only, no
measurement), run on build-9: `python3 tools/mhpow/b4/params.py > docs/analysis/mhpow/b4/params.txt`. The script and its output
are committed beside this README; their sha256 at the run are recorded in RUNS.md.
## 15. Registry
The registry batch is not recorded by this lane: registry-batch-b4.json beside this README holds one cell, status NOT RUN, with the
evidence paths, for the steward to record if the coordinator asks. The composed claim stays NOT RUN until the panel reads it.

View file

@ -0,0 +1,13 @@
# B4 runs
Every run on build-9 (188.40.146.46) under a pid file at build-9:/srv/builds/b4/run.pid, mirrored for the fetch as
build-1:/srv/queue/pids/build-9-b4.pid (queue entry B4, ended 10:12 UK). Clocks UTC.
| when (UTC) | what | command | output | sha256 |
|---|---|---|---|---|
| 2026-10-09T09:04:54Z | eprint fetch (refused: Cloudflare challenge page, 5.4 KB HTML, not bypassed) | curl -sSL https://eprint.iacr.org/<id>.pdf | 2025-1456.pdf etc. (HTML) | not papers |
| 2026-10-09T09:05Z | Internet Archive copies of the eprint PDF URLs, arXiv 2207.11519 | curl -sSL https://web.archive.org/web/2026id_/https://eprint.iacr.org/<id>.pdf | wb-2025-1456.pdf, wb-2018-221.pdf, wb-2017-225.pdf, wb-2026-1024.pdf, arxiv-2207.11519.pdf | SHA256SUMS in build-9:/srv/builds/b4 and README section 1 |
| 2026-10-09T09:09Z | 2017/443 and 2016/875 (archived 429 and robots pages; not retried) | as above | removed | none |
| 2026-10-09T09:17:30Z | parameter arithmetic | python3 tools/mhpow/b4/params.py > docs/analysis/mhpow/b4/params.txt | params.txt | params.py 7ac7fd48bde3e7962fe01045fa12a2ab1c204d9e34265a78ef9240f4f8433af1, params.txt a98ac460a5f6a16c000d5eda6311444044928f5f899931e0d3afa667d1529eba |
Text extraction of the five PDFs for reading: pdftotext -layout (poppler), a document conversion, no build, test or benchmark.

View file

@ -0,0 +1,77 @@
== 1. query ceilings: the theorems' hypotheses on q (total random-oracle queries of the prover) ==
label bits 2025 L3 log2 q max BLRZ T3.3 log2 q max BLRZ max log2 N (20 log2 N < w)
256 31.5 12.8 12.8
512 63.5 25.6 25.6
1024 127.5 51.2 51.2
2048 255.5 102.4 102.4
8192 1023.5 409.6 409.6
== 2. bits per pebble theta at q = 2^64 queries, per-round failure 2^-64 (B4 restatement, NOT RUN) ==
label 256 bits: theta = 63 bits per pebble (0.246 of the label; the paper's fixed choice is 0.250)
label 512 bits: theta = 319 bits per pebble (0.623 of the label; the paper's fixed choice is 0.250)
label 1024 bits: theta = 831 bits per pebble (0.812 of the label; the paper's fixed choice is 0.250)
label 8192 bits: theta = 7999 bits per pebble (0.976 of the label; the paper's fixed choice is 0.250)
== 3. challenges k and proof bytes (2025/1456 Corollary 3: k = 2 lambda_s log2 N / c1, error q e^-lambda_s) ==
c1 is the DRSample depth-robustness constant of Fact 8; the paper gives no value (BLOCKED row B4-03)
log2 N=17 c1=1.0 k= 4352 label 256 bits: proof <= 7.17 MiB (no path sharing)
log2 N=17 c1=1.0 k= 4352 label 8192 bits: proof <= 19.52 MiB (no path sharing)
log2 N=17 c1=0.25 k= 17408 label 256 bits: proof <= 28.69 MiB (no path sharing)
log2 N=17 c1=0.25 k= 17408 label 8192 bits: proof <= 78.09 MiB (no path sharing)
log2 N=17 c1=0.1 k= 43520 label 256 bits: proof <= 71.72 MiB (no path sharing)
log2 N=17 c1=0.1 k= 43520 label 8192 bits: proof <= 195.23 MiB (no path sharing)
log2 N=20 c1=1.0 k= 5120 label 256 bits: proof <= 9.84 MiB (no path sharing)
log2 N=20 c1=1.0 k= 5120 label 8192 bits: proof <= 24.38 MiB (no path sharing)
log2 N=20 c1=0.25 k= 20480 label 256 bits: proof <= 39.38 MiB (no path sharing)
log2 N=20 c1=0.25 k= 20480 label 8192 bits: proof <= 97.50 MiB (no path sharing)
log2 N=20 c1=0.1 k= 51200 label 256 bits: proof <= 98.44 MiB (no path sharing)
log2 N=20 c1=0.1 k= 51200 label 8192 bits: proof <= 243.75 MiB (no path sharing)
log2 N=22 c1=1.0 k= 5632 label 256 bits: proof <= 11.86 MiB (no path sharing)
log2 N=22 c1=1.0 k= 5632 label 8192 bits: proof <= 27.84 MiB (no path sharing)
log2 N=22 c1=0.25 k= 22528 label 256 bits: proof <= 47.44 MiB (no path sharing)
log2 N=22 c1=0.25 k= 22528 label 8192 bits: proof <= 111.38 MiB (no path sharing)
log2 N=22 c1=0.1 k= 56320 label 256 bits: proof <= 118.59 MiB (no path sharing)
log2 N=22 c1=0.1 k= 56320 label 8192 bits: proof <= 278.44 MiB (no path sharing)
log2 N=24 c1=1.0 k= 6144 label 256 bits: proof <= 14.06 MiB (no path sharing)
log2 N=24 c1=1.0 k= 6144 label 8192 bits: proof <= 31.50 MiB (no path sharing)
log2 N=24 c1=0.25 k= 24576 label 256 bits: proof <= 56.25 MiB (no path sharing)
log2 N=24 c1=0.25 k= 24576 label 8192 bits: proof <= 126.00 MiB (no path sharing)
log2 N=24 c1=0.1 k= 61440 label 256 bits: proof <= 140.62 MiB (no path sharing)
log2 N=24 c1=0.1 k= 61440 label 8192 bits: proof <= 315.00 MiB (no path sharing)
== 4. the generic CMC-to-energy route (2018/221 Theorem 4.5): ceiling on what it can certify ==
E_lb = 2 sqrt(cmc cb cr / w) - m cb with cmc <= w (c1 N/log2 N)(c2 N)/2 gives E_lb <= N sqrt(cb cr) sqrt(2 c1 c2 / log2 N);
against an honest prover's energy >= N (cb + cr): share <= sqrt(2 c1 c2 / log2 N) * sqrt(cb cr)/(cb + cr), and sqrt(cb cr)/(cb + cr) <= 1/2
log2 N=17 c1*c2=1.0 : certified share of honest energy <= 0.1715 at cb = cr (ratio floor 5.83x)
log2 N=17 c1*c2=0.1 : certified share of honest energy <= 0.0542 at cb = cr (ratio floor 18.44x)
log2 N=20 c1*c2=1.0 : certified share of honest energy <= 0.1581 at cb = cr (ratio floor 6.32x)
log2 N=20 c1*c2=0.1 : certified share of honest energy <= 0.0500 at cb = cr (ratio floor 20.00x)
log2 N=22 c1*c2=1.0 : certified share of honest energy <= 0.1508 at cb = cr (ratio floor 6.63x)
log2 N=22 c1*c2=0.1 : certified share of honest energy <= 0.0477 at cb = cr (ratio floor 20.98x)
log2 N=24 c1*c2=1.0 : certified share of honest energy <= 0.1443 at cb = cr (ratio floor 6.93x)
log2 N=24 c1*c2=0.1 : certified share of honest energy <= 0.0456 at cb = cr (ratio floor 21.91x)
cb/cr = 1: the factor sqrt(cb cr)/(cb+cr) = 0.5000 (0.5 is its maximum, at cb = cr)
cb/cr = 10: the factor sqrt(cb cr)/(cb+cr) = 0.2875 (0.5 is its maximum, at cb = cr)
cb/cr = 100: the factor sqrt(cb cr)/(cb+cr) = 0.0990 (0.5 is its maximum, at cb = cr)
== 5. the red-blue route's published constants (2018/221 Theorem 3.3 x Lemma 5.5 with Theorem 5.2) ==
rho=0.25: ecost >= (eps/16) * (1-rho) N cb / 16 -> loss vs an honest N cb >= 341x at eps = 1 (cache 9m <= C' N^rho)
rho=0.5: ecost >= (eps/16) * (1-rho) N cb / 16 -> loss vs an honest N cb >= 512x at eps = 1 (cache 9m <= C' N^rho)
rho=0.75: ecost >= (eps/16) * (1-rho) N cb / 16 -> loss vs an honest N cb >= 1024x at eps = 1 (cache 9m <= C' N^rho)
== 6. the cache size at which DRSample has no transfer bound (2018/221 section 5.4: m >= C N / log2 N, C unknown) ==
state 32 MiB, label 256 bits: N = 2^20, N/log2 N = 52429 labels = 1.60 MiB of cache (times C)
state 32 MiB, label 8192 bits: N = 2^15, N/log2 N = 2185 labels = 2.13 MiB of cache (times C)
state 128 MiB, label 256 bits: N = 2^22, N/log2 N = 190650 labels = 5.82 MiB of cache (times C)
state 128 MiB, label 8192 bits: N = 2^17, N/log2 N = 7710 labels = 7.53 MiB of cache (times C)
state 512 MiB, label 256 bits: N = 2^24, N/log2 N = 699051 labels = 21.33 MiB of cache (times C)
state 512 MiB, label 8192 bits: N = 2^19, N/log2 N = 27594 labels = 26.95 MiB of cache (times C)
state 4096 MiB, label 256 bits: N = 2^27, N/log2 N = 4971027 labels = 151.70 MiB of cache (times C)
state 4096 MiB, label 8192 bits: N = 2^22, N/log2 N = 190650 labels = 186.18 MiB of cache (times C)
== 7. arithmetic of the 1.5x target against the published losses ==
the certificate is G_upper / L <= 1.5 (plan section 2). If the composed theorem only proves L = E_honest_specialist / loss,
then G_upper / L = loss * (G_upper / E_honest_specialist), and the certificate needs G_upper / E_honest_specialist <= 1.5 / loss.
loss 6.6: a 1.5x certificate needs the GPU at <= 0.2273 of the honest specialist's energy (a GPU at parity certifies only 6.6x)
loss 341: a 1.5x certificate needs the GPU at <= 0.0044 of the honest specialist's energy (a GPU at parity certifies only 341.0x)
loss 512: a 1.5x certificate needs the GPU at <= 0.0029 of the honest specialist's energy (a GPU at parity certifies only 512.0x)

View file

@ -0,0 +1,27 @@
{
"run_id": "mhpow-b4-20261009-01",
"manifest_sha": "",
"method": "model",
"evidence_dir": "docs/analysis/mhpow/b4",
"release_identity": {
"commit": "branch mhpow-b4 (the landing merge names the sha)",
"lockfile": "",
"binary": "",
"network_object": "none: a theorem statement and an audit of published papers, no chain state read or written",
"activation": "none (Track B lands documents and tests only)",
"profile_hashes": "R1 2025/1456 13c3646e...; R2 2018/221 2a466b97...; R3 2017/225 29c5a9c0...; R4 2026/1024 aa6caa39...; R16 arXiv 2207.11519 ac273393...; params.py 7ac7fd48..., params.txt a98ac460..."
},
"claim_impact": "none: the composed accepted-proof energy statement is a draft with named proof obligations; the published constants cannot carry a 1.5x certificate (loss at least 6.6x on the generic route, at least 341x on the red-blue route); every row NOT RUN until the panel reads it",
"reviewer": "",
"note": "NOT RUN by this lane: the steward records it only if the coordinator asks, with the cell added to the map. BLOCKED rows B4-B01 to B4-B10 in README section 12.",
"cells": [
{
"cell": "theory:mhpow-b4",
"status": "NOT RUN",
"method": "model",
"evidence": "docs/analysis/mhpow/b4/README.md; docs/analysis/mhpow/b4/params.txt; docs/analysis/mhpow/b4/RUNS.md; tools/mhpow/b4/params.py",
"note": "NOT RUN: statement and losses written; terms 2 (transfers) and the amortisation of terms 2 and 3 are open theorems; L is BLOCKED (no lower-bound certificate for any technology coefficient); X5 rows stay WITNESS (E_D)",
"in_progress": true
}
]
}

View file

@ -52,3 +52,6 @@ docs/analysis/class-v6/reference-population.md
docs/analysis/class-v6/eco-05-scenarios.md
docs/analysis/class-v6/eco-05-results.md
docs/analysis/proving-outcome-ledger.md
# 9 October 2026: Track B B4 (R15-07), the theory lane: the composed accepted-proof statement, its arithmetic and runs
docs/analysis/mhpow/b4
tools/mhpow/b4

82
tools/mhpow/b4/params.py Normal file
View file

@ -0,0 +1,82 @@
#!/usr/bin/env python3
"""B4 (R15-07) parameter arithmetic for the composed accepted-proof statement.
Standard library only. Every number printed here is arithmetic on the closed forms quoted in
docs/analysis/mhpow/b4/README.md (theorem numbers there); nothing is measured and nothing here is a chip figure.
Run on a build box, never the Mac: python3 tools/mhpow/b4/params.py > docs/analysis/mhpow/b4/params.txt
"""
import math
LN2 = math.log(2)
DELTA = 2 # DRSample in-degree (2025/1456 Fact 8)
def lemma3_qmax_log2(lam):
# 2025/1456 Lemma 3 hypothesis: lam/4 >= 2 log2 q + log2 indeg -> log2 q <= (lam/4 - log2 indeg)/2
return (lam / 4 - math.log2(DELTA)) / 2
def theta_general(lam, log2q, s):
# B4 restatement of the Lemma 3 counting: |sigma_i| >= theta |P_i| except with prob 2^-s per round,
# theta = lam - 2 log2 q - log2 indeg - s (the paper's choice is theta = lam/4)
return lam - 2 * log2q - math.log2(DELTA) - s
def blrz_qmax_log2(w):
# 2018/221 Theorem 3.3 and Lemma 3.9: q < 2^(w/20) and 20 log2 n < w
return w / 20
print("== 1. query ceilings: the theorems' hypotheses on q (total random-oracle queries of the prover) ==")
print(f"{'label bits':>10} {'2025 L3 log2 q max':>20} {'BLRZ T3.3 log2 q max':>22} {'BLRZ max log2 N (20 log2 N < w)':>32}")
for lam in (256, 512, 1024, 2048, 8192):
print(f"{lam:>10} {lemma3_qmax_log2(lam):>20.1f} {blrz_qmax_log2(lam):>22.1f} {lam/20:>32.1f}")
print()
print("== 2. bits per pebble theta at q = 2^64 queries, per-round failure 2^-64 (B4 restatement, NOT RUN) ==")
for lam in (256, 512, 1024, 8192):
th = theta_general(lam, 64, 64)
print(f"label {lam:>5} bits: theta = {th:>7.0f} bits per pebble ({th/lam:.3f} of the label; the paper's fixed choice is 0.250)")
print()
print("== 3. challenges k and proof bytes (2025/1456 Corollary 3: k = 2 lambda_s log2 N / c1, error q e^-lambda_s) ==")
print("c1 is the DRSample depth-robustness constant of Fact 8; the paper gives no value (BLOCKED row B4-03)")
lam_s = 128
for logN in (17, 20, 22, 24):
for c1 in (1.0, 0.25, 0.1):
k = math.ceil(2 * lam_s * logN / c1)
for w in (256, 8192):
# each challenge opens the node and its DELTA parents, each opening = label + logN sibling hashes (256-bit nodes)
opening = w / 8 + logN * 32
proof = k * (DELTA + 1) * opening
print(f"log2 N={logN:>2} c1={c1:<5} k={k:>7} label {w:>5} bits: proof <= {proof/2**20:>9.2f} MiB (no path sharing)")
print()
print("== 4. the generic CMC-to-energy route (2018/221 Theorem 4.5): ceiling on what it can certify ==")
print("E_lb = 2 sqrt(cmc cb cr / w) - m cb with cmc <= w (c1 N/log2 N)(c2 N)/2 gives E_lb <= N sqrt(cb cr) sqrt(2 c1 c2 / log2 N);")
print("against an honest prover's energy >= N (cb + cr): share <= sqrt(2 c1 c2 / log2 N) * sqrt(cb cr)/(cb + cr), and sqrt(cb cr)/(cb + cr) <= 1/2")
for logN in (17, 20, 22, 24):
for c1c2 in (1.0, 0.1):
f = 0.5 * math.sqrt(2 * c1c2 / logN)
print(f"log2 N={logN:>2} c1*c2={c1c2:<4}: certified share of honest energy <= {f:.4f} at cb = cr (ratio floor {1/f:.2f}x)")
for r in (1, 10, 100):
g = math.sqrt(r) / (r + 1)
print(f" cb/cr = {r:>3}: the factor sqrt(cb cr)/(cb+cr) = {g:.4f} (0.5 is its maximum, at cb = cr)")
print()
print("== 5. the red-blue route's published constants (2018/221 Theorem 3.3 x Lemma 5.5 with Theorem 5.2) ==")
for rho in (0.25, 0.5, 0.75):
loss = 16 * 16 / (1 - rho)
print(f"rho={rho}: ecost >= (eps/16) * (1-rho) N cb / 16 -> loss vs an honest N cb >= {loss:.0f}x at eps = 1 (cache 9m <= C' N^rho)")
print()
print("== 6. the cache size at which DRSample has no transfer bound (2018/221 section 5.4: m >= C N / log2 N, C unknown) ==")
for state_mib in (32, 128, 512, 4096):
for w in (256, 8192):
N = state_mib * 2**20 * 8 // w
logN = math.log2(N)
m = N / logN
print(f"state {state_mib:>5} MiB, label {w:>5} bits: N = 2^{logN:.0f}, N/log2 N = {m:>10.0f} labels = {m*w/8/2**20:>8.2f} MiB of cache (times C)")
print()
print("== 7. arithmetic of the 1.5x target against the published losses ==")
print("the certificate is G_upper / L <= 1.5 (plan section 2). If the composed theorem only proves L = E_honest_specialist / loss,")
print("then G_upper / L = loss * (G_upper / E_honest_specialist), and the certificate needs G_upper / E_honest_specialist <= 1.5 / loss.")
for loss in (6.6, 341, 512):
print(f"loss {loss:>5}: a 1.5x certificate needs the GPU at <= {1.5/loss:.4f} of the honest specialist's energy (a GPU at parity certifies only {loss:.1f}x)")