Verification corpus
sorry in Basic.lean. If any sits in a witness constructor for a typed assumption, every downstream consumer silently inherits sorryAx — the debt structure is then decorative. Check whether these are inside a comment roadmap or live declarations.What this is. Four papers' derivations (MATH1.md)
put through symbolic algebra, exact binomial tails at 40 digits, randomised
falsification search, an actual citation graph, and Lean 4 + Mathlib. The audit
(MATH2.md) found zero arithmetic errors; every
correction is to scope or exposition — a true statement made
load-bearing for a conclusion it does not support.
The through-line. Three findings share one shape: a noise-suppressor that removes the signal along with the noise. The length-weighted baseline removes length bias and introduces a larger one at realistic correlation. Majority voting removes sampler noise and removes the defect. A precision metric scoring 1 on an empty citation set removes false hallucination flags and removes the ability to see silence. Separating signal from noise is half the discipline; the other half is checking what the separator took with it.
Evidence tiers
Read this first — the green checks are not all the same green
Every result below carries a tier. A finite witness, a bounded search, and a kernel-checked proof are all "green" in a log; treating them as one green light is the exact defect this corpus documents. They are coloured differently on purpose.
| tier | guarantee | what green means |
|---|---|---|
| WITNESS n=k | finite symbolic witness | holds at fixed arity k. Says nothing about k+1. |
| EMPIRICAL | finite parameter sweep | checked over a range. Not a proof. |
| HYPOTHESIS | falsification search | no counterexample in 200 draws. Not a proof of the universal. |
| LEAN | general, kernel-checked | the universal statement, axiom-audited for holes |
| NEW | finding, not a check | something the source document did not state |
Verification log
HOW TO READ THIS LOG — the green checks are NOT all the same kind of green.
[WITNESS n=k] SymPy proved the identity at FIXED arity k. Not the general case.
[EMPIRICAL ] checked over a finite sweep of parameters. Not a proof.
plain PASS a numeric claim reproduced to the stated precision.
Hypothesis falsification search, 200 draws. NOT a proof of the universal.
The GENERAL statements are kernel-checked in lean-proofs/ (28 theorems,
axiom-audited, no sorryAx) — list derived from source, not typed:
weighted_residuals_sum_zero weighted_sse_decomp wmean_minimises
power_at_indifference_lt_alpha no_calibrated_powered_threshold no_sample_size_escapes
discrimination_survives_calibration calibrated_test_is_still_useful corrWeight_zero
corrWeight_one bStar_zero bStar_minimises
b2_optimal_iff_matches_bStar binomTail_nonneg binomTail_antitone_k
binom_power_at_indifference_lt_alpha binom_no_sample_size_escapes binomTail_of_lt
binomTail_top binomTail_top_monotone tail_le_of_rate_le
calibrated_below_boundary succ_mul_choose choose_mul_eq
choose_mul choose_mul' CG_empty_is_degenerate
article_swap_is_CR_failure
Reading a WITNESS as a general proof is the stratified-instrument defect this
package exists to catch. See MATH2.md Appendix 2 R4 and Appendix 3 W4.
==============================================================================
SECTION 1 — LegalOne PAS stability (Eq 1-5)
==============================================================================
Eq 3 raw : TrSigma*eta**2*lambda_max/2 + eta**2*g2*lambda_max/2 - eta*g2
doc's split : descent=-eta*g2*(-eta*lambda_max/2 + 1) noise=TrSigma*eta**2*lambda_max/2
PASS Eq 3 descent+noise split is algebraically exact
PASS Eq: stability window eta < 2/lambda_max solve gives eta < 2/lambda_max
PASS noise term convex in eta (d2/deta2 > 0) d2/deta2 = TrSigma*lambda_max
PASS Eq 5: exp(5) ~ 148 exp(5)=148.4132
PASS Eq 5: alpha->1 relaxes EXACTLY to equilibrium w1 P(anchor|a=1)=0.200000
alpha: 0.00 -> P(anchor)=0.9738 0.50 -> 0.7528 1.00 -> 0.2000
NEW Doc says alpha->0 'collapses onto the anchor'. It reaches 97.38%, not 100%.
Bounded by w1*e^5/(w1*e^5+1-w1). To exceed 99% at w1=0.2 needs lambda>=6.0.
==============================================================================
SECTION 2 — LegalOne token-level baseline (Eq 6-14)
==============================================================================
WITNESS Eq 13: cross term collapses to 0 [WITNESS n=5; general = Lean weighted_residuals_sum_zero] cross = 0
WITNESS Eq 14: Var1 = Var2 + N(b2-b1)^2 [WITNESS n=5; general proof = Lean weighted_sse_decomp] residual = 0
PASS b2 is the stationary point of the weighted SSE
--- the assumption the proof rests on, made explicit ---
Doc asserts: Var(ghat) proportional to sum_i L_i (R_i - b)^2
But minimising a weighted SSE by its own weighted mean is a tautology.
ALL content lives in that proportionality. Deriving it:
ghat = (1/N) sum_i sum_j s_ij (R_i - b), E[s_ij] = 0
Cov(s_ij, s_ik) = sigma^2 rho I for j != k (within-sequence rho)
Var(sum_j s_ij) = sigma^2 [ L_i + rho L_i (L_i - 1) ] =: sigma^2 W_i(rho)
PASS rho=0 => b*(rho) == b2 (length-weighted)
PASS rho=1 => b*(rho) == length-SQUARED weighted mean
NEW Eq 14's CONCLUSION holds only in the rho=0 limit.
Algebra exact; applicability is not. Optimal baseline drifts L_i -> L_i^2 as rho grows.
crossover: L_i^2 term dominates when rho > 1/(L_i - 1)
L= 100 rho* = 0.01010 (1.010%)
L= 500 rho* = 0.00200 (0.200%)
L= 1000 rho* = 0.00100 (0.100%)
L= 4000 rho* = 0.00025 (0.025%)
worked example L=[200.0, 400.0, 800.0, 4000.0] R=[0.9, 0.5, 0.4, 0.1]
b1 (unweighted) = 0.4750
b2 (length-wt) = 0.2037 doc's recommendation
rho=0 b*=0.2037 |b*-b2|=0.0000
rho=0.0001 b*=0.1831 |b*-b2|=0.0206
rho=0.00025 b*=0.1658 |b*-b2|=0.0379
rho=0.001 b*=0.1381 |b*-b2|=0.0656
rho=0.01 b*=0.1198 |b*-b2|=0.0839
rho=1 b*=0.1171 |b*-b2|=0.0866
NEW For 4000-token traces the crossover is rho~0.00025.
Consecutive CoT tokens share the whole prefix; rho is nowhere near that small, so reasoning-model RL never occupies the regime where b2 is optimal.
==============================================================================
SECTION 3 — TESSY objective decomposition (Eq 1-5)
==============================================================================
Eq 1-2 are a definitional split of a sum over token positions:
L = sum_i KL_i = sum_{i in Cap} KL_i + sum_{i in Sty} KL_i
PASS Eq 2 split is valid iff T_Cap and T_Sty partition the positions disjoint + exhaustive => sum splits. No content beyond additivity.
NEW TESSY carries NO convergence proof and none is claimed.
Eq 3 states a GOAL (per-token sourcing); Eq 4-5 give a span-level approximation to it. The gap between them is unquantified in the paper: boundary predictors B_S,B_T are imperfect classifiers, so L_Sty is only approximately pre-satisfied. No bound is given on the residual.
==============================================================================
SECTION 4 — CG-DPO metric, graph semantics, corruption axes (Eq 1-7)
==============================================================================
toy graph: 7 statutes, 4 decisions, 6 edges
corruption cited CP CR CT axis zeroed
(none) LRA_187 1 1 1 ['-']
hallucination LRA_9999 0 0 1 ['CP', 'CR']
law_swap CRIM_625 1 0 1 ['CR']
article_swap LRA_189 1 0 1 ['CR']
anachronism LRA_188 1 0 0 ['CR', 'CT']
PASS article_swap gives CP=1, CR=0 => it is a RELEVANCE failure confirms the doc's correction of the paper's own label
PASS anachronism gives CT=0 (repealed before context date)
PASS Eq 5: CP is a multiplicative gate (CP=0 zeroes the term)
--- degenerate solution ---
perfect answer CG=1.000 CQ=1.000
one fabrication CG=0.667 CQ=0.667
CITES NOTHING CG=1.000 CQ=1.000
PASS Eq 1 convention CG=1 on empty set makes a SILENT model score perfectly identical score for perfect and for zero citations
NEW CG has the same suppression-vs-competence defect as a trap-only probe.
'Deleted the instrument' is indistinguishable from 'used it correctly' because the metric punishes commission and never omission. Same structural hole the two-arm temporal probe was built to close.
FIX — pair CG with citation recall against C*(x):
answer CG recall F1
perfect 1.000 1.000 1.000
one fabrication 0.667 1.000 0.800
half-cited 1.000 0.500 0.667
CITES NOTHING 1.000 0.000 0.000
PASS F1 against C* correctly scores the silent model 0
==============================================================================
SECTION 5 — Addendum: binomial bounds, majority vote, power
==============================================================================
5.1 the corrected closed forms
n= 50 floor 0.05^(1/n) = 94.1845% ceiling 1-0.05^(1/n) = 5.8155%
n= 58 floor 0.05^(1/n) = 94.9661% ceiling 1-0.05^(1/n) = 5.0339%
n= 59 floor 0.05^(1/n) = 95.0492% ceiling 1-0.05^(1/n) = 4.9508%
n= 60 floor 0.05^(1/n) = 95.1297% ceiling 1-0.05^(1/n) = 4.8703%
n=200 floor 0.05^(1/n) = 98.5133% ceiling 1-0.05^(1/n) = 1.4867%
PASS 0.05^(1/50) = 94.18% (success-rate floor, 0 failures)
PASS 1 - 0.05^(1/50) = 5.82% (failure-rate ceiling)
PASS closed form == exact Clopper-Pearson at k=n
PASS void slack 0/60 -> 4.87% got 4.8703%
PASS void slack 0/59 -> 4.95% got 4.9508%
PASS void slack 0/58 -> 5.03% got 5.0339%
PASS exact CP lower bound 49/50 -> 90.86% got 90.8602%
PASS exact CP lower bound 48/50 -> 87.94% got 87.9386%
PASS exact CP lower bound 47/50 -> 85.22% got 85.2163%
PASS exact CP lower bound 46/50 -> 82.62% got 82.6209%
5.2 majority-of-5 understatement
q P(maj) ratio 1/(10q^2)
30.00% 16.308000% 1.8 1.1
20.00% 5.792000% 3.5 2.5
10.00% 0.856000% 11.7 10.0
5.00% 0.115813% 43.2 40.0
2.00% 0.007762% 257.7 250.0
1.00% 0.000985% 1015.2 1000.0
PASS q=5% -> 0.12% observed, 43x understatement
PASS q=2% -> ~257x understatement
NEW Closed form for the understatement: ratio -> 1/(10 q^2) as q->0.
QUADRATIC in rarity — the rarer the real defect, the worse the suppression.
majority-of-k: does MORE voting help?
k=1: P(fire|q=5%)= 5.000000% understatement 1.0x
k=3: P(fire|q=5%)= 0.725000% understatement 6.9x
k=5: P(fire|q=5%)= 0.115813% understatement 43.2x
k=7: P(fire|q=5%)= 0.019358% understatement 258.3x
k=9: P(fire|q=5%)= 0.003322% understatement 1505.0x
NEW More samples makes under-detection WORSE, monotonically.
majority-of-k understates by ~q^-(k-1)/2. Going 3->5->7 multiplies the blindness. A vote is the wrong aggregator for a rare-defect hunt.
5.3 power, and the indifference-point tautology
N2=7 at n=60 (calibrated to m0=5%):
power at m=5%: 2.97% <- false-fire rate
power at m=15%: 81.52% doc claims 81.5%
power at m=20%: 96.92% doc claims 96.9%
PASS power(60, N=7, m=0.15) = 81.5%
PASS power(60, N=7, m=0.20) = 96.9%
THE TAUTOLOGY: N := min{k : LB(k,n) > m0} => power(m0) < alpha
n N LB(N) power@m0 < 5% ?
30 9 16.633% 2.778% YES
60 15 16.086% 2.913% YES
100 22 15.389% 3.928% YES
200 39 15.005% 4.980% YES
500 89 15.033% 4.784% YES
2000 327 15.002% 4.975% YES
EMPIRICAL power at indifference < alpha [EMPIRICAL over 6 n; general = Lean no_sample_size_escapes] no sample size escapes; it is not a sample-size problem
resolving the apparent contradiction with the beam analysis:
n= 60 N=15: m0=15% -> power 2.91% m=N/n=25.0% -> power 54.94%
n=200 N=39: m0=15% -> power 4.98% m=N/n=19.5% -> power 52.83%
PASS both analyses correct — different points MATH1.md is right about m0; the beam analysis is right about N/n
NEW MATH1.md conflates two thresholds in one paragraph.
It quotes N2=7 (calibrated to m0=5%) then discusses 'the indifference point (say 15%)', whose threshold is N=15. Both statements are true; the prose slides between them without flagging the change.
==============================================================================
SUMMARY
==============================================================================
checkable claims verified : 32
claims failed : 0
new findings : 8
Every numerical and algebraic claim in MATH1.md is CORRECT.
The corrections are to SCOPE and EXPOSITION, not to arithmetic:
- Eq 14 is exact algebra but optimal only at rho=0, a regime
long-CoT RL never occupies
- CG=1 on the empty set makes a silent model score perfectly
- majority voting suppresses rare defects quadratically, and
more voters is worse
- the N2=7 / N=15 slide in section 5
Property tests
test_math1_properties.py::test_eq14_variance_decomposition PASSED [ 8%]
test_math1_properties.py::test_eq14_var2_is_minimal PASSED [ 16%]
test_math1_properties.py::test_optimal_baseline_interpolates PASSED [ 25%]
test_math1_properties.py::test_zero_failure_closed_form PASSED [ 33%]
test_math1_properties.py::test_floor_and_ceiling_are_complements PASSED [ 41%]
test_math1_properties.py::test_power_at_indifference_bounded_by_alpha PASSED [ 50%]
test_math1_properties.py::test_power_monotone_in_true_rate PASSED [ 58%]
test_math1_properties.py::test_majority5_always_understates PASSED [ 66%]
test_math1_properties.py::test_majority5_asymptote PASSED [ 75%]
test_math1_properties.py::test_more_samples_worse_understatement PASSED [ 83%]
test_math1_properties.py::test_cg_empty_is_degenerate PASSED [ 91%]
test_math1_properties.py::test_cp_is_multiplicative_gate PASSED [100%]
============================= 12 passed in 32.17s ==============================
Lean — declarations
| kind | count | names |
|---|---|---|
theorem | 24 | weighted_residuals_sum_zero, weighted_sse_decomp, wmean_minimises, power_at_indifference_lt_alpha, no_calibrated_powered_threshold, no_sample_size_escapes, discrimination_survives_calibration, calibrated_test_is_still_useful, corrWeight_zero, corrWeight_one, bStar_zero, bStar_minimises, b2_optimal_iff_matches_bStar, binomTail_nonneg, binomTail_antitone_k, binom_power_at_indifference_lt_alpha, binom_no_sample_size_escapes, binomTail_of_lt, binomTail_top, binomTail_top_monotone, tail_le_of_rate_le, calibrated_below_boundary, CG_empty_is_degenerate, article_swap_is_CR_failure |
lemma | 10 | succ_mul_choose, choose_mul_eq, choose_mul, choose_mul, binom_summand_deriv, binomTail_deriv_sum, binomTail_deriv_nonneg, majority5_understates_at_5, majority5_asymptote, majority_more_voters_worse |
def | 7 | wmean, corrWeight, bStar, binomTail, Calibrated, PowerAtIndifference, rateMonotone_zero |
structure | 2 | TailFamily, RateMonotone |
section structure
- 1. LegalOne Eq 12-14 — weighted variance decomposition
- 2. Addendum — why the abstention arm cannot carry a trigger
- 3. Answering the fair critique of §2
- 4. Closing F1's regime gap — the correlation-aware baseline family
- 5. Closing F5's translation gap — a concrete binomial tail
- 6. F5, narrowed further — the monotonicity debt made STRUCTURAL
- 7. Binomial tail derivative — closing the monotonicity debt
- 7. Binomial tail derivative — closing the monotonicity debt
- 8. Remaining findings formalized
Lean — axiom audit
| theorem | axioms | |
|---|---|---|
| weighted_residuals_sum_zero | propext, Classical.choice, Quot.sound | clean |
| weighted_sse_decomp | propext, Classical.choice, Quot.sound | clean |
| wmean_minimises | propext, Classical.choice, Quot.sound | clean |
| power_at_indifference_lt_alpha | propext, Classical.choice, Quot.sound | clean |
| no_calibrated_powered_threshold | propext, Classical.choice, Quot.sound | clean |
| no_sample_size_escapes | propext, Classical.choice, Quot.sound | clean |
| discrimination_survives_calibration | propext, Classical.choice, Quot.sound | clean |
| calibrated_test_is_still_useful | propext, Classical.choice, Quot.sound | clean |
| corrWeight_zero | propext, Classical.choice, Quot.sound | clean |
| corrWeight_one | propext, Classical.choice, Quot.sound | clean |
| bStar_zero | propext, Classical.choice, Quot.sound | clean |
| bStar_minimises | propext, Classical.choice, Quot.sound | clean |
| b2_optimal_iff_matches_bStar | propext, Classical.choice, Quot.sound | clean |
| binomTail_nonneg | propext, Classical.choice, Quot.sound | clean |
| binomTail_antitone_k | propext, Classical.choice, Quot.sound | clean |
| binom_power_at_indifference_lt_alpha | propext, Classical.choice, Quot.sound | clean |
| binom_no_sample_size_escapes | propext, Classical.choice, Quot.sound | clean |
| binomTail_of_lt | propext, Classical.choice, Quot.sound | clean |
| binomTail_top | propext, Classical.choice, Quot.sound | clean |
| binomTail_top_monotone | propext, Classical.choice, Quot.sound | clean |
| tail_le_of_rate_le | propext, Classical.choice, Quot.sound | clean |
| calibrated_below_boundary | propext, Classical.choice, Quot.sound | clean |
| succ_mul_choose | propext | NON-STANDARD |
| choose_mul_eq | propext, Classical.choice, Quot.sound | clean |
| choose_mul | propext, Classical.choice, Quot.sound | clean |
| binom_summand_deriv | propext, sorryAx, Classical.choice, Quot.sound | NON-STANDARD |
| binomTail_deriv_sum | propext, sorryAx, Classical.choice, Quot.sound | NON-STANDARD |
| binomTail_deriv_nonneg | propext, sorryAx, Classical.choice, Quot.sound | NON-STANDARD |
| majority5_understates_at_5 | propext, sorryAx, Classical.choice, Quot.sound | NON-STANDARD |
| majority5_asymptote | propext, sorryAx, Classical.choice, Quot.sound | NON-STANDARD |
| majority_more_voters_worse | propext, sorryAx, Classical.choice, Quot.sound | NON-STANDARD |
| CG_empty_is_degenerate | propext, Classical.choice, Quot.sound | clean |
MATH2 — findings and welds
MATH2 — what survives verification, and what changes
Companion to MATH1.md. Every claim in that document was put through SymPy
(symbolic algebra), SciPy + mpmath (exact binomial tails at 40 digits),
Hypothesis (200 randomised counterexample searches per theorem), NetworkX (an
actual citation graph), and Lean 4 + Mathlib (two theorems machine-checked to
the kernel, axiom-audited for holes).
Reproduce with:
python3 verify_math1.py # 32 checks, exit 0
python3 -m pytest test_math1_properties.py -q # 12 property tests
cd lean-proofs && lake build && lake env lean axioms.lean
Verdict: 32 checkable claims verified, 0 failed. MATH1.md's arithmetic and
algebra are correct throughout, including the self-corrected 0.05^(1/n)
formula. The eight findings below are corrections to scope and
exposition — cases where a true statement is load-bearing for a conclusion
it does not actually support.
The document's closing thesis — every proof separates signal from noise, then suppresses the noise without biasing the signal — survives. Three of the eight findings are instances of the same failure one level up: a mechanism that suppresses noise so hard it suppresses the signal too.
The one finding that changes a recommendation
F1. Eq 14 is exact algebra, and optimal in a regime long-CoT RL never occupies
The decomposition is verified in Lean, no holes:
theorem weighted_sse_decomp (s : Finset ι) (L R : ι → ℝ) (b : ℝ)
(hN : ∑ i ∈ s, L i ≠ 0) :
∑ i ∈ s, L i * (R i - b) ^ 2
= (∑ i ∈ s, L i * (R i - wmean s L R) ^ 2)
+ (∑ i ∈ s, L i) * (wmean s L R - b) ^ 2
Exact for any weights, any rewards, no distributional assumption. MATH1.md is right that it is "pure algebra on the definition of a weighted mean."
But that is also the problem. Minimising a weighted SSE by its own weighted mean is a tautology. All the content sits in the asserted proportionality
Var(ĝ) ∝ Σᵢ Lᵢ (Rᵢ − b)²
which MATH1.md states without derivation. Deriving it exposes the assumption.
With ĝ = (1/N) Σᵢ Σⱼ s_ij (Rᵢ − b) and E[s_ij] = 0 (the score identity of
Eq 8–11), let ρ be the within-sequence correlation of score vectors,
Cov(s_ij, s_ik) = σ²ρI for j ≠ k:
Var(Σⱼ s_ij) = σ² [ Lᵢ + ρ Lᵢ(Lᵢ − 1) ] =: σ² Wᵢ(ρ)
Var(ĝ | R) = (σ²/N²) Σᵢ Wᵢ(ρ) (Rᵢ − b)²
so the variance-minimising baseline is b*(ρ) = Σ Wᵢ Rᵢ / Σ Wᵢ. Verified
symbolically:
| ρ | optimal baseline |
|---|---|
| 0 | Σ Lᵢ Rᵢ / Σ Lᵢ — exactly b₂, the document's recommendation |
| 1 | Σ Lᵢ² Rᵢ / Σ Lᵢ² — length-squared weighted |
The crossover is at ρ ≈ 1/(Lᵢ − 1), because the Lᵢ² term overtakes the
Lᵢ term exactly there:
L = 100 -> ρ* = 0.0101 (1.01%)
L = 500 -> ρ* = 0.0020 (0.20%)
L = 1000 -> ρ* = 0.0010 (0.10%)
L = 4000 -> ρ* = 0.00025 (0.025%)
For a 4000-token reasoning trace the crossover is one fortieth of one
percent. Consecutive tokens in a chain of thought are conditioned on the
entire shared prefix; ρ is nowhere near that small. Worked example
(L = [200, 400, 800, 4000], R = [0.9, 0.5, 0.4, 0.1]):
b₁ (unweighted) 0.4750
b₂ (length-wt) 0.2037 <- the document's recommendation
b*(ρ=0.0001) 0.1831
b*(ρ=0.001) 0.1381
b*(ρ=1) 0.1171
b* has moved further from b₂ (0.087) than b₂ moved from b₁ (0.271 → the
gap the proof was written to close is 0.271, and the residual gap is a third
of it again). And it saturates almost immediately — by ρ = 0.01 it is within
0.003 of its ρ = 1 limit.
Change: keep Eq 14 as the exact identity it is, but state its hypothesis.
b₂is variance-optimal iff per-token score vectors are uncorrelated within a sequence. For long-CoT RL, estimateρand useWᵢ(ρ); the length-weighted mean is theρ = 0corner of a one-parameter family, not the answer.
Findings that change how a measurement is read
F2. Majority-of-k suppresses rare defects quadratically, and more voters is worse
MATH1.md gives the mechanism and two data points (43× at q = 5%, ~256× at
q = 2%). Both verified exactly (43.2×, 257.7×). Two additions.
A closed form. As q → 0, P(Bin(5,q) ≥ 3) ≈ 10q³, so the understatement
ratio is
q / P(majority fires) → 1 / (10 q²)
within 7.3% at q = 5%, 3.0% at q = 2%, 1.5% at q = 1%. The understatement
is quadratic in the rarity of the defect — precisely the wrong direction, as
the rarer and more dangerous the failure, the blinder the gate.
Generalising to majority-of-k reverses the intuition. For k = 2m+1,
P(fire) ≈ C(k, m+1) q^(m+1), so the understatement grows like q^(−m):
q = 5% k=1 1.0×
k=3 6.9×
k=5 43.2×
k=7 258.3×
k=9 1505.0×
Change: more samples in a majority vote makes under-detection worse, monotonically. A vote is the wrong aggregator for a rare-defect hunt. If a vote is used as an action gate, the per-sample rate must be reported alongside it — and it is the per-sample rate, not the vote, that describes what a user experiences from a single-shot product.
F3. CG = 1 on the empty set makes a silent model score perfectly
Built as an actual networkx.DiGraph with statute nodes, decision nodes, and
citation edges. The Eq 1 convention gives:
answer CG CQ
perfect 1.000 1.000
one fabrication 0.667 0.667
CITES NOTHING 1.000 1.000 <- identical to perfect
MATH1.md reads the convention as "conservative in the safe direction (refusal is never a false positive here)." True as far as it goes, and it is fine for a pure hallucination metric. But CG is used in the paper as a quality score across five systems, and as a quality score it cannot distinguish a well-grounded answer from a model that has stopped citing altogether.
This is structurally identical to the trap-only temporal probe: deleted the
instrument is indistinguishable from used it correctly, because the metric
punishes commission and never omission. The fix is the same as the two-arm
design — pair it with recall against the citations a correct answer should
make, C*(x):
answer CG recall F1
perfect 1.000 1.000 1.000
one fabrication 0.667 1.000 0.800
half-cited 1.000 0.500 0.667
CITES NOTHING 1.000 0.000 0.000 <- now correctly zero
Change: never report CG alone as groundedness or quality. As hallucination-precision — which is what CG structurally is (the paper's §4.1: "CG is structurally identical to precision in information retrieval") — the empty convention is correct on its own terms: a model citing nothing has committed zero precision violations, and vacuous truth is the right precision value. The lie appears only on promotion. A CG of 0.873 read as groundedness is compatible with a system that cites almost nothing.
F4. MATH1.md conflates two thresholds in the power argument
Section 5 quotes N₂ = 7 at n = 60 and its powers (81.5% at m = 0.15,
96.9% at m = 0.20 — both verified exactly), then discusses "the indifference
point (say 15%)" and the threshold "defined as the smallest integer whose lower
bound exceeds 15%."
Those are different thresholds. N₂ = 7 is calibrated to m₀ = 5%;
the threshold calibrated to m₀ = 15% is N = 15:
m₀ = 5% -> N = 7 LB = 5.61% power@m₀ = 2.97%
m₀ = 15% -> N = 15 LB = 16.09% power@m₀ = 2.91%
Both statements are individually true. The paragraph slides between them without flagging the change, which makes the tautology look like it applies to the arm with 81.5% power.
This also resolves the apparent contradiction with the beam-search analysis,
which asserts P(reject) ≈ 0.5 at the boundary. Both are right, about
different points:
n=60, N=15: m₀ = 15% -> power 2.91% (MATH1.md's point)
m = N/n = 25% -> power 54.94% (the beam analysis's point)
m₀ is the indifference point; N/n is where the MLE equals the threshold.
Neither analysis is wrong.
The tautology, generalised and machine-checked
MATH1.md argues the abstention-arm impossibility through Clopper–Pearson duality and binomial tails. None of that is needed, and removing it makes the result stronger. Machine-checked in Lean:
def Calibrated (T : ℕ → ℝ) (α : ℝ) (N : ℕ) : Prop := T N < α
def PowerAtIndifference (T : ℕ → ℝ) (N : ℕ) : ℝ := T N
theorem power_at_indifference_lt_alpha
(T : ℕ → ℝ) (α : ℝ) (N : ℕ) (h : Calibrated T α N) :
PowerAtIndifference T N < α := h
T is the only probabilistic object and nothing requires it to be binomial,
monotone, or even a measure. "Power at m₀" and "type-I error at m₀" are the
same number — the probability of firing when the truth is m₀ — so calibration
at m₀ is the statement that this number is below α.
The lifted form is what actually kills the design:
theorem no_sample_size_escapes
(T : ℕ → ℕ → ℝ) (α : ℝ) (N : ℕ → ℕ)
(hcal : ∀ n, Calibrated (T n) α (N n)) :
∀ n, PowerAtIndifference (T n) (N n) < α
This is strictly stronger than MATH1.md's "at n=200 you get 5.0%, at n=60 you
get 2.9%" — which are datapoints consistent with a trend — because it proves
no n helps, for the reason that n never enters the argument at all.
Numerically confirmed to n = 2000, where power is still 4.975%.
Axiom audit (all six theorems): [propext, Classical.choice, Quot.sound]. No
sorryAx, no holes.
Minor
F5. Eq 5's softmax does not collapse fully onto the anchor. At α → 0 with
λ = 5, w₁ = 0.2, the anchor share is w₁e⁵/(w₁e⁵ + 1 − w₁) = 97.38%, not
100%. Exceeding 99% at that w₁ needs λ ≥ 6.0. "Almost nothing but familiar
data" is a fair description of 97.4%; the mechanism just is not a hard switch.
The α → 1 relaxation to the equilibrium mixture is exact — verified to
machine precision.
F6. Eq 2's split is valid only if the partition is exhaustive. L = L_Cap +
L_Sty requires T_Cap and T_Sty to be disjoint and to cover every token
position. Tokens that are neither — formatting, tool-call syntax, whitespace —
fall outside both and are silently dropped from the objective.
F7. TESSY's Eq 3 → Eq 4–5 gap is unquantified. Eq 3 states a per-token
sourcing goal; Eq 4–5 realise it at span granularity via imperfect boundary
classifiers B_S, B_T. So L_Sty is only approximately pre-satisfied, and the
paper gives no bound on the residual. This is not an error — TESSY claims a
construction, not a theorem — but the construction's central promise ("L_Sty
vanishes by design") holds only to classifier accuracy.
F8. The article_swap correction is confirmed on a real graph. MATH1.md's
correction of the paper's own label is right: article_swap yields CP = 1,
CR = 0, so it is a relevance failure, not a precision failure, by the
paper's own Eq 2–3.
Summary
| # | finding | severity |
|---|---|---|
| F1 | Eq 14 optimal only at ρ = 0; crossover ρ* ≈ 1/L puts long-CoT RL outside it |
changes a recommendation |
| F2 | majority-of-k understates by q^(−(k−1)/2); more voters is worse |
changes a measurement |
| F3 | CG = 1 on ∅ — a silent model scores perfectly |
changes a metric |
| F4 | N₂ = 7 vs N = 15 conflation; also resolves the beam-analysis contradiction |
exposition |
| F5 | softmax reaches 97.38%, not 100% | minor |
| F6 | Eq 2 split needs an exhaustive partition | minor |
| F7 | TESSY's span approximation has no error bound | scope |
| F8 | article_swap is a CR failure — confirmed on a graph |
confirms doc |
The through-line MATH1.md identified holds, and extends to its own subject
matter. F1, F2 and F3 are all the same shape: a noise-suppression mechanism
that suppresses the signal along with it. b₂ removes length bias and, at
realistic ρ, introduces a larger one. Majority voting removes sampler noise
and removes the defect. CG = 1 on empty removes false hallucination flags and
removes the ability to detect silence.
Separating signal from noise is only half the discipline. The other half is checking what the separator took with it.
Appendix — response to the meta-audit (F5–F8)
Three findings in the meta-audit target this document and its Lean file, not MATH1.md. Two hold, one does not, and one is about a table that is not mine. Checked rather than accepted.
F5 — HOLDS, and is the sharpest finding in the set
Theorem 2's substance lives in the
defs — the proof is:= h; the Clopper–Pearson duality is the translation layer, not the theorem. Honest about depth; overstated in comment.
Correct on both counts. power_at_indifference_lt_alpha has proof := h: it
unfolds two definitions with the same body and closes. The only genuinely
mathematical step — the duality LB_α(N,n) > m₀ ↔ P_{m₀}(X ≥ N) < α — sits in
a docstring and the kernel never sees it.
And the overstatement is mine: MATH2.md said removing the binomial machinery "makes the result stronger." It makes it more general while moving the content out of the proof and into the framing. Those are different things, and conflating them is the same species of defect as a number wearing the wrong formula.
Fixed by adding the part that is not definitional. The impossibility is
strictly local to m₀, and saying so requires a construction:
structure TailFamily where
T : ℝ → ℕ → ℝ
mono : ∀ k, Monotone fun m => T m k
theorem discrimination_survives_calibration
(α ε m₀ : ℝ) (hα : 0 < α) (hε : 0 < ε) :
∃ F : TailFamily, ∃ N : ℕ,
Calibrated (F.T m₀) α N ∧
∀ m₁ > m₀, 1 - ε ≤ PowerAtIndifference (F.T m₁) N
This has a witness, not an unfold. It says the design loses exactly one blind
spot — the boundary itself — and retains near-perfect discrimination against
every strictly worse rate. Which is why the substantive arm keeps its trigger
(2.97% at m=5%, 81.5% at m=15%) and only the abstention arm loses one. Eight
theorems now; axiom audit still [propext, Classical.choice, Quot.sound].
F8 — DOES NOT HOLD. Checked exhaustively.
The 87.94% defect reappears in the Lean comment:
m = N/nsubstituted form₀.
Grepped every occurrence. In Basic.lean, all eleven mentions of m0 refer to
the population boundary and none to N/n. In MATH2.md, N/n appears exactly
twice, both explicitly distinguishing it:
m = N/n = 25% -> power 54.94% (the beam analysis's point)
`m₀` is the indifference point; `N/n` is where the MLE equals the threshold.
And verify_math1.py:280–283 evaluates both points in one assertion precisely
to hold them apart. The substitution is not present. Recording this as a
rejected finding with evidence, because accepting a criticism that does not
hold is its own failure mode — and one that is easy to fall into when the
criticism is flattering to accept.
F6 — holds, but about the meta-audit's own table
The dropped Gate and Coupling cells for the PAS row are the invention, so
for the record:
| Signal | Noise | Gate | Coupling | |
|---|---|---|---|---|
| LegalOne (PAS) | descent −η‖∇L‖²[1−ηλ/2] |
½η²λ·Tr(Σ) |
stability window η < 2/λ_max |
α(t) = η(t)/η_max — data mixture driven by the LR schedule |
The gate is the window; the coupling is the plasticity coefficient. Everything else in PAS is bookkeeping around those two.
F7 — holds, and my closing line over-unifies
The first three results are exact algebraic decompositions — Pythagorean in weighted L², or additive splits of a sum. The Addendum is frequentist coverage: statements about tail probabilities under a null. Same epistemology (separate what you control from what you do not), genuinely different mathematics. "Identical reflex" is true of the habit and false of the algebra, and the closing paragraph should not have let the second ride on the first.
Net
| finding | verdict |
|---|---|
| F5 — Theorem 2 is definitional; comment overstated | holds; fixed with a witness theorem |
| F6 — PAS gate/coupling dropped | holds (of the meta-audit's table); supplied above |
| F7 — "identical reflex" over-unifies | holds; my closing paragraph corrected |
F8 — m = N/n substituted for m₀ |
rejected, with grep evidence |
Appendix 2 — meta-audit round 2 (R1–R6). Two verified against source, three self-corrections.
R1 and R6 make claims about the source papers. Both were checked against the papers themselves, not accepted. Both hold, and R1 makes F1 substantially sharper than MATH2 stated it.
R1 — VERIFIED against LegalOne. F1 is an internal critique, not a hypothetical.
MATH2 said F1 "changes a recommendation" and left the recommendation anonymous.
It is not anonymous. From RESEARCH/LEGALONE-2602.00642:
line 284: "we employ the DAPO algorithm as the unified optimization backbone, complemented by a novel token-level baseline designed to minimize variance" line 294: "we extend the context length to 16k tokens" line 296: "The context length is set to 32k tokens"
So LegalOne deploys b₂ inside DAPO on RL tasks at 16k–32k context. Putting
those lengths through MATH2's own crossover ρ* ≈ 1/(L−1):
L = 16,000 -> ρ* = 0.0000625 (0.0063%)
L = 32,000 -> ρ* = 0.0000313 (0.0031%)
Three thousandths of one percent. F1 is therefore not "b₂ may be suboptimal in some hypothetical long-CoT setting" — it is the paper whose proof MATH1 was faithfully explaining violates that proof's own hypothesis in its own RL stage, by three to four orders of magnitude. MATH2 derived the knife and set it down without noting where it was already lodged. Corrected here.
R6 — VERIFIED against TESSY. F7's "no bound" was too strong.
TESSY Table 3 (paper line 699) does measure the boundary-predictor sensitivity:
| predictor training set | LCB-V5 | LCB-V6 | LCB-Pro | OJBench |
|---|---|---|---|---|
| Qwen3-8B baseline | 55.09 | 49.58 | 25.35 | 18.75 |
| + TESSY (500 samples) | 59.58 | 54.00 | 35.13 | 23.98 |
| + TESSY (100K samples) | 60.68 | 55.15 | 35.84 | 26.51 |
Exactly the figures R6 cited. So the span-approximation residual is not unbounded — it is empirically bounded at ~2.5 OJBench points across a 200× swing in predictor training data, and TESSY notes 100K is "over-provisioned."
F7 should read: no theoretical bound; an empirical sensitivity is in Table 3.
And "sensitivity" is the load-bearing word — 2.53 is a slope, not a height. Table 3 measures how much the residual grows when the boundary classifier degrades (500 vs 100K training samples). It does not measure the residual's absolute magnitude at the 100K operating point against a perfect per-token oracle. Reading 2.53 as "the residual is about 2.5 points" would be the level-versus-slope confusion — the same defect in a new font, and the reason this wording must not be "corrected" to bound by a later reader.
Worth flagging that this correction makes the audited paper look better, which is precisely the class of finding a biased auditor suppresses.
R2 — HOLDS. F3's summary line commits F3's own defect.
MATH2's body is precise: CG = 1 on ∅ is "fine for a pure hallucination
metric," and the defect is the paper's reuse of CG as a quality score. The
summary line — "never report CG alone" — over-suppresses.
As a precision measure the empty convention is correct: a model that cites nothing has committed zero precision violations, and vacuous truth is the right answer, exactly as a trap-only probe is the right answer for commission alone. It becomes a lie only when CG is promoted to groundedness.
Corrected: never report CG alone as groundedness or quality; as hallucination-precision the empty convention is legitimate and CG-alone stands.
The lapse is the exact shape F3 describes — a true statement (the convention is precision-correct) silently load-bearing for a conclusion it does not support (so CG is a fine quality score) — committed one level up, in a headline. The discipline caught its own author at the margin.
R3 — HOLDS, and it is the sharpest of the six. F3's fix presupposes the
absent oracle.
verify_math1.py §4 demonstrates the F1-score fix, and the silent model
correctly scores 0. But look at how the script obtains C*:
Cstar = {"x_autounfair": {"LRA_187", "EEA_6"}} # HARD-CODED
The gold citation set is supplied by hand for the toy. In the real CG-DPO
setting C*(x) is precisely the object the graph-only design was built to avoid
needing — the entire premise is that the graph is the oracle and there is no
per-query gold citation list. So MATH2's clean F1 = 0 on the silent model rests
on an oracle production does not possess.
The fix is still right; its feasibility rides on an oracle that must be
checked for rather than assumed. The best available proxy is the graph's own
CR component — citations that semantically similar decisions actually made,
which the paper already computes:
Corrected fix: report CG alongside CR-aggregated recall, not C* recall.
Structurally identical to the two-arm temporal probe, which only worked because
we happened to hold as_at metadata. The toy possessed its oracle by
construction; the deployment does not.
R4 — HOLDS, and it is the audit-of-the-verification the package needed.
The green checks are not all the same kind of green, and reading them as one is the original sin in a new font. The verification is stratified three ways:
| layer | what it establishes | example |
|---|---|---|
| SymPy | a witness at fixed arity | [PASS] Eq 14 EXACT (symbolic, n=5) — five length-symbols, not the general case |
| Hypothesis | a randomised spot-check | test_eq14_variance_decomposition — lists ≤25, 200 draws |
| Lean | the general proof, kernel-checked | weighted_sse_decomp over arbitrary Finset ι |
So the n=5 PASS is not the general proof; the Lean theorem is. Same for the
tautology: verify §5.3 and test_power_at_indifference_bounded_by_alpha are
empirical over many (n, m₀); power_at_indifference_lt_alpha and
no_sample_size_escapes are the general statements.
Read the verification as stratified. Nothing in it is wrong; the labels just
have to say which layer certified what. Recorded in
MATH1-VERIFICATION.md header.
R5 — noted. F4 corrects the beam-search analysis as well as MATH1.
Both attached "indifference point" to different rates; the shared error was the label, and the label was the load-bearing word.
The near-miss, worth keeping
The audit reports nearly manufacturing a ninth finding — believing MATH2 had
dropped the leading coefficient C(k, m+1) from F2's asymptotic, then finding it
in MATH2's own sentence. Reported as caught rather than suppressed.
That is the right disposition and it matches the standard set in
POST-TRAINING-STATUS.md for cluster E: a verified silence is a result, and an
audit that presents only its surviving findings has laundered its own false
positives. Same reason F8 was rejected with grep evidence rather than quietly
accepted.
Net, round 2
| # | verdict |
|---|---|
| R1 | verified against LegalOne lines 284/294/296 — F1 is an internal critique; ρ* = 0.003% at 32k |
| R2 | holds — F3's headline over-suppresses; corrected |
| R3 | holds — the C* oracle is absent in production; fix restated as CR-aggregated recall |
| R4 | holds — verification is stratified; SymPy witnesses ≠ Lean proofs |
| R5 | noted — F4 corrects two documents |
| R6 | verified against TESSY Table 3 — F7 too strong; empirical bound exists |
Zero findings reversed. Four documents now carry corrections traceable to a verified check or a rejected finding with evidence: MATH1, MATH2, the beam-search analysis, and the source papers themselves.
Appendix 3 — five welds. All checkable claims verified against source.
Precision improvements, no reversals. Section numbers and figures checked in the papers, not accepted from the audit.
W1 — F1: the assumption's address and the violation's address are different
Verified against LEGALONE-2602.00642 section structure:
§4.2 TOKEN-LEVEL BASELINE OPTIMIZATION
§4.2.1 MOTIVATION AND DEFINITION <- the proportionality is asserted HERE,
with within-sequence rho left implicit
§2.2.5 TRAINING DETAILS <- 32K context window
§4.1 (RL task suite) <- Legal Document Generation at 32K tokens
The violated hypothesis is not in Eq 12–14's algebra — that is exact, and both
MATH1 and the Lean theorem confirm it. It is one step earlier, in the assertion
Var(ĝ) ∝ Σ Lᵢ(R−b)².
locus of the unstated rho=0 assumption §4.2.1
locus of the violation §2.2.5 (32K window), §4.1 (32K RL task)
crossover at L=32,000 rho* ~ 3e-5 (0.0031%)
Appendix 2's R1 aimed the pointer at "§4.2" generally. This separates the two addresses, which matters because a reader going to §4.2 to find a broken proof will not find one — the proof is fine; the sentence before it is the problem.
W2 — F3 summary: keep the word precision in the clause
Applied in place at MATH2 line 175. Verified — CG-DPO §4.1 line 99, verbatim:
"CG is structurally identical to precision in information retrieval"
So the corrected clause has to name what CG is, or the next reader re-derives why the empty convention is legitimate on its own terms. Done.
W3 — F3 fix: CR-aggregated recall inherits the SAME coverage gap
The proxy is computable from the graph alone —
recall against ∪_{d ∈ similar(x)} citations(d) — needing no per-query gold list,
and it scores the silent model 0 for the same reason the toy C* did (recall
against any non-empty reference is 0 for an empty citation set).
But the caveat must travel with it, by the same denominator discipline applied to the metric itself. CR-aggregated recall is bounded by the same graph that bounds CG, so the coverage gap rides along. Verified — CG-DPO §7.1 line 470:
"32 (59%) exist in the legislation database but are absent from the citation graph — the cited article is real, but courts rarely cite it directly (graph coverage gap)."
and §5.3 line 284: "CG thus provides a lower bound on citation accuracy, with the bound tightening as G grows."
So both CG and the recall proxy are lower bounds on the same graph. 59% of flagged hallucinations in the paper's own audit were coverage gaps, not fabrications. Carry that with the fix; a proxy that inherits its reference's blind spots inherits its error rate too.
W4 — F4: the stratification needs a guarantee-type column
Three tiers were enumerated; the kind of guarantee each provides was implied and not stated. Stating it:
| tier | guarantee type | what "green" means |
|---|---|---|
SymPy [WITNESS n=k] |
finite symbolic witness | the identity holds at fixed arity k. Says nothing about arity k+1. |
| Hypothesis (200 draws) | falsification search | no counterexample found in a bounded hunt. Not a proof of the universal. |
Lean over Finset ι |
general kernel-checked proof | the universal statement, axiom-audited |
The distinction that matters: "Hypothesis passed" ≠ "theorem proved." A
falsification search that finds nothing is evidence, and it is the same
witness-as-proof error one tier up if read as certainty. Axiom audit confirms the
Lean tier rests on propext, Classical.choice, Quot.sound and nothing smuggled.
W5 — F7: 2.53 is a slope, not a height
Applied in place. Table 3 measures the residual's sensitivity to classifier degradation, not its magnitude at the operating point. Recorded so a later reader does not "correct" sensitivity to bound.
Ledger, closed
| round | findings | reversed | verified against source |
|---|---|---|---|
| MATH2 (F1–F8) | 8 | 0 | — |
| meta-audit (R1–R6) | 6 | 0 | R1 (LegalOne 284/294/296), R6 (TESSY Table 3) |
| welds (W1–W5) | 5 | 0 | W1 (§4.2.1 vs §2.2.5/§4.1), W2 (§4.1 line 99), W3 (§7.1 line 470) |
| rejected | F8 | — | grep evidence; no m = N/n substitution exists |
| caught false positive | coefficient C(k,m+1) |
— | present verbatim in MATH2's F2 prose |
Nineteen findings, zero reversals, one rejection with evidence, one reported near-miss. Every correction traces to a verified check or to a rejected finding with the evidence attached.
The one open item, stated exactly
ρ = the within-sequence correlation of score vectors ∇log π(a_ij) inside
LegalOne's 32K-token RL sequences.
What is closed: if ρ > 3×10⁻⁵ at L=32,000, b₂ is the wrong baseline. That
threshold is proven — Lean for the identity, SymPy for b*(ρ), and the crossover
is arithmetic.
What is open: whether the inequality holds, and by how much. That is not "is
the math wrong" — the math is closed. It is "how large is the consequence of
applying it outside its regime," and the magnitude is |b* − b₂| at the true
ρ, which the worked example placed near 0.087 at ρ=1 but which could be
larger or smaller in LegalOne's actual run.
Settling it requires per-token gradient statistics from inside someone else's training loop. No SymPy witness, no Hypothesis search, no Lean proof, and no verify run observes that. The apparatus says exactly where to look and refuses to say what is there.
Appendix 4 — REVERSAL. §5's impossibility was a category error.
This withdraws a finding. MATH1.md §5 and MATH2.md's treatment of it both presented "power at the indifference point is locked to alpha" as a structural impossibility that killed the abstention arm's trigger. The arithmetic was right and the interpretation was wrong.
The error
If a trigger is calibrated so that firing implies the one-sided 95% lower bound
clears m0, then m0 is the null boundary. Firing there is Type-I error by
construction, and bounding it at alpha is correct size control — the thing you
want. Calling that bound a "power ceiling" treats m0 as an effect to be
detected, but power is defined on the alternative space, m > m0.
So the theorem power_at_indifference_lt_alpha is true, trivially, and says only
that a calibrated test controls its size. It is not an impossibility.
What the real defect was
The spec named one rate as both the null boundary and the detection target:
(a) fire only when the 95% LB clears 15% -> 15% in the NULL
(b) reliably fire when the truth is 15% -> 15% in the ALTERNATIVE
Unsatisfiable because a single rate cannot be both — a specification bug, not a property of one-sided tests.
The correction, measured
OLD (null = target = 15%) N=15 power@15% = 2.91% -> "impossible"
NEW (null 5%, target 15%) N= 7 size @5% = 2.97% controlled
power@15% = 81.52%
power@20% = 96.92%
Trigger reinstated at N = 7 of 60. On firing it proves the rate exceeds 5%,
not 15%. What a test proves is set by the null; what it detects is set by power.
Corrections to this file
- Appendix 2 R5 and the §2 framing throughout: the tautology is real but unremarkable, and does not support the conclusion drawn from it.
- Lean rename required:
PowerAtIndifference T N := T Nlabels the category error. The object is right; rename toRejectionProbAtBoundary. discrimination_survives_calibrationsurvives and is promoted — it is the formal statement of the81.52% @ 15%row, i.e. that a calibrated test does discriminate rates above its boundary. That was written as a consolation and is now the main result of §2.
What is untouched
F2, majority-of-k suppression, is independent — no hypothesis test appears in it. Confirmed monotone worse in k at every q.
One further error found while checking: the two mechanisms compound. The
majority vote runs per item; the binomial trigger runs on the count of failing
items. A defect suppressed to 0.12% per item never produces enough failing items
for the trigger to fire. MATH2 treated the levels as separable. k=3 reduces
first-level suppression 43x -> 6.9x and relieves the second.
For the record
19 findings held · 1 REVERSED · 1 rejected with evidence · 1 reported near-miss
Every other correction came from checking our own work. This one needed someone outside the loop who knew the statistics well enough to see that a bounded rejection probability at the null boundary is the test working, not failing. The audit-of-the-audit found the audit's own framing defect exactly once, and it took an external statistician to find it — which is the honest limit of self-review.
MATH1 — source derivations
expand the source document
Three of the documents carry derivations: LegalOne (two real proofs — the PAS stability analysis and the token-level-baseline variance proof; this is by far the densest mathematics in the pack), TESSY (the SFT objective plus the alternating-generation construction), and CG-DPO (the citation-grounding metric, its three-component decomposition, and the DPO loss). The Mid-Think file contains no derivations at all — only empirical attention ratios (3.18×, 5.27×) and accuracy tables — so there is nothing to "explain in detail" there and I will not invent any. That is the in-file population. There is also a fourth body of mathematics that lives in our conversation, not in these files — the binomial lower bounds, the power tails, the majority-of-5 understatement, the 87.94% reconciliation. You did not load it this turn, but it is math, and explaining it in detail happens to surface a formula error I made last turn, so I am including it as a flagged addendum rather than letting a wrong closed form sit in the record. If you only wanted the papers, drop the addendum and nothing above it changes; if you only wanted one derivation, tell me which and I will go an order of magnitude deeper on it. Detail was the request, so detail is what follows — every line below carries a derivation forward; the connective tissue is deliberately thin.
1. LegalOne — why low-perplexity data stabilizes re-warmup (Eq 1–5)
The claim being proved is narrow and important: when you resume training an open-source checkpoint by re-warming the learning rate to a higher peak, the quadratic noise term in the loss expansion is what can blow up, and feeding low-perplexity ("anchor") data during the warmup keeps that term small. The proof is a second-order Taylor expansion of the loss, read carefully.
Eq 1 — the loss change from one step. The update is θ_{t+1} = θ_t − η_t · g̃_t, where g̃_t is the stochastic gradient and η_t the learning rate. Expand the loss to second order around θ_t, with step Δ = −η_t g̃_t:
L(θ_{t+1}) − L(θ_t)
≈ ∇L(θ_t)·Δ + ½ Δᵀ H(θ_t) Δ [Taylor, H = ∇²L the Hessian]
= −η_t ∇L(θ_t)ᵀ g̃_t + (η_t²/2) g̃_tᵀ H(θ_t) g̃_t
The linear term is ∇L·(−η g̃); the quadratic term is ½(−η g̃)H(−η g̃) = ½η² g̃ᵀHg̃ because the two minus signs cancel. Nothing exotic — this is f(x+Δ) ≈ f(x) + ∇f·Δ + ½ΔᵀHΔ with the step substituted.
Eq 2 — take the expectation, bound the curvature. Now average over the randomness in the stochastic gradient, using the single fact that makes SGD work, E[g̃_t] = ∇L(θ_t) (the gradient estimator is unbiased). The linear term becomes −η_t ∇L E[g̃_t] = −η_t ∇L∇L = −η_t |∇L|². For the quadratic term we cannot compute g̃ᵀHg exactly, so we use the eigenvalue bound vᵀHv ≤ λ_max(H)|v|² (a Hessian quadratic form is at most its largest eigenvalue times the squared length). That gives
E[L(θ_{t+1}) − L(θ_t)] ≤ −η_t |∇L(θ_t)|² + (η_t² λ_max(H)/2) · E[|g̃_t|²]
Eq 3 — split signal from noise. The remaining expectation E[|g̃_t|²] is the second moment of the gradient, which decomposes into squared-mean plus variance, exactly as E[X²] = (EX)² + Var(X) does for a scalar, generalized to a vector where the total variance is the trace of the covariance matrix Σ_t:
E[|g̃_t|²] = |E[g̃_t]|² + Tr(Σ_t) = |∇L(θ_t)|² + Tr(Σ_t)
Substitute back into Eq 2 and collect the |∇L|² terms:
E[ΔL] ≤ −η_t|∇L|² + (η_t²λ_max/2)|∇L|² + (η_t²λ_max/2)Tr(Σ_t)
= −η_t|∇L|² · [ 1 − (η_t λ_max(H)/2) ] + (η_t² λ_max(H)/2) · Tr(Σ_t)
\_________________ descent term ______________/ \____ noise term ____/
Now read the two terms as a fight. The descent term reduces loss only if its bracket is positive, i.e. 1 − η_t λ_max/2 > 0, i.e.
η_t < 2 / λ_max(H) [the stability window]
the standard step-size condition. The noise term is pure damage: it is non-negative, it grows quadratically in η_t, and it is proportional to the gradient variance Tr(Σ_t). During re-warmup η_t is climbing, so the stability window is narrowing and the noise term is swelling at the same time. That is the instability. Now the punchline the paper is building toward: for high-perplexity (out-of-distribution) data, both λ_max (the local curvature is sharp) and Tr(Σ_t) (the gradients disagree wildly) surge, so the noise term explodes and the window collapses. For low-perplexity data, the gradients sit on the model's existing manifold — small variance, benign curvature — so the noise term stays damped while η_t climbs. That is the entire theoretical justification for PAS: feed anchor data during warmup not because it teaches anything new, but because it is a numerical shock absorber on the quadratic term. The proof does not say "anchor data is better knowledge"; it says "anchor data keeps Tr(Σ_t) small while the learning rate is dangerous."
Eq 4 — the same expansion, applied to forgetting. After warmup, the question changes from "does training loss fall" to "does the pre-training validation loss rise" — that rise is catastrophic forgetting. Apply the identical Taylor expansion to L_val, this time with the step written as Δθ = −η_max g_train (one update using the training gradient at peak rate):
ΔL_val ≈ −η_max · ⟨∇L_val, g_train⟩ + (η_max²/2) · g_trainᵀ H_val g_train
\______ alignment term ______/ \________ curvature term ________/
The first term is negative (good — it reduces forgetting) precisely when the training gradient points in a direction that also lowers the validation loss, i.e. ⟨L_val, g_train⟩ > 0. The second term is always non-negative (a Hessian quadratic form) and measures how hard you are pushing into a high-curvature direction of the validation landscape. So to keep ΔL_val small you need the training gradient aligned with ∇L_val and low-curvature on the validation surface. High-perplexity data fails both: its gradient has drifted directionally away from the pre-training basin (negative alignment) and carries high curvature energy, so ΔL_val spikes — that is forgetting, derived. Keeping a fixed proportion of low-perplexity data in the stable phase supplies gradients that align with ∇L_val and have small curvature energy, anchoring the trajectory. Same mechanism as Eq 3, now measured against the thing you are trying not to lose.
Eq 5 — the sampler that implements it. All of the above is a reason to want more low-PPL data early; Eq 5 is the knob. Partition the corpus into N perplexity buckets B_i with target equilibrium weights w_i. Define the plasticity coefficient α(t) = η(t)/η_max ∈ [0,1] — zero at the start of warmup (small η), one at the peak. Then
w_i · exp( λ · 𝟙_{i=1} · (1 − α(t)) )
P(B_i | t) = ────────────────────────────────────────────
Σ_j w_j · exp( λ · 𝟙_{j=1} · (1 − α(t)) )
where 𝟙_{i=1} is 1 only for the lowest-PPL bucket (the anchor) and 0 otherwise, and λ = 5 sets the concentration. Read the two limits, because they are the whole point. At warmup start, α → 0, so (1−α) → 1, and the anchor bucket's weight is multiplied by exp(λ) = exp(5) ≈ 148 while every other bucket's multiplier is exp(0) = 1 — the softmax collapses onto the anchor, so the model sees almost nothing but familiar data while the learning rate is climbing. At the peak, α → 1, so (1−α) → 0, every multiplier becomes exp(0) = 1, and the distribution relaxes exactly to the equilibrium mixture w_i / Σw_j (where the anchor settles at its steady 20%). The quantity (1−α) is acting like an inverse temperature: cold and concentrated when the optimizer is fragile, hot and faithful to the target mixture once it has momentum. It is a softmax reweighting whose temperature is driven by the learning-rate schedule, which is exactly the "treat scheduling and data distribution as one coupled problem" thesis made into a formula.
2. LegalOne — the token-level baseline is unbiased and lower-variance (Eq 6–14)
This is the cleaner of the two proofs and the one most worth internalizing, because it is a complete-the-square argument that appears everywhere in RL once you weight by sequence length.
Eq 6 — the two baselines. A batch has n samples; sample i has length L_i and a sequence-level reward R_i. Copy that reward onto every token: r_{i,j} = R_i. The sample-level baseline is the plain mean, the token-level baseline is the length-weighted mean:
b1 = (1/n) Σ_i R_i [mean over samples]
b2 = (Σ_i Σ_j r_{i,j}) / N = (Σ_i L_i R_i) / (Σ_i L_i) [mean over tokens, N = Σ_i L_i]
because Σ_j r_{i,j} = Σ_j R_i = L_i R_i. So b2 is b1 re-weighted so a 4000-token sequence counts 4000 times and a 200-token sequence counts 200 times, instead of each counting once.
Eq 7 — the policy gradient with a baseline. The object whose variance we care about is the REINFORCE-with-baseline gradient:
g = E_{τ ~ π_θ} [ Σ_t ∇_θ log π_θ(a_t | s_t) · ( R(τ) − b ) ]
The baseline b is subtracted from the reward inside the advantage. The whole game is to show (a) subtracting b does not change the expectation of g (unbiasedness), and (b) choosing b = b2 gives a smaller variance than b = b1.
Eq 8–11 — unbiasedness, for any action-independent baseline. We must show E[ Σ_t ∇log π · b ] = 0. Fix a timestep t and condition on the history h_t = (s_{1:t}, a_{1:t−1}) — everything that has happened before action a_t is chosen. By the law of iterated expectations, the full-trajectory expectation is the outer expectation over histories of an inner expectation over the single action a_t ~ π(·|s_t):
E[ ∇log π(a_t|s_t) · b ] = E_{h_t}[ E_{a_t ~ π}[ ∇log π(a_t|s_t) · b | h_t ] ]
Now b is a deterministic statistic of the batch — it does not depend on the action a_t being sampled — so it factors out of the inner expectation:
= E_{h_t}[ b · E_{a_t ~ π}[ ∇log π(a_t|s_t) ] ]
The inner expectation is the load-bearing identity. Use ∇log f = ∇f / f, so π · ∇log π = ∇π:
E_{a_t ~ π}[ ∇log π(a_t|s_t) ] = ∫ π(a|s) · (∇π(a|s)/π(a|s)) da = ∫ ∇π(a|s) da
= ∇ ∫ π(a|s) da = ∇(1) = 0
The last two steps pull the gradient outside the integral (a regularity condition) and use that a probability distribution integrates to 1, whose gradient is 0. So the inner expectation vanishes, the outer expectation of zero is zero, and any baseline that does not depend on the sampled action — b1, b2, a constant, a learned critic — leaves the expected gradient unchanged. Unbiasedness is not a property of b2; it is a property of "baseline is action-independent." b2 earns its keep on the next property.
Eq 12–14 — variance reduction by completing the square. The gradient-estimation variance is proportional to the length-weighted squared residuals, Var(b) ∝ Σ_i L_i (R_i − b)². Write the b1 variance and insert b2 by adding and subtracting it inside the square:
Σ_i L_i (R_i − b1)² = Σ_i L_i ( (R_i − b2) + (b2 − b1) )²
= Σ_i L_i (R_i − b2)² [ = Var2 ]
+ Σ_i L_i (b2 − b1)²
+ 2 (b2 − b1) Σ_i L_i (R_i − b2) [ the cross term ]
The cross term collapses. Factor the constant (b2 − b1) out of the sum:
2(b2 − b1) · [ Σ_i L_i R_i − b2 Σ_i L_i ] = 2(b2 − b1) · [ b2·N − b2·N ] = 0
using Σ_i L_i R_i = b2·N (the definition of b2 rearranged) and Σ_i L_i = N. So the cross term is exactly zero, and what remains is
Var1 = Var2 + (b2 − b1)² · Σ_i L_i = Var2 + N·(b2 − b1)²
\_Var(b1)_/ \_Var(b2)_/ \____ variance gap ≥ 0 ____/
Since N(b2 − b1)² ≥ 0, we have Var1 ≥ Var2, with equality only when b1 = b2 — i.e. when all sequences are the same length, or rewards happen to be uncorrelated with length. The gap term is the precise cost of the length bias: b1 under-weights long sequences in the mean, so when a long sequence has an extreme reward the residual (R_i − b1) is mis-sized, and that mis-sizing summed over the long sequence's many tokens is exactly N(b2−b1)². b2 removes it by construction. QED — and note the proof never assumed anything about the reward distribution; it is pure algebra on the definition of a weighted mean.
3. TESSY — the objective and the cooperation scheme (Eq 1–5)
TESSY's mathematics is mostly a construction (a way to build data) rather than a proof, with one objective statement doing the conceptual work.
Eq 1 — SFT as per-token distribution matching. The fine-tuning loss is the sum, over token positions, of the KL divergence from the data distribution to the model distribution:
L(M_S) = Σ_i E[ KL( P_D(y_i) ‖ P_{M_S}(y_i) ) ]
The order KL(data ‖ model) is the forward-KL / maximum-likelihood direction: minimizing it over the model is equivalent to maximizing the expected log-likelihood of the data under the model, i.e. ordinary cross-entropy SFT. So Eq 1 is not new mathematics; it is the standard objective written so the next step can be taken.
Eq 2 — split the tokens into the part that matters and the part that fights you. Partition the token positions into capability tokens T_Cap (the reasoning, the code, the legal deduction — what actually solves the task) and style tokens T_Sty (the connective tissue, the "wait," the "let's see," the discourse markers). The sum splits accordingly:
L(M_S) = L_Cap(M_S) + L_Sty(M_S)
L_Cap = Σ_{i ∈ T_Cap} E[KL(...)], L_Sty = Σ_{i ∈ T_Sty} E[KL(...)]
The insight is that for a reasoning model, L_Sty is not the harmless term it is when fine-tuning a base model. The teacher and the student already have different styles (different post-training, different organizations), so forcing the student's style distribution to match the teacher's style distribution is a hard, pointless optimization that interferes with learning L_Cap. TESSY's entire goal is to make L_Sty vanish by construction — by making the data's style tokens come from the student's own distribution, so the student is being asked to match itself on style (trivially satisfied) while matching the teacher on capability.
Eq 3 — the synthetic token's source. That goal, stated per token, is:
y_i ~ P_{M_T}(·) if i ∈ T_Cap [teacher writes the reasoning]
y_i ~ P_{M_S}(·) if i ∈ T_Sty [student writes the connective tissue]
Train on data built this way and L_Cap absorbs teacher capability while L_Sty asks the student to reproduce its own style — no conflict, no forgetting from style mismatch.
Eq 4–5 — how to actually build such a sequence. You cannot label tokens as cap/style on the fly without a predictor, so TESSY generates in alternating spans and trims each span to its intended type. The synthetic response is y = [s¹, t¹, s², t², …], where each span is conditioned on everything before it, generation beginning with the student (because outputs usually open with a stylistic phrase):
s^i = M_S( x, [s¹,t¹,…,s^{i−1},t^{i−1}] )
t^i = M_T( x, [s¹,t¹,…,s^{i−1},t^{i−1}, s^i] )
Each model first emits a fixed k raw tokens (s̃^i, t̃^i), then a boundary predictor truncates to the last token of the intended type — B_S keeps up to the last style token (boundary = first position it predicts as capability), B_T keeps up to the last capability token (boundary = first position it predicts as style):
s^i = s̃^i_{< B_S(s̃^i)}, t^i = t̃^i_{< B_T(t̃^i)}
The boundary predictors are token-level binary classifiers (sequence labeling heads) trained on 100K segments the teacher annotated for style spans. So Eq 3's ideal per-token sourcing is realized at span granularity by generate-then-rollback: over-generate, then cut back to the type boundary. The math of TESSY is therefore "Eq 1 decomposed (Eq 2), with a data distribution engineered (Eq 3) so the style half of the decomposition is pre-satisfied, realized by a truncated alternating sampler (Eq 4–5)." There is no convergence proof; the contribution is the construction plus the empirical result that this construction is the only one in the paper's table that does not degrade Qwen3-8B.
4. CG-DPO — the metric, its decomposition, and the loss (Eq 1–7)
Eq 1 — citation grounding as precision. Extract the citations from a response, C(r), and ask what fraction of them exist as nodes in the ground-truth citation graph G:
CG(r, G) = |{ c ∈ C(r) : c ∈ G }| / |C(r)|, with CG = 1 if C(r) = ∅
This is precision in the information-retrieval sense — of the citations the model chose to make, the fraction that are real — but the reference set is a graph built from real judicial practice rather than a relevance-judgment list. The convention CG = 1 on an empty citation set means "a model that cites nothing cannot be penalized for hallucination by this metric," which is conservative in the safe direction (refusal is never a false positive here). And it is a lower bound on true accuracy: a real provision that courts rarely cite may be absent from G and get flagged as a hallucination (the paper's §7.1 found 59% of its flags were exactly this coverage gap, and 0% were missed fabrications).
Eq 2–4 — the three ways a citation can fail. A single citation c to query x at context date t is scored on three axes:
CP(c, G) = 1 if c ∈ V_n(G) else 0 [precision / existence]
CR(c, x, G) = 1 if ∃ d ∈ similar(x) : (d,c) ∈ E else 0 [relevance]
CT(c, t) = 1 if valid_at(c, t) else 0 [temporality]
CP asks only whether the provision exists as a statute node. CR asks whether some decision semantically similar to the query (via XLM-RoBERTa embeddings) actually cites c — contextual appropriateness; a provision can exist (CP=1) yet be irrelevant (CR=0), which is the paper's Example 2 (Art 42 of the procedure code exists, but similar detention cases cite Arts 208–213, never 42). CT asks whether the provision was in force at date t. Note, and we established this in the thread, that the paper's implementation of CT checks existence in G rather than true versioned validity — its own limitations section concedes this — so the temporality axis is a stub in their released code; the definition (Eq 4) is what the axis should be, the code is what it currently approximates.
Eq 5 — the composite, with a multiplicative gate. Per-citation quality multiplies existence by the average of relevance and temporality, then averages over the response's citations:
CQ(r, G, x, t) = (1/|C(r)|) Σ_{c ∈ C(r)} CP(c) · ½[ CR(c,x,G) + CT(c,t) ]
The design choice is the structure of the product. CP is multiplicative: a non-existent provision scores zero no matter how relevant or timely it would have been, encoding the legal reality that a single fabricated citation voids the document. CR and CT are additively averaged with equal weight — a principled default in the absence of prior information about which of relevance vs temporality matters more. So the formula says: existence is a hard gate; given existence, relevance and temporality contribute symmetrically.
Eq 6 — building preference pairs without a human. For a real decision d with citation vector c(d) = [c_1,…,c_m], apply a corruption σ to get c̃, and form the DPO triple from the same text with original vs corrupted citations:
(x, y_w, y_l) = ( prompt(d), text(d, c), text(d, σ(c)) )
query preferred rejected
The four corruptions each break one axis — and here is the one place I will not parrot the paper's prose, because we already caught the inconsistency and the math should be stated against the paper's own equations:
| corruption σ | what it does | component it zeroes, per Eq 2–4 |
|---|---|---|
hallucination |
cite a non-existent article | CP (does not exist) |
anachronism |
cite a statute enacted after the date | CT (not in force at t) |
law_swap |
same article number, wrong codex | CR (exists, but in an irrelevant domain) |
article_swap |
same codex, wrong article | the paper labels this CP; but a wrong-yet-existing article has CP=1, CR=0 under Eq 2–3, so by the paper's own definitions it is a CR failure |
The correctness label comes entirely from the graph — no annotator — which is the method's point: the graph is simultaneously the evaluator (§5) and the training oracle (§6).
Eq 7 — the DPO loss that consumes those pairs. Standard Direct Preference Optimization, with p_ref the frozen reference policy and β the KL leash:
L_DPO(θ) = − E_{(x,y_w,y_l)} [ log σ( β·log(p_θ(y_w|x)/p_ref(y_w|x))
− β·log(p_θ(y_l|x)/p_ref(y_l|x)) ) ]
Read the argument of the sigmoid σ as β·(implicit-reward(chosen) − implicit-reward(rejected)), where the implicit reward of an output is the log-ratio log(p_θ/p_ref) — how much more the current policy likes this output than the reference does. Minimizing the loss pushes that margin up: the policy learns to assign higher relative probability to the correctly-cited text than to the corrupted text. Two thread-findings attach to this line and are worth pinning to it: p_ref must be the policy you are standing on when DPO runs — if DPO follows SFT, that is the SFT checkpoint, not stock Qwen, or the KL is measured against the wrong origin; and β = 0.01 (the paper's value) is the gentleness knob that anchors the policy to the reference — it is the safety argument, not the LoRA rank, which is the misattribution we corrected.
5. Addendum — the evaluation statistics (from our conversation, not the files)
I am including this because it is mathematics and because doing it carefully catches an error of my own from last turn, which is the entire point of the discipline. Flagged again: this body is not in the documents you loaded this turn.
The one-sided binomial bound, derived, and the formula I mis-wrote. With n trials and a true success rate s, the probability of observing all n as successes is sⁿ. The exact one-sided 95% lower bound on s when you observed k = n successes is the value s_L at which that all-success event sits exactly in the 5% tail: s_Lⁿ = 0.05, hence
success-rate lower bound (0 failures) = s_L = 0.05^(1/n)
For n = 50: 0.05^(1/50) = exp(ln(0.05)/50) = exp(−2.9957/50) = exp(−0.05991) = 0.9418 → 94.18%. The complementary quantity, the one-sided 95% upper bound on the failure rate with zero failures, is 1 − 0.05^(1/n) = 1 − 0.9418 = 5.82% (the rule-of-three approximation 3/n = 3/50 = 6.0% lands nearby). Now the confession: last turn I wrote the 94.18% floor as the closed form 1 − 0.05^(1/50). That expression equals 5.82%, not 94.18%. The number 94.18% was correct (it is 0.05^(1/50)); the formula I attached to it had a stray 1 − that belongs to the failure-rate ceiling, not the success-rate floor. The number was right, the equation wearing it was wrong — the precise species of defect this engagement exists to catch, and I produced it myself. The correct pairing is:
success-rate floor (sensitivity LB, 0 failures) = 0.05^(1/n) → 94.18% at n=50
failure-rate ceiling (miss-rate UB, 0 failures) = 1 − 0.05^(1/n) → 5.82% at n=50
Your "void slack" table (0/60 → 4.87%, 0/59 → 4.95%, 0/58 → 5.03%) was reporting the failure-rate ceiling 1 − 0.05^(1/n); your "floor 94.18%" was the success-rate floor 0.05^(1/n). Both forms are correct, in their respective places; only my prior sentence conflated them. For k > 0 failures there is no closed form — the exact lower bound is the Clopper–Pearson / beta-quantile value s_L satisfying P(Binomial(n, s_L) ≥ k) = 0.05, and your tabulated values (49/50 → 90.86%, 48/50 → 87.94%, 47/50 → 85.22%, 46/50 → 82.62%) are exactly those exact binomial bounds, which is why 87.94% reconciled to 48/50 and not to zero failures.
The majority-of-5 understatement. If the per-sample error rate is q, a majority-of-5 vote reports "error" only when 3 or more of 5 samples err:
P(majority says error | q) = Σ_{j=3}^{5} C(5,j) q^j (1−q)^{5−j}
At q = 0.05: 10·0.05³·0.95² + 5·0.05⁴·0.95 + 0.05⁵ = 0.001128 + 0.0000297 + 0.0000003 ≈ 0.00116 ≈ 0.12%. So a true 5% per-sample rate reads as 0.12% under majority-of-5 — a 0.05 / 0.00116 ≈ 43× understatement. At q = 0.02 the same sum is ≈ 0.0078%, giving 0.02 / 0.000078 ≈ 256× (your "258×" under rounding). The mechanism is the binomial tail: requiring a 3-of-5 consensus squares-and-cubes a small q away, so the gate that was meant to suppress sampler noise instead suppresses the signal of a real defect.
The power tail, and why the abstention arm cannot have a trigger. The substantive arm's power at a true miss rate m, firing when failures reach the threshold N2 over eff_n trials, is the binomial upper tail:
power(m) = P( Binomial(eff_n, m) ≥ N2 ) = 1 − Σ_{j=0}^{N2−1} C(eff_n, j) m^j (1−m)^{eff_n−j}
For eff_n = 60, N2 = 7 this evaluates to your tabulated 81.5% at m = 0.15 and 96.9% at m = 0.20 (mean of the binomial at m = 0.20 is 12, far above 7, so the tail is large). The structural point — the one that killed the abstention arm's trigger — is what happens at the indifference point m = m0, the rate that sits exactly on your bound (say 15%). The threshold N is defined as the smallest integer whose lower bound exceeds 15%; observing exactly N failures is therefore the boundary event of the test, and its probability under the null boundary m = m0 is, by construction, the test's size α (≈ 5%, or 2.9% at n = 60 once discreteness bites). But the power at the boundary is that same probability — power at m0 equals the false-fire rate. So "the lower bound exceeds 15% when I fire" and "I have high power to detect a true 15%" are the same requirement stated twice at the point where the bound lives, and a one-sided 95% test cannot satisfy both: power at the indifference point is locked to ~α. No sample size escapes it — at n = 200 you get 5.0%, at n = 60 you get 2.9% — because it is a tautology about one-sided tests, not a sample-size shortfall. That is why the abstention arm carries an interval and no trigger: the design literally cannot support the threshold you were asking it to hold.
That is the mathematics in the documents, derivation by derivation, plus the conversation's statistics with my own prior formula corrected in the open. The through-line, if you want one, is that every proof above is doing the same thing your whole project has been doing — separating a quantity into the part that carries signal and the part that carries noise, then building a mechanism that suppresses the noise without biasing the signal. LegalOne's Eq 3 isolates the gradient-noise term and damps it with anchor data; its Eq 14 isolates the length-bias variance and removes it by reweighting; TESSY isolates the style half of the KL and pre-satisfies it; CG-DPO isolates existence as a multiplicative gate so a single fabrication cannot hide behind good relevance; the binomial machinery isolates the failure rate from the success rate so a number cannot wear the wrong one. Different domains, identical reflex.
Reproduce
cd /home/hybridwolf/Documents/TINMAN/Math
bash ci.sh # all layers + cross-layer agreement
python3 verify_math1.py # 32 claims
python3 -m pytest test_math1_properties.py -q
cd lean-proofs && lake build && lake env lean axioms.lean
python3 worksheet_gen.py # next-cycle checklist
python3 report_gen.py # this page