Compare commits

...
Sign in to create a new pull request.

11 commits

Author SHA1 Message Date
cd4ae757d9 docs(p28): pin release checksums; mark branch state as superseded by the shipped package
Records the toolchain, replay result and SHA-256 of every file in the
branch's hardened 2.8 state, and points at the artifact actually
submitted (ramanujan-challenge-completed-submissions@1cbb598,
packages/problem_2_8) so this branch cannot be mistaken for it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GkHGb6KVF4adMScHNZEBM4
2026-07-31 15:26:56 -05:00
477e8ddb77 fix(p28): clear all three open replay defects; clean release for submission
F1 run_checks.sh exited 1 on any machine WITH SageMath. set -euo pipefail made
the declared-optional cross-checks fatal, so the script passed without the
optional tooling and failed with it. Optional calls are now guarded by
run_optional(), failures are counted and reported non-fatally, and the script
ends exit 0 with a summary line.

F2 false assertion in p28_lattice_hypotheses_certificate.sage. Component 1 read
216 + 108x + 46x; b2 = (1,2,1,0) contributes 216x, so the true value is
216 + 216x + 46x. The load-bearing identity below it (Bcomb == 4x*Crow) was
always correct, so no mathematics changes.

F3 Sage 10.9 raised 'keys do not match self's parent' at the subs() call: q
lives in the fraction field K while .numerator()/.denominator() return elements
of the underlying polynomial ring. The substitution key is now coerced into the
polynomial parent. This error had been MASKING F2.

Verified after the fixes:
  run_checks.sh exit 0, 48 mandatory PASS (up from 43 -- the previously failing
  certificate now runs to completion), 0 optional failures
  falsifiability intact: 64R-44 -> 64R-43 exits 1, and 236337691420383 -> ...384
  exits 1
  pdflatex x3: 0 errors, 0 warnings, 0 undefined, 17 pages, 0 broken refs

Documentation: states plainly that no base is claimed superior to any other --
the non-injectivity holds for every b >= 2, [0,1] and [1] collide in decimal
exactly as in octal, and both repairs are stated for general b. Base 8 is only
the inherited worked example. Without this a reader could take the radix work
for a claim that base 8 beats base 10 or binary, which is not claimed anywhere.

Housekeeping: removes three Sage preparser .sage.py outputs that an earlier
'git add -A' in this branch had wrongly committed, and adds a .gitignore for
Sage and LaTeX build artifacts. Release zip and PDF rebuilt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 10:40:21 -05:00
1d5273264d feat: add optional enhancements for Ramanujan Problem 2.8
- Positive-cone transport certificates (p28_positive_cone.py, POSITIVE_CONE_CERTIFICATE.md, POSITIVE_CONE_MANUSCRIPT_SECTION.tex)
- Optimized differential gauge (p28_optimized_gauge.py, OPTIMIZED_GAUGE_CERTIFICATE.md)
- Adversarial provenance supplements (p28_mutation_sensitivity.py, solution_pre_positive_cone.tex)
- FAMM SCARS advisory records (FAMM_SCARS.md, p28_famm_scars.json, p28_famm_scars_validator.py)
- Overview documentation (OPTIONAL_IMPROVEMENTS.md, ADVERSARIAL_AUDIT.md)

These are independent, replayable supplements developed after the original exact closure.
They can be verified independently with 'bash run_checks.sh' in the certificates directory.
2026-07-31 05:04:48 -05:00
39806d4423 docs(p28): state the actual motivation -- the problem was used as an instrument
Adds the framing that explains the disproportionate machinery: Problem 2.8 was
approached as a test case for an existing pipeline (encoding, exact-arithmetic
verification, excluded-route registry), not as an isolated puzzle. A well-posed
external problem with an objectively checkable answer is a good defect-finding
instrument because it cannot be argued with.

That is why a Coq-and-Lean treatment of leading zeros sits under a pi formula:
absurd overhead for one limit, reasonable for a codec other work depends on.
Same for the mutation testing, authority tags, and impossibility registry.

Notes the congruence with the challenge's own section 1, which presents these
problems as benchmark instruments with structured verification.

Adds 'What the exercise found', since if the problem is an instrument then the
defects it exposed are part of the result:
  - defects in the argument, repaired pre-release (false ODE-normalisation
    uniqueness, invalid norm-inequality direction, unproved holomorphy in the
    maximum-modulus step, Birkhoff-Poincare as a black box, an untied scalar
    operator that could have been a surrogate, Q/P vs P/Q orientation)
  - defects in the verification machinery -- the failures that let bad results
    pass (checks succeeding with the CAS absent, quo_rem trusting a zero
    remainder, irreducibility/GCD standing in for arguments)
  - defects still open, found during independent replay (run_checks.sh exit-code
    inversion, the false assertion at line 107, the Sage 10.9 coercion error
    masking it, and the Lean-only radix DFA facing regeneration erasure)

The last group is left open rather than tidied away: a validated tool would not
still be producing these, and the point of running the instrument is that it is.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 04:33:26 -05:00
aac17e6e34 docs(p28): recast the method document as a route narrative
Renames THE_ENCODER_APPROACH.md -> HOW_THE_SOLUTION_WAS_FOUND.md and rewrites
it to answer the question a reader actually has -- why these moves -- rather
than arguing for novelty.

Removed: all self-assessment of distinctiveness. Replaced with a plain statement
of the relevant standard practice (PSLQ/LLL, Inverse Symbolic Calculator;
canonical numeration systems, base-k recognisable sets, Cobham) so a reader can
place the work without being told what to think of it.

The narrative now explains each move that looks arbitrary in isolation:
  - why the seed data was treated as generated rather than given
  - why a bijective codec was needed first, which is what the Radix framing and
    DFA canonicalisation work is for
  - why the Pascal basis was not a search: the matrix's own second row
    (-u^3, -3u^2, -3u, -1) is a signed Pascal row, visible before any fitting
  - what decoded (A, B, S) and why exact agreement makes it evidence
  - how A, B factor through s2(tau_163) to reduce the problem to one CM value
  - why the encoding is only a lead, with the proof built independently
  - why the deformation r = 1/x exists: without it there is no contour

Adds a 'What did not work' section recording the three closed routes with their
witnesses (t-line intertwiner impossibility, L_U monodromy exclusion, Sym^2 V
set aside), since the indirectness of the final route is explained by them.

Retains the honest limits: 3.54x is not compression, and the claim should be
rejected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 04:31:36 -05:00
3eded12fe1 docs(p28): radix layer -- framing and DFA canonicalisation are bijections
Documents the radix formulation from MathPunch-FiniteState
(coq/MathPunchFiniteStateAudit/Radix.v, MathPunchFiniteState/Radix.lean), which
is the correctness obligation underneath the encoder method.

The defect, proved rather than asserted: positional evaluation is not injective
on digit strings. Both collisions are machine-checked in Coq and Lean --
eval_digits 8 [0;1] = eval_digits 8 [1], and eval_digits 8 [] = eval_digits 8
[0]. Quantified: in base 8 over lengths 0-3, 585 strings collapse onto 512
values.

Two repairs, both BIJECTIONS onto correctly stated codomains:
  framing  : digit strings  <->  U_n {n} x [0, b^n)
             verified exhaustively base 8, n=0..4 (1,8,64,512,4096; no gaps)
  DFA      : canonical numerals  <->  N+
             verified base 8 to length 5 (32767 strings, values exactly [1,8^5))

Bijectivity is the operative property, not injectivity: injectivity says
encodings do not collide, bijectivity says decoding is TOTAL on the valid
codomain. Stating the codomain as N x N would make framing merely injective;
stating it correctly makes it bijective.

Distinctiveness assessed fairly: the content is classical numeration-system
material (regular numeral languages, canonical numeration, Cobham). The
distinctive move is making it an explicitly proved prerequisite of an encoding
pipeline, with the collisions exhibited as theorems in two proof assistants.

Also flags a maintenance hazard: the DFA and toDigits exist only in Radix.lean;
Radix.v has eval_digits and framed_value alone. Lean is regenerated from coq/*.v
in that repo, so regeneration would silently erase the automaton.

Corrects NOTATION_AND_BORROWED_TERMINOLOGY.md: the blanket 'no biology claim
anywhere' disclaimer was too strong and is now scoped to this submission, since
a Lean probe elsewhere deliberately models expanded genetic alphabets (4/8/12
letters) and proves an optimality statement about them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 04:28:20 -05:00
b2ed813203 docs(p28): the encoder approach -- method, evidence, and honest limits
Documents the compact-form method: re-express opaque exact data in a
structurally-chosen fixed basis and read the coordinates, treating a successful
short exact encoding as a receipt of provenance rather than as compression.

Concrete instance, verified exactly: the challenge's eight large seed integers
decode in the Pascal basis to the Chudnovsky constants A=13591409,
B=545140134, S=426880, which in turn satisfy A = den(s2)-num(s2),
B = 6*den(s2), A/B = (1-s2)/6 for the CM invariant s2 = 77265280/90856689.
Chain: opaque integers -> Pascal coordinates -> Chudnovsky constants -> CM
invariant -> modular origin.

States the limits plainly:
  - NOT a compressor. Measured 3.54x (588 -> 166 bits); unremarkable, and any
    compression claim should be rejected. Consistent with the finding elsewhere
    in this programme that char-poly encoding adds overhead vs an entropy-coded
    baseline.
  - Falsifiable, not numerology: basis fixed in advance, encoding exact with no
    tolerance, and the recovered coordinates were pinned beforehand by an
    unrelated classical formula.
  - Distinctiveness assessed fairly: this is a disciplined exact-arithmetic
    variant of established inverse-symbolic practice (PSLQ, ISC), unusual mainly
    in targeting structured integer arrays and in carrying the encoding into the
    proof. 'Unique' would overclaim.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 04:22:13 -05:00
9f8f398d4b docs(p28): notation key for invented and borrowed terminology
Several terms across this programme are borrowed from molecular biology and
genetics (hachimoji, scar/scar-map, strand/braid, carrier, chirality, mutation)
and could be misread as claims about biological systems. They are not. This
document states the intended mathematical meaning of each, names the source
field it collides with, and says explicitly what is not being claimed.

Part 1 covers terms actually used in the 2.8 submission (seed, jet, carrier,
mutation, deformation, compact form, certificate, red case, authority tag),
grounded in solution.tex and the certificate scripts. Part 2 covers the
biology-adjacent vocabulary of adjacent repositories and is RECONSTRUCTED FROM
WORKING NOTES -- the author should confirm each entry before circulation.

Also records the load-bearing EXACT / NUMERICAL WITNESS / LITERATURE
distinction: the main claim rests only on EXACT and LITERATURE items, and
numerical enclosures are never used as premises.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 04:20:21 -05:00
3702a638ad review(p28): adversarial review against the challenge's own stated rules
Scored against the challenge's operative standard (section 4: a CAS-based
symbolic derivation is sufficient evidence) and its stated central risk
(section 1: retrieval vs reasoning), not a generic rigour bar.

Verdict: satisfies and exceeds the evidentiary standard. Findings:

  F1 CRITICAL  run_checks.sh exits 1 on any machine WITH SageMath installed;
               set -euo pipefail makes the declared-optional Sage cross-checks
               fatal, so the script passes without the optional tooling and
               fails with it
  F2 MEDIUM    false assertion at p28_lattice_hypotheses_certificate.sage:107 --
               component 1 is 216+154x as written, true value 216+262x
               (b2=(1,2,1,0) contributes 216x, not 108x). Non-load-bearing:
               the identity below it, Bcomb == 4x*Crow, is TRUE and Crow
               reproduces the manuscript's C(x) exactly
  F3 MEDIUM    Sage 10.9 parent-coercion TypeError at line 43 masks F2
  F4 MEDIUM    novel-vs-imported content not stated plainly, though the
               Chudnovsky import itself is cited precisely
  F5 PASS      proves the officially stated claim about the official object
  F6 PASS      evidence exceeds the section-4 standard, and is falsifiable
  F7 PASS      manuscript builds clean: 0 errors, 0 warnings, 17 pages

None of F1-F3 touches the mathematics; all are certificate plumbing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 04:16:04 -05:00
8d25a7b367 cert(p28): official-object certificate — proof analyses the official matrix, not a surrogate
Reconstructs the Problem 2.8 data directly from the challenge statement
(R, u=2n+3, w, the 4x4 M(n), both integer seed rows) and verifies by exact
rational arithmetic that the manuscript's specialisation reproduces it:

  M_N(x_0) == official M(N), all 16 entries, at N = 0,1,2,3,5,8,17,40
  A_0 = A*C - (5/4)H_0  == official first seed row
  A_1 = S*C             == official second seed row
  (14R-567)/9 == 236337691420383  (the deformed coefficient restores)

18 assertions, three with explicit negative controls. fractions.Fraction
throughout; no floating point, no CAS.

Closes the one gap no existing certificate covered: the other four verify
statements about the deformed family, none verified that the family is the
official object.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY6SfRYvm8zFKMX9GcjS8u
2026-07-31 04:09:39 -05:00
Codex
492c8ab871 feat(p28): harden exact proof equations 2026-07-31 15:33:21 +07:00
45 changed files with 9352 additions and 401 deletions

10
.gitignore vendored Normal file
View file

@ -0,0 +1,10 @@
# Sage preparser output
*.sage.py
# LaTeX build artifacts
*.aux
*.log
*.out
*.fls
*.fdb_latexmk
*.toc

View file

@ -1,73 +1,99 @@
# Problem 2.8 — Exact Hypergeometric Tail Closure
**Status:** PROVED
**Status:** exact proof, adversarially audited
**Date:** July 2026
For every official column \(j=1,2,3,4\), the authoritative recurrence
satisfies
\[
\lim_{N\to\infty}\frac{P_{N,j}}{Q_{N,j}}
=\frac{\sqrt{10005}}{\pi}.
\]
Equivalently, in the orientation requested by Ramanujan Challenge
Problem 2.8,
satisfies the official orientation
\[
\boxed{\displaystyle
\lim_{N\to\infty}\frac{P_{N,j}}{Q_{N,j}}
=\frac{\sqrt{10005}}{\pi}}.
\]
Its reciprocal consequence is
\[
\lim_{N\to\infty}\frac{Q_{N,j}}{P_{N,j}}
=\frac{\pi}{\sqrt{10005}}}.
=\frac{\pi}{\sqrt{10005}}.
\]
## Exact closure
The proof closes the former connection-functional gap through:
1. an exact nonterminating \({}_4F_3\) tail with
1. the fully displayed rational deformation
\(M_N(x)=\mathcal M(2N+3,x)\);
2. a nonterminating \({}_4F_3\) tail with
\(M_Nk_{N+1}=k_N\);
2. a rank-one discrete-valuation argument giving the all-\(N\)
3. four denominator-cleared Ore factorizations, with no division or
remainder command;
4. a rank-one discrete-valuation induction giving the all-\(N\)
Padé divisibility pattern;
3. an exact terminating adjoint \({}_4F_3\) formula for the denominator;
4. positivity at \(z_0=-1/53360^3\) and a fixed-point Cauchy bound with
5. an exact terminating adjoint \({}_4F_3\), proved by a matrix-induced
scalar step and base/generic/top coefficient induction;
6. positivity at \(z_0=-1/53360^3\) and a Cauchy bound with
\[
\beta=
\frac{3125}{1307443596565949700399927}
<4\cdot10^{-19};
\]
5. the Chudnovsky CM value
7. the Chudnovsky CM value
\(\Phi(x_0)=\sqrt{10005}/\pi\);
6. an exact Rouché separation of the characteristic quartic, a positive
denominator lower bound, and the cyclic-frame argument transferring the
first-column result to all four columns.
8. an explicit stable-graph contraction constructing the dominant
functional and proving eventual nonvanishing in all four columns.
The proof is structural and does not infer equality from the earlier
\(10^{-1052}\) numerical enclosure.
## Equation-only audit repairs
The repaired release removes:
- Ore `quo_rem` calls from the proof path;
- ODE-normalization uniqueness;
- BirkhoffPoincaré delegation;
- irreducibility and polynomial-GCD decisions;
- a false negative-exponent norm inequality;
- implicit maximum-principle and denominator-nonvanishing hypotheses;
- reliance on stored PASS transcripts.
The mandatory standard-library checkers verify the full differential gauge,
base horizontal row, matrix-to-scalar bridge, terminating induction,
balanced limit, characteristic polynomial, root-separation inequalities, and
positive exterior-root eigenvector coordinates.
## Trust boundary
The classical Chudnovsky formula is the sole imported problem-specific
theorem and is cited precisely to a complete modular/CM derivation. Standard
foundational complex- and linear-analysis results are used with their
hypotheses displayed. The package therefore claims a self-contained
recurrence proof relative to that explicit theorem—not an axiom-free
reconstruction of all of complex analysis or CM theory.
## Authoritative artifacts
- `docs/proofs/PROBLEM_28_PROOF.tex`
- `docs/proofs/PROBLEM_28_PROOF.pdf`
- `experiments/ramanujan_28/submission/`
- `experiments/ramanujan_28/submission/solution.tex`
- `experiments/ramanujan_28/submission/solution.pdf`
- `experiments/ramanujan_28/submission/ADVERSARIAL_AUDIT.md`
- `experiments/ramanujan_28/submission/certificates/STANDALONE_EQUATION_CERTIFICATES.md`
- `experiments/ramanujan_28/submission/ramanujan_challenge_problem_2_8.zip`
The primary Wolfram Language certificate contains 22 exact symbolic checks
plus a consolidated PASS conclusion. Dependency-free Python checks verify
the rank-one algebra, the Rouché inequality, and the convergence constants.
Independent SageMath certificates provide secondary exact cross-checks.
## Release verification
- Independent adversarial proof audit: **PASS**
- Wolfram exact checks: **22/22 PASS**
- Python exact checks: **PASS**
- LaTeX build: **PASS**, zero warnings
- PDF visual inspection: **PASS**, all 10 pages
- Clean ZIP extraction and PDF rebuild: **PASS**
- Mandatory dependency-free equations: **PASS**
- Fresh optional Wolfram cross-check: **22/22 PASS**
- Independent Ore/special-function audit: **PASS**
- Independent convergence/all-column audit: **PASS**
- Independent logic/vacuity audit: **PASS**
- LaTeX build and warning scan: **PASS**
- PDF page-by-page inspection: **PASS**
- Clean ZIP extraction, checks, and PDF rebuild: **PASS**
- Clean Git-bundle clone and checks: **PASS**
SHA-256:
```text
PDF a70c50287b24d13bdb113bcdbf87011dcbd698fdd4a7566ede5a8b37aeb8c2b9
ZIP 60b9d60808af129a339064e72b2ad5bd8ff9bc933c3905cf8faf821316cab91d
```
Final SHA-256 values are recorded in `Sha256.txt` beside the released
artifacts.

Binary file not shown.

View file

@ -58,15 +58,17 @@ Equivalently, \(Q_{N,j}/P_{N,j}\to\pi/\sqrt{10005}\).
The missing connection constant is fixed by an exact rank-three
hypergeometric tail. A nonterminating \(\F43\) Euler jet is carried
backward by the authoritative matrix, while the first denominator is a
terminating adjoint \(\F43\). Their common differential gauge gives an
all-\(N\) Pad\'e divisibility theorem. Positivity of the terminating
denominator at the negative CM point, together with a balanced-transfer
Cauchy estimate, turns that formal divisibility into a direct fixed-point
convergence proof. The symbolic contiguity and adjoint identities are
included as reproducible Wolfram Language and SageMath certificates.
backward by the displayed matrix, while the first denominator is a
terminating adjoint \(\F43\). Four denominator-cleared Ore identities
and three coefficient identities give an all-\(N\) Pad\'e divisibility
theorem. Positivity at the negative CM point, a Cauchy estimate, and an
explicit stable-graph contraction prove convergence for all four columns.
Every algebraic identity used below is reproduced by a dependency-free
rational-polynomial checker. The classical Chudnovsky formula, cited
precisely in Section~2, is the sole imported theorem.
\end{abstract}
\enlargethispage{2\baselineskip}
\tableofcontents
\section{Statement and compact form of the seeds}
@ -85,16 +87,49 @@ Let
\[
G_N=M_0M_1\cdots M_{N-1},\qquad G_0=I_4,
\]
where \(M_N=M(N,x)\) is the authoritative transfer matrix in the analytic
deformation
where the rational family is defined as follows. Put \(r=x^{-1}\),
\(\omega=u(3u-2)(3u+2)\), and
\begin{align*}
a_1={}&r(144u^5-288u^4+144u^3)
-99u^5+333u^4-229u^3-114u^2+40u+64,\\
a_2={}&r(432u^4-864u^3+432u^2)
-243u^4+909u^3-868u^2-80u+272,\\
a_3={}&r(432u^3-864u^2+432u)
-153u^3+648u^2-860u+360,\\
a_4={}&144r(u-1)^2,\\
b_1={}&-144ru^3+9u^4+63u^3+158u^2+168u+64,\\
b_2={}&216ru^2+36u^3-189u^2-316u-168,\\
b_3={}&108ru+54u^2-189u-158,\\
c_1={}&-288r^2u^3+
r(54u^4+378u^3+948u^2+1008u+384)\\
&\hspace{2.2em}+18u^5+45u^4-251u^3-1086u^2-1384u-576,\\
c_2={}&-432r^2u^2+
r(153u^4-657u^3+1292u^2+2064u+1072)\\
&\hspace{2.2em}-72u^4+702u^3-1069u^2-2508u-1512,\\
c_3={}&-216r^2u+
r(180u^3-891u^2+1450u+1116)\\
&\hspace{2.2em}-108u^3+864u^2-1385u-1422,\\
c_4={}&-4r^2+r(6u^2-33u+\tfrac{536}{9})
-4u^2+32u-63.
\end{align*}
Define
\begin{equation}\label{eq:deformed-matrix}
\mathcal M(u,x)=
\begin{pmatrix}
a_1/\omega&a_2/\omega&a_3/\omega&a_4/\omega\\
-u^3&-3u^2&-3u&-1\\
xb_1/144&-xb_2/72&-xb_3/36&
x(-2r-(2u-7))/2\\
x^2c_1/288&x^2c_2/144&x^2c_3/72&x^2c_4/4
\end{pmatrix},
\qquad M_N(x)=\mathcal M(2N+3,x).
\end{equation}
At \(x=x_0\), the only deformed challenge coefficient is restored by
\[
236337691420383\ \longmapsto\ \frac{14/x-567}{9}.
236337691420383=\frac{14R-567}{9}.
\]
At \(x=x_0\), this is the exact identity
\(236337691420383=(14R-567)/9\). Thus every later use of Cauchy's theorem
concerns this explicitly defined rational \(x\)-family.
The complete entries of \(M(N,x)\) appear verbatim in the accompanying
CAS certificates.
Thus every use of Cauchy's theorem below concerns the explicitly displayed
rational \(x\)-family, not an unspecified continuation.
Define four Pascal rows
\[
@ -131,7 +166,19 @@ The two official initial rows have the exact form
H_0=Ab_0+Bb_1=(A+B,B,0,0).
\end{equation}
At \(x=x_0\), these identities reproduce the official integer rows
entry by entry.
entry by entry:
\[
\begin{aligned}
A_0={}&(37169305760442252761441,\,
111507917281327441564208,\\
&\hspace{4.7em}111507917281327599720129,\,
37169305760442410917362),\\
A_1={}&(1167416361542639692320,\,
3502249084627896132160,\\
&\hspace{4.7em}3502249084627879697280,\,
1167416361542622723840).
\end{aligned}
\]
For \(j=1,\ldots,4\), write
\[
@ -156,7 +203,10 @@ and define
\Phi(x)=\frac{Ay(z)+B\theta y(z)}{S}.
\end{equation}
The classical Chudnovsky identity is
We use one external theorem: the classical Chudnovsky identity. In the
normalization used here it is Theorem~0.1 of Milla's equation-by-equation
derivation \([2]\), whose modular and CM proof is completed in
Theorem~9.7 and Chapter~10:
\[
\frac1\pi=
\frac{12}{640320^{3/2}}
@ -212,24 +262,89 @@ Its Euler jet is
\end{proposition}
\begin{proof}
The first row is verified coefficientwise from the ratio of consecutive
\(\F43\) coefficients. For the other rows, let \(t=\delta_{N+1}\).
Put \(m=(u-1)/2=N+1\). For the \(r\)-th row of
\(\mathcal M(u,x)\), define
\[
P_r(t)=\sum_{s=0}^3\mathcal M(u,x)_{r+1,s+1}t^s,\qquad
\mathcal TQ=(1-x)x\partial_xQ+(t+1)Q.
\]
The shifted tail satisfies
\[
\left[
(1-x)t(t+u)^3+
x(t+n+1)(t+n+\tfrac76)(t+n+\tfrac32)(t+n+\tfrac{11}{6})
\right]F_{N+1}=0,
L_+(t)F_{N+1}=0,
\]
where \(u=2N+3\). Each of the remaining three row differences is divided
by this degree-four Ore polynomial; its remainder is identically zero in
\(\Q(N,x)[t]\). The exact coefficient identity, the three Ore divisions,
and the normalization ratio are checked in
\texttt{p28\_full\_closure\_certificate.wl} and
\texttt{p28\_kernel\_contiguity\_certificate.sage}.
where
\[
L_+(t)=(1-x)t(t+u)^3+
x(t+m+1)(t+m+\tfrac76)(t+m+\tfrac32)(t+m+\tfrac{11}{6}).
\]
There is no division step: direct expansion gives the following four
denominator-cleared polynomial identities:
\begin{align}
u(3u-2)(3u+2)x(\mathcal TP_0-P_1)
& =144(u-1)^2L_+,\label{eq:ore0}\\
\mathcal TP_1-P_2&=-L_+,\label{eq:ore1}\\
2(\mathcal TP_2-P_3)&=(-2+7x-2ux)L_+,\label{eq:ore2}\\
36(\mathcal TP_3+\ell_3P_3+\ell_2P_2+\ell_1P_1+\ell_0P_0)
&=q_3L_+,\label{eq:ore3}
\end{align}
with
\begin{align*}
\ell_0={}&(u-1)u(3u-2)(3u+2)x/144,\\
\ell_1={}&[-576+864u-432u^2+72u^3
+(580-872u+405u^2-36u^3)x]/72,\\
\ell_2={}&[432-432u+108u^2
+(-436+405u-54u^2)x]/36,\\
\ell_3={}&(-12+6u+11x-2ux)/2,\\
q_3={}&-36+(536-297u+54u^2)x
+(-567+288u-36u^2)x^2.
\end{align*}
For clarity, the coefficient calculation producing the first row is also
written without a special-function routine. Set
\[
\begin{aligned}
A(t)&=\frac{144(u-1)^2(t+u)^3}{u(3u-2)(3u+2)},&
B(t)&=P_0(t)-\frac{A(t)}x,\\
\varrho&=-\frac{(3u-2)(3u+2)}{144(u-1)^2u^2},\\
\chi_j&=
\frac{(m+j)(m+\frac16+j)(m+\frac12+j)(m+\frac56+j)}
{m(m+\frac16)(m+\frac12)(m+\frac56)}\\
&\quad{}\times
\left(\frac{2m(2m+1)}{(2m+j)(2m+j+1)}\right)^3,\\
\psi_j&=
\frac{(m+j)(m+\frac16+j)(m+\frac12+j)(m+\frac56+j)}
{(2m+j)^3(j+1)} .
\end{aligned}
\]
The constant and generic coefficient equations are
\begin{equation}\label{eq:tail-coefficients}
\varrho[-A(0)]=1,\qquad
\varrho\left[-A(j)\chi_j+
\frac{(A(j-1)+B(j-1))\chi_{j-1}}{\psi_{j-1}}\right]=1
\quad(j\ge1).
\end{equation}
Clearing the displayed nonzero factors turns
\eqref{eq:ore0}--\eqref{eq:tail-coefficients} into polynomial
equalities with every coefficient zero. The independent script
\texttt{p28\_standalone\_equations.py} expands precisely these equalities
using only rational addition and multiplication. Equation
\eqref{eq:tail-coefficients} gives the first row of
\eqref{eq:tail-contiguity}; applying
\eqref{eq:ore0}--\eqref{eq:ore3} successively gives the other three
Euler-jet rows.
\end{proof}
For \(N=0\), the standard ascension identity gives
For \(N=0\), write \(y(z)=1+\sum_{k\ge1}c_kz^k\). The coefficient of
\(z\) is
\[
c_1=\frac{(1/6)(1/2)(5/6)}{1^3}=\frac5{72},
\]
and, after shifting \(k\mapsto k+1\), both sides below have initial
coefficient \(5/72\) and consecutive-coefficient ratio
\[
\frac{(k+\frac16)(k+\frac12)(k+\frac56)}{(k+1)^3}.
\]
Hence coefficient equality, rather than a named ascension rule, gives
\begin{equation}\label{eq:ascension}
F_0=y-1
=\frac5{72}z
@ -255,6 +370,14 @@ The transformed hypergeometric equation is
\begin{equation}\label{eq:transformed-ode}
72\theta^3y+108x\theta^2y+46x\theta y+5xy=0.
\end{equation}
Indeed the coefficient ratio of \(y\) gives
\[
\left[\theta^3-
z(\theta+\tfrac16)(\theta+\tfrac12)(\theta+\tfrac56)\right]y=0.
\]
Substituting \(z=-x/(1-x)\), using
\(\theta=(1-x)x\partial_x\), and multiplying by \(72(1-x)\)
expands to \eqref{eq:transformed-ode}.
Using the displayed decomposition of \(C\), equations
\eqref{eq:ascension}--\eqref{eq:transformed-ode} give
\[
@ -309,6 +432,21 @@ Since \(z=-x+O(x^2)\),
\end{equation}
The leading vector in \eqref{eq:tail-direction} is precisely the image
direction in \eqref{eq:rank-one}.
The other expansion required below is equally direct. Since
\[
F_{N+1}=\kappa_{N+1}z^{N+2}(1+O(z)),\qquad
\delta_{N+1}=\theta-(N+2),
\]
the shifted derivatives kill the leading monomial, and therefore
\begin{equation}\label{eq:next-tail-direction}
k_{N+1}=x^{N+2}\widetilde\eta_N
\left(\e_1+xs_N+O(x^2)\right),
\qquad\widetilde\eta_N\ne0.
\end{equation}
Moreover, \eqref{eq:rank-one} gives
\[
J_N(0)\e_1=u^3(a_N,-1,-1,-1)^T\ne0.
\]
\begin{lemma}[DVR step, including the extra first-column zero]
\label{lem:dvr}
@ -378,7 +516,8 @@ Consequently the constant term in the first column of \(fC\) is
Apply Lemma~\ref{lem:dvr} inductively, using
\eqref{eq:annihilation}, \eqref{eq:rank-one},
\eqref{eq:tail-direction}, and \(M_Nk_{N+1}=k_N\).
\eqref{eq:tail-direction}, \eqref{eq:next-tail-direction}, the displayed
nonzero first column of \(J_N(0)\), and \(M_Nk_{N+1}=k_N\).
The stronger last-row assertion follows from
\eqref{eq:row-relation}.
\end{proof}
@ -421,39 +560,154 @@ can vanish.
\end{proposition}
\begin{proof}
The proof is an exact differential-gauge calculation in
\(\Q(n,z)\). The nonterminating tail
Write \(p_n=\widehat Q_{n-1}\) for \(n\ge1\). We use coefficient
induction, because normalization at \(z=0\) alone
would not select a unique solution of the fourth-order equation. To expose
the matrix-to-scalar bridge, write
\[
\F43\left(
\begin{matrix}n,n+\frac16,n+\frac12,n+\frac56\\
2n,2n,2n
\end{matrix};z\right)
\mathcal L_n(t)=t(t+2n-1)^3
-z(t+n)(t+n+\tfrac16)(t+n+\tfrac12)(t+n+\tfrac56)
=\sum_{j=0}^4c_jt^j
\]
has a \(4\times4\) Euler companion system. Direct simplification gives
and define, for operator polynomials with coefficients on the left,
\[
\mathcal C_n(z)\,[-zM(2n+1,-z/(1-z))]
-\theta[-zM(2n+1,-z/(1-z))]
-[-zM(2n+1,-z/(1-z))]\mathcal C_{n+1}(z)=0.
\Theta Q=z\partial_zQ+tQ.
\]
The transformed seed \(-zC(-z/(1-z))\) is a horizontal adjoint row.
Eliminating its other three coordinates from the horizontal equation
produces exactly
The four horizontal components are reconstructed from the first by
\[
\left[
\theta(\theta-2n)^3
-z(\theta-n)(\theta-n-\tfrac16)
(\theta-n-\tfrac12)(\theta-n-\tfrac56)
\right]\widehat Q_N=0.
\pi_0=1,\qquad
\pi_3=\frac{c_4}{c_0}t,\qquad
\pi_2=\frac{c_3}{c_4}\pi_3-\Theta\pi_3,\qquad
\pi_1=\frac{c_2}{c_4}\pi_3-\Theta\pi_2.
\]
The analytic solution normalized at \(z=0\) is the terminating
\(\F43\) in \eqref{eq:qhat}.
The remaining horizontal equation is the direct factorization
\[
\begin{aligned}
\Theta\pi_1+1-\frac{c_1}{c_4}\pi_3
={}&-\frac{72}{n(2n+1)(6n+1)(6n+5)z}\bigl[
t(t-2n)^3\\
&\hspace{4em}
-z(t-n)(t-n-\tfrac16)
(t-n-\tfrac12)(t-n-\tfrac56)\bigr].
\end{aligned}
\]
Let
\[
\mathcal C_n(z)=
\begin{pmatrix}
0&1&0&0\\
0&0&1&0\\
0&0&0&1\\
-c_0/c_4&-c_1/c_4&-c_2/c_4&-c_3/c_4
\end{pmatrix}.
\]
The propagation of the reconstructed row is the following sixteen-entry
identity:
\begin{equation}\label{eq:full-gauge}
\mathcal C_n[-z\mathcal M(2n+1,-z/(1-z))]
-\theta[-z\mathcal M(2n+1,-z/(1-z))]
-[-z\mathcal M(2n+1,-z/(1-z))]\mathcal C_{n+1}=0.
\end{equation}
Finally, direct contraction with the displayed matrix gives
\begin{equation}\label{eq:matrix-scalar-bridge}
\sum_{r=0}^3\pi_r(t)
\left[-z\mathcal M(2n+1,-z/(1-z))\right]_{r+1,1}
=d_0(t)+zd_1(t).
\end{equation}
These are identities in \(\Q(n,z)(t)\). The factors depending on the
integer \(n\) are nonzero for \(n\ge1\); no value is obtained by dividing
at \(z=0\), because the verifier cross-multiplies first and the reconstructed
base functions have removable limits there. The mandatory
sparse-polynomial verifier checks every
reconstruction equation, the closing factorization, and
\eqref{eq:full-gauge}--\eqref{eq:matrix-scalar-bridge} by cross
multiplication. For any reconstructed horizontal row these identities give
\begin{equation}\label{eq:terminating-step}
p_{n+1}
=\bigl(d_0(\theta)+zd_1(\theta)\bigr)p_n,
\end{equation}
where
\[
d_0(t)=
\frac{72(2n+1)^2(2n-t)^3}{n(6n+1)(6n+5)}
\]
and
\[
d_1(t)=-\frac{P(n,t)}{n(2n+1)(6n+1)(6n+5)}
\]
with
\begin{align*}
P(n,t)={}&-5n-76n^2+1404n^3+4360n^4+4320n^5+1440n^6\\
&+(5+127n-1760n^2-6536n^3-7632n^4-3024n^5)t\\
&+(-51+659n+3086n^2+4500n^3+2232n^4)t^2\\
&+(-72-432n-864n^2-576n^3)t^3.
\end{align*}
Thus \eqref{eq:terminating-step} is the scalar form of the displayed
matrix recurrence; no differential-equation uniqueness is used below.
For completeness, the CAS certificate does not rely only on this
differential equation. It computes the actual one-step scalar operator
and verifies its generic coefficient identity, its \(k=0\) normalization,
and the separate top boundary \(k=n+1\). Every remainder simplifies
identically to zero. This proves the statement for all \(n\), not merely
for sampled values.
Let
\[
h_{n,k}=
\frac{(-n)_k(-n-\frac16)_k(-n-\frac12)_k(-n-\frac56)_k}
{(1-2n)_k^3k!}
\quad(0\le k\le n),
\qquad
\nu_n=\frac{576n^2(2n+1)^2}{(6n+1)(6n+5)}.
\]
For \(n\ge1\), clearing the displayed nonzero denominators gives exactly
\begin{align}
d_0(0)&=\nu_n,\label{eq:term-constant}\\
d_0(k)+d_1(k-1)\frac{h_{n,k-1}}{h_{n,k}}
&=\nu_n\frac{h_{n+1,k}}{h_{n,k}}
\qquad(1\le k\le n),\label{eq:term-generic}\\
d_1(n)&=-\nu_n
\frac{(n+\frac76)(n+\frac32)(n+\frac{11}{6})}
{8(2n+1)^3}.\label{eq:term-top}
\end{align}
The base row is not assumed: from the first component of \(C\),
\[
q_0(x)=\frac{18}{x}+\frac{159}{4},\qquad
Q_0(x)=xq_0(x)=18+\frac{159}{4}x,
\]
and therefore
\[
p_1(z)=(1-z)Q_0\!\left(-\frac{z}{1-z}\right)
=18\left(1-\frac{77}{24}z\right).
\]
Direct application of the four displayed \(\pi_r\) operators gives the
four base identities
\begin{equation}\label{eq:base-horizontal-row}
-zC\!\left(-\frac{z}{1-z}\right)
=\left.(\pi_0(\theta)p_1,\pi_1(\theta)p_1,
\pi_2(\theta)p_1,\pi_3(\theta)p_1)\right|_{n=1}.
\end{equation}
The fourth base equation is also direct:
\[
\left[
\theta(\theta-2)^3
-z(\theta-1)(\theta-\tfrac76)
(\theta-\tfrac32)(\theta-\tfrac{11}{6})
\right]p_1=0.
\]
Equivalently, if \(H_1=-zC(-z/(1-z))\), then all four components of
\[
\theta H_1+H_1\mathcal C_1=0
\]
vanish. The mandatory verifier checks both forms independently.
Moreover,
\[
\deg((d_0(\theta)+zd_1(\theta))p_n)\le n+1.
\]
Equations \eqref{eq:term-constant}--\eqref{eq:term-top} therefore prove,
coefficient by coefficient, that the right side of
\eqref{eq:terminating-step} is
\(\alpha_{n+1}\sum_{k=0}^{n+1}h_{n+1,k}z^k\).
Starting from \eqref{eq:base-horizontal-row},
\eqref{eq:full-gauge} propagates the horizontal form at every step.
This proves \eqref{eq:qhat} and \eqref{eq:normalization} for the actual
row \(CG_N\), not merely for a scalar surrogate.
The mandatory standalone checker independently expands the cleared
identities and rejects any nonzero coefficient.
\end{proof}
\begin{corollary}[Positivity at the CM point]\label{cor:positivity}
@ -515,10 +769,19 @@ and therefore
\le10^4\left(\frac um\right)^{i-1}
\left(\frac u{m+1}\right)^{3-j}.
\]
For \(m\ge1\), \(u/m\le5\) and \(u/(m+1)\le5/2\); summing four entries in
each row gives the deliberately loose uniform bound
For \(m\ge1\), \(u/m\le5\) and \(u/(m+1)\le5/2\). Because the exponent
\(3-j\) is negative when \(j=4\), we use the exact case split
\[
\|\mathcal B_m\|_\infty\le4\cdot10^8,\qquad
\left(\frac{u}{m+1}\right)^{3-j}\le
\begin{cases}
(5/2)^{3-j}\le25/4,&j\le3,\\[1mm]
1/2,&j=4,
\end{cases}
\]
where the second line follows from \(u/(m+1)=2+1/(m+1)\ge2\).
Thus every entry is at most \(7{,}812{,}500\), and summing each row gives
\[
\|\mathcal B_m\|_\infty\le31{,}250{,}000<4\cdot10^8,\qquad
\|M_0\|_\infty<10^7.
\]
The balancing telescopes:
@ -531,6 +794,23 @@ It follows that, for \(N\ge1\),
\max_{|x|=1/4}|\mathcal R_{N,r}(x)|
\le6\cdot10^{10}(N!)^2(4\cdot10^8)^{N-1}(1/4)^n.
\end{equation}
We now verify the analytic hypothesis behind the next step. On
\(|x|\le1/4\),
\[
\left|-\frac{x}{1-x}\right|\le\frac13<1,
\]
so the series defining \(y\) and its first three Euler derivatives are
holomorphic on a neighborhood of the closed disk. Because \(f=O(x)\),
the simple pole of \(C\) cancels in \(fC\), so \(\mathcal E_0\) is
holomorphic there. Inspection of \eqref{eq:deformed-matrix} shows that
each \(M_m\) is holomorphic off \(x=0\) in this disk and has at most a
simple pole at \(0\). Hence
\(\mathcal R_{N,r}=x^n(\mathcal E_N)_{r,1}\), with \(n=N+1\), is
holomorphic on the disk after removing its possible singularity at zero.
Proposition~\ref{prop:divisibility} strengthens its order there to at
least \(2n\). Therefore
\(\mathcal R_{N,r}(x)/x^{2n}\) has a removable singularity at zero and
is holomorphic on a neighborhood of the closed disk.
Applying the maximum principle to
\(\mathcal R_{N,r}(x)/x^{2n}\) gives
\begin{equation}\label{eq:cauchy}
@ -552,9 +832,9 @@ Combining this with \eqref{eq:cauchy}, we obtain
\begin{equation}\label{eq:geometric-error}
\left|\frac{E_{N,r}(x_0)}{q_N(x_0)}\right|
=\left|\frac{\mathcal R_{N,r}(x_0)}{Q_N(x_0)}\right|
\le C(x_0)\,\beta(x_0)^N,
\le K_0\,\beta(x_0)^N,
\end{equation}
where \(C(x_0)<\infty\) and
where \(K_0<\infty\) is independent of \(N\) and
\[
\beta(x_0)=
\frac{4\cdot10^8}{29}
@ -592,9 +872,22 @@ Equation \eqref{eq:CM-value} therefore proves
\section{The other three official columns}
For completeness, we recall the exact finite-frame reduction already used
to establish convergence of the recurrence. The balanced transfer tends
to
All matrices in this section are evaluated at \(x=x_0=1/R\).
For \(m\ge1\), retain
\[
D_m=\diag(1,m,m^2,m^3),\qquad
\mathcal B_m=D_m^{-1}M_mD_{m+1}/(m+1)^2,
\]
and, for any row \(a\), put
\[
Z_m(a)=\frac{aG_mD_m}{(m!)^2}.
\]
Then the balancing gives the exact recurrence
\begin{equation}\label{eq:balanced-row-recurrence}
Z_{m+1}(a)=Z_m(a)\mathcal B_m.
\end{equation}
Substitution in the displayed matrix shows, entry by entry, that
\(\mathcal B_m-\mathcal S=O(m^{-1})\), where
\[
\mathcal S=
\begin{pmatrix}
@ -611,94 +904,255 @@ Q_R(t)={}&R^2t^4-(64R^3-56R^2-4)t^3\\
&+(48R^2-262R+220)t^2-(12R-8)t+1.
\end{aligned}
\]
The quartic is irreducible. Its spectral separation is also exact: on
\(|t|=1\), the absolute value of its cubic coefficient exceeds the sum of
the other coefficient magnitudes, because
On \(|t|=1\), the cubic coefficient strictly dominates the sum of the
other four coefficient magnitudes, because
\[
(64R^3-56R^2-4)-(49R^2-250R+213)
=64R^3-105R^2+250R-217>0.
\]
Rouch\'e's theorem therefore places exactly three roots in \(|t|<1\) and
the remaining root \(\rho\) in \(|t|>1\). Hence \(\rho\) is the unique
root of maximal modulus.
We next remove any possible nonvanishing assumption about the denominator.
The positivity estimate above and \(Q_N=x_0^nq_N\) give
\begin{equation}\label{eq:q-lower}
q_N(x_0)\ge
18\cdot29^N(N!)^2
\left(\frac{1-x_0}{x_0}\right)^{N+1}.
\end{equation}
The scalar recurrence obtained from the first cyclic coordinate is of
Poincar\'e type after the \((N!)^2\) balancing. The discrete
Birkhoff--Poincar\'e theorem \([4,\text{ Chapters 3 and 5}]\) applies because
the balanced coefficients are rational in \(N\), have full expansions in
\(N^{-1}\), and the limiting spectrum is simple. If the coefficient of the
\(\rho\)-mode in \(q_N\) were zero, the three-root separation just proved
would give, for some \(\tau<1\),
To count the roots without an irreducibility or root-finder call, consider
\[
|q_N(x_0)|\le K_\tau (N!)^2\tau^N.
H_s(t)=-(64R^3-56R^2-4)t^3+
s\{R^2t^4+(48R^2-262R+220)t^2-(12R-8)t+1\}.
\]
This contradicts \eqref{eq:q-lower}. Thus the dominant denominator
coefficient is nonzero by a wholly exact argument.
The strict inequality above gives \(H_s(t)\ne0\) for
\(|t|=1\), \(0\le s\le1\). Thus the winding number of
\(H_s(e^{i\vartheta})\) about zero cannot change with \(s\); at \(s=0\)
it is \(3\). Hence \(Q_R=H_1\) has three zeros in \(|t|<1\) and one,
counted with multiplicity, in \(|t|>1\). Moreover
\[
Q_R(1)=-(64R^3-105R^2+274R-233)<0,\qquad
\lim_{t\to+\infty}Q_R(t)=+\infty.
\]
Consequently the unique exterior zero is a simple real number
\(\rho>1\).
It remains to transfer the first-column result to the other columns. For
\(r\ge1\), put
\begin{lemma}[Explicit dominant-product dichotomy]
\label{lem:dominant-product}
Fix \(\tau\) with
\[
\max_{\lambda\ne\rho}|\lambda|<\tau<1,
\]
Then there exist a late index \(m_0\), a linear functional \(\Lambda\) on
rows, nonzero scalars \(L_m\) independent of the row, and a left
\(\rho\)-eigenvector \(w\) of \(\mathcal S\) such that the following
alternatives hold:
\begin{align}
\Lambda(a)=0&\quad\Longrightarrow\quad
\|Z_m(a)\|\le K_a\tau^{m-m_0},\label{eq:exceptional-decay}\\
\Lambda(a)\ne0&\quad\Longrightarrow\quad
Z_m(a)=\Lambda(a)L_m\bigl(w+o_a(1)\bigr).
\label{eq:dominant-asymptotic}
\end{align}
\end{lemma}
\begin{proof}
Choose an invertible \(P\) with
\[
P^{-1}\mathcal SP=
\begin{pmatrix}\rho&0\\0&A\end{pmatrix},
\qquad\operatorname{spr}(A)<1.
\]
Choose \(\operatorname{spr}(A)<\theta<\tau\). For stable rows define
\[
\|\beta\|_\theta=\sum_{k=0}^{\infty}
\theta^{-k}\|\beta A^k\|_0.
\]
The finite Jordan identity
\[
J_\lambda^k=\sum_{\ell=0}^{s-1}
\binom{k}{\ell}\lambda^{k-\ell}N^\ell
\]
gives, for \(\operatorname{spr}(A)<\eta<\theta\),
\(\|A^k\|_0\le Ck^2\eta^k\); hence the series converges and
\[
\|\beta A\|_\theta
=\theta\sum_{k=1}^{\infty}\theta^{-k}\|\beta A^k\|_0
\le\theta\|\beta\|_\theta.
\]
Use the dual norm for stable columns.
Write
\[
T_m=P^{-1}\mathcal B_mP=
\begin{pmatrix}a_m&b_m\\c_m&E_m\end{pmatrix}.
\]
Then \(a_m\to\rho\), \(b_m,c_m\to0\), and \(E_m\to A\).
Choose
\[
\theta<d_*<\tau<1<a_*<\rho.
\]
For sufficiently large \(m_0\), a positive \(\epsilon\) makes, for
\(m\ge m_0\),
\begin{gather}
|a_m|\ge a_*,\quad\|E_m\|\le d_*,
\quad\|b_m\|,\|c_m\|\le\epsilon,\label{eq:block-bounds}\\
d_*+\epsilon<\tau,\quad a_*-\epsilon>1,\quad
d_*+\epsilon<a_*-\epsilon,\label{eq:block-separation}\\
q:=\frac{d_*}{a_*-\epsilon}
+\frac{(d_*+\epsilon)\epsilon}{(a_*-\epsilon)^2}<1.
\label{eq:graph-contraction-constant}
\end{gather}
For stable columns \(\|h\|\le1\), set
\[
\Psi_m(h)=\frac{E_mh-c_m}{a_m-b_mh}.
\]
Equations \eqref{eq:block-bounds}--\eqref{eq:block-separation} give
\[
\|\Psi_m(h)\|
\le\frac{d_*+\epsilon}{a_*-\epsilon}<1.
\]
For two such columns,
\[
\Psi_m(h)-\Psi_m(k)
=\frac{E_m(h-k)}{a_m-b_mh}
+\frac{(E_mk-c_m)b_m(h-k)}
{(a_m-b_mh)(a_m-b_mk)},
\]
so \eqref{eq:graph-contraction-constant} gives
\[
\|\Psi_m(h)-\Psi_m(k)\|\le q\|h-k\|.
\]
For \(M>m\), set \(h_M^{(M)}=0\) and recurse backward by
\(h_j^{(M)}=\Psi_j(h_{j+1}^{(M)})\). Then, for \(M'>M\),
\[
\|h_m^{(M')}-h_m^{(M)}\|\le2q^{M-m}.
\]
Thus \(h_m=\lim_{M\to\infty}h_m^{(M)}\) exists and satisfies
\begin{equation}\label{eq:graph-invariance}
h_ma_m+c_m=(h_mb_m+E_m)h_{m+1}.
\end{equation}
The defining recurrence gives the explicit bound
\[
\|h_m\|\le
\frac{\|E_m\|\|h_{m+1}\|+\|c_m\|}
{|a_m|-\|b_m\|}.
\]
Together with \(\|A\|_\theta/\rho<1\), this gives
\[
\limsup_{m\to\infty}\|h_m\|
\le\frac{\theta}{\rho}\limsup_{m\to\infty}\|h_m\|,
\qquad\text{hence}\qquad h_m\to0.
\]
Write
\[
U_m(a)=Z_m(a)P=(\alpha_m,\beta_m),\qquad
\xi_m=\alpha_m-\beta_mh_m,\qquad
d_m=a_m-b_mh_{m+1}.
\]
Using \eqref{eq:graph-invariance} in
\(U_{m+1}=U_mT_m\) gives the exact scalar equation
\[
\xi_{m+1}=d_m\xi_m.
\]
Define the composed seed functional and product
\[
\Lambda(a)=\alpha_{m_0}(a)-\beta_{m_0}(a)h_{m_0},\qquad
L_m=\prod_{\ell=m_0}^{m-1}d_\ell.
\]
Both are now explicit, \(\Lambda\) is linear, and
\(\xi_m=\Lambda(a)L_m\). Equations
\eqref{eq:block-bounds}--\eqref{eq:block-separation} ensure
\(d_m\ne0\).
If \(\Lambda(a)=0\), then \(\alpha_m=\beta_mh_m\) and
\[
\beta_{m+1}=\beta_m(E_m+h_mb_m),\qquad
\|\beta_{m+1}\|<(d_*+\epsilon)\|\beta_m\|
<\tau\|\beta_m\|,
\]
which proves \eqref{eq:exceptional-decay}.
If \(\Lambda(a)\ne0\), put \(r_m=\beta_m/\xi_m\). Exact substitution
gives
\[
r_{m+1}
=\frac{b_m+r_m(E_m+h_mb_m)}{d_m}.
\]
Here \(b_m/d_m\to0\) and
\((E_m+h_mb_m)/d_m\to A/\rho\), whose norm is below one.
Enlarge \(m_0\) once more, redefining \(\Lambda\) and \(L_m\) from this
new index, so that for some \(q_1<1\),
\[
\left\|\frac{E_m+h_mb_m}{d_m}\right\|\le q_1
\qquad(m\ge m_0).
\]
Then, for every \(m\ge m_0\),
\[
\|r_m\|\le q_1^{m-m_0}\|r_{m_0}\|
+\sum_{\ell=m_0}^{m-1}q_1^{m-1-\ell}
\left\|\frac{b_\ell}{d_\ell}\right\|\longrightarrow0.
\]
Since \(\alpha_m/\xi_m=1+r_mh_m\to1\),
\[
U_m(a)=\Lambda(a)L_m\bigl((1,0)+o_a(1)\bigr).
\]
Multiplying by \(P^{-1}\) proves
\eqref{eq:dominant-asymptotic} with
\[
w=(1,0)P^{-1},\qquad w\mathcal S=\rho w.
\]
\end{proof}
No GCD or irreducibility decision is needed to show that all four
coordinates of \(w\) are nonzero. Define the polynomial row \(w(t)\) by
\[
\begin{aligned}
F_r&=[\,\e_1,M_r\e_1,M_rM_{r+1}\e_1,
M_rM_{r+1}M_{r+2}\e_1\,],\\
\gamma_{r,k}&=\prod_{\ell=1}^{k}(r+\ell)^2,\\
C_r&=[\,\e_1,\mathcal B_r\e_1,
\mathcal B_r\mathcal B_{r+1}\e_1,
\mathcal B_r\mathcal B_{r+1}\mathcal B_{r+2}\e_1\,].
w_1(t)={}&Rt(Rt^2-7)+12R^2t^2+4t^2+44t+10,\\
\frac{w_2(t)}2={}&R^2t((48R-27)t-28)
+(194R-108)t+40R-23,\\
w_3(t)={}&R^2t((48R-17)t-8)
+(198R-68)t+71R-32,\\
w_4(t)={}&2R(8+(17+3R)t+4R^2t^2).
\end{aligned}
\]
The balancing telescopes exactly:
Direct multiplication gives the exact polynomial identity
\[
F_r=D(r)C_r\diag(\gamma_{r,0},\ldots,\gamma_{r,3}),
\qquad
C_r\longrightarrow
C=[\,\e_1,\mathcal S\e_1,\mathcal S^2\e_1,\mathcal S^3\e_1\,].
w(t)(tI-\mathcal S)=(Q_R(t),0,0,0).
\]
The limiting cyclic frame is nonsingular:
At \(t=\rho\), this is a left \(\rho\)-eigenvector. The exterior
eigenspace is one-dimensional, so the vector in
Lemma~\ref{lem:dominant-product} may be rescaled to \(w(\rho)\), with the
inverse rescaling absorbed into \(L_m\). Since \(R>7\) and \(\rho>1\),
every displayed grouping is positive. Thus \(w_j(\rho)>0\) for
\(j=1,2,3,4\); below we abbreviate \(w_j=w_j(\rho)\).
Undoing the balancing in \eqref{eq:dominant-asymptotic} gives, whenever
\(\Lambda(a)\ne0\),
\begin{equation}\label{eq:all-column-asymptotic}
aG_m\e_j=(m!)^2m^{-(j-1)}
\Lambda(a)L_m\bigl(w_j+o_a(1)\bigr).
\end{equation}
It remains to verify that the two official rows are not exceptional.
The positivity estimate and \(Q_m=x_0^{m+1}q_m\) give
\begin{equation}\label{eq:q-lower}
\frac{q_m(x_0)}{(m!)^2}
\ge18(R-1)\,[29(R-1)]^m.
\end{equation}
If \(\Lambda(C)=0\), the first coordinate of
\eqref{eq:exceptional-decay} would contradict \eqref{eq:q-lower}.
Therefore
\[
\det C
=-\frac{4(27R-11)(128R^2-149R-43)}{R^6}\ne0.
\Lambda(A_1)=S\Lambda(C)\ne0.
\]
Thus \(F_r\) is invertible for all sufficiently large \(r\). If
\(y_r(a)=aG_r\e_1\), exact inversion of this frame gives
If \(\Lambda(A_0)=0\), then
\eqref{eq:exceptional-decay}, \eqref{eq:dominant-asymptotic}, and
\(|d_m|>1\) for large \(m\) would make the first-column quotient tend
to zero, contradicting \eqref{eq:first-column}. Hence
\(\Lambda(A_0)\ne0\) as well.
Because \(w_j>0\), equation \eqref{eq:all-column-asymptotic} first proves
that every \(Q_{m,j}\) is nonzero for all sufficiently large \(m\), and
only then permits division:
\[
aG_r\e_j=r^{-(j-1)}
\sum_{k=0}^{3}(C_r^{-1})_{k+1,j}
\frac{y_{r+k}(a)}{\gamma_{r,k}}.
\lim_{m\to\infty}\frac{P_{m,j}}{Q_{m,j}}
=\frac{\Lambda(A_0)}{\Lambda(A_1)}
=\lim_{m\to\infty}\frac{P_{m,1}}{Q_{m,1}}
=\frac{\sqrt{10005}}{\pi}.
\]
The same Birkhoff--Poincar\'e theorem supplies a linear dominant functional
\(\Lambda\) and an exponent \(\sigma\) such that, for fixed \(k\),
\[
\frac{y_{r+k}(a)}
{(r!)^2\rho^r r^\sigma\gamma_{r,k}}
\longrightarrow\Lambda(a)\rho^k.
\]
Consequently
\[
\frac{aG_r\e_j}
{(r!)^2\rho^r r^{\sigma-(j-1)}}
\longrightarrow\Lambda(a)\,\widetilde w_j,\qquad
\widetilde w=[1,\rho,\rho^2,\rho^3]C^{-1}.
\]
An explicit left eigenvector is obtained from the first row of
\(R^2\operatorname{adj}(tI-\mathcal S)\). Each of its four coordinate
polynomials is coprime to \(Q_R\); hence no coordinate vanishes at \(\rho\).
It is a nonzero multiple of \(\widetilde w\), so
\(\widetilde w_j\ne0\) for every \(j\). Applying the last limit to
\(a=A_0,A_1\), using the exact denominator nonvanishing above, gives
\[
\lim_{N\to\infty}\frac{P_{N,j}}{Q_{N,j}}
=\frac{\Lambda(A_0)}{\Lambda(A_1)}
\qquad(j=1,2,3,4).
\]
Equation \eqref{eq:first-column} evaluates this common ratio. We conclude:
We conclude:
\begin{theorem}[Ramanujan Challenge Problem 2.8]\label{thm:main}
For every official column \(j=1,2,3,4\),
@ -727,29 +1181,42 @@ The proof package contains the following certificates.
File & Exact obligation\\
\midrule
\path{p28_full_closure_certificate.wl}
& Authoritative differential gauge; nonterminating tail contiguity;
terminating adjoint equation; coefficientwise \(n\)-contiguity;
normalization and top boundary; exact spectral and cyclic-frame closure.\\
& Optional independent Wolfram cross-check of the differential gauge and
hypergeometric closure.\\
\path{p28_standalone_equations.py}
& Mandatory dependency-free expansion of the four cleared Ore
factorizations, the tail coefficient equations, the terminating base,
generic, and top identities, ascension, and the \(\F32\) equation.\\
\path{p28_dominant_product_algebra.py}
& Mandatory dependency-free verification of
\(\mathcal B_m=\mathcal S+O(m^{-1})\), the characteristic polynomial,
the root-separation inequalities, the left-eigenvector identity, and
the four positive coordinate rewrites.\\
\path{p28_kernel_contiguity_certificate.sage}
& Independent coefficient/Ore proof of \(M_Nk_{N+1}=k_N\).\\
& Optional independent Sage check of the four displayed
factorizations; it performs no Ore division.\\
\path{p28_lattice_hypotheses_certificate.sage}
& Rank-one factorization, tail direction, and transformed ODE identities.\\
& Optional exact cross-check of the rank-one factorization, tail
direction, and transformed ODE identities.\\
\path{p28_convergence_constants.py}
& Exact rational verification of the coefficient bounds,
\(\alpha_{n+1}/\alpha_n\ge29n^2\), and \(\beta(x_0)<1\).\\
\path{all_four_columns_certificate.sage}
& Balanced limit, Rouch\'e separation, nonzero eigenvector coordinates,
and invertible cyclic frame.\\
& Optional Sage cross-check of the balanced limit and exterior-root
algebra; the analytic contraction is proved in Lemma~\ref{lem:dominant-product}.\\
\path{p28_parametric_pade_probe.py}
& Dependency-free finite exact regression of the predicted valuations.\\
& Diagnostic finite exact regression of the predicted valuations; it is
not used as proof of an all-\(N\) statement.\\
\bottomrule
\end{tabular}
\end{center}
The Wolfram certificate performs symbolic identities over
\(\Q(n,z)\); it uses no numerical samples. The Python constants check uses
only the standard library's \texttt{fractions.Fraction}. The SageMath
files are independent exact cross-checks.
The two mandatory algebra checkers use only the standard library's
\texttt{fractions.Fraction}, sparse coefficient dictionaries, and explicit
addition, multiplication, differentiation, and determinant expansion.
They invoke no division algorithm, factorizer, root finder, special-function
library, or numerical sample. Wolfram Language and SageMath are optional
independent cross-checks, not a trust requirement.
\section*{References}
\addcontentsline{toc}{section}{References}
@ -758,6 +1225,10 @@ files are independent exact cross-checks.
\item D. V. Chudnovsky and G. V. Chudnovsky,
``Approximations and complex multiplication according to Ramanujan,''
in \emph{Ramanujan Revisited}, Academic Press, 1988, pp.~375--472.
\item L. Milla,
``A detailed proof of the Chudnovsky formula with means of basic
complex analysis,'' arXiv:1809.00533v6, 2021,
\href{https://arxiv.org/abs/1809.00533}{arXiv:1809.00533}.
\item J. L. Fields,
``Rational approximations to generalized hypergeometric functions,''
\emph{Mathematics of Computation} \textbf{19} (1965), 606--624,
@ -767,9 +1238,6 @@ files are independent exact cross-checks.
``Hermite--Pad\'e approximants of generalized hypergeometric
functions,'' \emph{Russian Acad. Sci. Sb. Math.}
\textbf{83} (1995), 189--219.
\item S. Bodine and D. A. Lutz,
\emph{Asymptotic Integration of Differential and Difference Equations},
Lecture Notes in Mathematics 2129, Springer, 2015, Chapters 3 and 5.
\item The Ramanujan Machine,
\href{https://www.ramanujanmachine.com/ramanujan-challenge/}
{Ramanujan Challenge}, Problem 2.8.

View file

@ -0,0 +1,111 @@
# Adversarial Audit — Ramanujan Challenge Problem 2.8
## Verdict
The recurrence-specific proof path passes the repaired adversarial audit.
Every Ore, differential-gauge, terminating-induction, valuation, convergence,
and all-four-column obligation is now displayed as an equation and replayed
without a computer-algebra decision procedure.
The exact trust boundary is important:
- The proof imports the classical Chudnovsky formula as one explicitly named
theorem, with a precise citation to a complete modular/CM derivation.
- It also uses foundational results stated with their hypotheses: polynomial
continuity, the winding-number/argument-principle root count, the maximum
modulus principle, finite-dimensional Jordan decomposition, and completeness
of finite-dimensional normed spaces.
- It does **not** claim to be axiom-free or to reconstruct those foundational
theorems from set theory.
Relative to that explicit boundary, no recurrence-specific assumption,
vacuous implication, numerical-equality inference, or hidden CAS remainder
remains.
## Defects found and repaired
| Initial defect | Why it failed | Equation-level repair |
|---|---|---|
| The deformed transfer was under-defined | Only one substituted coefficient was shown; later notation changed the meaning of the first argument | Displayed all sixteen entries of \(\mathcal M(u,x)\), defined \(M_N(x)=\mathcal M(2N+3,x)\), and displayed both official seed rows |
| Three matrix terms lost a plus sign during the first repair | The manuscript matrix then differed from the certified matrix | Restored the three sums in \(c_1,c_2,c_3\); hostile replay caught this before release |
| Ore divisions used `quo_rem` | A zero remainder was trusted rather than exhibited | Replaced every division with four direct cleared factorizations \(D_r=q_rL_+\), including the fourth companion closure |
| “Standard ascension identity” and transformed ODE were named but not derived | The coefficient mechanism was hidden | Added initial coefficient and consecutive-ratio equations; expanded the \({}_3F_2\) Euler operator explicitly |
| ODE normalization was claimed to determine the terminating \({}_4F_3\) uniquely | False: the exponent \(2n\) supplies an additional analytic branch | Replaced uniqueness with base, generic, and top coefficient induction for the actual one-step operator |
| The scalar one-step operator was not tied to the challenge matrix | Hard-coded \(d_0,d_1\) could have described a surrogate | Added horizontal reconstruction, all sixteen differential-gauge equations, and the exact matrix contraction producing \(d_0+zd_1\) |
| Only the first base component was initially checked | The actual compact seed row was not yet known to be horizontal | Added all four base-row reconstruction equations, the base terminating-operator equation, and all four base adjoint residuals |
| Two DVR-lemma hypotheses were only implicit | The induction had not displayed the \(k_{N+1}\) leading direction or \(J_N(0)e_1\ne0\) | Added both expansions and cited them explicitly at the induction step |
| A transfer norm inequality used an upper bound with exponent \(-1\) | The inequality direction was invalid for column four | Split \(j\le3\) and \(j=4\), obtaining \(31{,}250{,}000<4\cdot10^8\) |
| The maximum-modulus step omitted holomorphy of the quotient | Formal divisibility only supplied a local removable germ | Proved holomorphy on \(|x|\le1/4\), identified the only possible pole, and removed it with the \(2n\)-valuation |
| BirkhoffPoincaré was used as a black box for three columns | It hid the exceptional hyperplane, dominant functional, decay, and denominator nonvanishing | Replaced it with an explicit backward stable-graph contraction, transverse scalar recurrence, and projective convergence estimate |
| The stable-graph statement and final projective iteration had mismatched starting quantifiers | The displayed iterations did not literally follow from the stated index ranges | Made \(\tau\) precede the construction and enlarged/redefined \(m_0,\Lambda,L_m\) before the uniform \(q_1\)-iteration |
| Irreducibility and polynomial GCD calls were used for eigenvector nonvanishing | These were unnecessary native CAS decisions | Used the coefficient-dominance homotopy, \(Q_R(1)<0\), and four positive eigenvector rewrites at the unique exterior root |
| Division in columns \(2,3,4\) preceded an eventual-nonzero proof | The displayed quotients were not yet justified | Derived the all-column asymptotic first, proved every \(w_j>0\), then established eventual \(Q_{N,j}\ne0\) before division |
| The checker could succeed while Wolfram/Sage were absent | A stored transcript was being treated as proof evidence | Made standard-library rational-polynomial verifiers mandatory; Wolfram and Sage are now optional independent cross-checks |
| Metadata called \(Q/P\) the requested orientation | The official challenge asks for \(P/Q\) | Corrected every release document to state \(P/Q\to\sqrt{10005}/\pi\) as the official orientation |
## Mandatory replay
Run:
```sh
./run_checks.sh
```
The mandatory path executes:
1. `p28_rank_ode_bound_verifier.py`
2. `p28_convergence_constants.py`
3. `p28_standalone_equations.py`
4. `p28_dominant_product_algebra.py`
The third verifier checks:
- four cleared tail factorizations;
- lowest and generic tail coefficients;
- horizontal reconstruction;
- the terminating-operator closure;
- all sixteen differential-gauge entries;
- the authoritative matrix-to-scalar contraction;
- the base polynomial and four base-row components;
- the base terminating equation and four base adjoint residuals;
- constant, generic, and top terminating induction;
- ascension and the \({}_3F_2\) Euler equation.
The fourth verifier checks:
- \(\mathcal B_m=\mathcal S+O(m^{-1})\) entry by entry;
- \(\det(tI-\mathcal S)=Q_R(t)/R^2\);
- the exact unit-circle coefficient inequality and exterior-root sign;
- \(w(t)(tI-\mathcal S)=(Q_R(t),0,0,0)\);
- all four positive exterior-root coordinate rewrites.
Both use `fractions.Fraction` and explicit coefficient dictionaries. Neither
uses polynomial division, factorization, a simplifier, Gröbner bases,
irreducibility, GCD, a root finder, a special-function package, sampling, or
a stored transcript.
## Forbidden-shortcut search
The mandatory runner rejects these constructs in the proof path:
- `quo_rem`
- `is_irreducible`
- polynomial `gcd`
- Birkhoff/Poincaré delegation
- “standard ascension”
- ODE-normalization uniqueness
No occurrence of `native_decide`, `axiom`, `sorry`, or `admit` was found.
## Independent hostile replays
Three independent reviews targeted:
- logical validity, indexing, vacuity, and denominator domains;
- Ore/special-function and matrix-to-scalar algebra;
- convergence, stable-product asymptotics, and all-column division.
The defects in the table above were discovered during those loops. The final
Ore, asymptotic, and logic/vacuity replays returned PASS after the repairs.
Release engineering then repeats the mandatory checks in a clean extraction,
rebuilds the PDF, and performs page-by-page visual inspection.

View file

@ -0,0 +1,203 @@
# Adversarial review of the Problem 2.8 submission, against the challenge's own rules
Reviewer: independent replay, 2026-07-31. Target: commit `492c8ab`
(tag `p28-submission-2026-08-01`). Environment: CachyOS, python3 3.14,
SageMath 10.9, TeX Live 2026.
## The standard actually being applied
The challenge states no prize, eligibility, or submission rules. Its operative
evidentiary standard is in §4, *Discussion — Proof in the Age of AI*:
> For the purpose of this challenge, we consider a derivation carried out using
> symbolic libraries within established computer algebra systems as sufficient
> evidence of a valid solution.
and §1 names the central risk the evaluators care about:
> if a problem or its solution appears in the AI training data, success may
> reflect retrieval rather than reasoning.
This review is scored against those two clauses, not against a generic notion of
rigour.
## Verdict
**The submission satisfies the challenge's evidentiary standard, and exceeds
it.** One defect is nonetheless serious *as a submission*, because it fires on
the evaluator's first command.
### Resolution status (updated after the fixes)
| Finding | Status |
|---|---|
| F1 `run_checks.sh` exits 1 | **FIXED** — optional checks now guarded by `run_optional`, failures counted and reported non-fatally, script ends `exit 0` |
| F2 false assertion at line 107 | **FIXED** — component 1 corrected from `216 + 108x + 46x` to `216 + 216x + 46x` |
| F3 Sage 10.9 parent coercion | **FIXED** — substitution key coerced into the polynomial parent |
| F4 novel-vs-imported not stated | **ADDRESSED**`HOW_THE_SOLUTION_WAS_FOUND.md` states the route, the single imported theorem, and the exclusions |
| F5F7 | pass, unchanged |
Post-fix state, verified by replay: `run_checks.sh` **exits 0** with **48**
mandatory `PASS` lines (up from 43, since the previously-failing certificate now
runs to completion) and **0** optional failures. Falsifiability re-confirmed
after the fixes: mutating `64R-44 → 64R-43` and `236337691420383 → …384` both
yield exit 1.
The findings below are retained as written, as the record of what was found.
## Findings
### F1 — CRITICAL (process, not mathematics): `run_checks.sh` exits 1
The submission's single advertised replay command fails on any machine that has
SageMath installed.
```
$ bash run_checks.sh
... 43 PASS lines ...
TypeError: keys do not match self's parent
$ echo $?
1
```
Two independent causes compound:
1. **`set -euo pipefail` (line 2) makes the "optional" cross-checks fatal.**
Lines 4449 run three Sage certificates inside `if command -v sage`. Where
Sage is absent the script prints *"OPTIONAL: SageMath is not installed"* and
exits 0. Where Sage is present, any Sage failure aborts everything. The
script therefore **passes on machines without the optional tooling and fails
on machines with it** — precisely inverted. `ADVERSARIAL_AUDIT.md` claims
"Wolfram and Sage are now optional independent cross-checks"; the exit code
does not honour that claim.
2. **`p28_lattice_hypotheses_certificate.sage` fails**, for two reasons of very
different severity — see F2 and F3.
This matters disproportionately because the challenge is explicitly CAS-oriented.
An evaluator applying the §4 standard is *more* likely than average to have Sage
installed, and is therefore *more* likely to see the failure.
The other two Sage certificates (`p28_kernel_contiguity_certificate.sage`,
`all_four_columns_certificate.sage`) both exit 0.
### F2 — MEDIUM (real bug, non-load-bearing): a false assertion
`p28_lattice_hypotheses_certificate.sage` line 107 asserts
```
72*b3 + 108*x*b2 + 46*x*b1 + 5*x*b0
== vector(K, [72+108x+46x+5x, 216+108x+46x, 216+108x, 72])
```
Component 1 is **wrong**. Since `b2 = (1,2,1,0)`, the `108*x*b2` term contributes
`216x`, not `108x`:
| component | true value | as written | equal |
|---|---|---|---|
| 0 | `72 + 159x` | `72 + 159x` | yes |
| 1 | `216 + 262x` | `216 + 154x` | **no** |
| 2 | `216 + 108x` | `216 + 108x` | yes |
| 3 | `72` | `72` | yes |
**The mathematics is unaffected.** This is a redundant intermediate display
check. The load-bearing identity immediately below it,
```
Bcomb == 4*x*Crow, Crow = 18*b3/x + (5/4)b0 + (23/2)b1 + 27*b2
```
is **true**, and `Crow` reproduces the manuscript's compact denominator row
`C(x) = (18/x + 159/4, 54/x + 131/2, 54/x + 27, 18/x)` exactly. Verified
independently in sympy. So the defect is a transcription slip in a check that
proves nothing the next line does not prove correctly.
### F3 — MEDIUM (environment): Sage 10.9 parent-coercion failure masks F2
Line 43, `denominator.subs({x: 0})`, raises
`TypeError: keys do not match self's parent`. `K` is a fraction field, so
`.numerator()` / `.denominator()` return elements of the underlying polynomial
ring while `x` belongs to `K`. Sage 10.9 no longer coerces the substitution key.
Coercing the key (`denominator.parent()(x)`) clears the TypeError — and the
certificate then runs on to fail at F2. The version-drift bug was **hiding a
real one**, which is the more instructive fact: the certificate has evidently
not been executed to completion on current Sage.
### F4 — MEDIUM (framing): the contamination question is not addressed
§1 names retrieval-vs-reasoning as the central evaluation risk. Problem 2.8's
target is `sqrt(10005)/pi` — the Chudnovsky constant — and the submission
**imports the Chudnovsky identity** as its one external theorem.
The import itself is handled well: §"The CM function and its exact value" names
it as a single external theorem, cites Milla Theorem 0.1 with the modular/CM
proof located at Theorem 9.7 and Chapter 10, and displays the elementary
coefficient bridge. That is ordinary mathematical practice and is not a defect.
But the submission nowhere states plainly **what is novel versus what is
imported**. Given that the evaluators flagged contamination explicitly, a
reviewer could mistake the boxed `Phi(x_0) = sqrt(10005)/pi` for the result
rather than for a cited input. One short paragraph would remove the ambiguity:
the recurrence-to-`Phi` reduction is the new content; the CM evaluation of
`Phi(x_0)` is classical and cited.
### F5 — PASS: the submission proves the officially stated claim
Independently verified against the challenge text by exact rational arithmetic
(`p28_official_object_certificate.py`, 18 assertions, three negative controls):
- `R = 151931373056001`, `u = 2n+3`, `w = u(3u-2)(3u+2)` — match
- all 11 polynomial entries `a1..a4, b1..b3, c1..c4` at `r = R` — symbolically identical
- full 4x4 `M_N(x_0)` vs official `M(N)` — all 16 entries identical at `N = 0,1,2,3,5,8,17,40`
- product convention `M(0)M(1)...M(N-1)`, `M_0 = I` — match
- both integer seed rows, generated by `A_0 = AC - (5/4)H_0` and `A_1 = SC` — exact match
- deformed coefficient `(14R-567)/9 = 236337691420383` — the official value
- orientation: the challenge asks `P_{N,j}/Q_{N,j} -> sqrt(10005)/pi`; the manuscript proves that orientation, for all four columns
The proof is about the official object, not a surrogate.
### F6 — PASS (exceeds standard): evidence is stronger than §4 requires
§4 accepts a CAS derivation. The submission instead makes four standard-library,
dependency-free verifiers mandatory and demotes Wolfram/Sage to optional
cross-checks. All four exit 0 on plain `python3`, and the checks are falsifiable:
mutating `S[0][0]` from `64R-44` to `64R-43` yields exit 1 with an
`AssertionError` at `p28_dominant_product_algebra.py:268`.
Ironically, F1 is a direct consequence of this strength — the effort went into
the dependency-free path, and the demoted Sage path was left unexercised.
### F7 — PASS: the manuscript builds clean
`pdflatex` x3: 0 errors, 0 warnings on the final pass, 17 pages, all
cross-references resolved, zero `??` in the output. Note that pass 1 legitimately
reports ~58 undefined references; anyone grepping a combined `latexmk` log will
see a false alarm.
Cosmetic only (`chktex`/`lacheck`): ~43 missing non-breaking spaces
(`Theorem~3`), 5 wrong-length dashes (`Birkhoff--Poincare`), 3 spaces before
`\ref`, one whitespace-before-punctuation at line 316.
## Recommended actions, in priority order
1. **Fix F1.** Either drop `set -e` around the optional block, or guard each
optional invocation (`sage ... || echo "OPTIONAL: cross-check failed"`), so
that optional means optional. Highest value per unit effort in the whole list.
2. **Fix F2.** Correct `216 + 108*x + 46*x` to `216 + 216*x + 46*x`, or delete
the redundant assertion; the next line already proves the needed identity.
3. **Fix F3.** Coerce the substitution key into the polynomial parent so the
certificate runs on Sage 10.9.
4. **Add the F4 paragraph** separating novel content from cited input.
5. Optionally apply the F7 typography fixes.
None of 13 touches the mathematics. All are edits to certificate plumbing.
## What this review did not do
It did not audit the logical chaining of the manuscript prose — whether
`prop@257 -> lemma@451 -> prop@494 -> prop@539 -> cor@713 -> lemma@930 ->
theorem@1157` discharges each hypothesis without circularity. That remains the
one substantive unverified area. A prior audit (`reviewed PR 20 against the
KKT-F.md`) validated an earlier version of that chain and returned PASS, but 764
lines of `solution.tex` changed afterwards.

View file

@ -0,0 +1,287 @@
# How the solution was found
## Why this document exists
The finished proof takes an indirect route. Read cold, several of its moves look
arbitrary: why deform a fixed integer into a free variable, why re-express the
initial conditions in a Pascal basis, why there is machine-checked work on
leading zeros in positional notation sitting underneath a modular-forms problem.
Each was forced by something. This document records the path so the choices can
be read as reasoning rather than guessed at.
## Why this problem, and why the machinery is out of proportion to it
One structural thing should be said up front, because it explains most of what
otherwise looks excessive.
Problem 2.8 was not approached as an isolated puzzle. It was used as a **test
case for an existing pipeline** — a body of tooling for encoding mathematical
objects, verifying identities in exact arithmetic, and recording excluded routes.
A well-posed external problem with an objectively checkable answer is a good
instrument for finding defects in that kind of tooling, because it cannot be
argued with: either the certificates reproduce the official data or they do not.
That is why the infrastructure is disproportionate to a single limit. A
Coq-and-Lean treatment of leading zeros in positional notation is absurd
overhead for one π formula, and entirely reasonable for a codec that other work
depends on. The same applies to the mutation testing, the per-claim authority
tags, and the registry of proved-impossible routes.
This motivation is also congruent with the challenge's own stated purpose: §1
presents these problems as benchmark instruments with structured verification,
precisely because "candidate formulas for constants can often be tested to
thousands of digits, so numerical validation is immediate and objective." Used
that way here, in both directions.
## The starting position
The challenge supplies, for Problem 2.8:
- a `4×4` matrix `M(n)` whose entries are degree-5 polynomials in `u = 2n+3`
over a constant `R = 151931373056001`;
- one entry containing the bare integer `236337691420383`, unexplained;
- two initial rows of eight integers of up to 77 bits;
- the conjecture `lim P_{N,j}/Q_{N,j} = √10005/π` for all four columns.
`√10005/π` identifies the target immediately — it is the Chudnovsky constant.
What is not given is any link between *this recurrence* and that formula. The
recurrence came from machine search; nothing in its presentation records where
it came from.
## Step 1 — treat the given data as generated, not as given
The eight seed integers are not round, not obviously related, and too large to
read. But they were *produced by something*. A search process emitted them, so a
generator exists, and a generator is usually much smaller than its output.
That reframes the first task: not "prove a limit" but "recover the generator."
The rest follows from taking that seriously.
## Step 2 — recovering a generator requires a codec, and radix notation is not one
To hunt for structure by re-encoding data, encode and decode must be inverse.
That sounds automatic and is not.
Ordinary positional notation is **not injective on digit strings**. Two
collisions, machine-checked in Coq and Lean
(`coq/MathPunchFiniteStateAudit/Radix.v`, `MathPunchFiniteState/Radix.lean`):
```coq
eval_digits 8 [0; 1] = eval_digits 8 [1] (* both = 1: leading zero *)
eval_digits 8 [] = eval_digits 8 [0] (* both = 0: empty word *)
```
In base 8 over lengths 03, 585 distinct digit strings collapse onto 512 values.
This is invisible in ordinary mathematics, where numerals exist only to *denote
numbers* — `[0,1]` and `[1]` denote the same number and there is nothing more to
say. It is fatal when digit strings encode objects, because the decode is then
not a function.
Two repairs, both **bijections onto correctly stated codomains**:
```
framing: digit strings ⟷ ⋃ₙ {n} × [0, bⁿ)
framed_value b ds = (length ds, eval_digits b ds)
DFA: canonical numerals ⟷ ℕ⁺
three states start / body / dead; rejects leading zeros,
out-of-range digits, and the empty word
```
Bijectivity rather than injectivity is what is needed: injectivity says
encodings do not collide, bijectivity says **decoding is total**. A codec is
used in the decode direction.
**No claim is made that any base is better than any other.** The collision above
is not a defect of base 8; it holds in every base `b ≥ 2`, including 2 and 10.
`[0,1]` and `[1]` collide in decimal exactly as they do in octal. Base 8 appears
here only because it is the worked example inherited from the surrounding code,
and both repairs — framing and the DFA — are stated for a general base `b` and
are equally valid at any of them. Nothing in this work depends on, or argues
for, a particular radix.
That is why numeration-system work sits under a modular-forms problem. It is the
correctness obligation for Step 3, not a digression.
## Step 3 — the basis came from the matrix, not from a search
Re-encoding is only evidence if the basis is fixed *before* looking. Otherwise
enough freedom makes any data look structured.
The basis was not searched for. The second row of the challenge's own matrix is
```
(u³, 3u², 3u, 1)
```
a signed Pascal row. That is a property of the given data, visible before any
fitting. So the candidate basis was the rows of the lower-triangular Pascal
matrix:
```
b₀ = (1,0,0,0) b₁ = (1,1,0,0) b₂ = (1,2,1,0) b₃ = (1,3,3,1)
```
One candidate, taken from the problem statement, tried once.
## Step 4 — what came out
In that basis, with `C(x) = (18/x)b₃ + (5/4)b₀ + (23/2)b₁ + 27b₂`, the two seed
rows are **exactly**
```
A₁ = S·C
A₀ = A·C (5/4)·H₀, H₀ = A·b₀ + B·b₁
```
with
```
A = 13591409 B = 545140134 S = 426880
```
These were not solved for. They are the Chudnovsky constants, already fixed by a
classical formula in an unrelated context. They had to come out exactly right or
the encoding fails, which is what makes this evidence rather than coincidence.
The unexplained integer resolved at the same time:
`236337691420383 = (14R 567)/9`.
Verified exactly in `p28_official_object_certificate.py`.
## Step 5 — from constants to a single unknown
The recovered constants keep factoring. With `s₂(τ₁₆₃) = 77265280/90856689`, the
weight-zero CM invariant:
```
A = den(s₂) num(s₂)
B = 6·den(s₂)
A/B = (1 s₂)/6
```
So the arithmetic content of the problem is one CM value. The target became
"connect this recurrence to a known modular quantity" instead of "prove a limit
about an opaque recurrence" — a better-posed question.
## Step 6 — the encoding proves nothing, and the proof was built separately
A decode is a lead. It says where to look; it establishes nothing. The finished
argument does not cite the Pascal form as evidence and does not infer equality
from numerical agreement. It proceeds through the deformation, the Ore
factorisations, the terminating `₄F₃`, the discrete-valuation induction, and an
explicit stable-graph contraction, importing exactly one external theorem: the
classical Chudnovsky identity, cited to Milla's derivation.
The deformation `r = 1/x` is the other move that looks strange cold. Its purpose
is to make analytic methods available: replacing the fixed constant `R` by a free
variable gives a one-parameter family to which Cauchy's theorem applies, and
`x₀ = 1/R` specialises it back to the official object. Without the deformation
there is no contour to integrate around.
## What did not work
The route is indirect because the direct ones were closed, each with a witness
rather than an impression:
- **The t-line intertwiner route** was proved impossible — `sing(L) = {0,∞}`,
and three disjoint fibres over `0,1,∞` cannot inject into two points. Recorded
with its ramification argument and scoped to the whole gauge-equivalence class.
- **The `L_U` variant** was excluded by monodromy: no regular-unipotent `3×3`
block exists anywhere in the relevant family.
- **The `Sym²V` construction** was set aside as disproportionate. It is a
research-scale object, and the Apéry-limit evaluation does not need an explicit
module isomorphism.
Recording exclusions as first-class results, with witnesses, is what stopped the
search from cycling back through settled ground.
## What the exercise found
Since the problem was used as an instrument, the defects it exposed are part of
the result. They fall into three groups.
**Defects in the argument, found by adversarial replay and repaired before
release** (full table in `ADVERSARIAL_AUDIT.md`). The substantive ones:
- an ODE-normalisation *uniqueness* claim that was simply false — the exponent
`2n` supplies an additional analytic branch, so uniqueness was replaced by
base/generic/top coefficient induction;
- a transfer-norm inequality applied with an invalid exponent direction for the
fourth column;
- a maximum-modulus step that assumed holomorphy of a quotient where formal
divisibility only gave a local removable germ;
- BirkhoffPoincaré used as a black box for three columns, hiding the
exceptional hyperplane, the dominant functional, and denominator
non-vanishing — replaced by an explicit stable-graph contraction;
- a scalar one-step operator not yet tied to the challenge matrix, which could
have described a surrogate;
- the orientation recorded as `Q/P` when the challenge asks for `P/Q`.
**Defects in the verification machinery itself** — the ones that matter most for
a tool being validated, because they are the failures that let bad results pass:
- checks that could succeed while the CAS was absent, treating a stored
transcript as evidence. Fixed by making dependency-free verifiers mandatory;
- Ore divisions using `quo_rem`, trusting a zero remainder instead of exhibiting
a cleared factorisation;
- irreducibility and GCD calls standing in for arguments.
**Defects still open at the time of writing**, found during independent replay
(detailed in `ADVERSARIAL_REVIEW_AGAINST_CHALLENGE_RULES.md`):
- `run_checks.sh` exits 1 on any machine *with* SageMath installed, because
`set -euo pipefail` makes the declared-optional cross-checks fatal. The script
therefore passes without the optional tooling and fails with it;
- a false assertion in `p28_lattice_hypotheses_certificate.sage` — component 1
reads `216 + 154x` where the true value is `216 + 262x`. Non-load-bearing: the
identity below it is correct;
- a Sage 10.9 parent-coercion error that was *masking* the previous item;
- the radix DFA exists only in `Radix.lean` while that repository regenerates
Lean from `coq/*.v`, so a regeneration would silently erase it.
The last group is the honest state of things rather than a finished story. A
tool that had been validated would not still be producing these; the point of
running the instrument is that it is still finding them.
## Limits of the method
**The encoding is not compression.** Measured:
| | bits |
|---|---|
| raw seed data (8 integers) | 588 |
| encoder payload (`A, B, S, R` + 9 small Pascal coordinates) | 166 |
| ratio | 3.54× |
3.54× is unremarkable, and the basis had to be known in advance. Any claim that
this compresses data should be rejected. The same conclusion was reached
elsewhere in this programme: characteristic-polynomial encoding of matrices adds
overhead against an entropy-coded baseline.
The value is not the size of the encoding but *which* basis makes the
coordinates meaningful, which is a statement about where the data came from.
**Relation to standard practice.** Recovering closed forms from numerical data
is established: integer-relation algorithms (PSLQ, LLL), the Inverse Symbolic
Calculator, and experimental mathematics generally — PSLQ is used directly here
to identify `s₂` across Heegner discriminants. The regular structure of valid
numerals is likewise classical: canonical numeration systems, base-`k`
recognisable sets, Cobham's theorem. What this work does is apply those to
structured integer arrays rather than single constants, and keep the result in
the proof as a provenance record rather than discarding it after discovery.
## The path in one view
```
opaque official integers
→ assume generated; hunt the generator
→ build a bijective codec (radix framing / DFA canonicalisation)
→ basis taken from the matrix's own Pascal row
→ decode yields the Chudnovsky constants A, B, S
→ constants factor through the CM invariant s₂(τ₁₆₃)
→ problem reduces to one modular quantity
→ prove that reduction independently; import Chudnovsky as a cited theorem
```

View file

@ -0,0 +1,124 @@
# Notation, invented terminology, and borrowed words
## Why this document exists
This work crosses several fields, and its vocabulary was assembled accordingly.
Some names are invented; others are borrowed from unrelated disciplines because
they were short and evocative, and then given a purely mathematical meaning.
That borrowing creates a specific hazard. A reader who knows the source field
may read a term as a claim about that field.
**Scope of the disclaimer, stated precisely.** Nothing in *this submission*
(Ramanujan Challenge Problem 2.8) makes any claim about biology, genetics, or
any physical or biochemical system. Every object in it is defined entirely by
its equations, and those equations are the only content.
Elsewhere in the wider programme the situation is not uniform, and it would be
misleading to claim otherwise. At least one artefact — a Lean probe on expanded
genetic alphabets — deliberately models alphabet sizes drawn from synthetic
biology (4, 8, 12 letters) and proves an optimality statement about them. That
is a mathematical result about alphabet size, not an empirical claim about
molecules, but it is *not* merely a borrowed word either. **The author should
confirm the intended reading of any such artefact before it is circulated.**
For the borrowed vocabulary in Part 2, the rule holds: read the definition, not
the word.
---
## Part 1 — Terms used in this submission
These are grounded in `solution.tex` and the certificate scripts, and are the
ones an evaluator of Problem 2.8 will actually meet.
| Term | Meaning here | Ordinary meaning it may collide with |
|---|---|---|
| **seed**, **seed row** | The two official integer initial-condition rows `A_0`, `A_1` of the recurrence. Nothing grows; "seed" only marks where the iteration starts. | Botany; also "seed" in cryptography/RNG, which is closer but still not this. |
| **jet** | Truncated local expansion data of a function at a point — the standard differential-geometry sense (an equivalence class of functions agreeing to finite order). | Aviation; fluid jets; the physics "jet" of particles. None apply. |
| **carrier** | The vector space or module on which an operator or representation acts — the object that *carries* the structure. Standard representation-theory usage. | **Genetics: a carrier of an allele.** Not intended, not implied. |
| **mutation**, **mutant** | Software *mutation testing*: deliberately corrupting a constant to confirm a passing check is capable of failing. E.g. changing `64R-44` to `64R-43` must produce an `AssertionError`. | **Genetic mutation.** Entirely unrelated. The "mutant" is a modified copy of a Python file. |
| **deformation**, **deformed family** | Replacing the constant `R` by a free variable `r = 1/x`, giving a one-parameter analytic family that specialises to the official matrix at `x_0 = 1/R`. Standard deformation-theory usage. | Materials science. |
| **compact form** | A short generating expression (Pascal rows `b_0..b_3`, the row `C(x)`, constants `A, B, S`) that reproduces the large official integer data exactly. A re-encoding, not an approximation. | "Compact" in topology — unrelated here. |
| **certificate** | An executable script whose assertions, if they all pass, witness a stated mathematical fact. | Cryptographic certificates; academic certificates. |
| **red case**, **negative control** | A deliberately false input included to prove the check can fail. Borrowed from experimental science, and used in the same spirit. | — |
| **authority tag** | A per-claim label recording *how* a statement is known: `EXACT` (integer/rational arithmetic), `NUMERICAL WITNESS` (high-precision identification, not proof), `LITERATURE` (cited, not re-proved). | — |
### On `EXACT` versus `NUMERICAL WITNESS`
This distinction is load-bearing and is not merely stylistic. `EXACT` means the
statement is closed under exact arithmetic with no floating point anywhere.
`NUMERICAL WITNESS` means a quantity was *identified* to some number of digits —
strong evidence, **not** a proof. The submission's main claim rests only on
`EXACT` and `LITERATURE` items; numerical enclosures appear as corroboration and
are never used as premises.
---
## Part 2 — Borrowed words from biology, used in the wider programme
These do **not** appear in the Problem 2.8 submission, but they appear in
adjacent repositories that an evaluator may encounter. They are the terms most
likely to be misread as biological claims.
> **Reconstructed from working notes — the author should confirm each definition
> before this document is circulated.**
| Term | Meaning in this work | Source field | Explicitly NOT a claim about |
|---|---|---|---|
| **hachimoji** | A base-8 encoding/decoding scheme (a codec) used to render algebraic invariants as short strings. The name was taken purely because the source system has eight symbols. | Benner et al.'s *hachimoji DNA*, a synthetic 8-letter genetic alphabet (Japanese 八文字, "eight letters"). | DNA, nucleotides, synthetic biology, base pairing, or any biochemical system. It is an integer-encoding convention and nothing else. |
| **scar** (as in `SCAR-013`) | A registry entry recording a route that has been *proved impossible*, together with its witness and a redirect to a live route. A permanent mark left by a closed-off attempt. | **CRISPR / molecular cloning:** a "scar" is residual sequence left after an editing or ligation step. | Gene editing, CRISPR, recombination, or any laboratory procedure. |
| **scar-map** | A tabulated collection of such exclusion records (e.g. the `Δ₇` scar-map). | as above | as above |
| **strand**, **braid** | Strands of a mathematical *braid group* `B_n` — topological curves in a cylinder, and their linear representations (Burau, LawrenceKrammerBigelow). | DNA strands, double helix. | DNA, chromosomes, or any molecular structure. The braid group is a purely topological/algebraic object. |
| **chirality**, **chiral** | Handedness — the orientation or sign convention of a basis or lookup table. | Chemistry (stereochemistry), particle physics. | Molecular handedness or any chemical claim. |
| **codebook** | An information-theoretic dictionary mapping objects to short canonical labels. | Coding theory (correct source); also espionage. | — |
### On base 8 specifically
The radix work in this programme uses base 8 in all its worked examples, which
could easily be misread as a claim that base 8 is in some way preferable. It is
not, and no such claim is made anywhere.
The property being established — that positional evaluation is not injective on
digit strings, and that framing or DFA canonicalisation repairs it — holds for
**every** base `b ≥ 2`. `[0,1]` and `[1]` collide in decimal and in binary
exactly as they do in octal. Both repairs are stated for a general `b`. Base 8
appears only as the example inherited from the surrounding code, for the same
reason the codec is called *hachimoji*: eight symbols, chosen once, of no
mathematical significance.
Nothing in this work depends on, benefits from, or argues for a particular
radix.
### The general rule
Where a borrowed word could be read as a claim about a natural system, it is
being used **metaphorically for structure only**. The mathematics is defined by
its equations; the name is a label chosen for brevity, and carries none of the
source field's content, mechanisms, or empirical commitments.
---
## Part 3 — Why the vocabulary is like this, stated plainly
The programme spans modular forms, hypergeometric series, braid representations,
formal verification, and computational infrastructure. Working across that range
produces a lot of objects that need names faster than the literature supplies
them. Borrowing a short, memorable word from an unrelated field is efficient for
a solo author and costly for a reader — the cost only becomes visible when the
work is read by someone fluent in the source field.
This document is the correction. It is not an apology for the naming; it is a
key, so that no reader has to guess whether a biological word implies a
biological claim. It does not.
## Part 4 — Reading rule for evaluators
1. Every mathematical object is defined by displayed equations. If a name and an
equation disagree, the equation governs.
2. No statement in this work is a claim about genetics, molecular biology,
chemistry, or any physical system.
3. Where a term is borrowed, Part 1 or Part 2 gives the intended meaning and the
collision it may cause.
4. The distinction between `EXACT`, `NUMERICAL WITNESS`, and `LITERATURE` is
substantive; see Part 1.

View file

@ -10,17 +10,28 @@ This package proves, for each of the four official columns,
=\frac{\pi}{\sqrt{10005}}.
\]
The second display is the orientation requested in Problem 2.8.
The first display is the orientation requested in Problem 2.8; the second
is its reciprocal consequence.
## Contents
- `solution.pdf` — the complete proof.
- `solution.tex` — its LaTeX source.
- `certificates/p28_full_closure_certificate.wl` — the primary,
self-contained exact symbolic certificate. It proves the authoritative
differential gauge, both hypergeometric contiguity identities, the
terminating denominator formula, CM-seed annihilation, and the singular
lattice step. No numerical sampling is used.
- `certificates/p28_standalone_equations.py` — mandatory, dependency-free
expansion of the four cleared Ore identities, tail coefficient equations,
terminating base/generic/top identities, ascension, and the
hypergeometric differential equation. It uses rational coefficient
dictionaries only: no division algorithm, simplifier, factorizer, special
function library, root finder, or sample values.
- `certificates/p28_dominant_product_algebra.py` — mandatory,
dependency-free verification of the balanced limit, characteristic
polynomial, root-separation inequalities, left-eigenvector identity, and
four positive-coordinate rewrites.
- `certificates/STANDALONE_EQUATION_CERTIFICATES.md` — the same Ore and
terminating identities in a human-readable, denominator-cleared equation
sheet.
- `certificates/p28_full_closure_certificate.wl` — optional independent
symbolic cross-check of the differential gauge and closure.
- `certificates/p28_full_closure_certificate.PASS.txt` — transcript of a
stateless Wolfram Language run (22 exact checks plus the consolidated
conclusion).
@ -33,6 +44,8 @@ The second display is the orientation requested in Problem 2.8.
SageMath cross-checks.
- `certificates/p28_parametric_pade_probe.py` — finite exact regression,
included as a diagnostic only and not used as proof.
- `ADVERSARIAL_AUDIT.md` — defect ledger, repairs, replay evidence, and
the exact trust boundary.
## Reproduction
@ -42,19 +55,20 @@ From this directory, run:
./run_checks.sh
```
The primary symbolic check can also be run directly:
The mandatory proof path is Python-standard-library only. The Wolfram
cross-check can also be run directly:
```sh
wolframscript -file certificates/p28_full_closure_certificate.wl
```
It should print 22 exact-check lines beginning with `PASS:`, followed by the
consolidated certificate conclusion. The Python checks use only the standard
library:
The Python checks use only the standard library:
```sh
python3 certificates/p28_rank_ode_bound_verifier.py
python3 certificates/p28_convergence_constants.py
python3 certificates/p28_standalone_equations.py
python3 certificates/p28_dominant_product_algebra.py
```
For the independent SageMath checks:
@ -70,3 +84,13 @@ To rebuild the manuscript:
```sh
latexmk -pdf solution.tex
```
## Trust boundary
No numerical enclosure is used to infer equality. The recurrence proof is
expanded into explicit equations and an elementary stable-graph contraction.
The sole imported mathematical theorem is the classical Chudnovsky formula,
identified precisely in `solution.tex` with a reference to a complete
modular/CM derivation. Thus the package is self-contained relative to that
published theorem; it does not claim to reconstruct the entire theory of the
Chudnovsky formula from first principles.

View file

@ -0,0 +1,33 @@
Ramanujan Machine Challenge — Problem 2.8
Hardened branch state (supersedes the 2026-07-31 frozen submission on THIS branch)
NOT the shipped submission. The artifact actually submitted is
git.researchstack.info/allaun/ramanujan-challenge-completed-submissions
commit 1cbb598265f8f3015a4399655097a597fabaf8d1, packages/problem_2_8
assembled from MathPunch-FiniteState 8908fa14a2fb88669aa1a3a5cf39ada2ba10ae60.
That package descends from this same branch and carries a later manuscript
(positive-cone contraction, narrowed import boundary); it is the authority.
This file records the parallel fix line kept here for provenance.
Git commit: 477e8ddb770795345efa15715ccc725044817a11
Built: 2026-07-31T15:40:36Z
Toolchain: pdfTeX 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux)
python3 3.14.6, SageMath version 10.9, Release Date: 2026-05-04
Replay: bash run_checks.sh -> exit 0, 48 mandatory PASS, 0 optional failures
Claim: lim_{N->inf} P_{N,j}/Q_{N,j} = sqrt(10005)/pi for j = 1,2,3,4
SHA-256:
a1c11c5f62aad9e1c9eacae54c5f3d8ea4f98de67c6b46cee1354d382df4a60a solution.tex
61af525c0c976583cf91854570872dd00eb048cbf8d78d9e67436a0f42edd8fc solution.pdf
08c2f46cc7e5afefbd73b9ea1edab713594ca834d09303d09282bdbae1088fc9 ramanujan_challenge_problem_2_8.zip
06b5dd2bcb5154a571ee804db07c8fd9f01b23a9994c95d6140e175bb81687e9 run_checks.sh
507124828c056fea30ac87b6206147f14a7fa9fd401338c3f0010311c30f612f ADVERSARIAL_AUDIT.md
b8b358e2d382c6286f1d9c25f3a30c0e0a1207af3bae14a10fe7718ec00446d1 ADVERSARIAL_REVIEW_AGAINST_CHALLENGE_RULES.md
e076eee98b56e4f068e1b445a8737f32a155c3af39bc979cfebb272ae902bd02 HOW_THE_SOLUTION_WAS_FOUND.md
218b2cefe84da65eb242be3c131c577cc592b37984aa2253b757507754f7be51 NOTATION_AND_BORROWED_TERMINOLOGY.md
79182f297d367aced4c2a430dbd351cc05dca8237d42d27fce2babe4c3af37e1 certificates/p28_official_object_certificate.py
a5eccfbd427ae06590d636b908c26474c725b5a7ed26fbf154e495bcf4424b2b certificates/p28_rank_ode_bound_verifier.py
3190e9660e9108e7720f43d3ea888975b26e32a383eae5f6ce55075b843372db certificates/p28_convergence_constants.py
f5fb30219f5b576ee3d22e079f1182a86085c67739daa63f42be4ccb821cafc0 certificates/p28_standalone_equations.py
e24643a1ddf532bdce5fe562402236ba52fb71d231730c9aa3ae6e00aa6bda35 certificates/p28_dominant_product_algebra.py

View file

@ -0,0 +1,383 @@
# Standalone Equation Certificates for Problem 2.8
This sheet replaces every Ore-division or “the remainder simplifies” claim
in the proof. Each displayed assertion is an equality in a rational-function
field. Multiplying by the listed denominator produces a polynomial whose
coefficients are all zero.
The companion program `p28_standalone_equations.py` recreates these checks
with sparse dictionaries over `fractions.Fraction`. It implements addition,
multiplication, integer powers, and formal differentiation only. It does not
call a division algorithm, factorizer, simplifier, Gröbner basis, special
function library, root finder, or numerical sampler.
## 1. Input matrix
Let \(u\) and \(x\) be indeterminates, \(r=x^{-1}\), and
\(\omega=u(3u-2)(3u+2)\). Define
\[
\begin{aligned}
a_1={}&r(144u^5-288u^4+144u^3)
-99u^5+333u^4-229u^3-114u^2+40u+64,\\
a_2={}&r(432u^4-864u^3+432u^2)
-243u^4+909u^3-868u^2-80u+272,\\
a_3={}&r(432u^3-864u^2+432u)
-153u^3+648u^2-860u+360,\\
a_4={}&144r(u-1)^2,\\
b_1={}&-144ru^3+9u^4+63u^3+158u^2+168u+64,\\
b_2={}&216ru^2+36u^3-189u^2-316u-168,\\
b_3={}&108ru+54u^2-189u-158,\\
c_1={}&-288r^2u^3+
r(54u^4+378u^3+948u^2+1008u+384)\\
&+18u^5+45u^4-251u^3-1086u^2-1384u-576,\\
c_2={}&-432r^2u^2+
r(153u^4-657u^3+1292u^2+2064u+1072)\\
&-72u^4+702u^3-1069u^2-2508u-1512,\\
c_3={}&-216r^2u+
r(180u^3-891u^2+1450u+1116)\\
&-108u^3+864u^2-1385u-1422,\\
c_4={}&-4r^2+r(6u^2-33u+\tfrac{536}{9})-4u^2+32u-63.
\end{aligned}
\]
Then
\[
\mathcal M(u,x)=
\begin{pmatrix}
a_1/\omega&a_2/\omega&a_3/\omega&a_4/\omega\\
-u^3&-3u^2&-3u&-1\\
xb_1/144&-xb_2/72&-xb_3/36&x(-2r-(2u-7))/2\\
x^2c_1/288&x^2c_2/144&x^2c_3/72&x^2c_4/4
\end{pmatrix}.
\]
For the recurrence, \(u=2N+3\), so \(u\ge3\).
## 2. Four Ore identities without division
Put
\[
m=\frac{u-1}{2},\qquad
P_i(t)=\sum_{s=0}^{3}\mathcal M(u,x)_{i+1,s+1}t^s,
\]
\[
\mathcal TQ=(1-x)x\partial_xQ+(t+1)Q
\]
and
\[
L_+(t)=(1-x)t(t+u)^3+
x(t+m+1)(t+m+\tfrac76)(t+m+\tfrac32)(t+m+\tfrac{11}{6}).
\]
Define
\[
\begin{aligned}
\ell_0={}&(u-1)u(3u-2)(3u+2)x/144,\\
\ell_1={}&[-576+864u-432u^2+72u^3
+(580-872u+405u^2-36u^3)x]/72,\\
\ell_2={}&[432-432u+108u^2
+(-436+405u-54u^2)x]/36,\\
\ell_3={}&(-12+6u+11x-2ux)/2,\\
q_3={}&-36+(536-297u+54u^2)x
+(-567+288u-36u^2)x^2.
\end{aligned}
\]
The complete equation set is
\[
u(3u-2)(3u+2)x(\mathcal TP_0-P_1)
-144(u-1)^2L_+=0,
\]
\[
\mathcal TP_1-P_2+L_+=0,
\]
\[
2(\mathcal TP_2-P_3)-(-2+7x-2ux)L_+=0,
\]
\[
36(\mathcal TP_3+\ell_3P_3+\ell_2P_2+\ell_1P_1+\ell_0P_0)
-q_3L_+=0.
\]
These are the quotient-and-zero-remainder claims written as four direct
factorizations. No quotient or remainder operation is needed.
## 3. Lowest and generic tail coefficients
Set
\[
A(t)=\frac{144(u-1)^2(t+u)^3}{u(3u-2)(3u+2)},\qquad
B(t)=P_0(t)-\frac{A(t)}x,
\]
\[
\varrho=-\frac{(3u-2)(3u+2)}{144(u-1)^2u^2},
\]
\[
\chi_j=
\frac{(m+j)(m+\frac16+j)(m+\frac12+j)(m+\frac56+j)}
{m(m+\frac16)(m+\frac12)(m+\frac56)}
\left(\frac{2m(2m+1)}{(2m+j)(2m+j+1)}\right)^3,
\]
\[
\psi_j=
\frac{(m+j)(m+\frac16+j)(m+\frac12+j)(m+\frac56+j)}
{(2m+j)^3(j+1)}.
\]
The two identities are
\[
\varrho[-A(0)]-1=0
\]
and, for \(j\ge1\),
\[
\varrho\left[
-A(j)\chi_j+
\frac{(A(j-1)+B(j-1))\chi_{j-1}}{\psi_{j-1}}
\right]-1=0.
\]
For \(u=2N+3\ge3\), the integer-dependent denominator factors are nonzero.
Factors of \(x\) are cleared before coefficient comparison; no conclusion
is obtained by evaluating a rational expression at \(x=0\).
## 4. Terminating denominator induction
For \(n\ge1\), define
\[
\mathcal L_n(t)=t(t+2n-1)^3
-z(t+n)(t+n+\tfrac16)(t+n+\tfrac12)(t+n+\tfrac56)
=\sum_{j=0}^4c_jt^j
\]
and, for operator polynomials with coefficients on the left,
\[
\Theta Q=z\partial_zQ+tQ.
\]
The horizontal row is reconstructed by
\[
\pi_0=1,\qquad
\pi_3=\frac{c_4}{c_0}t,
\]
\[
\pi_2=\frac{c_3}{c_4}\pi_3-\Theta\pi_3,\qquad
\pi_1=\frac{c_2}{c_4}\pi_3-\Theta\pi_2.
\]
Its final equation is
\[
\Theta\pi_1+1-\frac{c_1}{c_4}\pi_3
+\frac{72}{n(2n+1)(6n+1)(6n+5)z}
\left[
t(t-2n)^3
-z(t-n)(t-n-\tfrac16)(t-n-\tfrac12)(t-n-\tfrac56)
\right]=0.
\]
Let
\[
\mathcal C_n(z)=
\begin{pmatrix}
0&1&0&0\\
0&0&1&0\\
0&0&0&1\\
-c_0/c_4&-c_1/c_4&-c_2/c_4&-c_3/c_4
\end{pmatrix}.
\]
The complete differential-gauge equation is
\[
\mathcal C_n[-z\mathcal M(2n+1,-z/(1-z))]
-\theta[-z\mathcal M(2n+1,-z/(1-z))]
-[-z\mathcal M(2n+1,-z/(1-z))]\mathcal C_{n+1}=0.
\]
The checker cross-multiplies all sixteen entries independently.
The exact matrix-to-scalar bridge is
\[
\sum_{r=0}^3\pi_r(t)
\left[-z\mathcal M(2n+1,-z/(1-z))\right]_{r+1,1}
-d_0(t)-zd_1(t)=0.
\]
The checker expands all five reconstruction/bridge equations before it
checks any hypergeometric coefficient identity. Thus \(d_0+zd_1\) is tied
to the displayed challenge matrix and is not a guessed surrogate.
Now define
\[
\nu_n=\frac{576n^2(2n+1)^2}{(6n+1)(6n+5)},
\]
\[
d_0(t)=
\frac{72(2n+1)^2(2n-t)^3}{n(6n+1)(6n+5)}
\]
and
\[
d_1(t)=-\frac{P(n,t)}{n(2n+1)(6n+1)(6n+5)},
\]
where
\[
\begin{aligned}
P(n,t)={}&-5n-76n^2+1404n^3+4360n^4+4320n^5+1440n^6\\
&+(5+127n-1760n^2-6536n^3-7632n^4-3024n^5)t\\
&+(-51+659n+3086n^2+4500n^3+2232n^4)t^2\\
&+(-72-432n-864n^2-576n^3)t^3.
\end{aligned}
\]
Let
\[
h_{n,k}=
\frac{(-n)_k(-n-\frac16)_k(-n-\frac12)_k(-n-\frac56)_k}
{(1-2n)_k^3k!},
\qquad0\le k\le n.
\]
The induction is exactly:
\[
d_0(0)-\nu_n=0,
\]
\[
d_0(k)+d_1(k-1)\frac{h_{n,k-1}}{h_{n,k}}
-\nu_n\frac{h_{n+1,k}}{h_{n,k}}=0
\qquad(1\le k\le n),
\]
\[
d_1(n)+
\nu_n\frac{(n+\frac76)(n+\frac32)(n+\frac{11}{6})}
{8(2n+1)^3}=0.
\]
Together with
\[
q_0(x)=18/x+159/4,\qquad Q_0(x)=xq_0(x),
\]
\[
p_1(z)=(1-z)Q_0(-z/(1-z))
=18(1-\tfrac{77}{24}z),\qquad
p_{n+1}=(d_0(\theta)+zd_1(\theta))p_n,
\]
\[
-zC(-z/(1-z))
=\left.(\pi_0(\theta)p_1,\pi_1(\theta)p_1,
\pi_2(\theta)p_1,\pi_3(\theta)p_1)\right|_{n=1},
\]
\[
\left[
\theta(\theta-2)^3
-z(\theta-1)(\theta-\tfrac76)
(\theta-\tfrac32)(\theta-\tfrac{11}{6})
\right]p_1=0,
\]
\[
\theta[-zC(-z/(1-z))]
+[-zC(-z/(1-z))]\mathcal C_1=0,
\]
and
\[
\deg((d_0(\theta)+zd_1(\theta))p_n)\le n+1,
\]
these equations prove every coefficient, including the top boundary. The
free \(z^{2n}\) branch of the fourth-order differential equation is never
invoked.
For \(n\ge1\) and \(1\le k\le n\), all integer- and
Pochhammer-dependent factors in the coefficient identities are nonzero.
The \(z^{-1}\) factors in the horizontal reconstruction are handled in
\(\mathbb Q(n,z)(t)\) and cross-multiplied first; the checked base functions
have removable limits at \(z=0\).
## 5. Short hypergeometric identities
For
\[
y(z)=\sum_{k\ge0}
\frac{(\frac16)_k(\frac12)_k(\frac56)_k}{(k!)^3}z^k,
\]
the coefficient ratio is
\[
\frac{[z^{k+1}]y}{[z^k]y}
=\frac{(k+\frac16)(k+\frac12)(k+\frac56)}{(k+1)^3}.
\]
Therefore
\[
y-1=\frac5{72}z\,
{}_4F_3\left(
\begin{matrix}1,\frac76,\frac32,\frac{11}{6}\\2,2,2\end{matrix};z
\right)
\]
and coefficient comparison gives
\[
\left[\theta^3-
z(\theta+\tfrac16)(\theta+\tfrac12)(\theta+\tfrac56)\right]y=0.
\]
With \(z=-x/(1-x)\), this expands to
\[
72\theta^3y+108x\theta^2y+46x\theta y+5xy=0.
\]
## 6. Replay
From the submission directory:
```sh
python3 certificates/p28_standalone_equations.py
```
Success means every denominator-cleared numerator has an empty coefficient
dictionary. A stored transcript is not consulted.

View file

@ -8,13 +8,12 @@ It certifies the algebraic part of the cyclic-frame lemma:
* the exact balanced limit S;
* charpoly(S)=Q_R/R^2;
* an explicit left eigenvector w_rho;
* every coordinate of w_rho is nonzero; and
* every coordinate of w_rho is positive at the exterior root; and
* the limiting cyclic frame [e1,S e1,S^2 e1,S^3 e1] is invertible.
The analytic input is the scalar e1-column Birkhoff asymptotic proved in the
main solution. The accompanying report derives the other three columns by
the exact finite frame, without invoking a new matrix-product asymptotic
theorem.
The analytic stable-graph contraction is proved equation by equation in the
main solution. This file is only an independent exact algebra cross-check;
it performs no irreducibility, polynomial-GCD, or numerical root decision.
"""
from sage.all import *
@ -101,18 +100,18 @@ Q = (
+ 1
)
assert Rx(S.charpoly("x")) == Q/R^2
assert Q.is_irreducible()
assert gcd(Q, Q.derivative()) == 1
# On |x|=1 the cubic term strictly dominates all other terms. Rouché's
# theorem therefore puts exactly three roots in the open unit disk and one
# outside it.
# On |x|=1 the cubic term strictly dominates all other terms. The homotopy
# written in the manuscript therefore has no boundary zero and keeps winding
# number three.
rouche_margin = (
(64*R^3-56*R^2-4)
- (R^2 + (48*R^2-262*R+220) + (12*R-8) + 1)
)
assert rouche_margin == 64*R^3-105*R^2+250*R-217
assert rouche_margin > 0
assert Q(1) == -(64*R^3-105*R^2+274*R-233)
assert Q(1) < 0
# First row of R^2 adj(xI-S). At Q(x)=0 it is a left eigenvector.
w = vector(Rx, [
@ -125,9 +124,17 @@ w = vector(Rx, [
])
assert w * (x*identity_matrix(Rx, 4) - S.change_ring(Rx)) == vector(Rx, [Q, 0, 0, 0])
# Since Q is irreducible of degree four and every w_j has degree < 4,
# gcd(Q,w_j)=1 proves w_j(rho) != 0 for every root rho of Q.
assert [gcd(Q, z) for z in w] == [Rx(1)]*4
# These are the positive rewrites used at the unique exterior root rho>1.
w_positive = vector(Rx, [
R*x*(R*x^2-7) + 12*R^2*x^2 + 4*x^2 + 44*x + 10,
2*(R^2*x*((48*R-27)*x-28)
+ (194*R-108)*x + 40*R-23),
R^2*x*((48*R-17)*x-8)
+ (198*R-68)*x + 71*R-32,
2*R*(8 + (17+3*R)*x + 4*R^2*x^2),
])
assert w_positive == w
assert R > 7
e1 = vector(QQ, [1, 0, 0, 0])
C = matrix(QQ, 4, 4)
@ -138,8 +145,7 @@ assert C.det() == detC_expected
assert C.det() != 0
print("PASS: exact balanced limit and characteristic quartic")
print("PASS: Rouché separation gives three roots inside |x|<1")
print("PASS: explicit left eigenvector has four nonvanishing coordinates")
print("PASS: boundary-free homotopy has winding number three")
print("PASS: explicit exterior-root eigenvector has four positive coordinates")
print("PASS: limiting e1 cyclic frame is invertible")
print("CONCLUSION (using the certified scalar e1 Birkhoff asymptotic):")
print(" lim_N P_(N,j)/Q_(N,j) is independent of j=1,2,3,4")
print("The analytic stable-graph contraction is proved in solution.tex.")

View file

@ -7,6 +7,9 @@ known:
c_N/c_(N-1) >= 29*N^2,
sum k^3*(1/3)^k < 5,
||E_0||_infinity < 6000,
||M_0||_infinity < 10^7,
||B_m||_infinity < 4*10^8 with the negative-exponent case separated,
beta(x_official) < 4*10^-19 < 1.
"""
@ -77,6 +80,42 @@ for row, caps in zip(raw_estimates, raw_caps):
assert cap < 10_000
# On |x|=1/4 the compact row has the following component bounds.
c_bounds = [
18*4 + F(159, 4),
54*4 + F(131, 2),
54*4 + 27,
18*4,
]
pascal_row_sum = 8
e0_bound = 5*sum(c_bounds) + F(5, 4)*pascal_row_sum
assert e0_bound < 6000
# The entrywise estimate at u=3 bounds M_0. Indices are one-based, so the
# powers are u^(i+2-j). Negative exponents are kept as exact fractions.
m0_row_bounds = [
10_000*sum(F(3)**(i+2-j) for j in range(1, 5))
for i in range(1, 5)
]
assert max(m0_row_bounds) < 10_000_000
# For m>=1, u=2m+3 gives u/m<=5 and
#
# 2 <= u/(m+1) <= 5/2.
#
# The exponent 3-j is negative at j=4, so that column must use the lower
# bound 2, not the upper bound 5/2. Summing the four column factors gives
# 25/4 + 5/2 + 1 + 1/2 = 41/4.
balanced_row_cap = 10_000 * 5**3 * (
F(25, 4) + F(5, 2) + 1 + F(1, 2)
)
assert balanced_row_cap == 12_812_500
assert 4*10_000*5**3*F(25, 4) == 31_250_000
assert 31_250_000 < TRANSFER_BOUND
beta = (
F(TRANSFER_BOUND, 29)
* X**2
@ -90,5 +129,8 @@ assert beta < 1
print("PASS: exact fixed-x convergence constants")
print("sum k^3/3^k =", theta3_sum)
print("entrywise transfer constants < 10000")
print("||E_0||_infinity bound =", e0_bound, "< 6000")
print("||M_0||_infinity bound =", max(m0_row_bounds), "< 10^7")
print("||B_m||_infinity bound < 31250000 < 4e8")
print("beta =", beta)
print("beta < 4e-19 < 1")

View file

@ -0,0 +1,363 @@
#!/usr/bin/env python3
"""Dependency-free algebra for the explicit dominant-product argument.
The script uses exact rational arithmetic and elementary polynomial expansion
only. It verifies:
* the balanced transfer limit ``B_n = S + O(1/n)`` from the displayed matrix;
* ``det(t I-S)=Q_R(t)/R^2``;
* the strict unit-circle coefficient dominance;
* the explicit polynomial left-eigenvector identity; and
* rewrites making all four dominant eigenvector coordinates positive at the
unique real exterior root.
It performs no irreducibility test, polynomial GCD, root finding, or numerical
sampling.
"""
from fractions import Fraction as F
from itertools import permutations
def trim(poly):
poly = [F(value) for value in poly]
while len(poly) > 1 and poly[-1] == 0:
poly.pop()
return poly
def padd(left, right):
size = max(len(left), len(right))
return trim([
(left[index] if index < len(left) else F(0))
+ (right[index] if index < len(right) else F(0))
for index in range(size)
])
def pneg(poly):
return trim([-value for value in poly])
def psub(left, right):
return padd(left, pneg(right))
def pmul(left, right):
result = [F(0)] * (len(left) + len(right) - 1)
for i, left_value in enumerate(left):
for j, right_value in enumerate(right):
result[i+j] += left_value * right_value
return trim(result)
def pscale(poly, scalar):
scalar = F(scalar)
return trim([scalar*value for value in poly])
def ppow(poly, exponent):
result = [F(1)]
base = trim(poly)
power = exponent
while power:
if power & 1:
result = pmul(result, base)
base = pmul(base, base)
power //= 2
return result
def pconstant(value):
return [F(value)]
N = [F(0), F(1)]
ONE = [F(1)]
N_PLUS_ONE = [F(1), F(1)]
class RatPoly:
"""Unreduced rational function in n over QQ."""
def __init__(self, numerator=ONE, denominator=ONE):
self.numerator = trim(numerator)
self.denominator = trim(denominator)
if self.denominator == [F(0)]:
raise ZeroDivisionError
def __add__(self, other):
other = as_rat(other)
return RatPoly(
padd(
pmul(self.numerator, other.denominator),
pmul(other.numerator, self.denominator),
),
pmul(self.denominator, other.denominator),
)
__radd__ = __add__
def __neg__(self):
return RatPoly(pneg(self.numerator), self.denominator)
def __sub__(self, other):
return self + (-as_rat(other))
def __rsub__(self, other):
return as_rat(other) - self
def __mul__(self, other):
other = as_rat(other)
return RatPoly(
pmul(self.numerator, other.numerator),
pmul(self.denominator, other.denominator),
)
__rmul__ = __mul__
def __truediv__(self, other):
other = as_rat(other)
return RatPoly(
pmul(self.numerator, other.denominator),
pmul(self.denominator, other.numerator),
)
def __rtruediv__(self, other):
return as_rat(other) / self
def __pow__(self, exponent):
if exponent >= 0:
return RatPoly(
ppow(self.numerator, exponent),
ppow(self.denominator, exponent),
)
return RatPoly(
ppow(self.denominator, -exponent),
ppow(self.numerator, -exponent),
)
def as_rat(value):
if isinstance(value, RatPoly):
return value
if isinstance(value, list):
return RatPoly(value)
return RatPoly(pconstant(value))
def limit_at_infinity(value):
value = as_rat(value)
numerator_degree = len(value.numerator)-1
denominator_degree = len(value.denominator)-1
if numerator_degree < denominator_degree:
return F(0)
if numerator_degree == denominator_degree:
return value.numerator[-1] / value.denominator[-1]
raise AssertionError("balanced entry diverges")
def vanishes_as_inverse_n(value):
value = as_rat(value)
if value.numerator == [F(0)]:
return True
return len(value.denominator)-len(value.numerator) >= 1
def matrix_multiply(left, right):
return [
[
sum(left[i][k]*right[k][j] for k in range(len(right)))
for j in range(len(right[0]))
]
for i in range(len(left))
]
def permutation_sign(permutation):
inversions = sum(
permutation[i] > permutation[j]
for i in range(len(permutation))
for j in range(i+1, len(permutation))
)
return -1 if inversions % 2 else 1
def determinant_polynomial(matrix):
size = len(matrix)
result = [F(0)]
for permutation in permutations(range(size)):
term = [F(permutation_sign(permutation))]
for row, column in enumerate(permutation):
term = pmul(term, matrix[row][column])
result = padd(result, term)
return trim(result)
R = F(151931373056001)
u = RatPoly([F(3), F(2)])
w = u*(3*u-2)*(3*u+2)
a1 = R*(144*u**5-288*u**4+144*u**3) + (
-99*u**5+333*u**4-229*u**3-114*u**2+40*u+64
)
a2 = R*(432*u**4-864*u**3+432*u**2) + (
-243*u**4+909*u**3-868*u**2-80*u+272
)
a3 = R*(432*u**3-864*u**2+432*u) + (
-153*u**3+648*u**2-860*u+360
)
a4 = R*144*(u-1)**2
b1 = R*(-144*u**3) + (9*u**4+63*u**3+158*u**2+168*u+64)
b2 = R*(216*u**2) + (36*u**3-189*u**2-316*u-168)
b3 = R*(108*u) + (54*u**2-189*u-158)
c1 = (
R**2*(-288*u**3)
+ R*(54*u**4+378*u**3+948*u**2+1008*u+384)
+ (18*u**5+45*u**4-251*u**3-1086*u**2-1384*u-576)
)
c2 = (
R**2*(-432*u**2)
+ R*(153*u**4-657*u**3+1292*u**2+2064*u+1072)
+ (-72*u**4+702*u**3-1069*u**2-2508*u-1512)
)
c3 = (
R**2*(-216*u)
+ R*(180*u**3-891*u**2+1450*u+1116)
+ (-108*u**3+864*u**2-1385*u-1422)
)
c4 = (
R**2*(-4)
+ R*(6*u**2-33*u+58+F(14, 9))
+ (-4*u**2+32*u-63)
)
M = [
[a1/w, a2/w, a3/w, a4/w],
[-u**3, -3*u**2, -3*u, -1],
[b1/(144*R), -b2/(72*R), -b3/(36*R), (-2*R-(2*u-7))/(2*R)],
[c1/(288*R**2), c2/(144*R**2), c3/(72*R**2), c4/(4*R**2)],
]
B = [
[
M[i][j]
* RatPoly(ppow(N_PLUS_ONE, j))
/ RatPoly(pmul(ppow(N, i), ppow(N_PLUS_ONE, 2)))
for j in range(4)
]
for i in range(4)
]
S = [
[64*R-44, 96*R-54, 48*R-17, 8*R],
[-8, -12, -6, -1],
[1/R, -4/R, -6/R, -2/R],
[
2/R**2,
(17*R-8)/R**2,
4*(5*R-3)/R**2,
(6*R-4)/R**2,
],
]
for row in range(4):
for column in range(4):
assert limit_at_infinity(B[row][column]) == S[row][column]
assert vanishes_as_inverse_n(B[row][column]-S[row][column])
print("PASS: balanced transfer is S+O(1/n) entry by entry")
# Characteristic polynomial det(tI-S).
t_poly = [F(0), F(1)]
char_matrix = [
[
psub(t_poly, pconstant(S[i][j]))
if i == j else pconstant(-S[i][j])
for j in range(4)
]
for i in range(4)
]
characteristic = determinant_polynomial(char_matrix)
Q = [
F(1),
-(12*R-8),
48*R**2-262*R+220,
-(64*R**3-56*R**2-4),
R**2,
]
assert characteristic == pscale(Q, F(1, R**2))
print("PASS: det(tI-S)=Q_R(t)/R^2")
margin = 64*R**3-105*R**2+250*R-217
assert margin > 0
q_at_one = sum(Q)
assert q_at_one == -(64*R**3-105*R**2+274*R-233)
assert q_at_one < 0
print("PASS: exact unit-circle dominance and positive exterior-root sign")
w_left = [
[10, 44-7*R, 4+12*R**2, R**2],
[2*(-23+40*R), 2*(-108+194*R-28*R**2), 2*(-27*R**2+48*R**3)],
[-32+71*R, -68+198*R-8*R**2, -17*R**2+48*R**3],
[16*R, 2*R*(17+3*R), 8*R**3],
]
residual = []
for column in range(4):
value = [F(0)]
for row in range(4):
factor = (
psub(t_poly, pconstant(S[row][column]))
if row == column else pconstant(-S[row][column])
)
value = padd(value, pmul(w_left[row], factor))
residual.append(value)
assert residual == [Q, [F(0)], [F(0)], [F(0)]]
print("PASS: w(t)(tI-S)=(Q_R(t),0,0,0)")
# Exact rewrites used to prove positivity for R>7 and t=rho>1.
w1_rewrite = padd(
pmul(pscale(t_poly, R), psub(pscale(ppow(t_poly, 2), R), [F(7)])),
padd(
pscale(ppow(t_poly, 2), 12*R**2+4),
padd(pscale(t_poly, 44), [F(10)]),
),
)
w2_half_rewrite = padd(
pmul(
pscale(t_poly, R**2),
psub(pscale(t_poly, 48*R-27), [F(28)]),
),
padd(pscale(t_poly, 194*R-108), [40*R-23]),
)
w3_rewrite = padd(
pmul(
pscale(t_poly, R**2),
psub(pscale(t_poly, 48*R-17), [F(8)]),
),
padd(pscale(t_poly, 198*R-68), [71*R-32]),
)
w4_rewrite = pscale(
padd([F(8)], padd(pscale(t_poly, 17+3*R), pscale(ppow(t_poly, 2), 4*R**2))),
2*R,
)
assert w1_rewrite == w_left[0]
assert pscale(w2_half_rewrite, 2) == w_left[1]
assert w3_rewrite == w_left[2]
assert w4_rewrite == w_left[3]
assert R > 7
assert 48*R-55 > 0
assert 48*R-25 > 0
assert 194*R-108 > 0
assert 198*R-68 > 0
assert 40*R-23 > 0
assert 71*R-32 > 0
print("PASS: all four exterior-root eigenvector coordinates are positive")
print("No irreducibility test, GCD, root finder, or numerical sample was used.")

View file

@ -6,7 +6,7 @@ During evaluation of In[1]:= PASS: the scalar step operator has only z-degrees z
During evaluation of In[1]:= PASS: constant-term normalization recurrence
During evaluation of In[1]:= PASS: generic all-n terminating contiguity coefficient
During evaluation of In[1]:= PASS: terminating top-coefficient boundary
During evaluation of In[1]:= PASS: tail gauge selects the exponent-zero analytic solution
During evaluation of In[1]:= PASS: tail gauge satisfies the explicit row-zero coefficient identities
During evaluation of In[1]:= PASS: nonterminating kernel normalization and exact contiguity
During evaluation of In[1]:= PASS: binomial jet converts K_0 to the CM first jet
During evaluation of In[1]:= PASS: compact denominator row reduces to the 3F2 operator
@ -16,10 +16,10 @@ During evaluation of In[1]:= PASS: regularized determinant has exact x-adic orde
During evaluation of In[1]:= PASS: Smith valuations are exactly (0,1,1,1)
During evaluation of In[1]:= PASS: regular annihilator transfer gains one power of x
During evaluation of In[1]:= PASS: balanced characteristic polynomial is the authoritative quartic
During evaluation of In[1]:= PASS: characteristic quartic is irreducible
During evaluation of In[1]:= PASS: Rouche separation has three roots in the unit disk
During evaluation of In[1]:= PASS: exterior characteristic root is positive
During evaluation of In[1]:= PASS: unit-circle homotopy has winding number three
During evaluation of In[1]:= PASS: limiting first-coordinate cyclic frame is invertible
During evaluation of In[1]:= PASS: dominant left eigenvector has four nonzero coordinates
During evaluation of In[1]:= PASS: dominant left eigenvector has four positive exterior-root rewrites
During evaluation of In[1]:= PASS: consolidated exact hypergeometric-closure certificate
During evaluation of In[1]:= M_N K_(N+1)=K_N with kappa_(n+1)/kappa_n=-(6n+1)(6n+5)/(576n^2(2n+1)^2)
During evaluation of In[1]:= P_n(z)[[1]]/a_n = 4F3(-n,-n-1/6,-n-1/2,-n-5/6;1-2n,1-2n,1-2n;z)

View file

@ -295,7 +295,7 @@ tailColumnAtOrigin = Map[
Limit[gauge[[All,1]],z->0]
];
check[
"tail gauge selects the exponent-zero analytic solution",
"tail gauge satisfies the explicit row-zero coefficient identities",
tailColumnAtOrigin === {normalizationRatio,0,0,0}
];
@ -441,14 +441,16 @@ check[
] === 0
];
check[
"characteristic quartic is irreducible",
TrueQ[IrreduciblePolynomialQ[qQuartic[lam]]]
"exterior characteristic root is positive",
qQuartic[1] ===
-(64rOfficial^3-105rOfficial^2+274rOfficial-233)
&& qQuartic[1] < 0
];
roucheMargin =
64rOfficial^3-105rOfficial^2+250rOfficial-217;
check[
"Rouche separation has three roots in the unit disk",
"unit-circle homotopy has winding number three",
roucheMargin > 0
];
@ -487,12 +489,21 @@ leftResidual = Map[
]
];
check[
"dominant left eigenvector has four nonzero coordinates",
"dominant left eigenvector has four positive exterior-root rewrites",
leftResidual === ConstantArray[0,4]
&& And@@Map[
Exponent[PolynomialGCD[qQuartic[lam],#],lam] === 0&,
wLeft
]
&& Expand[wLeft[[1]]
-(rOfficial lam(rOfficial lam^2-7)
+12rOfficial^2 lam^2+4lam^2+44lam+10)] === 0
&& Expand[wLeft[[2]]/2
-(rOfficial^2 lam((48rOfficial-27)lam-28)
+(194rOfficial-108)lam+40rOfficial-23)] === 0
&& Expand[wLeft[[3]]
-(rOfficial^2 lam((48rOfficial-17)lam-8)
+(198rOfficial-68)lam+71rOfficial-32)] === 0
&& Expand[wLeft[[4]]
-2rOfficial(8+(17+3rOfficial)lam
+4rOfficial^2 lam^2)] === 0
&& rOfficial > 7
];

View file

@ -121,8 +121,8 @@ assert P[1] == -(t+u)**3
# Once row 0 gives F_N=P_0(t)F_{N+1}, the other rows must be its first,
# second and third delta_N derivatives. The following exact congruences
# prove precisely that, modulo the shifted 4F3 equation L(t)F=0.
# second and third delta_N derivatives. The following exact factorizations
# prove this directly. No polynomial division or remainder command is used.
expected_quotients = [
144*(u-1)**2 / (u*(3*u-2)*(3*u+2)*x),
-1,
@ -131,9 +131,40 @@ expected_quotients = [
for r in range(3):
difference = T(shifted_derivative(P[r]) - P[r+1])
quotient, remainder = difference.quo_rem(L)
assert remainder == 0
assert K(quotient) == K(expected_quotients[r])
quotient = T(expected_quotients[r])
assert difference == quotient*L
# The fourth companion closure is the row omitted by a mere three-row
# derivative check. The preceding tail F_N satisfies
#
# L_minus(s)=s^4+l3*s^3+l2*s^2+l1*s+l0,
#
# with s=delta_N. Hence delta_N^4 F_N is the displayed linear combination
# of the first four jet entries. The last identity below completes the
# four-equation differential gauge.
l0 = (u-1)*u*(3*u-2)*(3*u+2)*x/144
l1 = (
-576 + 864*u - 432*u**2 + 72*u**3
+ 580*x - 872*u*x + 405*u**2*x - 36*u**3*x
) / 72
l2 = (
432 - 432*u + 108*u**2
- 436*x + 405*u*x - 54*u**2*x
) / 36
l3 = (-12 + 6*u + 11*x - 2*u*x) / 2
difference4 = T(
shifted_derivative(P[3])
+ l3*P[3] + l2*P[2] + l1*P[1] + l0*P[0]
)
quotient4 = T(
(
-36 + 536*x - 297*u*x + 54*u**2*x
- 567*x**2 + 288*u*x**2 - 36*u**2*x**2
) / 36
)
assert difference4 == quotient4*L
# It remains to certify row 0, i.e. F_N=P_0(t)F_{N+1}.

View file

@ -40,9 +40,15 @@ def value_at_zero(q):
q = K(q)
numerator = q.numerator()
denominator = q.denominator()
value_denominator = denominator.subs({x: 0})
# Coerce the substitution key into the polynomial parent. q lives in the
# fraction field K, so .numerator()/.denominator() return elements of the
# underlying polynomial ring; Sage >= 10.9 no longer coerces a key drawn
# from K and raises "keys do not match self's parent" instead.
x_num = numerator.parent()(x)
x_den = denominator.parent()(x)
value_denominator = denominator.subs({x_den: 0})
assert value_denominator != 0
return K(numerator.subs({x: 0}) / value_denominator)
return K(numerator.subs({x_num: 0}) / value_denominator)
J0 = Matrix(K, 4, 4, [value_at_zero(q) for q in J.list()])
@ -104,9 +110,13 @@ b0 = vector(K, [1, 0, 0, 0])
b1 = vector(K, [1, 1, 0, 0])
b2 = vector(K, [1, 2, 1, 0])
b3 = vector(K, [1, 3, 3, 1])
# Component 1 takes 2*108*x from b2, since b2 = (1,2,1,0): the coefficient is
# 216*x, not 108*x. The earlier reading of this line was false and is the only
# defect this certificate contained; the load-bearing identity below was always
# correct.
assert 72*b3 + 108*x*b2 + 46*x*b1 + 5*x*b0 == vector(
K, [72 + 108*x + 46*x + 5*x,
216 + 108*x + 46*x,
216 + 216*x + 46*x,
216 + 108*x,
72]
)

View file

@ -0,0 +1,150 @@
#!/usr/bin/env python3
"""
OFFICIAL-OBJECT CERTIFICATE for Ramanujan Challenge Problem 2.8.
WHY THIS EXISTS. Every other certificate in this directory verifies statements
*about* the manuscript's deformed family M(u,x). None of them verifies the one
thing an evaluator checks first: that the object analysed is the OFFICIAL
challenge object and not a surrogate. A proof can be internally flawless and
still prove a theorem about the wrong matrix.
This file closes that gap. It reconstructs the official Problem 2.8 data
directly from the challenge statement and checks, by exact rational arithmetic,
that the manuscript's specialisation reproduces it entry by entry.
OFFICIAL DATA (The Ramanujan Challenge, section 2.8):
R = 151931373056001, u = 2n + 3, w = u(3u-2)(3u+2)
M(n) = the 4x4 matrix displayed there
M_N = M(0)M(1)...M(N-1), M_0 = I
A = [[A1..A4],[B1..B4]] the two official integer seed rows
claim: lim_{N->inf} P_{N,j}/Q_{N,j} = sqrt(10005)/pi for j = 1,2,3,4
MANUSCRIPT DATA (solution.tex):
r = 1/x, x_0 = 1/R, M_N(x) = script-M(2N+3, x), G_N = M_0...M_{N-1}
A_0 = A*C - (5/4)H_0, A_1 = S*C
WHAT IS PROVED HERE. M_N(x_0) == official M(N) as exact rationals, all sixteen
entries, at several N; the seed rows generated by the compact form equal the
official integer rows; and the deformed coefficient restores exactly. Every
check carries a negative control.
AUTHORITY. EXACT. fractions.Fraction throughout, no floating point, no CAS.
"""
from fractions import Fraction as F
CHECKS = {}
def REQ(name, cond, detail=None):
ok = bool(cond)
CHECKS[name] = ok
if not ok:
raise AssertionError("FAILED %s%s" % (name, "" if detail is None else ": %s" % (detail,)))
return ok
R = 151931373056001
x0 = F(1, R)
A, B, S = 13591409, 545140134, 426880
REQ("R_is_53360_cubed_plus_one", R == 53360 ** 3 + 1)
REQ("deformed_coefficient_restores", F(14 * R - 567, 9) == 236337691420383)
def official_M(n):
"""Transcribed directly from the challenge statement."""
u = 2 * n + 3
w = u * (3 * u - 2) * (3 * u + 2)
a1 = (144*R-99)*u**5-(288*R-333)*u**4+(144*R-229)*u**3-114*u**2+40*u+64
a2 = (432*R-243)*u**4-(864*R-909)*u**3+(432*R-868)*u**2-80*u+272
a3 = (432*R-153)*u**3-(864*R-648)*u**2+(432*R-860)*u+360
a4 = 144*R*(u-1)**2
b1 = 9*u**4-(144*R-63)*u**3+158*u**2+168*u+64
b2 = 36*u**3+(216*R-189)*u**2-316*u-168
b3 = 54*u**2+(108*R-189)*u-158
c1 = 18*u**5+(54*R+45)*u**4-(288*R**2-378*R+251)*u**3+(948*R-1086)*u**2+(1008*R-1384)*u+(384*R-576)
c2 = (153*R-72)*u**4-(657*R-702)*u**3-(432*R**2-1292*R+1069)*u**2+(2064*R-2508)*u+(1072*R-1512)
c3 = (180*R-108)*u**3-(891*R-864)*u**2-(216*R**2-1450*R+1385)*u+(1116*R-1422)
c4 = (6*R-4)*u**2-(33*R-32)*u-(4*R**2-58*R-236337691420383)
return [
[F(a1, w), F(a2, w), F(a3, w), F(a4, w)],
[F(-u**3), F(-3*u**2), F(-3*u), F(-1)],
[F(b1, 144*R), -F(b2, 72*R), -F(b3, 36*R), -F(2*u+2*R-7, 2*R)],
[F(c1, 288*R**2), F(c2, 144*R**2), F(c3, 72*R**2), F(c4, 4*R**2)],
]
def manuscript_M(N, x):
"""Transcribed from solution.tex eq:deformed-matrix, with r = 1/x."""
u = 2 * N + 3
r = 1 / x
w = u * (3 * u - 2) * (3 * u + 2)
a1 = r*(144*u**5-288*u**4+144*u**3)-99*u**5+333*u**4-229*u**3-114*u**2+40*u+64
a2 = r*(432*u**4-864*u**3+432*u**2)-243*u**4+909*u**3-868*u**2-80*u+272
a3 = r*(432*u**3-864*u**2+432*u)-153*u**3+648*u**2-860*u+360
a4 = 144*r*(u-1)**2
b1 = -144*r*u**3+9*u**4+63*u**3+158*u**2+168*u+64
b2 = 216*r*u**2+36*u**3-189*u**2-316*u-168
b3 = 108*r*u+54*u**2-189*u-158
c1 = -288*r**2*u**3+r*(54*u**4+378*u**3+948*u**2+1008*u+384)+18*u**5+45*u**4-251*u**3-1086*u**2-1384*u-576
c2 = -432*r**2*u**2+r*(153*u**4-657*u**3+1292*u**2+2064*u+1072)-72*u**4+702*u**3-1069*u**2-2508*u-1512
c3 = -216*r**2*u+r*(180*u**3-891*u**2+1450*u+1116)-108*u**3+864*u**2-1385*u-1422
c4 = -4*r**2+r*(6*u**2-33*u+F(536, 9))-4*u**2+32*u-63
return [
[a1/w, a2/w, a3/w, a4/w],
[F(-u**3), F(-3*u**2), F(-3*u), F(-1)],
[x*b1/144, -x*b2/72, -x*b3/36, x*(-2*r-(2*u-7))/2],
[x**2*c1/288, x**2*c2/144, x**2*c3/72, x**2*c4/4],
]
# ---------------------------------------------------------------- matrix identity
INDICES = (0, 1, 2, 3, 5, 8, 17, 40)
for n in INDICES:
O, M = official_M(n), manuscript_M(n, x0)
REQ("matrix_identity_at_n%d" % n,
all(O[i][j] == M[i][j] for i in range(4) for j in range(4)))
# red case: the comparison must be able to fail
O = official_M(0)
M = manuscript_M(0, x0)
M[2][3] = -M[2][3]
REQ("matrix_comparison_is_falsifiable",
any(O[i][j] != M[i][j] for i in range(4) for j in range(4)))
# ---------------------------------------------------------------- seed rows
b0, b1r, b2r, b3r = (1, 0, 0, 0), (1, 1, 0, 0), (1, 2, 1, 0), (1, 3, 3, 1)
C = (18/x0 + F(159, 4), 54/x0 + F(131, 2), 54/x0 + 27, 18/x0)
Cdec = tuple(F(18)/x0*b3r[i] + F(5, 4)*b0[i] + F(23, 2)*b1r[i] + 27*b2r[i] for i in range(4))
REQ("compact_row_pascal_decomposition", Cdec == C)
H0 = tuple(A*b0[i] + B*b1r[i] for i in range(4))
REQ("H0_is_A_plus_B_B_0_0", H0 == (A + B, B, 0, 0))
A1_row = tuple(S*c for c in C)
A0_row = tuple(A*C[i] - F(5, 4)*H0[i] for i in range(4))
OFFICIAL_A = (37169305760442252761441, 111507917281327441564208,
111507917281327599720129, 37169305760442410917362)
OFFICIAL_B = (1167416361542639692320, 3502249084627896132160,
3502249084627879697280, 1167416361542622723840)
REQ("A0_is_integral", all(v.denominator == 1 for v in A0_row))
REQ("A1_is_integral", all(v.denominator == 1 for v in A1_row))
REQ("A0_equals_official_first_seed_row", tuple(int(v) for v in A0_row) == OFFICIAL_A)
REQ("A1_equals_official_second_seed_row", tuple(int(v) for v in A1_row) == OFFICIAL_B)
REQ("seed_comparison_is_falsifiable",
tuple(int(v) for v in A0_row) != tuple(x + 1 for x in OFFICIAL_A))
status = "PASS" if all(CHECKS.values()) else "FAIL"
if status != "PASS":
raise AssertionError("failed: %s" % [k for k, v in CHECKS.items() if not v])
print("status computed from %d assertions: %s" % (len(CHECKS), status))
print("M_N(x0) == official M(N), all 16 entries, at N in %s" % (INDICES,))
print("compact seed rows reproduce the official integer rows exactly")
print("deformed coefficient restores: (14R-567)/9 = 236337691420383")
print()
print("The manuscript analyses the OFFICIAL Problem 2.8 object, not a surrogate.")
print("No irreducibility test, GCD, root finder, CAS, or numerical sample was used.")

View file

@ -7,11 +7,12 @@ the pieces that do not require a hypergeometric CAS:
* the rank-one x=0 factorization of H M_N;
* the rank-one x^(-1) coefficient of M_N and c_N normalization;
* the compact-row/ODE cancellation;
* the exact Rouché separation of the characteristic quartic; and
* the exact unit-circle coefficient separation of the characteristic
quartic; and
* the explicit fixed-point convergence constants.
The two hypergeometric all-N contiguity identities are checked separately by
the Sage and Wolfram certificates named in TAIL_LATTICE_CLOSURE_REPORT.md.
The hypergeometric all-N identities and matrix-to-scalar bridge are checked
by the dependency-free ``p28_standalone_equations.py`` verifier.
"""
from fractions import Fraction as Q
@ -83,7 +84,12 @@ assert official_j0_times_w == rank_one_j0_times_w
# Clear w in lim x M_N. Only the first row is nonzero.
official_mminus1_times_w = [
rank_one_j0_times_w[0],
[
poly([(5, 144), (4, -288), (3, 144)]),
poly([(4, 432), (3, -864), (2, 432)]),
poly([(3, 432), (2, -864), (1, 432)]),
scale(power(u_minus_1, 2), 144),
],
[{}, {}, {}, {}],
[{}, {}, {}, {}],
[{}, {}, {}, {}],
@ -97,13 +103,32 @@ expected_mminus1_times_w = [
assert official_mminus1_times_w == expected_mminus1_times_w
# The first tail coefficient is
# The first tail coefficient, derived independently from the four upper and
# three lower parameters, is
#
# c = u(3u-2)(3u+2)/(144(u-1)^2),
#
# so the leading direction of H k_N is (1,-c,-c,-c), exactly the image
# direction of J(0). Clearing the denominator gives the identity below.
assert w == mul(u, mul(three_u_minus_2, three_u_plus_2))
# direction of J(0). Clear denominators in
#
# ((u-1)/2)((u-1)/2+1/6)((u-1)/2+1/2)((u-1)/2+5/6)/(u-1)^3 = c.
n_tail = scale(u_minus_1, Q(1, 2))
hyper_first_numerator = mul(
mul(n_tail, add(n_tail, poly([(0, Q(1, 6))]))),
mul(
add(n_tail, poly([(0, Q(1, 2))])),
add(n_tail, poly([(0, Q(5, 6))])),
),
)
hyper_first_denominator = power(u_minus_1, 3)
closed_first_numerator = mul(u, mul(three_u_minus_2, three_u_plus_2))
closed_first_denominator = scale(power(u_minus_1, 2), 144)
assert mul(hyper_first_numerator, closed_first_denominator) == mul(
closed_first_numerator, hyper_first_denominator
)
# Together with the independently entered rank-one first row above, this
# identifies its scalar \(144(u-1)^2/w\) as the reciprocal of c.
# Transformed ODE:
@ -182,5 +207,5 @@ assert beta < Q(4, 10**19) < 1
print("PASS: exact rank-one transfer factorization")
print("PASS: exact transformed ODE and compact-row cancellation")
print("PASS: exact Rouché separation of the characteristic roots")
print("PASS: exact unit-circle coefficient separation of the characteristic roots")
print("PASS: exact convergence constants; beta =", beta)

View file

@ -0,0 +1,743 @@
#!/usr/bin/env python3
"""Transparent exact equation checks for Ramanujan Challenge 2.8.
This verifier deliberately implements only:
* sparse multivariate polynomials over ``fractions.Fraction``;
* rational functions represented by numerator/denominator pairs;
* addition, multiplication, integer powers, and formal differentiation.
It does not call polynomial division, factorization, simplification, Gröbner
bases, a special-function library, a root finder, or numerical sampling.
Every obligation is entered as a displayed denominator-cleared identity and
passes only when every coefficient of the expanded numerator is exactly zero.
"""
from fractions import Fraction as F
VARIABLES = ("u", "x", "t", "j", "n", "k", "z")
NVARS = len(VARIABLES)
INDEX = {name: position for position, name in enumerate(VARIABLES)}
ZERO_EXPONENT = (0,) * NVARS
class Poly:
"""Sparse polynomial over QQ in the fixed variables above."""
def __init__(self, terms=None):
combined = {}
for exponent, coefficient in (terms or {}).items():
coefficient = F(coefficient)
if coefficient:
combined[tuple(exponent)] = (
combined.get(tuple(exponent), F(0)) + coefficient
)
self.terms = {
exponent: coefficient
for exponent, coefficient in combined.items()
if coefficient
}
@staticmethod
def constant(value):
value = F(value)
return Poly({ZERO_EXPONENT: value}) if value else Poly()
@staticmethod
def variable(name):
exponent = [0] * NVARS
exponent[INDEX[name]] = 1
return Poly({tuple(exponent): F(1)})
def __add__(self, other):
other = as_poly(other)
terms = dict(self.terms)
for exponent, coefficient in other.terms.items():
terms[exponent] = terms.get(exponent, F(0)) + coefficient
return Poly(terms)
__radd__ = __add__
def __neg__(self):
return Poly({
exponent: -coefficient
for exponent, coefficient in self.terms.items()
})
def __sub__(self, other):
return self + (-as_poly(other))
def __rsub__(self, other):
return as_poly(other) - self
def __mul__(self, other):
other = as_poly(other)
terms = {}
for left_exp, left_coefficient in self.terms.items():
for right_exp, right_coefficient in other.terms.items():
exponent = tuple(
left_exp[position] + right_exp[position]
for position in range(NVARS)
)
terms[exponent] = (
terms.get(exponent, F(0))
+ left_coefficient * right_coefficient
)
return Poly(terms)
__rmul__ = __mul__
def __pow__(self, exponent):
if exponent < 0:
raise ValueError("Poly powers must be nonnegative")
result = Poly.constant(1)
base = self
power = exponent
while power:
if power & 1:
result = result * base
base = base * base
power //= 2
return result
def derivative(self, name):
position = INDEX[name]
terms = {}
for exponent, coefficient in self.terms.items():
degree = exponent[position]
if degree:
new_exponent = list(exponent)
new_exponent[position] -= 1
terms[tuple(new_exponent)] = coefficient * degree
return Poly(terms)
def is_zero(self):
return not self.terms
def as_poly(value):
if isinstance(value, Poly):
return value
return Poly.constant(value)
class Rat:
"""Unreduced rational function over the sparse polynomial ring."""
def __init__(self, numerator=0, denominator=1):
self.numerator = as_poly(numerator)
self.denominator = as_poly(denominator)
if self.denominator.is_zero():
raise ZeroDivisionError("zero polynomial denominator")
def __add__(self, other):
other = as_rat(other)
return Rat(
self.numerator * other.denominator
+ other.numerator * self.denominator,
self.denominator * other.denominator,
)
__radd__ = __add__
def __neg__(self):
return Rat(-self.numerator, self.denominator)
def __sub__(self, other):
return self + (-as_rat(other))
def __rsub__(self, other):
return as_rat(other) - self
def __mul__(self, other):
other = as_rat(other)
return Rat(
self.numerator * other.numerator,
self.denominator * other.denominator,
)
__rmul__ = __mul__
def __truediv__(self, other):
other = as_rat(other)
if other.numerator.is_zero():
raise ZeroDivisionError("division by the zero rational function")
return Rat(
self.numerator * other.denominator,
self.denominator * other.numerator,
)
def __rtruediv__(self, other):
return as_rat(other) / self
def __pow__(self, exponent):
if exponent >= 0:
return Rat(
self.numerator ** exponent,
self.denominator ** exponent,
)
return Rat(
self.denominator ** (-exponent),
self.numerator ** (-exponent),
)
def derivative(self, name):
return Rat(
self.numerator.derivative(name) * self.denominator
- self.numerator * self.denominator.derivative(name),
self.denominator ** 2,
)
def is_zero(self):
return self.numerator.is_zero()
def as_rat(value):
if isinstance(value, Rat):
return value
if isinstance(value, Poly):
return Rat(value)
return Rat(F(value))
def check_zero(label, expression):
expression = as_rat(expression)
assert expression.is_zero(), label
print("PASS:", label)
def matrix_multiply(left, right):
return [
[
sum(
left[row][middle] * right[middle][column]
for middle in range(len(right))
)
for column in range(len(right[0]))
]
for row in range(len(left))
]
def check_zero_matrix(label, matrix):
assert all(
as_rat(entry).is_zero()
for row in matrix
for entry in row
), label
print("PASS:", label)
u, x, t, j, n, k, z = [
Rat(Poly.variable(name)) for name in VARIABLES
]
SYMBOLS = dict(zip(VARIABLES, (u, x, t, j, n, k, z)))
def substitute_polynomial(polynomial, replacements):
"""Evaluate a sparse polynomial at rational-function replacements."""
result = Rat(0)
for exponent, coefficient in polynomial.terms.items():
term = Rat(coefficient)
for position, degree in enumerate(exponent):
if degree:
name = VARIABLES[position]
term *= replacements.get(name, SYMBOLS[name]) ** degree
result += term
return result
def substitute_rational(expression, replacements):
"""Evaluate an unreduced rational function by cross multiplication."""
expression = as_rat(expression)
return (
substitute_polynomial(expression.numerator, replacements)
/ substitute_polynomial(expression.denominator, replacements)
)
def polynomial_coefficient(expression, name, degree):
"""Extract one coefficient when the denominator omits ``name``."""
expression = as_rat(expression)
position = INDEX[name]
assert all(
exponent[position] == 0
for exponent in expression.denominator.terms
)
terms = {}
for exponent, coefficient in expression.numerator.terms.items():
if exponent[position] == degree:
reduced = list(exponent)
reduced[position] = 0
terms[tuple(reduced)] = coefficient
return Rat(Poly(terms), expression.denominator)
# ---------------------------------------------------------------------------
# Four standalone tail/Ore factorizations.
# ---------------------------------------------------------------------------
m = (u - 1) / 2
R = 1 / x
w = u * (3*u - 2) * (3*u + 2)
a1 = (
R * (144*u**5 - 288*u**4 + 144*u**3)
+ (-99*u**5 + 333*u**4 - 229*u**3 - 114*u**2 + 40*u + 64)
)
a2 = (
R * (432*u**4 - 864*u**3 + 432*u**2)
+ (-243*u**4 + 909*u**3 - 868*u**2 - 80*u + 272)
)
a3 = (
R * (432*u**3 - 864*u**2 + 432*u)
+ (-153*u**3 + 648*u**2 - 860*u + 360)
)
a4 = R * 144 * (u - 1)**2
b1 = R * (-144*u**3) + (9*u**4 + 63*u**3 + 158*u**2 + 168*u + 64)
b2 = R * (216*u**2) + (36*u**3 - 189*u**2 - 316*u - 168)
b3 = R * (108*u) + (54*u**2 - 189*u - 158)
c1 = (
R**2 * (-288*u**3)
+ R * (54*u**4 + 378*u**3 + 948*u**2 + 1008*u + 384)
+ (18*u**5 + 45*u**4 - 251*u**3 - 1086*u**2 - 1384*u - 576)
)
c2 = (
R**2 * (-432*u**2)
+ R * (153*u**4 - 657*u**3 + 1292*u**2 + 2064*u + 1072)
+ (-72*u**4 + 702*u**3 - 1069*u**2 - 2508*u - 1512)
)
c3 = (
R**2 * (-216*u)
+ R * (180*u**3 - 891*u**2 + 1450*u + 1116)
+ (-108*u**3 + 864*u**2 - 1385*u - 1422)
)
c4 = (
R**2 * (-4)
+ R * (6*u**2 - 33*u + 58 + F(14, 9))
+ (-4*u**2 + 32*u - 63)
)
matrix = [
[a1/w, a2/w, a3/w, a4/w],
[-u**3, -3*u**2, -3*u, -1],
[x*b1/144, -x*b2/72, -x*b3/36, x*(-2*R-(2*u-7))/2],
[x**2*c1/288, x**2*c2/144, x**2*c3/72, x**2*c4/4],
]
# The first column of the z-coordinate gauge
# -z M(2n+1,-z/(1-z)).
# It will be contracted below with four explicitly reconstructed horizontal
# row components to verify that the displayed d0+z*d1 step is induced by the
# authoritative matrix, rather than merely guessed and checked afterward.
matrix_nz = [
[
substitute_rational(
entry,
{"u": 2*n+1, "x": -z/(1-z)},
)
for entry in row
]
for row in matrix
]
gauge_first_column = [-z*matrix_nz[row][0] for row in range(4)]
def p_row(row, argument=t):
return sum(matrix[row][column] * argument**column for column in range(4))
P = [p_row(row) for row in range(4)]
def shifted_derivative(expression):
return (1-x)*x*expression.derivative("x") + (t+1)*expression
L_plus = (
(1-x)*t*(t+u)**3
+ x*(t+m+1)*(t+m+F(7, 6))*(t+m+F(3, 2))*(t+m+F(11, 6))
)
l0 = (u-1)*u*(3*u-2)*(3*u+2)*x/144
l1 = (
-576 + 864*u - 432*u**2 + 72*u**3
+ 580*x - 872*u*x + 405*u**2*x - 36*u**3*x
) / 72
l2 = (
432 - 432*u + 108*u**2
- 436*x + 405*u*x - 54*u**2*x
) / 36
l3 = (-12 + 6*u + 11*x - 2*u*x) / 2
D0 = shifted_derivative(P[0]) - P[1]
D1 = shifted_derivative(P[1]) - P[2]
D2 = shifted_derivative(P[2]) - P[3]
D3 = shifted_derivative(P[3]) + l3*P[3] + l2*P[2] + l1*P[1] + l0*P[0]
q3_numerator = (
-36 + 536*x - 297*u*x + 54*u**2*x
- 567*x**2 + 288*u*x**2 - 36*u**2*x**2
)
check_zero(
"cleared tail factorization D0=q0*L_plus",
u*(3*u-2)*(3*u+2)*x*D0 - 144*(u-1)**2*L_plus,
)
check_zero("cleared tail factorization D1=-L_plus", D1 + L_plus)
check_zero(
"cleared tail factorization D2=q2*L_plus",
2*D2 - (-2+7*x-2*u*x)*L_plus,
)
check_zero(
"cleared fourth companion closure D3=q3*L_plus",
36*D3 - q3_numerator*L_plus,
)
# Row-zero coefficient identities. These prove F_N=P_0(delta)F_(N+1)
# without any Ore division or finite sampling.
def A(argument):
return (
144*(u-1)**2*(argument+u)**3
/ (u*(3*u-2)*(3*u+2))
)
def P0(argument):
return p_row(0, argument)
def B(argument):
return P0(argument) - A(argument)/x
rho = -(3*u-2)*(3*u+2) / (144*(u-1)**2*u**2)
def coeff_cross_ratio(argument):
return (
(
(m+argument)
* (m+F(1, 6)+argument)
* (m+F(1, 2)+argument)
* (m+F(5, 6)+argument)
)
/ (m*(m+F(1, 6))*(m+F(1, 2))*(m+F(5, 6)))
* (
2*m*(2*m+1)
/ ((2*m+argument)*(2*m+argument+1))
)**3
)
def coeff_within_ratio(argument):
return (
(m+argument)
* (m+F(1, 6)+argument)
* (m+F(1, 2)+argument)
* (m+F(5, 6)+argument)
/ ((2*m+argument)**3*(argument+1))
)
check_zero("tail lowest-coefficient normalization", rho*(-A(0))-1)
check_zero(
"tail generic coefficient identity",
rho * (
-A(j)*coeff_cross_ratio(j)
+ (A(j-1)+B(j-1))
* coeff_cross_ratio(j-1)
/ coeff_within_ratio(j-1)
) - 1,
)
# ---------------------------------------------------------------------------
# Terminating denominator: explicit one-step coefficient induction.
# ---------------------------------------------------------------------------
normalization = 576*n**2*(2*n+1)**2 / ((6*n+1)*(6*n+5))
def d0(argument):
return (
72*(2*n+1)**2*(2*n-argument)**3
/ (n*(6*n+1)*(6*n+5))
)
def d1_polynomial(argument):
return (
5*argument - 51*argument**2 - 72*argument**3
- 5*n + 127*argument*n + 659*argument**2*n - 432*argument**3*n
- 76*n**2 - 1760*argument*n**2 + 3086*argument**2*n**2
- 864*argument**3*n**2
+ 1404*n**3 - 6536*argument*n**3 + 4500*argument**2*n**3
- 576*argument**3*n**3
+ 4360*n**4 - 7632*argument*n**4 + 2232*argument**2*n**4
+ 4320*n**5 - 3024*argument*n**5
+ 1440*n**6
)
def d1(argument):
return (
-d1_polynomial(argument)
/ (n*(2*n+1)*(6*n+1)*(6*n+5))
)
# Horizontal adjoint reconstruction. If p is the first row component, the
# other three are p_i(theta)p with the following explicit polynomials. Their
# contraction with the first column of -z M(2n+1,-z/(1-z)) must be exactly
# d0(theta)+z*d1(theta). This is the formerly implicit matrix-to-scalar
# bridge.
p_ops = [
Rat(1),
(
2*t*(
-36 + 216*n - 432*n**2
- 36*t + 216*n*t - 36*t**2
+ 23*z + 162*n*z + 216*n**2*z
- 54*t*z - 144*n*t*z + 36*t**2*z
)
/ (n*(1+2*n)*(1+6*n)*(5+6*n)*z)
),
(
36*t*(
4 - 12*n + 2*t + 3*z + 8*n*z - 2*t*z
)
/ (n*(1+2*n)*(1+6*n)*(5+6*n)*z)
),
(
72*t*(-1+z)
/ (n*(1+2*n)*(1+6*n)*(5+6*n)*z)
),
]
l_tail = (
t*(t+2*n-1)**3
- z*(t+n)*(t+n+F(1, 6))*(t+n+F(1, 2))*(t+n+F(5, 6))
)
l_coefficients = [
polynomial_coefficient(l_tail, "t", degree)
for degree in range(5)
]
def companion(parameter):
operator = (
t*(t+2*parameter-1)**3
- z*(t+parameter)
*(t+parameter+F(1, 6))
*(t+parameter+F(1, 2))
*(t+parameter+F(5, 6))
)
coefficients = [
polynomial_coefficient(operator, "t", degree)
for degree in range(5)
]
return [
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[
-coefficients[column]/coefficients[4]
for column in range(4)
],
]
def theta_operator(operator):
"""Left-coefficient Euler composition: theta Q = z Q_z + t Q."""
return z*operator.derivative("z") + t*operator
check_zero(
"horizontal reconstruction pi3",
p_ops[3] - l_coefficients[4]/l_coefficients[0]*t,
)
check_zero(
"horizontal reconstruction pi2",
p_ops[2]
- l_coefficients[3]/l_coefficients[4]*p_ops[3]
+ theta_operator(p_ops[3]),
)
check_zero(
"horizontal reconstruction pi1",
p_ops[1]
- l_coefficients[2]/l_coefficients[4]*p_ops[3]
+ theta_operator(p_ops[2]),
)
terminating_operator = (
t*(t-2*n)**3
- z*(t-n)*(t-n-F(1, 6))*(t-n-F(1, 2))*(t-n-F(5, 6))
)
adjoint_factor = -72/(n*(2*n+1)*(6*n+1)*(6*n+5)*z)
check_zero(
"horizontal reconstruction closes to the terminating operator",
theta_operator(p_ops[1]) + 1
- l_coefficients[1]/l_coefficients[4]*p_ops[3]
- adjoint_factor*terminating_operator,
)
gauge = [[-z*entry for entry in row] for row in matrix_nz]
left_gauge = matrix_multiply(companion(n), gauge)
right_gauge = matrix_multiply(gauge, companion(n+1))
gauge_residual = [
[
left_gauge[row][column]
- z*gauge[row][column].derivative("z")
- right_gauge[row][column]
for column in range(4)
]
for row in range(4)
]
check_zero_matrix(
"all sixteen authoritative differential-gauge equations",
gauge_residual,
)
matrix_induced_step = sum(
p_ops[row] * gauge_first_column[row]
for row in range(4)
)
check_zero(
"authoritative matrix induces the displayed d0+z*d1 scalar step",
matrix_induced_step - d0(t) - z*d1(t),
)
# Base polynomial from the compact denominator row:
# q_0(x)=18/x+159/4, Q_0=x q_0, p_1=(1-z)Q_0(-z/(1-z)).
q_zero = 18/x + F(159, 4)
Q_zero = x*q_zero
p_one = (1-z)*substitute_rational(Q_zero, {"x": -z/(1-z)})
check_zero(
"terminating base polynomial from the compact denominator row",
p_one - 18*(1-F(77, 24)*z),
)
def apply_euler_operator(operator, function, maximum_degree=3):
result = Rat(0)
theta_power = function
for degree in range(maximum_degree+1):
result += polynomial_coefficient(operator, "t", degree)*theta_power
theta_power = z*theta_power.derivative("z")
return result
compact_denominator = [
18/x + F(159, 4),
54/x + F(131, 2),
54/x + 27,
18/x,
]
base_horizontal_row = [
-z*substitute_rational(entry, {"x": -z/(1-z)})
for entry in compact_denominator
]
for row in range(4):
reconstructed = apply_euler_operator(
substitute_rational(p_ops[row], {"n": 1}),
p_one,
)
check_zero(
f"base horizontal-row reconstruction component {row}",
base_horizontal_row[row] - reconstructed,
)
base_terminating_operator = substitute_rational(
terminating_operator,
{"n": 1},
)
check_zero(
"base polynomial satisfies the terminating operator",
apply_euler_operator(
base_terminating_operator,
p_one,
maximum_degree=4,
),
)
base_times_companion = matrix_multiply(
[base_horizontal_row],
companion(Rat(1)),
)[0]
for column in range(4):
check_zero(
f"base horizontal adjoint residual component {column}",
z*base_horizontal_row[column].derivative("z")
+ base_times_companion[column],
)
within_ratio = (
(k-1-n)
* (k-1-n-F(1, 6))
* (k-1-n-F(1, 2))
* (k-1-n-F(5, 6))
/ ((k-2*n)**3*k)
)
cross_ratio = (
(n+1)/(n+1-k)
* (n+1+F(1, 6))/(n+1+F(1, 6)-k)
* (n+1+F(1, 2))/(n+1+F(1, 2)-k)
* (n+1+F(5, 6))/(n+1+F(5, 6)-k)
* ((k-2*n-1)*(k-2*n)/(2*n*(2*n+1)))**3
)
top_ratio = (
-(n+F(7, 6))*(n+F(3, 2))*(n+F(11, 6))
/ (8*(2*n+1)**3)
)
check_zero("terminating constant-term normalization", d0(0)-normalization)
check_zero(
"terminating generic coefficient induction",
d0(k) + d1(k-1)/within_ratio - normalization*cross_ratio,
)
check_zero(
"terminating top-degree boundary",
d1(n) - normalization*top_ratio,
)
# ---------------------------------------------------------------------------
# Two formerly named special-function steps, reduced to coefficients.
# ---------------------------------------------------------------------------
ascension_left_ratio = (
(k-F(5, 6))*(k-F(1, 2))*(k-F(1, 6))/k**3
)
ascension_right_ratio = (
(k-1)
* (k-F(5, 6))
* (k-F(1, 2))
* (k-F(1, 6))
/ (k**3*(k-1))
)
check_zero("ascension base coefficient", F(1, 6)*F(1, 2)*F(5, 6)-F(5, 72))
check_zero(
"ascension consecutive-coefficient ratio",
ascension_left_ratio-ascension_right_ratio,
)
theta_product = (
(t+F(1, 6))*(t+F(1, 2))*(t+F(5, 6))
)
theta_product_expanded = (
t**3 + F(3, 2)*t**2 + F(23, 36)*t + F(5, 72)
)
check_zero(
"3F2 Euler-operator coefficient expansion",
theta_product-theta_product_expanded,
)
print("PASS: all standalone exact-equation obligations")
print("No division algorithm, CAS simplifier, root finder, or sampling was used.")

View file

@ -5,18 +5,78 @@ cd "$(dirname "$0")"
python3 certificates/p28_rank_ode_bound_verifier.py
python3 certificates/p28_convergence_constants.py
python3 certificates/p28_standalone_equations.py
python3 certificates/p28_dominant_product_algebra.py
python3 - <<'PY'
from pathlib import Path
forbidden = {
Path("solution.tex"): (
"Birkhoff",
"Poincar",
"standard ascension",
"analytic solution normalized at",
),
Path("certificates/p28_kernel_contiguity_certificate.sage"): ("quo_rem",),
Path("certificates/all_four_columns_certificate.sage"): (
"is_irreducible",
"gcd(",
),
}
for path, needles in forbidden.items():
text = path.read_text(encoding="utf-8")
for needle in needles:
if needle in text:
raise SystemExit(f"FAIL: forbidden proof shortcut {needle!r} in {path}")
print("PASS: no forbidden proof shortcuts in the mandatory path")
PY
echo "DIAGNOSTIC (not an all-N proof): finite Padé regression"
python3 certificates/p28_parametric_pade_probe.py
# ---------------------------------------------------------------------------
# OPTIONAL independent cross-checks.
#
# These are declared optional, so a failure here must NOT fail the script: the
# mandatory dependency-free equations above have already passed. Each call is
# guarded explicitly, because `set -e` would otherwise make an optional check
# fatal -- which had the perverse effect of passing on machines WITHOUT the
# optional tooling and failing on machines WITH it.
#
# Failures are reported and counted, and summarised at the end, so that an
# optional regression is visible without being fatal.
# ---------------------------------------------------------------------------
optional_failures=0
run_optional() {
echo "OPTIONAL: $*"
if "$@"; then
return 0
fi
echo "OPTIONAL FAILED (non-fatal): $*" >&2
optional_failures=$((optional_failures + 1))
return 0
}
if command -v wolframscript >/dev/null 2>&1; then
wolframscript -file certificates/p28_full_closure_certificate.wl
run_optional wolframscript -file certificates/p28_full_closure_certificate.wl
else
echo "SKIP: wolframscript is not installed; see the included PASS transcript."
echo "OPTIONAL: wolframscript is not installed; mandatory equations already passed."
fi
if command -v sage >/dev/null 2>&1; then
sage certificates/p28_kernel_contiguity_certificate.sage
sage certificates/p28_lattice_hypotheses_certificate.sage
sage certificates/all_four_columns_certificate.sage
run_optional sage certificates/p28_kernel_contiguity_certificate.sage
run_optional sage certificates/p28_lattice_hypotheses_certificate.sage
run_optional sage certificates/all_four_columns_certificate.sage
else
echo "SKIP: SageMath is not installed; independent Sage checks were not run."
echo "OPTIONAL: SageMath is not installed; mandatory equations already passed."
fi
echo
if [ "$optional_failures" -eq 0 ]; then
echo "ALL MANDATORY CHECKS PASSED; optional cross-checks passed or were absent."
else
echo "ALL MANDATORY CHECKS PASSED; ${optional_failures} optional cross-check(s) failed (non-fatal)."
fi
exit 0

View file

@ -58,15 +58,17 @@ Equivalently, \(Q_{N,j}/P_{N,j}\to\pi/\sqrt{10005}\).
The missing connection constant is fixed by an exact rank-three
hypergeometric tail. A nonterminating \(\F43\) Euler jet is carried
backward by the authoritative matrix, while the first denominator is a
terminating adjoint \(\F43\). Their common differential gauge gives an
all-\(N\) Pad\'e divisibility theorem. Positivity of the terminating
denominator at the negative CM point, together with a balanced-transfer
Cauchy estimate, turns that formal divisibility into a direct fixed-point
convergence proof. The symbolic contiguity and adjoint identities are
included as reproducible Wolfram Language and SageMath certificates.
backward by the displayed matrix, while the first denominator is a
terminating adjoint \(\F43\). Four denominator-cleared Ore identities
and three coefficient identities give an all-\(N\) Pad\'e divisibility
theorem. Positivity at the negative CM point, a Cauchy estimate, and an
explicit stable-graph contraction prove convergence for all four columns.
Every algebraic identity used below is reproduced by a dependency-free
rational-polynomial checker. The classical Chudnovsky formula, cited
precisely in Section~2, is the sole imported theorem.
\end{abstract}
\enlargethispage{2\baselineskip}
\tableofcontents
\section{Statement and compact form of the seeds}
@ -85,16 +87,49 @@ Let
\[
G_N=M_0M_1\cdots M_{N-1},\qquad G_0=I_4,
\]
where \(M_N=M(N,x)\) is the authoritative transfer matrix in the analytic
deformation
where the rational family is defined as follows. Put \(r=x^{-1}\),
\(\omega=u(3u-2)(3u+2)\), and
\begin{align*}
a_1={}&r(144u^5-288u^4+144u^3)
-99u^5+333u^4-229u^3-114u^2+40u+64,\\
a_2={}&r(432u^4-864u^3+432u^2)
-243u^4+909u^3-868u^2-80u+272,\\
a_3={}&r(432u^3-864u^2+432u)
-153u^3+648u^2-860u+360,\\
a_4={}&144r(u-1)^2,\\
b_1={}&-144ru^3+9u^4+63u^3+158u^2+168u+64,\\
b_2={}&216ru^2+36u^3-189u^2-316u-168,\\
b_3={}&108ru+54u^2-189u-158,\\
c_1={}&-288r^2u^3+
r(54u^4+378u^3+948u^2+1008u+384)\\
&\hspace{2.2em}+18u^5+45u^4-251u^3-1086u^2-1384u-576,\\
c_2={}&-432r^2u^2+
r(153u^4-657u^3+1292u^2+2064u+1072)\\
&\hspace{2.2em}-72u^4+702u^3-1069u^2-2508u-1512,\\
c_3={}&-216r^2u+
r(180u^3-891u^2+1450u+1116)\\
&\hspace{2.2em}-108u^3+864u^2-1385u-1422,\\
c_4={}&-4r^2+r(6u^2-33u+\tfrac{536}{9})
-4u^2+32u-63.
\end{align*}
Define
\begin{equation}\label{eq:deformed-matrix}
\mathcal M(u,x)=
\begin{pmatrix}
a_1/\omega&a_2/\omega&a_3/\omega&a_4/\omega\\
-u^3&-3u^2&-3u&-1\\
xb_1/144&-xb_2/72&-xb_3/36&
x(-2r-(2u-7))/2\\
x^2c_1/288&x^2c_2/144&x^2c_3/72&x^2c_4/4
\end{pmatrix},
\qquad M_N(x)=\mathcal M(2N+3,x).
\end{equation}
At \(x=x_0\), the only deformed challenge coefficient is restored by
\[
236337691420383\ \longmapsto\ \frac{14/x-567}{9}.
236337691420383=\frac{14R-567}{9}.
\]
At \(x=x_0\), this is the exact identity
\(236337691420383=(14R-567)/9\). Thus every later use of Cauchy's theorem
concerns this explicitly defined rational \(x\)-family.
The complete entries of \(M(N,x)\) appear verbatim in the accompanying
CAS certificates.
Thus every use of Cauchy's theorem below concerns the explicitly displayed
rational \(x\)-family, not an unspecified continuation.
Define four Pascal rows
\[
@ -131,7 +166,19 @@ The two official initial rows have the exact form
H_0=Ab_0+Bb_1=(A+B,B,0,0).
\end{equation}
At \(x=x_0\), these identities reproduce the official integer rows
entry by entry.
entry by entry:
\[
\begin{aligned}
A_0={}&(37169305760442252761441,\,
111507917281327441564208,\\
&\hspace{4.7em}111507917281327599720129,\,
37169305760442410917362),\\
A_1={}&(1167416361542639692320,\,
3502249084627896132160,\\
&\hspace{4.7em}3502249084627879697280,\,
1167416361542622723840).
\end{aligned}
\]
For \(j=1,\ldots,4\), write
\[
@ -156,7 +203,10 @@ and define
\Phi(x)=\frac{Ay(z)+B\theta y(z)}{S}.
\end{equation}
The classical Chudnovsky identity is
We use one external theorem: the classical Chudnovsky identity. In the
normalization used here it is Theorem~0.1 of Milla's equation-by-equation
derivation \([2]\), whose modular and CM proof is completed in
Theorem~9.7 and Chapter~10:
\[
\frac1\pi=
\frac{12}{640320^{3/2}}
@ -212,24 +262,89 @@ Its Euler jet is
\end{proposition}
\begin{proof}
The first row is verified coefficientwise from the ratio of consecutive
\(\F43\) coefficients. For the other rows, let \(t=\delta_{N+1}\).
Put \(m=(u-1)/2=N+1\). For the \(r\)-th row of
\(\mathcal M(u,x)\), define
\[
P_r(t)=\sum_{s=0}^3\mathcal M(u,x)_{r+1,s+1}t^s,\qquad
\mathcal TQ=(1-x)x\partial_xQ+(t+1)Q.
\]
The shifted tail satisfies
\[
\left[
(1-x)t(t+u)^3+
x(t+n+1)(t+n+\tfrac76)(t+n+\tfrac32)(t+n+\tfrac{11}{6})
\right]F_{N+1}=0,
L_+(t)F_{N+1}=0,
\]
where \(u=2N+3\). Each of the remaining three row differences is divided
by this degree-four Ore polynomial; its remainder is identically zero in
\(\Q(N,x)[t]\). The exact coefficient identity, the three Ore divisions,
and the normalization ratio are checked in
\texttt{p28\_full\_closure\_certificate.wl} and
\texttt{p28\_kernel\_contiguity\_certificate.sage}.
where
\[
L_+(t)=(1-x)t(t+u)^3+
x(t+m+1)(t+m+\tfrac76)(t+m+\tfrac32)(t+m+\tfrac{11}{6}).
\]
There is no division step: direct expansion gives the following four
denominator-cleared polynomial identities:
\begin{align}
u(3u-2)(3u+2)x(\mathcal TP_0-P_1)
& =144(u-1)^2L_+,\label{eq:ore0}\\
\mathcal TP_1-P_2&=-L_+,\label{eq:ore1}\\
2(\mathcal TP_2-P_3)&=(-2+7x-2ux)L_+,\label{eq:ore2}\\
36(\mathcal TP_3+\ell_3P_3+\ell_2P_2+\ell_1P_1+\ell_0P_0)
&=q_3L_+,\label{eq:ore3}
\end{align}
with
\begin{align*}
\ell_0={}&(u-1)u(3u-2)(3u+2)x/144,\\
\ell_1={}&[-576+864u-432u^2+72u^3
+(580-872u+405u^2-36u^3)x]/72,\\
\ell_2={}&[432-432u+108u^2
+(-436+405u-54u^2)x]/36,\\
\ell_3={}&(-12+6u+11x-2ux)/2,\\
q_3={}&-36+(536-297u+54u^2)x
+(-567+288u-36u^2)x^2.
\end{align*}
For clarity, the coefficient calculation producing the first row is also
written without a special-function routine. Set
\[
\begin{aligned}
A(t)&=\frac{144(u-1)^2(t+u)^3}{u(3u-2)(3u+2)},&
B(t)&=P_0(t)-\frac{A(t)}x,\\
\varrho&=-\frac{(3u-2)(3u+2)}{144(u-1)^2u^2},\\
\chi_j&=
\frac{(m+j)(m+\frac16+j)(m+\frac12+j)(m+\frac56+j)}
{m(m+\frac16)(m+\frac12)(m+\frac56)}\\
&\quad{}\times
\left(\frac{2m(2m+1)}{(2m+j)(2m+j+1)}\right)^3,\\
\psi_j&=
\frac{(m+j)(m+\frac16+j)(m+\frac12+j)(m+\frac56+j)}
{(2m+j)^3(j+1)} .
\end{aligned}
\]
The constant and generic coefficient equations are
\begin{equation}\label{eq:tail-coefficients}
\varrho[-A(0)]=1,\qquad
\varrho\left[-A(j)\chi_j+
\frac{(A(j-1)+B(j-1))\chi_{j-1}}{\psi_{j-1}}\right]=1
\quad(j\ge1).
\end{equation}
Clearing the displayed nonzero factors turns
\eqref{eq:ore0}--\eqref{eq:tail-coefficients} into polynomial
equalities with every coefficient zero. The independent script
\texttt{p28\_standalone\_equations.py} expands precisely these equalities
using only rational addition and multiplication. Equation
\eqref{eq:tail-coefficients} gives the first row of
\eqref{eq:tail-contiguity}; applying
\eqref{eq:ore0}--\eqref{eq:ore3} successively gives the other three
Euler-jet rows.
\end{proof}
For \(N=0\), the standard ascension identity gives
For \(N=0\), write \(y(z)=1+\sum_{k\ge1}c_kz^k\). The coefficient of
\(z\) is
\[
c_1=\frac{(1/6)(1/2)(5/6)}{1^3}=\frac5{72},
\]
and, after shifting \(k\mapsto k+1\), both sides below have initial
coefficient \(5/72\) and consecutive-coefficient ratio
\[
\frac{(k+\frac16)(k+\frac12)(k+\frac56)}{(k+1)^3}.
\]
Hence coefficient equality, rather than a named ascension rule, gives
\begin{equation}\label{eq:ascension}
F_0=y-1
=\frac5{72}z
@ -255,6 +370,14 @@ The transformed hypergeometric equation is
\begin{equation}\label{eq:transformed-ode}
72\theta^3y+108x\theta^2y+46x\theta y+5xy=0.
\end{equation}
Indeed the coefficient ratio of \(y\) gives
\[
\left[\theta^3-
z(\theta+\tfrac16)(\theta+\tfrac12)(\theta+\tfrac56)\right]y=0.
\]
Substituting \(z=-x/(1-x)\), using
\(\theta=(1-x)x\partial_x\), and multiplying by \(72(1-x)\)
expands to \eqref{eq:transformed-ode}.
Using the displayed decomposition of \(C\), equations
\eqref{eq:ascension}--\eqref{eq:transformed-ode} give
\[
@ -309,6 +432,21 @@ Since \(z=-x+O(x^2)\),
\end{equation}
The leading vector in \eqref{eq:tail-direction} is precisely the image
direction in \eqref{eq:rank-one}.
The other expansion required below is equally direct. Since
\[
F_{N+1}=\kappa_{N+1}z^{N+2}(1+O(z)),\qquad
\delta_{N+1}=\theta-(N+2),
\]
the shifted derivatives kill the leading monomial, and therefore
\begin{equation}\label{eq:next-tail-direction}
k_{N+1}=x^{N+2}\widetilde\eta_N
\left(\e_1+xs_N+O(x^2)\right),
\qquad\widetilde\eta_N\ne0.
\end{equation}
Moreover, \eqref{eq:rank-one} gives
\[
J_N(0)\e_1=u^3(a_N,-1,-1,-1)^T\ne0.
\]
\begin{lemma}[DVR step, including the extra first-column zero]
\label{lem:dvr}
@ -378,7 +516,8 @@ Consequently the constant term in the first column of \(fC\) is
Apply Lemma~\ref{lem:dvr} inductively, using
\eqref{eq:annihilation}, \eqref{eq:rank-one},
\eqref{eq:tail-direction}, and \(M_Nk_{N+1}=k_N\).
\eqref{eq:tail-direction}, \eqref{eq:next-tail-direction}, the displayed
nonzero first column of \(J_N(0)\), and \(M_Nk_{N+1}=k_N\).
The stronger last-row assertion follows from
\eqref{eq:row-relation}.
\end{proof}
@ -421,39 +560,154 @@ can vanish.
\end{proposition}
\begin{proof}
The proof is an exact differential-gauge calculation in
\(\Q(n,z)\). The nonterminating tail
Write \(p_n=\widehat Q_{n-1}\) for \(n\ge1\). We use coefficient
induction, because normalization at \(z=0\) alone
would not select a unique solution of the fourth-order equation. To expose
the matrix-to-scalar bridge, write
\[
\F43\left(
\begin{matrix}n,n+\frac16,n+\frac12,n+\frac56\\
2n,2n,2n
\end{matrix};z\right)
\mathcal L_n(t)=t(t+2n-1)^3
-z(t+n)(t+n+\tfrac16)(t+n+\tfrac12)(t+n+\tfrac56)
=\sum_{j=0}^4c_jt^j
\]
has a \(4\times4\) Euler companion system. Direct simplification gives
and define, for operator polynomials with coefficients on the left,
\[
\mathcal C_n(z)\,[-zM(2n+1,-z/(1-z))]
-\theta[-zM(2n+1,-z/(1-z))]
-[-zM(2n+1,-z/(1-z))]\mathcal C_{n+1}(z)=0.
\Theta Q=z\partial_zQ+tQ.
\]
The transformed seed \(-zC(-z/(1-z))\) is a horizontal adjoint row.
Eliminating its other three coordinates from the horizontal equation
produces exactly
The four horizontal components are reconstructed from the first by
\[
\left[
\theta(\theta-2n)^3
-z(\theta-n)(\theta-n-\tfrac16)
(\theta-n-\tfrac12)(\theta-n-\tfrac56)
\right]\widehat Q_N=0.
\pi_0=1,\qquad
\pi_3=\frac{c_4}{c_0}t,\qquad
\pi_2=\frac{c_3}{c_4}\pi_3-\Theta\pi_3,\qquad
\pi_1=\frac{c_2}{c_4}\pi_3-\Theta\pi_2.
\]
The analytic solution normalized at \(z=0\) is the terminating
\(\F43\) in \eqref{eq:qhat}.
The remaining horizontal equation is the direct factorization
\[
\begin{aligned}
\Theta\pi_1+1-\frac{c_1}{c_4}\pi_3
={}&-\frac{72}{n(2n+1)(6n+1)(6n+5)z}\bigl[
t(t-2n)^3\\
&\hspace{4em}
-z(t-n)(t-n-\tfrac16)
(t-n-\tfrac12)(t-n-\tfrac56)\bigr].
\end{aligned}
\]
Let
\[
\mathcal C_n(z)=
\begin{pmatrix}
0&1&0&0\\
0&0&1&0\\
0&0&0&1\\
-c_0/c_4&-c_1/c_4&-c_2/c_4&-c_3/c_4
\end{pmatrix}.
\]
The propagation of the reconstructed row is the following sixteen-entry
identity:
\begin{equation}\label{eq:full-gauge}
\mathcal C_n[-z\mathcal M(2n+1,-z/(1-z))]
-\theta[-z\mathcal M(2n+1,-z/(1-z))]
-[-z\mathcal M(2n+1,-z/(1-z))]\mathcal C_{n+1}=0.
\end{equation}
Finally, direct contraction with the displayed matrix gives
\begin{equation}\label{eq:matrix-scalar-bridge}
\sum_{r=0}^3\pi_r(t)
\left[-z\mathcal M(2n+1,-z/(1-z))\right]_{r+1,1}
=d_0(t)+zd_1(t).
\end{equation}
These are identities in \(\Q(n,z)(t)\). The factors depending on the
integer \(n\) are nonzero for \(n\ge1\); no value is obtained by dividing
at \(z=0\), because the verifier cross-multiplies first and the reconstructed
base functions have removable limits there. The mandatory
sparse-polynomial verifier checks every
reconstruction equation, the closing factorization, and
\eqref{eq:full-gauge}--\eqref{eq:matrix-scalar-bridge} by cross
multiplication. For any reconstructed horizontal row these identities give
\begin{equation}\label{eq:terminating-step}
p_{n+1}
=\bigl(d_0(\theta)+zd_1(\theta)\bigr)p_n,
\end{equation}
where
\[
d_0(t)=
\frac{72(2n+1)^2(2n-t)^3}{n(6n+1)(6n+5)}
\]
and
\[
d_1(t)=-\frac{P(n,t)}{n(2n+1)(6n+1)(6n+5)}
\]
with
\begin{align*}
P(n,t)={}&-5n-76n^2+1404n^3+4360n^4+4320n^5+1440n^6\\
&+(5+127n-1760n^2-6536n^3-7632n^4-3024n^5)t\\
&+(-51+659n+3086n^2+4500n^3+2232n^4)t^2\\
&+(-72-432n-864n^2-576n^3)t^3.
\end{align*}
Thus \eqref{eq:terminating-step} is the scalar form of the displayed
matrix recurrence; no differential-equation uniqueness is used below.
For completeness, the CAS certificate does not rely only on this
differential equation. It computes the actual one-step scalar operator
and verifies its generic coefficient identity, its \(k=0\) normalization,
and the separate top boundary \(k=n+1\). Every remainder simplifies
identically to zero. This proves the statement for all \(n\), not merely
for sampled values.
Let
\[
h_{n,k}=
\frac{(-n)_k(-n-\frac16)_k(-n-\frac12)_k(-n-\frac56)_k}
{(1-2n)_k^3k!}
\quad(0\le k\le n),
\qquad
\nu_n=\frac{576n^2(2n+1)^2}{(6n+1)(6n+5)}.
\]
For \(n\ge1\), clearing the displayed nonzero denominators gives exactly
\begin{align}
d_0(0)&=\nu_n,\label{eq:term-constant}\\
d_0(k)+d_1(k-1)\frac{h_{n,k-1}}{h_{n,k}}
&=\nu_n\frac{h_{n+1,k}}{h_{n,k}}
\qquad(1\le k\le n),\label{eq:term-generic}\\
d_1(n)&=-\nu_n
\frac{(n+\frac76)(n+\frac32)(n+\frac{11}{6})}
{8(2n+1)^3}.\label{eq:term-top}
\end{align}
The base row is not assumed: from the first component of \(C\),
\[
q_0(x)=\frac{18}{x}+\frac{159}{4},\qquad
Q_0(x)=xq_0(x)=18+\frac{159}{4}x,
\]
and therefore
\[
p_1(z)=(1-z)Q_0\!\left(-\frac{z}{1-z}\right)
=18\left(1-\frac{77}{24}z\right).
\]
Direct application of the four displayed \(\pi_r\) operators gives the
four base identities
\begin{equation}\label{eq:base-horizontal-row}
-zC\!\left(-\frac{z}{1-z}\right)
=\left.(\pi_0(\theta)p_1,\pi_1(\theta)p_1,
\pi_2(\theta)p_1,\pi_3(\theta)p_1)\right|_{n=1}.
\end{equation}
The fourth base equation is also direct:
\[
\left[
\theta(\theta-2)^3
-z(\theta-1)(\theta-\tfrac76)
(\theta-\tfrac32)(\theta-\tfrac{11}{6})
\right]p_1=0.
\]
Equivalently, if \(H_1=-zC(-z/(1-z))\), then all four components of
\[
\theta H_1+H_1\mathcal C_1=0
\]
vanish. The mandatory verifier checks both forms independently.
Moreover,
\[
\deg((d_0(\theta)+zd_1(\theta))p_n)\le n+1.
\]
Equations \eqref{eq:term-constant}--\eqref{eq:term-top} therefore prove,
coefficient by coefficient, that the right side of
\eqref{eq:terminating-step} is
\(\alpha_{n+1}\sum_{k=0}^{n+1}h_{n+1,k}z^k\).
Starting from \eqref{eq:base-horizontal-row},
\eqref{eq:full-gauge} propagates the horizontal form at every step.
This proves \eqref{eq:qhat} and \eqref{eq:normalization} for the actual
row \(CG_N\), not merely for a scalar surrogate.
The mandatory standalone checker independently expands the cleared
identities and rejects any nonzero coefficient.
\end{proof}
\begin{corollary}[Positivity at the CM point]\label{cor:positivity}
@ -515,10 +769,19 @@ and therefore
\le10^4\left(\frac um\right)^{i-1}
\left(\frac u{m+1}\right)^{3-j}.
\]
For \(m\ge1\), \(u/m\le5\) and \(u/(m+1)\le5/2\); summing four entries in
each row gives the deliberately loose uniform bound
For \(m\ge1\), \(u/m\le5\) and \(u/(m+1)\le5/2\). Because the exponent
\(3-j\) is negative when \(j=4\), we use the exact case split
\[
\|\mathcal B_m\|_\infty\le4\cdot10^8,\qquad
\left(\frac{u}{m+1}\right)^{3-j}\le
\begin{cases}
(5/2)^{3-j}\le25/4,&j\le3,\\[1mm]
1/2,&j=4,
\end{cases}
\]
where the second line follows from \(u/(m+1)=2+1/(m+1)\ge2\).
Thus every entry is at most \(7{,}812{,}500\), and summing each row gives
\[
\|\mathcal B_m\|_\infty\le31{,}250{,}000<4\cdot10^8,\qquad
\|M_0\|_\infty<10^7.
\]
The balancing telescopes:
@ -531,6 +794,23 @@ It follows that, for \(N\ge1\),
\max_{|x|=1/4}|\mathcal R_{N,r}(x)|
\le6\cdot10^{10}(N!)^2(4\cdot10^8)^{N-1}(1/4)^n.
\end{equation}
We now verify the analytic hypothesis behind the next step. On
\(|x|\le1/4\),
\[
\left|-\frac{x}{1-x}\right|\le\frac13<1,
\]
so the series defining \(y\) and its first three Euler derivatives are
holomorphic on a neighborhood of the closed disk. Because \(f=O(x)\),
the simple pole of \(C\) cancels in \(fC\), so \(\mathcal E_0\) is
holomorphic there. Inspection of \eqref{eq:deformed-matrix} shows that
each \(M_m\) is holomorphic off \(x=0\) in this disk and has at most a
simple pole at \(0\). Hence
\(\mathcal R_{N,r}=x^n(\mathcal E_N)_{r,1}\), with \(n=N+1\), is
holomorphic on the disk after removing its possible singularity at zero.
Proposition~\ref{prop:divisibility} strengthens its order there to at
least \(2n\). Therefore
\(\mathcal R_{N,r}(x)/x^{2n}\) has a removable singularity at zero and
is holomorphic on a neighborhood of the closed disk.
Applying the maximum principle to
\(\mathcal R_{N,r}(x)/x^{2n}\) gives
\begin{equation}\label{eq:cauchy}
@ -552,9 +832,9 @@ Combining this with \eqref{eq:cauchy}, we obtain
\begin{equation}\label{eq:geometric-error}
\left|\frac{E_{N,r}(x_0)}{q_N(x_0)}\right|
=\left|\frac{\mathcal R_{N,r}(x_0)}{Q_N(x_0)}\right|
\le C(x_0)\,\beta(x_0)^N,
\le K_0\,\beta(x_0)^N,
\end{equation}
where \(C(x_0)<\infty\) and
where \(K_0<\infty\) is independent of \(N\) and
\[
\beta(x_0)=
\frac{4\cdot10^8}{29}
@ -592,9 +872,22 @@ Equation \eqref{eq:CM-value} therefore proves
\section{The other three official columns}
For completeness, we recall the exact finite-frame reduction already used
to establish convergence of the recurrence. The balanced transfer tends
to
All matrices in this section are evaluated at \(x=x_0=1/R\).
For \(m\ge1\), retain
\[
D_m=\diag(1,m,m^2,m^3),\qquad
\mathcal B_m=D_m^{-1}M_mD_{m+1}/(m+1)^2,
\]
and, for any row \(a\), put
\[
Z_m(a)=\frac{aG_mD_m}{(m!)^2}.
\]
Then the balancing gives the exact recurrence
\begin{equation}\label{eq:balanced-row-recurrence}
Z_{m+1}(a)=Z_m(a)\mathcal B_m.
\end{equation}
Substitution in the displayed matrix shows, entry by entry, that
\(\mathcal B_m-\mathcal S=O(m^{-1})\), where
\[
\mathcal S=
\begin{pmatrix}
@ -611,94 +904,255 @@ Q_R(t)={}&R^2t^4-(64R^3-56R^2-4)t^3\\
&+(48R^2-262R+220)t^2-(12R-8)t+1.
\end{aligned}
\]
The quartic is irreducible. Its spectral separation is also exact: on
\(|t|=1\), the absolute value of its cubic coefficient exceeds the sum of
the other coefficient magnitudes, because
On \(|t|=1\), the cubic coefficient strictly dominates the sum of the
other four coefficient magnitudes, because
\[
(64R^3-56R^2-4)-(49R^2-250R+213)
=64R^3-105R^2+250R-217>0.
\]
Rouch\'e's theorem therefore places exactly three roots in \(|t|<1\) and
the remaining root \(\rho\) in \(|t|>1\). Hence \(\rho\) is the unique
root of maximal modulus.
We next remove any possible nonvanishing assumption about the denominator.
The positivity estimate above and \(Q_N=x_0^nq_N\) give
\begin{equation}\label{eq:q-lower}
q_N(x_0)\ge
18\cdot29^N(N!)^2
\left(\frac{1-x_0}{x_0}\right)^{N+1}.
\end{equation}
The scalar recurrence obtained from the first cyclic coordinate is of
Poincar\'e type after the \((N!)^2\) balancing. The discrete
Birkhoff--Poincar\'e theorem \([4,\text{ Chapters 3 and 5}]\) applies because
the balanced coefficients are rational in \(N\), have full expansions in
\(N^{-1}\), and the limiting spectrum is simple. If the coefficient of the
\(\rho\)-mode in \(q_N\) were zero, the three-root separation just proved
would give, for some \(\tau<1\),
To count the roots without an irreducibility or root-finder call, consider
\[
|q_N(x_0)|\le K_\tau (N!)^2\tau^N.
H_s(t)=-(64R^3-56R^2-4)t^3+
s\{R^2t^4+(48R^2-262R+220)t^2-(12R-8)t+1\}.
\]
This contradicts \eqref{eq:q-lower}. Thus the dominant denominator
coefficient is nonzero by a wholly exact argument.
The strict inequality above gives \(H_s(t)\ne0\) for
\(|t|=1\), \(0\le s\le1\). Thus the winding number of
\(H_s(e^{i\vartheta})\) about zero cannot change with \(s\); at \(s=0\)
it is \(3\). Hence \(Q_R=H_1\) has three zeros in \(|t|<1\) and one,
counted with multiplicity, in \(|t|>1\). Moreover
\[
Q_R(1)=-(64R^3-105R^2+274R-233)<0,\qquad
\lim_{t\to+\infty}Q_R(t)=+\infty.
\]
Consequently the unique exterior zero is a simple real number
\(\rho>1\).
It remains to transfer the first-column result to the other columns. For
\(r\ge1\), put
\begin{lemma}[Explicit dominant-product dichotomy]
\label{lem:dominant-product}
Fix \(\tau\) with
\[
\max_{\lambda\ne\rho}|\lambda|<\tau<1,
\]
Then there exist a late index \(m_0\), a linear functional \(\Lambda\) on
rows, nonzero scalars \(L_m\) independent of the row, and a left
\(\rho\)-eigenvector \(w\) of \(\mathcal S\) such that the following
alternatives hold:
\begin{align}
\Lambda(a)=0&\quad\Longrightarrow\quad
\|Z_m(a)\|\le K_a\tau^{m-m_0},\label{eq:exceptional-decay}\\
\Lambda(a)\ne0&\quad\Longrightarrow\quad
Z_m(a)=\Lambda(a)L_m\bigl(w+o_a(1)\bigr).
\label{eq:dominant-asymptotic}
\end{align}
\end{lemma}
\begin{proof}
Choose an invertible \(P\) with
\[
P^{-1}\mathcal SP=
\begin{pmatrix}\rho&0\\0&A\end{pmatrix},
\qquad\operatorname{spr}(A)<1.
\]
Choose \(\operatorname{spr}(A)<\theta<\tau\). For stable rows define
\[
\|\beta\|_\theta=\sum_{k=0}^{\infty}
\theta^{-k}\|\beta A^k\|_0.
\]
The finite Jordan identity
\[
J_\lambda^k=\sum_{\ell=0}^{s-1}
\binom{k}{\ell}\lambda^{k-\ell}N^\ell
\]
gives, for \(\operatorname{spr}(A)<\eta<\theta\),
\(\|A^k\|_0\le Ck^2\eta^k\); hence the series converges and
\[
\|\beta A\|_\theta
=\theta\sum_{k=1}^{\infty}\theta^{-k}\|\beta A^k\|_0
\le\theta\|\beta\|_\theta.
\]
Use the dual norm for stable columns.
Write
\[
T_m=P^{-1}\mathcal B_mP=
\begin{pmatrix}a_m&b_m\\c_m&E_m\end{pmatrix}.
\]
Then \(a_m\to\rho\), \(b_m,c_m\to0\), and \(E_m\to A\).
Choose
\[
\theta<d_*<\tau<1<a_*<\rho.
\]
For sufficiently large \(m_0\), a positive \(\epsilon\) makes, for
\(m\ge m_0\),
\begin{gather}
|a_m|\ge a_*,\quad\|E_m\|\le d_*,
\quad\|b_m\|,\|c_m\|\le\epsilon,\label{eq:block-bounds}\\
d_*+\epsilon<\tau,\quad a_*-\epsilon>1,\quad
d_*+\epsilon<a_*-\epsilon,\label{eq:block-separation}\\
q:=\frac{d_*}{a_*-\epsilon}
+\frac{(d_*+\epsilon)\epsilon}{(a_*-\epsilon)^2}<1.
\label{eq:graph-contraction-constant}
\end{gather}
For stable columns \(\|h\|\le1\), set
\[
\Psi_m(h)=\frac{E_mh-c_m}{a_m-b_mh}.
\]
Equations \eqref{eq:block-bounds}--\eqref{eq:block-separation} give
\[
\|\Psi_m(h)\|
\le\frac{d_*+\epsilon}{a_*-\epsilon}<1.
\]
For two such columns,
\[
\Psi_m(h)-\Psi_m(k)
=\frac{E_m(h-k)}{a_m-b_mh}
+\frac{(E_mk-c_m)b_m(h-k)}
{(a_m-b_mh)(a_m-b_mk)},
\]
so \eqref{eq:graph-contraction-constant} gives
\[
\|\Psi_m(h)-\Psi_m(k)\|\le q\|h-k\|.
\]
For \(M>m\), set \(h_M^{(M)}=0\) and recurse backward by
\(h_j^{(M)}=\Psi_j(h_{j+1}^{(M)})\). Then, for \(M'>M\),
\[
\|h_m^{(M')}-h_m^{(M)}\|\le2q^{M-m}.
\]
Thus \(h_m=\lim_{M\to\infty}h_m^{(M)}\) exists and satisfies
\begin{equation}\label{eq:graph-invariance}
h_ma_m+c_m=(h_mb_m+E_m)h_{m+1}.
\end{equation}
The defining recurrence gives the explicit bound
\[
\|h_m\|\le
\frac{\|E_m\|\|h_{m+1}\|+\|c_m\|}
{|a_m|-\|b_m\|}.
\]
Together with \(\|A\|_\theta/\rho<1\), this gives
\[
\limsup_{m\to\infty}\|h_m\|
\le\frac{\theta}{\rho}\limsup_{m\to\infty}\|h_m\|,
\qquad\text{hence}\qquad h_m\to0.
\]
Write
\[
U_m(a)=Z_m(a)P=(\alpha_m,\beta_m),\qquad
\xi_m=\alpha_m-\beta_mh_m,\qquad
d_m=a_m-b_mh_{m+1}.
\]
Using \eqref{eq:graph-invariance} in
\(U_{m+1}=U_mT_m\) gives the exact scalar equation
\[
\xi_{m+1}=d_m\xi_m.
\]
Define the composed seed functional and product
\[
\Lambda(a)=\alpha_{m_0}(a)-\beta_{m_0}(a)h_{m_0},\qquad
L_m=\prod_{\ell=m_0}^{m-1}d_\ell.
\]
Both are now explicit, \(\Lambda\) is linear, and
\(\xi_m=\Lambda(a)L_m\). Equations
\eqref{eq:block-bounds}--\eqref{eq:block-separation} ensure
\(d_m\ne0\).
If \(\Lambda(a)=0\), then \(\alpha_m=\beta_mh_m\) and
\[
\beta_{m+1}=\beta_m(E_m+h_mb_m),\qquad
\|\beta_{m+1}\|<(d_*+\epsilon)\|\beta_m\|
<\tau\|\beta_m\|,
\]
which proves \eqref{eq:exceptional-decay}.
If \(\Lambda(a)\ne0\), put \(r_m=\beta_m/\xi_m\). Exact substitution
gives
\[
r_{m+1}
=\frac{b_m+r_m(E_m+h_mb_m)}{d_m}.
\]
Here \(b_m/d_m\to0\) and
\((E_m+h_mb_m)/d_m\to A/\rho\), whose norm is below one.
Enlarge \(m_0\) once more, redefining \(\Lambda\) and \(L_m\) from this
new index, so that for some \(q_1<1\),
\[
\left\|\frac{E_m+h_mb_m}{d_m}\right\|\le q_1
\qquad(m\ge m_0).
\]
Then, for every \(m\ge m_0\),
\[
\|r_m\|\le q_1^{m-m_0}\|r_{m_0}\|
+\sum_{\ell=m_0}^{m-1}q_1^{m-1-\ell}
\left\|\frac{b_\ell}{d_\ell}\right\|\longrightarrow0.
\]
Since \(\alpha_m/\xi_m=1+r_mh_m\to1\),
\[
U_m(a)=\Lambda(a)L_m\bigl((1,0)+o_a(1)\bigr).
\]
Multiplying by \(P^{-1}\) proves
\eqref{eq:dominant-asymptotic} with
\[
w=(1,0)P^{-1},\qquad w\mathcal S=\rho w.
\]
\end{proof}
No GCD or irreducibility decision is needed to show that all four
coordinates of \(w\) are nonzero. Define the polynomial row \(w(t)\) by
\[
\begin{aligned}
F_r&=[\,\e_1,M_r\e_1,M_rM_{r+1}\e_1,
M_rM_{r+1}M_{r+2}\e_1\,],\\
\gamma_{r,k}&=\prod_{\ell=1}^{k}(r+\ell)^2,\\
C_r&=[\,\e_1,\mathcal B_r\e_1,
\mathcal B_r\mathcal B_{r+1}\e_1,
\mathcal B_r\mathcal B_{r+1}\mathcal B_{r+2}\e_1\,].
w_1(t)={}&Rt(Rt^2-7)+12R^2t^2+4t^2+44t+10,\\
\frac{w_2(t)}2={}&R^2t((48R-27)t-28)
+(194R-108)t+40R-23,\\
w_3(t)={}&R^2t((48R-17)t-8)
+(198R-68)t+71R-32,\\
w_4(t)={}&2R(8+(17+3R)t+4R^2t^2).
\end{aligned}
\]
The balancing telescopes exactly:
Direct multiplication gives the exact polynomial identity
\[
F_r=D(r)C_r\diag(\gamma_{r,0},\ldots,\gamma_{r,3}),
\qquad
C_r\longrightarrow
C=[\,\e_1,\mathcal S\e_1,\mathcal S^2\e_1,\mathcal S^3\e_1\,].
w(t)(tI-\mathcal S)=(Q_R(t),0,0,0).
\]
The limiting cyclic frame is nonsingular:
At \(t=\rho\), this is a left \(\rho\)-eigenvector. The exterior
eigenspace is one-dimensional, so the vector in
Lemma~\ref{lem:dominant-product} may be rescaled to \(w(\rho)\), with the
inverse rescaling absorbed into \(L_m\). Since \(R>7\) and \(\rho>1\),
every displayed grouping is positive. Thus \(w_j(\rho)>0\) for
\(j=1,2,3,4\); below we abbreviate \(w_j=w_j(\rho)\).
Undoing the balancing in \eqref{eq:dominant-asymptotic} gives, whenever
\(\Lambda(a)\ne0\),
\begin{equation}\label{eq:all-column-asymptotic}
aG_m\e_j=(m!)^2m^{-(j-1)}
\Lambda(a)L_m\bigl(w_j+o_a(1)\bigr).
\end{equation}
It remains to verify that the two official rows are not exceptional.
The positivity estimate and \(Q_m=x_0^{m+1}q_m\) give
\begin{equation}\label{eq:q-lower}
\frac{q_m(x_0)}{(m!)^2}
\ge18(R-1)\,[29(R-1)]^m.
\end{equation}
If \(\Lambda(C)=0\), the first coordinate of
\eqref{eq:exceptional-decay} would contradict \eqref{eq:q-lower}.
Therefore
\[
\det C
=-\frac{4(27R-11)(128R^2-149R-43)}{R^6}\ne0.
\Lambda(A_1)=S\Lambda(C)\ne0.
\]
Thus \(F_r\) is invertible for all sufficiently large \(r\). If
\(y_r(a)=aG_r\e_1\), exact inversion of this frame gives
If \(\Lambda(A_0)=0\), then
\eqref{eq:exceptional-decay}, \eqref{eq:dominant-asymptotic}, and
\(|d_m|>1\) for large \(m\) would make the first-column quotient tend
to zero, contradicting \eqref{eq:first-column}. Hence
\(\Lambda(A_0)\ne0\) as well.
Because \(w_j>0\), equation \eqref{eq:all-column-asymptotic} first proves
that every \(Q_{m,j}\) is nonzero for all sufficiently large \(m\), and
only then permits division:
\[
aG_r\e_j=r^{-(j-1)}
\sum_{k=0}^{3}(C_r^{-1})_{k+1,j}
\frac{y_{r+k}(a)}{\gamma_{r,k}}.
\lim_{m\to\infty}\frac{P_{m,j}}{Q_{m,j}}
=\frac{\Lambda(A_0)}{\Lambda(A_1)}
=\lim_{m\to\infty}\frac{P_{m,1}}{Q_{m,1}}
=\frac{\sqrt{10005}}{\pi}.
\]
The same Birkhoff--Poincar\'e theorem supplies a linear dominant functional
\(\Lambda\) and an exponent \(\sigma\) such that, for fixed \(k\),
\[
\frac{y_{r+k}(a)}
{(r!)^2\rho^r r^\sigma\gamma_{r,k}}
\longrightarrow\Lambda(a)\rho^k.
\]
Consequently
\[
\frac{aG_r\e_j}
{(r!)^2\rho^r r^{\sigma-(j-1)}}
\longrightarrow\Lambda(a)\,\widetilde w_j,\qquad
\widetilde w=[1,\rho,\rho^2,\rho^3]C^{-1}.
\]
An explicit left eigenvector is obtained from the first row of
\(R^2\operatorname{adj}(tI-\mathcal S)\). Each of its four coordinate
polynomials is coprime to \(Q_R\); hence no coordinate vanishes at \(\rho\).
It is a nonzero multiple of \(\widetilde w\), so
\(\widetilde w_j\ne0\) for every \(j\). Applying the last limit to
\(a=A_0,A_1\), using the exact denominator nonvanishing above, gives
\[
\lim_{N\to\infty}\frac{P_{N,j}}{Q_{N,j}}
=\frac{\Lambda(A_0)}{\Lambda(A_1)}
\qquad(j=1,2,3,4).
\]
Equation \eqref{eq:first-column} evaluates this common ratio. We conclude:
We conclude:
\begin{theorem}[Ramanujan Challenge Problem 2.8]\label{thm:main}
For every official column \(j=1,2,3,4\),
@ -727,29 +1181,42 @@ The proof package contains the following certificates.
File & Exact obligation\\
\midrule
\path{p28_full_closure_certificate.wl}
& Authoritative differential gauge; nonterminating tail contiguity;
terminating adjoint equation; coefficientwise \(n\)-contiguity;
normalization and top boundary; exact spectral and cyclic-frame closure.\\
& Optional independent Wolfram cross-check of the differential gauge and
hypergeometric closure.\\
\path{p28_standalone_equations.py}
& Mandatory dependency-free expansion of the four cleared Ore
factorizations, the tail coefficient equations, the terminating base,
generic, and top identities, ascension, and the \(\F32\) equation.\\
\path{p28_dominant_product_algebra.py}
& Mandatory dependency-free verification of
\(\mathcal B_m=\mathcal S+O(m^{-1})\), the characteristic polynomial,
the root-separation inequalities, the left-eigenvector identity, and
the four positive coordinate rewrites.\\
\path{p28_kernel_contiguity_certificate.sage}
& Independent coefficient/Ore proof of \(M_Nk_{N+1}=k_N\).\\
& Optional independent Sage check of the four displayed
factorizations; it performs no Ore division.\\
\path{p28_lattice_hypotheses_certificate.sage}
& Rank-one factorization, tail direction, and transformed ODE identities.\\
& Optional exact cross-check of the rank-one factorization, tail
direction, and transformed ODE identities.\\
\path{p28_convergence_constants.py}
& Exact rational verification of the coefficient bounds,
\(\alpha_{n+1}/\alpha_n\ge29n^2\), and \(\beta(x_0)<1\).\\
\path{all_four_columns_certificate.sage}
& Balanced limit, Rouch\'e separation, nonzero eigenvector coordinates,
and invertible cyclic frame.\\
& Optional Sage cross-check of the balanced limit and exterior-root
algebra; the analytic contraction is proved in Lemma~\ref{lem:dominant-product}.\\
\path{p28_parametric_pade_probe.py}
& Dependency-free finite exact regression of the predicted valuations.\\
& Diagnostic finite exact regression of the predicted valuations; it is
not used as proof of an all-\(N\) statement.\\
\bottomrule
\end{tabular}
\end{center}
The Wolfram certificate performs symbolic identities over
\(\Q(n,z)\); it uses no numerical samples. The Python constants check uses
only the standard library's \texttt{fractions.Fraction}. The SageMath
files are independent exact cross-checks.
The two mandatory algebra checkers use only the standard library's
\texttt{fractions.Fraction}, sparse coefficient dictionaries, and explicit
addition, multiplication, differentiation, and determinant expansion.
They invoke no division algorithm, factorizer, root finder, special-function
library, or numerical sample. Wolfram Language and SageMath are optional
independent cross-checks, not a trust requirement.
\section*{References}
\addcontentsline{toc}{section}{References}
@ -758,6 +1225,10 @@ files are independent exact cross-checks.
\item D. V. Chudnovsky and G. V. Chudnovsky,
``Approximations and complex multiplication according to Ramanujan,''
in \emph{Ramanujan Revisited}, Academic Press, 1988, pp.~375--472.
\item L. Milla,
``A detailed proof of the Chudnovsky formula with means of basic
complex analysis,'' arXiv:1809.00533v6, 2021,
\href{https://arxiv.org/abs/1809.00533}{arXiv:1809.00533}.
\item J. L. Fields,
``Rational approximations to generalized hypergeometric functions,''
\emph{Mathematics of Computation} \textbf{19} (1965), 606--624,
@ -767,9 +1238,6 @@ files are independent exact cross-checks.
``Hermite--Pad\'e approximants of generalized hypergeometric
functions,'' \emph{Russian Acad. Sci. Sb. Math.}
\textbf{83} (1995), 189--219.
\item S. Bodine and D. A. Lutz,
\emph{Asymptotic Integration of Differential and Difference Equations},
Lecture Notes in Mathematics 2129, Springer, 2015, Chapters 3 and 5.
\item The Ramanujan Machine,
\href{https://www.ramanujanmachine.com/ramanujan-challenge/}
{Ramanujan Challenge}, Problem 2.8.

View file

@ -0,0 +1,127 @@
# Adversarial Audit — Ramanujan Challenge Problem 2.8
## Verdict
The recurrence-specific proof path passes the repaired adversarial audit.
Every Ore, differential-gauge, terminating-induction, valuation, convergence,
and all-four-column obligation is now displayed as an equation and replayed
without a computer-algebra decision procedure. The active all-column proof is
an elementary positive-cone contraction; the earlier spectral/stable-graph
route remains in the package as a replayed legacy alternative.
The exact trust boundary is important:
- The proof imports the classical Chudnovsky formula as one explicitly named
theorem, with a precise citation to a complete modular/CM derivation.
- It also uses foundational results stated with their hypotheses: absolute
convergence of power series, the maximum modulus principle, and completeness
of bounded monotone real sequences.
- It does **not** claim to be axiom-free or to reconstruct those foundational
theorems from set theory.
Relative to that explicit boundary, no recurrence-specific assumption,
vacuous implication, numerical-equality inference, or hidden CAS remainder
remains.
## Defects found and repaired
| Initial defect | Why it failed | Equation-level repair |
|---|---|---|
| The deformed transfer was under-defined | Only one substituted coefficient was shown; later notation changed the meaning of the first argument | Displayed all sixteen entries of \(\mathcal M(u,x)\), defined \(M_N(x)=\mathcal M(2N+3,x)\), and displayed both official seed rows |
| Three matrix terms lost a plus sign during the first repair | The manuscript matrix then differed from the certified matrix | Restored the three sums in \(c_1,c_2,c_3\); hostile replay caught this before release |
| Ore divisions used `quo_rem` | A zero remainder was trusted rather than exhibited | Replaced every division with four direct cleared factorizations \(D_r=q_rL_+\), including the fourth companion closure |
| “Standard ascension identity” and transformed ODE were named but not derived | The coefficient mechanism was hidden | Added initial coefficient and consecutive-ratio equations; expanded the \({}_3F_2\) Euler operator explicitly |
| ODE normalization was claimed to determine the terminating \({}_4F_3\) uniquely | False: the exponent \(2n\) supplies an additional analytic branch | Replaced uniqueness with base, generic, and top coefficient induction for the actual one-step operator |
| The scalar one-step operator was not tied to the challenge matrix | Hard-coded \(d_0,d_1\) could have described a surrogate | Added horizontal reconstruction, all sixteen differential-gauge equations, and the exact matrix contraction producing \(d_0+zd_1\) |
| Only the first base component was initially checked | The actual compact seed row was not yet known to be horizontal | Added all four base-row reconstruction equations, the base terminating-operator equation, and all four base adjoint residuals |
| Two DVR-lemma hypotheses were only implicit | The induction had not displayed the \(k_{N+1}\) leading direction or \(J_N(0)e_1\ne0\) | Added both expansions and cited them explicitly at the induction step |
| A transfer norm inequality used an upper bound with exponent \(-1\) | The inequality direction was invalid for column four | Split \(j\le3\) and \(j=4\), then used coupled row factors to obtain \(\|\mathcal B_m\|_\infty\le4981375/512<10000\) |
| The maximum-modulus step omitted holomorphy of the quotient | Formal divisibility only supplied a local removable germ | Proved holomorphy on \(|x|\le1/4\), identified the only possible pole, and removed it with the \(2n\)-valuation |
| BirkhoffPoincaré was used as a black box for three columns | It hid the exceptional hyperplane, dominant functional, decay, and denominator nonvanishing | First replaced it with an explicit stable graph; the optimized proof now eliminates the spectral layer entirely via \(T_m=\mathcal P\mathcal B_m\mathcal P^{-1}>0\) and a four-weight min/max contraction |
| The spectral route required a quartic root count, eigenvector, and exceptional-hyperplane analysis | Although repaired, it created unnecessary proof surface | Verified all 285 positive numerator coefficients, the positive limiting transfer, and both positive seeds; all four quotients are now convex averages with uniformly positive weights |
| Division in columns \(2,3,4\) preceded an eventual-nonzero proof | The displayed quotients were not yet justified | The positive-cone seed and transfer identities now give \(Q_{m,j}>0\) for every \(m\ge1\), before any quotient is formed |
| The direct rational differential gauge produced large unreduced intermediates | Correct but slow replay increased resource and serialization risk | Added a separately reconstructed \(J_0+xJ_1+x^2J_2\) decomposition and checked the denominator-cleared polynomial gauge in 176 scalar coefficient obligations |
| The terminating step polynomial obscured its structure with 21 expanded terms | Large coefficients made transcription review difficult | Rewrote it in \(u=2n+1,\ q=2n-t\), then added a direct coefficient identity against the former expansion |
| A FAMM `SoftScar` was initially linked with `DerivedFrom` | It did not follow the repositorys calibrated `Supports` parent pattern | Corrected every parent role and added a fail-closed FAMM interchange validator; all scars remain advisory |
| The checker could succeed while Wolfram/Sage were absent | A stored transcript was being treated as proof evidence | Made standard-library rational-polynomial verifiers mandatory; Wolfram and Sage are now optional independent cross-checks |
| Metadata called \(Q/P\) the requested orientation | The official challenge asks for \(P/Q\) | Corrected every release document to state \(P/Q\to\sqrt{10005}/\pi\) as the official orientation |
## Mandatory replay
Run:
```sh
./run_checks.sh
```
The mandatory path executes:
1. `p28_rank_ode_bound_verifier.py`
2. `p28_convergence_constants.py`
3. `p28_standalone_equations.py`
4. `p28_optimized_gauge.py`
5. `p28_positive_cone.py`
6. `p28_mutation_sensitivity.py`
7. `p28_famm_scars_validator.py`
It then replays `p28_dominant_product_algebra.py` as a preserved legacy
cross-check; that quartic/spectral route is not required by the active proof.
The third verifier checks:
- four cleared tail factorizations;
- lowest and generic tail coefficients;
- horizontal reconstruction;
- the terminating-operator closure;
- all sixteen differential-gauge entries;
- the authoritative matrix-to-scalar contraction;
- the base polynomial and four base-row components;
- the base terminating equation and four base adjoint residuals;
- constant, generic, and top terminating induction;
- ascension and the \({}_3F_2\) Euler equation.
The positive-cone verifier checks:
- the authoritative \(M_m\), balanced \(\mathcal B_m\), and
\(T_m=\mathcal P\mathcal B_m\mathcal P^{-1}\);
- all sixteen rational identities \(T_{m,ij}=N_{ij}/D_{ij}\);
- all 285 strictly positive coefficients of the \(N_{ij}(m-1,R-4)\);
- the exact positive limiting matrix;
- all eight positive coordinates of the two official transformed seeds.
The optimized gauge separately checks 176 scalar coefficients while the
original sixteen-entry gauge remains in the standalone checker. These
verifiers use `fractions.Fraction` and explicit coefficient dictionaries. None
uses polynomial division, factorization, a simplifier, Gröbner bases,
irreducibility, GCD, a root finder, a special-function package, sampling, or
a stored transcript.
## Forbidden-shortcut search
The mandatory runner rejects these constructs in the proof path:
- `quo_rem`
- `is_irreducible`
- polynomial `gcd`
- Birkhoff/Poincaré delegation
- “standard ascension”
- ODE-normalization uniqueness
- the former dominant-product lemma in the active manuscript
No occurrence of `native_decide`, `axiom`, `sorry`, or `admit` was found.
## Independent hostile replays
Independent reviews and mutation replays targeted:
- logical validity, indexing, vacuity, and denominator domains;
- Ore/special-function and matrix-to-scalar algebra;
- convergence and all-column division;
- one-coefficient corruption of the positive-cone numerator table;
- one-coefficient corruption of the optimized \(J\)-decomposition.
The defects in the table above were discovered during those loops. The final
Ore, gauge, positive-cone, convergence, and logic/vacuity replays return PASS,
and both corrupted checkers fail at their intended identities. Release
engineering then repeats the mandatory checks in a clean extraction, rebuilds
the PDF, and performs page-by-page visual inspection.

BIN
optional/Archive.tar.gz Normal file

Binary file not shown.

203
optional/FAMM_SCARS.md Normal file
View file

@ -0,0 +1,203 @@
# FAMM scars for Ramanujan Challenge Problem 2.8
## Status
This file and `certificates/p28_famm_scars.json` are advisory discovery
artifacts. They do not alter the proof, authorize pruning, or assert membership
in a canonical `DiscoveryStore`.
The formula-optimization rebuild is finalized. SHA-256 pins for the rank/ODE,
convergence, standalone-equation, denominator-cleared-gauge, positive-cone,
FAMM-interchange, and package-runner checkers are recorded in the JSON, along
with the final `solution.tex` and `solution.pdf` hashes. The older solution
hashes are retained solely as provenance for baseline commit `492c8ab`.
The bundle records defects found during the adversarial proof loop so later
searches can prioritize equation-level checks without mistaking past failures
for universal impossibility results.
The governing rule is:
> An observation, failure signature, SoftScar, or blocked promotion idea may
> change route priority. It may not remove a proof candidate.
The JSON therefore contains no `AuthorizedHardScar`.
## Authoritative FAMM sources
The schema and authority policy were read from
`allaunthefox/MathPunch-FiniteState` at commit
`9df0f48576aefce91eb1fc13ff876bec1007162d`:
| File | Relevant rule |
|---|---|
| `docs/specs/FAMM_REFINED.md` | Exact and advisory memory are separate; only exact/formal, replayed, in-scope, instance-matched, version-matched scars may hard-apply. |
| `docs/specs/FAMM_TOPOLOGY_ESCALATION_V1.md` | Machine layout and physical observations never change mathematical authority; advisory or unreplayed scars never hard-prune. |
| `src/discovery/node.rs` | Defines `Observation`, `FailureSignature`, `Certificate`, `SoftScar`, `ProposedHardScar`, `AuthorizationCertificate`, and `AuthorizedHardScar`, along with typed parent roles. |
| `src/discovery/authorization.rs` | The implemented hard-scar gate requires a typed Boolean linear formula, complete failed assignment, deletion-minimized cube, exact linear-constraint certificate, `linear-cube-interval` authorization, and replay/reauthorization. |
| `src/discovery/canonical.rs` | Canonical bytes sort parents and field payloads and bind kind, payload, parents, scope, and checker version under a domain-separated hash. |
The Problem 2.8 failures are polynomial, analytic, asymptotic, and
proof-engineering failures. They are not instances of the current Boolean
linear `TypedFormula`/`CubeRegion` authorization language. Consequently, no
entry in this package is promoted to `AuthorizedHardScar`, even when an exact
standalone checker supports the underlying equation.
## JSON schema choices
`p28_famm_scars.json` uses the new interchange identifier
`mathpunch.p28-famm-scar-bundle.v1`.
It mirrors the Rust discovery vocabulary without pretending to be a Rust
serialization:
- `kind` uses exact `DiscoveryKind` names.
- `parents` use exact `ParentRole` names and bundle-local integer node IDs.
- A SoftScar's advisory relationship to its FailureSignature uses
`ParentRole::Supports`, never `DerivedFrom`; `CheckedBy` separately links a
replay certificate when one exists.
- `scope` is a bundle-local unsigned integer resolved through
`scope_registry`.
- `payload` uses the `Fields` variant as ordered key/value pairs; a future
importer must sort them as `canonical.rs` requires.
- `checker_version` is an unsigned schema/checker generation.
- replay commands, runtimes, artifact paths, and SHA-256 hashes are declared
separately in `checker_registry`.
The bundle intentionally sets these fields to non-authoritative values:
```text
ingested_into_discovery_store = false
canonical_node_hashes = null
mmr_commitment = null
pruning_authority = false
```
Local node and scope IDs must be remapped by an importer. Canonical discovery
hashes may be assigned only after the nodes are constructed through the
repository's canonical Rust path.
## Scar catalogue
Every row below corresponds to an
`Observation -> FailureSignature -> SoftScar` chain in the JSON.
| SoftScar | Exact scope | Failure signature | Assumption avoided | Replay support |
|---|---|---|---|---|
| `12` | Pinned transfer and package | An under-defined or transcription-divergent matrix is used by later identities | Omitted coefficients are harmless | Dependency-free equation replay |
| `22` | Tail contiguity for the displayed \(M_N(x)\) and shifted \({}_4F_3\) jet | CAS Ore division is cited without four cleared residual identities | A zero-remainder routine is itself an inspectable certificate | Dependency-free equation replay |
| `32` | Terminating denominator, \(n\ge1\), \(0\le k\le n\) | Fourth-order uniqueness is inferred from normalization at \(z=0\) | One datum determines a fourth-order analytic solution | Base/generic/top coefficient replay |
| `42` | Official matrix-to-scalar bridge | A scalar recurrence is accepted without an exact intertwiner | Sample agreement identifies the official module | Sixteen gauge entries and contraction replay |
| `52` | Official \(R,x_0\), \(|x|=1/4\), \(m\ge1\) | An inequality is inverted without reversing its direction | Integer powers preserve order for negative exponents | Exact rational convergence checker |
| `62` | Official seed rows, four columns, and positive cone | A named transport theorem hides the hypotheses or denominator conclusion | Spectral machinery is necessary for all-column transport | Exact Pascal-conjugated positive transfer and elementary min/max contraction |
| `72` | Historical characteristic quartic and displayed eigenvector | Native factor/GCD/root decisions are used as portable exact proof | CAS decisions carry proof authority by default | Exact coefficient homotopy and polynomial eigenvector replay for the retained legacy route |
| `82` | Official four columns in the proved positive cone | A quotient is formed before denominator positivity | Formal ratio notation guarantees a nonzero denominator | Exact cone entry and strictly positive transfer entries |
| `92` | Mandatory/optional checker split | A stored PASS transcript substitutes for live replay | A receipt proves the current bytes were executed | Mandatory standard-library runner |
| `102` | Release metadata | The reciprocal limit is labelled as the official orientation | Equivalent formulas have interchangeable submission labels | Boxed manuscript theorem and official-scope review |
| `112` | Wolfram source serialization | A line break terminates an assignment before leading-plus continuation terms | Printed multiline equality equals parsed equality | Parser round-trip is required; current Wolfram run is optional |
| `122` | Pinned rational gauge after denominator clearing | Raw rational expansion produces avoidable expression swell or resource failure | Raw rational normal form is required, or capacity failure falsifies the identity | 176 cleared polynomial obligations |
| `132` | Official Pascal-conjugated positive cone | Spectral machinery is introduced before testing an elementary positive transport | Eigenvalues and a stable graph are necessary for the official columns | 100 exact positive-cone obligations |
| `142` | Advisory FAMM interchange bundle | A SoftScar is linked as an exact derivation rather than advisory support | Advisory diagnosis has exact derivational authority | Structural validator requiring `Supports` and zero hard authority |
These scars are deliberately narrow:
- They apply only to the pinned Problem 2.8 objects and proof routes.
- They do not assert that Ore methods, scalar recurrences, asymptotic theorems,
CAS tools, or reciprocal formulations are invalid in general.
- They do not rule out a repaired candidate satisfying the missing equation or
hypothesis.
## Exact replay links
The advisory scars point to these replayable local artifacts:
```sh
python3 certificates/p28_rank_ode_bound_verifier.py
python3 certificates/p28_convergence_constants.py
python3 certificates/p28_standalone_equations.py
python3 certificates/p28_dominant_product_algebra.py
python3 certificates/p28_optimized_gauge.py
python3 certificates/p28_positive_cone.py
python3 certificates/p28_famm_scars_validator.py
```
The complete mandatory path is:
```sh
bash run_checks.sh
```
Sage and Wolfram files remain optional independent cross-checks. Their absence
does not convert a stored transcript into proof evidence.
Finalized artifact hashes and checker identifiers are in the JSON. Changing a
finalized checker, manuscript source, or PDF requires a new replay and a new
bundle version.
## Formula-optimization loop
Two optimization results change route priority without changing mathematical
authority:
1. The rational gauge is replayed after the diagonal scaling
\(D=\operatorname{diag}(x,1,1,1)\) and common clearing by \((1-z)^2\).
The resulting companion matrices have bounded polynomial degree, and the
checker expands the claim into 176 scalar polynomial obligations. A timeout,
capacity rejection, or expression explosion in the unreduced route is a
proof-engineering failure, not evidence that the rational identity is false.
2. The current all-column proof conjugates the balanced transfer by the exact
Pascal matrix, places both official seed rows in a strictly positive cone,
and uses the elementary min/max contraction of positive weighted averages.
The earlier spectral and stable-graph argument remains an audited historical
route, but it is no longer an active prerequisite for the four-column
transport or denominator nonvanishing.
The interchange validator records the corresponding route scars and checks
that each SoftScar is advisory: it must have a `Supports` edge from a
FailureSignature, may have a separate `CheckedBy` certificate, has no hard
authority, and cannot prune.
## Why no hard scars were emitted
Three exact-certificate-linked promotion ideas are recorded under
`blocked_promotion_ideas`:
1. nonzero cleared Ore residuals;
2. reversed negative-exponent inequalities;
3. nonzero matrix-to-scalar intertwiner residuals.
They are not `ProposedHardScar` or `AuthorizedHardScar` nodes. The present
authorizer cannot express their formula domain, region semantics, or
minimization rule. Promoting any of them requires all of:
1. a versioned typed proof-domain formula;
2. canonical coefficient or inequality encoding;
3. exact applicability-scope semantics;
4. a replayable witness;
5. a sound minimization rule;
6. an authorization certificate;
7. reauthorization after persistence;
8. hostile tests for forged witness, broadened scope, stale version, altered
parent, and valid-candidate pruning attacks.
Until that machinery exists, the exact certificates support diagnosis and
priority only.
## Import requirements
A future importer into `DiscoveryStore` must:
1. register canonical problem, instance, and scope objects;
2. run `certificates/p28_famm_scars_validator.py` and reject a malformed role,
scope, count, hash pin, or hard-authority claim;
3. verify every declared artifact hash;
4. execute the mandatory checker commands against those exact bytes;
5. translate local IDs to store `NodeId` values;
6. construct nodes through the Rust API;
7. recompute canonical discovery hashes;
8. replay the resulting store and MMR;
9. retain every SoftScar as non-pruning;
10. leave `blocked_promotion_ideas` outside `HardIndex`.
Failure at any step is a typed import or replay failure, not evidence that a
mathematical proof candidate is impossible.

View file

@ -0,0 +1,42 @@
# Problem 2.8 formula-optimization supplements
These files isolate the formula optimizations developed after the original
exact closure. They can be reviewed or replayed independently of the
manuscript build.
## Positive-cone transport
- `certificates/p28_positive_cone.py`
- `certificates/POSITIVE_CONE_CERTIFICATE.md`
- `certificates/POSITIVE_CONE_MANUSCRIPT_SECTION.tex`
The checker reconstructs the authoritative transfer, applies the exact Pascal
conjugation, and verifies 100 grouped obligations: all 16 transfer identities,
all 285 strictly positive numerator coefficients, positive denominators and
limit entries, and both transformed seed rows. In the revised manuscript this
elementary contraction is the active all-four-column proof.
## Optimized differential gauge
- `certificates/p28_optimized_gauge.py`
- `certificates/OPTIMIZED_GAUGE_CERTIFICATE.md`
The checker clears the rational gauge before expansion and verifies 176 scalar
polynomial obligations. It is an optional independent replay; the original
16-entry gauge remains in `certificates/p28_standalone_equations.py`.
## Adversarial and provenance supplements
- `certificates/p28_mutation_sensitivity.py` corrupts one coefficient in each
optimized certificate and requires both altered copies to fail.
- `certificates/solution_pre_positive_cone.tex` preserves the complete
pre-replacement manuscript.
- `FAMM_SCARS.md`, `certificates/p28_famm_scars.json`, and
`certificates/p28_famm_scars_validator.py` record scoped advisory failure
memory. They grant no hard-pruning authority.
Replay the complete mandatory path with:
```sh
bash run_checks.sh
```

12
optional/Sha256.txt Normal file
View file

@ -0,0 +1,12 @@
Ramanujan Machine Challenge Problem 2.8
Adversarially audited release
Git commit:
492c8ab8717f2e470151330158a8037a4b5f70f1
SHA-256:
a1c11c5f62aad9e1c9eacae54c5f3d8ea4f98de67c6b46cee1354d382df4a60a solution.tex
e85d7bf975185905d2b4ba6e3427c4b92735954dd8328589e67a04acab064ae2 solution.pdf
a8730d4937b1b4f7811e0b5bcff16163c866e1d24a730dbc70a0e9f00ea11f17 ramanujan_challenge_problem_2_8.zip
04394883244d8ba80cea180e9167bcdad4280f80fd6d39df23326621db0ea9dd ramanujan_problem_2_8_adversarially_audited.bundle
507124828c056fea30ac87b6206147f14a7fa9fd401338c3f0010311c30f612f ADVERSARIAL_AUDIT.md

View file

@ -0,0 +1,235 @@
# Optimized Denominator-Cleared Gauge Certificate
This note accompanies `p28_optimized_gauge.py`. It is an additive
certificate: the original sixteen-entry gauge check in
`p28_standalone_equations.py` remains unchanged.
The optimization removes large temporary rational denominators before the
matrix products are formed. It does not remove any gauge entry or replace an
exact equality by sampling.
## 1. Regularized transfer
Let
\[
D=\operatorname{diag}(x,1,1,1),\qquad
J(u,x)=D\mathcal M(u,x),\qquad
w=u(3u-2)(3u+2).
\]
Put
\[
v=(u^3,3u^2,3u,1),\qquad
\alpha=\frac{144(u-1)^2}{w},\qquad
\beta=\frac{2u-9}{2}.
\]
The checker verifies all sixteen entries of
\[
J(u,x)=J_0(u)+xJ_1(u)+x^2J_2(u),
\]
where
\[
J_0=
\begin{pmatrix}
\alpha\\-1\\-1\\-1
\end{pmatrix}v
\]
and
\[
J_1=
\begin{pmatrix}
\mathbf a/w\\
0\\
\mathbf b\\
\mathbf c
\end{pmatrix}.
\]
Here
\[
\begin{aligned}
\mathbf a={}&\bigl(
-99u^5+333u^4-229u^3-114u^2+40u+64,\\
&-243u^4+909u^3-868u^2-80u+272,\\
&-153u^3+648u^2-860u+360,\ 0\bigr),
\end{aligned}
\]
\[
\mathbf b=\left(
\frac{(u+1)(u+2)(3u+4)(3u+8)}{144},
\frac{-36u^3+189u^2+316u+168}{72},
\frac{-54u^2+189u+158}{36},
\frac{7-2u}{2}
\right),
\]
and
\[
\mathbf c=\left(
\frac{(u+1)(u+2)(3u+4)(3u+8)}{48},
\frac{153u^4-657u^3+1292u^2+2064u+1072}{144},
\frac{180u^3-891u^2+1450u+1116}{72},
\frac{54u^2-297u+536}{36}
\right).
\]
The matrix \(J_2\) is entered independently from the finite parts of the
four authoritative \(c_i\). The checker then verifies, entry by entry,
\[
J_2=e_4\,\beta\mathbf b.
\]
Thus the useful proportionality is proved rather than built into both sides
of the check.
## 2. Common denominator in the \(z\)-gauge
Set
\[
x=-\frac{z}{1-z},\qquad u=2n+1,
\]
and
\[
G_n(z)=-z\mathcal M\left(2n+1,-\frac{z}{1-z}\right).
\]
Since
\[
-zD^{-1}
=\operatorname{diag}(1-z,-z,-z,-z),
\]
the common-denominator-cleared matrix is
\[
\begin{aligned}
\overline G_n
&=(1-z)^2G_n\\
&=\operatorname{diag}(1-z,-z,-z,-z)
\left[
(1-z)^2J_0-z(1-z)J_1+z^2J_2
\right]_{u=2n+1}.
\end{aligned}
\]
The checker independently substitutes into the original displayed matrix
and verifies all sixteen entries of
\[
\overline G_n=(1-z)^2G_n.
\]
## 3. Cleared companion matrices
For
\[
\mathcal L_n(t)=
t(t+2n-1)^3
-z(t+n)(t+n+\tfrac16)(t+n+\tfrac12)(t+n+\tfrac56),
\]
let \(\mathcal C_n\) be its companion matrix. The leading coefficient of
\(\mathcal L_n\) is \(1-z\). Define
\[
\overline{\mathcal C}_n=(1-z)\mathcal C_n.
\]
Both identities
\[
\overline{\mathcal C}_n=(1-z)\mathcal C_n,\qquad
\overline{\mathcal C}_{n+1}=(1-z)\mathcal C_{n+1}
\]
are checked in all sixteen entries.
## 4. Quotient-rule conversion
Put \(d=(1-z)^2\). For every actual entry of \(\overline G_n\), the checker
verifies
\[
d(1-z)\,\theta\left(\frac{\overline G_{n,ij}}d\right)
=(1-z)z\,\partial_z\overline G_{n,ij}
+2z\overline G_{n,ij},
\qquad \theta=z\partial_z.
\]
This is the exact product/quotient-rule step used to pass from the original
rational gauge to the cleared polynomial gauge.
Multiplying
\[
\mathcal C_nG_n-\theta G_n-G_n\mathcal C_{n+1}=0
\]
by \(d(1-z)\) therefore gives
\[
\boxed{
\overline{\mathcal C}_n\overline G_n
-(1-z)z\,\partial_z\overline G_n
-2z\overline G_n
-\overline G_n\overline{\mathcal C}_{n+1}=0.
}
\]
Every entry of \(\overline G_n\) has \(z\)-degree at most three, and every
entry of \(\overline{\mathcal C}_n\) has degree at most one. Consequently
each boxed residual has degree at most four. The checker tests the
coefficients of \(z^0,\ldots,z^4\) separately in every one of the sixteen
entries.
## 5. Exact obligations
| Obligation | Scalar equalities |
|---|---:|
| \(J_2=e_4\beta\mathbf b\) | 16 |
| \(D\mathcal M=J_0+xJ_1+x^2J_2\) | 16 |
| \(\overline G=(1-z)^2G\) | 16 |
| \(\overline{\mathcal C}_n=(1-z)\mathcal C_n\) | 16 |
| \(\overline{\mathcal C}_{n+1}=(1-z)\mathcal C_{n+1}\) | 16 |
| Entrywise quotient-rule conversion | 16 |
| Five \(z\)-coefficients in each of sixteen gauge entries | 80 |
| **Total** | **176** |
All 176 obligations are sparse-polynomial equalities over
\(\mathbb Q(u,x,n,z,t)\). A check passes only when the expanded numerator
has an empty coefficient dictionary.
The verifier implements rational addition, multiplication, integer powers,
formal differentiation, substitution, and coefficient extraction itself.
It does not use a CAS simplifier, polynomial division, factorization,
Gröbner bases, special-function evaluation, a root finder, or numerical
sampling.
## 6. Replay
From the submission directory:
```sh
python3 certificates/p28_optimized_gauge.py
```
A reference run in the proof workspace completed all 176 exact obligations
in approximately \(1.22\) seconds. Runtime is informational; correctness
depends only on the exact zero-coefficient checks.

View file

@ -0,0 +1,331 @@
# Positive-Cone Certificate for Problem 2.8
This sheet gives an exact alternative to the spectral/stable-graph reduction
for the four official columns. It does not replace any existing certificate.
Let
\[
\mathcal P=
\begin{pmatrix}
1&0&0&0\\
1&1&0&0\\
1&2&1&0\\
1&3&3&1
\end{pmatrix},
\qquad
\mathcal P^{-1}=
\begin{pmatrix}
1&0&0&0\\
-1&1&0&0\\
1&-2&1&0\\
-1&3&-3&1
\end{pmatrix}.
\]
For
\[
D_m=\operatorname{diag}(1,m,m^2,m^3),\qquad
\mathcal B_m=D_m^{-1}M_mD_{m+1}/(m+1)^2,
\]
put
\[
T_m=\mathcal P\mathcal B_m\mathcal P^{-1}.
\]
The accompanying dependency-free verifier constructs the authoritative
matrix \(M_m\) directly. It does not import a matrix-data module.
## 1. Positive rational form
Set
\[
k=m-1,\qquad s=R-4,\qquad
g_m=(2m+3)(6m+7)(6m+11).
\]
For each \(i,j\),
\[
(T_m)_{ij}=\frac{N_{ij}(k,s)}{D_{ij}(m,R)}.
\]
The denominator matrix is
\[
(D_{ij})=
\begin{pmatrix}
(m+1)^2g_m&(m+1)g_m&g_m&g_m\\
mg_m&m(m+1)g_m&mg_m&mg_m\\
24m^2(m+1)^2g_mR&72m^2(m+1)g_mR&
36m^2g_mR&2m^2g_mR\\
48m^3(m+1)^2g_mR^2&144m^3(m+1)g_mR^2&
72m^3g_mR^2&36m^3g_mR^2
\end{pmatrix}.
\]
Every denominator is positive for \(m\ge1\) and \(R\ge4\).
To list the numerators compactly, if
\[
\mathcal C_{ij}=(c_{ab})_
{\substack{0\le a\le d_{ij}\\0\le b\le e_{ij}}},
\]
write
\[
[\mathcal C_{ij}]
=\sum_{a=0}^{d_{ij}}k^a
\sum_{b=0}^{e_{ij}}c_{ab}s^b.
\]
The complete coefficient arrays are:
```text
C11 = [[209067,62208],[409482,124416],[318165,98496],
[122806,38592],[23580,7488],[1800,576]]
C12 = [[216214,62208],[351120,103680],[210784,63936],
[55584,17280],[5472,1728]]
C13 = [[76079,20736],[98882,27648],[41796,12096],[5688,1728]]
C14 = [[18432,4608],[27648,6912],[13824,3456],[2304,576]]
C21 = [[44808,15552],[93312,31104],[62208,20736],
[17280,5760],[1728,576]]
C22 = [[186379,62208],[511210,165888],[519853,167616],
[250678,81216],[58140,19008],[5256,1728]]
C23 = [[66134,20736],[159568,48384],[131792,39744],
[45216,13824],[5472,1728]]
C24 = [[16222,4608],[42291,11520],[39050,10368],
[15444,4032],[2232,576]]
C31 = [[12995117,8841456,1492992],[58685630,37561608,5971968],
[103594644,64078200,9828864],[94855680,57551496,8640000],
[49440456,29668248,4396032],[14835888,8843664,1299456],
[2392416,1419552,207360],[160704,95040,13824]]
C32 = [[39423757,27038952,4478976],[166410214,105688080,16422912],
[262665540,160189416,24012288],[203963976,121854816,17915904],
[83704320,49549824,7216128],[17449344,10295424,1492992],
[1461888,860544,124416]]
C33 = [[6744221,4650768,746496],[26619818,16612236,2488320],
[37076724,21985452,3172608],[23503608,13602888,1928448],
[6902496,3967056,559872],[756864,438048,62208]]
C34 = [[87786,60468,9216],[369593,226474,32256],
[559242,320520,43776],[393892,216608,28800],
[131832,70560,9216],[16992,8928,1152]]
C41 = [[33051981,55702072,23898528,2985984],
[327240514,376865532,134112240,14929920],
[930970540,937602272,303903216,31601664],
[1279073232,1205376648,370469520,36937728],
[994303368,902431272,268543536,26072064],
[461588688,409453104,119369664,11390976],
[127105056,111089760,31948032,3013632],
[19185984,16597440,4727808,442368],
[1223424,1050624,297216,27648]]
C42 = [[124354341,177927470,72724752,8957952],
[1045995002,1120727784,383156784,41803776],
[2641611740,2536092136,794391552,80870400],
[3164847768,2875298832,858173328,83856384],
[2060023392,1815713424,527093136,50264064],
[748445184,648617760,185300064,17418240],
[142860672,122627520,34706880,3234816],
[11197440,9548928,2685312,248832]]
C43 = [[26276833,32297441,12409344,1492992],
[188851718,188046502,61107192,6469632],
[420585148,383136068,114774408,11321856],
[431847432,375502536,107664480,10202112],
[225990144,191691072,53691264,4976640],
[58320000,48926592,13561344,1244160],
[5847552,4904064,1358208,124416]]
C44 = [[3759202,4035454,1433736,165888],
[25198317,23609115,7287084,746496],
[57385334,50066438,14346252,1368576],
[62533980,52200252,14310108,1306368],
[35688168,28926216,7710120,684288],
[10310976,8188128,2142288,186624],
[1192320,933120,241056,20736]]
```
Here \(N_{ij}=[\mathcal C_{ij}]\). Every listed coefficient is strictly
positive. Therefore
\[
\boxed{T_m>0\quad(m\ge1,\ R\ge4).}
\]
This is a bivariate coefficient identity, not a finite test.
## 2. Positive limiting transfer
Exact leading-coefficient comparison gives
\[
\lim_{m\to\infty}T_m=
\begin{pmatrix}
8R-7&4(6R-5)&24R-17&8R\\
8(R-1)&24R-23&4(6R-5)&8R-1\\
\frac{(R-1)(8R-1)}R&
\frac{2(R-1)(12R-1)}R&
24R-23&
\frac{2(4R^2-R-1)}R\\
\frac{2(R-1)(4R^2-R-1)}{R^2}&
\frac{(R-1)(24R^2-5R-4)}{R^2}&
\frac{2(R-1)(12R-1)}R&
\frac{8R^3-3R^2-4}{R^2}
\end{pmatrix}.
\]
Every entry is positive for \(R\ge4\).
## 3. The official rows enter the cone
Let
\[
Y_m(a)=\frac{aG_mD_m}{(m!)^2}\mathcal P^{-1}.
\]
Since \(D_1=I\) and \(G_1=M_0\), put \(s=R-4\). Direct expansion gives
\[
\begin{aligned}
Y_1(A_1)=\bigg(&
\frac{320160}{77}(451657+259168s+36864s^2),\\
&
\frac{213440}{77}(1045771+591288s+82944s^2),\\
&
\frac{3841920}{77}(30075+16706s+2304s^2),\\
&
\frac{7683840}{77}(2612+1421s+192s^2)
\bigg)
\end{aligned}
\]
and
\[
\begin{aligned}
Y_1(A_0)=\bigg(&
\frac{13563858344917+18828949838688s+4509303312384s^2}{924},\\
&
\frac{2(2606908232573+3613607517834s+845494371072s^2)}{231},\\
&
\frac{3584820267815+4955797147464s+1127325828096s^2}{308},\\
&
\frac{3(103400761441+142363659388s+31314606336s^2)}{154}
\bigg).
\end{aligned}
\]
Thus both rows are strictly positive for \(R\ge4\), and positivity is
preserved by every subsequent \(T_m\).
## 4. Elementary projective contraction
Let
\[
p_m=Y_m(A_0),\qquad q_m=Y_m(A_1),\qquad
r_{m,i}=\frac{p_{m,i}}{q_{m,i}}.
\]
The common recurrence \(p_{m+1}=p_mT_m\),
\(q_{m+1}=q_mT_m\) gives
\[
r_{m+1,j}
=\sum_{i=1}^4\omega^{(m)}_{ij}r_{m,i},
\qquad
\omega^{(m)}_{ij}
=\frac{q_{m,i}(T_m)_{ij}}
{\sum_hq_{m,h}(T_m)_{hj}},
\]
with
\[
\omega^{(m)}_{ij}>0,\qquad
\sum_i\omega^{(m)}_{ij}=1.
\]
Because \(T_m\) converges to a strictly positive matrix, there are
\(0<a<b\) such that eventually
\[
a\le(T_m)_{ij}\le b.
\]
After one such step,
\[
\frac ab\le\frac{q_{m,i}}{q_{m,j}}\le\frac ba.
\]
Hence every weight is bounded below by
\[
\omega^{(m)}_{ij}\ge
\delta:=\frac{a^2}{4b^2}>0.
\]
For
\[
\ell_m=\min_i r_{m,i},\qquad
u_m=\max_i r_{m,i},
\]
the weight on an index attaining each endpoint gives
\[
\ell_m+\delta(u_m-\ell_m)
\le r_{m+1,j}\le
u_m-\delta(u_m-\ell_m).
\]
Therefore
\[
u_{m+1}-\ell_{m+1}
\le(1-2\delta)(u_m-\ell_m),
\]
so all four \(r_{m,i}\) converge to one positive constant \(c\).
Finally,
\[
Z_m(a)=Y_m(a)\mathcal P.
\]
Every column of \(\mathcal P\) is nonzero and nonnegative, so each quotient
\[
\frac{Z_m(A_0)_j}{Z_m(A_1)_j}
\]
is another weighted average of the four \(r_{m,i}\). It tends to \(c\).
The balancing factors cancel, and the already-proved first-column limit
identifies
\[
c=\frac{\sqrt{10005}}{\pi}.
\]
## 5. Replay
From the submission directory:
```sh
python3 certificates/p28_positive_cone.py
```
The script uses rational coefficient dictionaries only. It performs no
sampling, polynomial division, factorization, simplification, root finding,
or eigenvalue computation.

View file

@ -0,0 +1,192 @@
\section{The other three official columns}
All matrices in this section are evaluated at \(x=x_0=1/R\). For \(m\ge1\),
retain
\[
D_m=\diag(1,m,m^2,m^3),\qquad
\mathcal B_m=D_m^{-1}M_mD_{m+1}/(m+1)^2
\]
and put
\[
Z_m(a)=\frac{aG_mD_m}{(m!)^2},\qquad
Y_m(a)=Z_m(a)\mathcal P^{-1},\qquad
T_m=\mathcal P\mathcal B_m\mathcal P^{-1}.
\]
The balancing gives the exact row recurrence
\begin{equation}\label{eq:positive-row-recurrence}
Y_{m+1}(a)=Y_m(a)T_m.
\end{equation}
Set \(k=m-1\), \(s=R-4\), and
\[
g_m=(2m+3)(6m+7)(6m+11).
\]
Direct cross multiplication of the authoritative matrix gives
\begin{equation}\label{eq:positive-transfer}
(T_m)_{ij}=\frac{N_{ij}(k,s)}{D_{ij}(m,R)},
\end{equation}
where
\[
(D_{ij})=
\begin{pmatrix}
(m+1)^2g_m&(m+1)g_m&g_m&g_m\\
mg_m&m(m+1)g_m&mg_m&mg_m\\
24m^2(m+1)^2g_mR&72m^2(m+1)g_mR&
36m^2g_mR&2m^2g_mR\\
48m^3(m+1)^2g_mR^2&144m^3(m+1)g_mR^2&
72m^3g_mR^2&36m^3g_mR^2
\end{pmatrix}.
\]
Each numerator has the form
\[
N_{ij}(k,s)=\sum_{a,b}c^{(ij)}_{ab}k^as^b,
\qquad c^{(ij)}_{ab}>0.
\]
For example,
\[
\begin{aligned}
N_{11}={}&209067+62208s+(409482+124416s)k\\
&+(318165+98496s)k^2+(122806+38592s)k^3\\
&+(23580+7488s)k^4+(1800+576s)k^5.
\end{aligned}
\]
The complete finite list of all \(285\) positive integers
\(c^{(ij)}_{ab}\) is printed in
\texttt{POSITIVE\_CONE\_CERTIFICATE.md}. The dependency-free verifier
\texttt{p28\_positive\_cone.py} reconstructs \(M_m,\mathcal B_m,T_m\),
cross-multiplies every one of the sixteen identities
\eqref{eq:positive-transfer}, and compares every coefficient with that
list. Thus, without sampling or a positivity oracle,
\begin{equation}\label{eq:T-positive}
\boxed{T_m>0\quad\text{entrywise for every }m\ge1,\ R\ge4.}
\end{equation}
Leading coefficients in \(k\), checked by the same exact arithmetic, give
\[
\widetilde{\mathcal S}:=\lim_{m\to\infty}T_m=
\begin{pmatrix}
8R-7&4(6R-5)&24R-17&8R\\
8(R-1)&24R-23&4(6R-5)&8R-1\\
\frac{(R-1)(8R-1)}R&
\frac{2(R-1)(12R-1)}R&
24R-23&
\frac{2(4R^2-R-1)}R\\
\frac{2(R-1)(4R^2-R-1)}{R^2}&
\frac{(R-1)(24R^2-5R-4)}{R^2}&
\frac{2(R-1)(12R-1)}R&
\frac{8R^3-3R^2-4}{R^2}
\end{pmatrix}.
\]
Every displayed entry is positive for \(R\ge4\).
Both official rows enter this cone after the first transfer. Indeed
\(D_1=I\), \(G_1=M_0\), and exact expansion gives
\[
\begin{aligned}
Y_1(A_1)=\bigg(&
\frac{320160}{77}(451657+259168s+36864s^2),\\
&\frac{213440}{77}(1045771+591288s+82944s^2),\\
&\frac{3841920}{77}(30075+16706s+2304s^2),\\
&\frac{7683840}{77}(2612+1421s+192s^2)\bigg)
\end{aligned}
\]
and
\[
\begin{aligned}
Y_1(A_0)=\bigg(&
\frac{13563858344917+18828949838688s+4509303312384s^2}{924},\\
&\frac{2(2606908232573+3613607517834s+845494371072s^2)}{231},\\
&\frac{3584820267815+4955797147464s+1127325828096s^2}{308},\\
&\frac{3(103400761441+142363659388s+31314606336s^2)}{154}\bigg).
\end{aligned}
\]
Hence
\begin{equation}\label{eq:positive-seeds}
Y_m(A_0)>0,\qquad Y_m(A_1)>0\qquad(m\ge1).
\end{equation}
\begin{lemma}[Elementary positive-cone contraction]
\label{lem:positive-cone}
For every \(j=1,2,3,4\), the quotient
\[
\frac{A_0G_m\e_j}{A_1G_m\e_j}
\]
is defined for \(m\ge1\), and all four quotients have one common limit.
\end{lemma}
\begin{proof}
Write
\[
p_m=Y_m(A_0),\qquad q_m=Y_m(A_1),\qquad
r_{m,i}=\frac{p_{m,i}}{q_{m,i}}.
\]
Equations \eqref{eq:positive-row-recurrence} and
\eqref{eq:positive-seeds} give
\[
r_{m+1,j}=\sum_{i=1}^4\omega^{(m)}_{ij}r_{m,i},
\qquad
\omega^{(m)}_{ij}
=\frac{q_{m,i}(T_m)_{ij}}
{\sum_{h=1}^4q_{m,h}(T_m)_{hj}},
\]
where
\[
\omega^{(m)}_{ij}>0,\qquad
\sum_{i=1}^4\omega^{(m)}_{ij}=1.
\]
Since \(T_m\to\widetilde{\mathcal S}>0\), there are \(m_0\) and
\(0<a<b\) such that
\[
a\le(T_m)_{ij}\le b\qquad(m\ge m_0;\ 1\le i,j\le4).
\]
One such positive step implies
\[
\frac ab\le\frac{q_{m+1,i}}{q_{m+1,j}}\le\frac ba.
\]
Consequently, for \(m\ge m_0+1\),
\[
\omega^{(m)}_{ij}\ge
\delta:=\frac{a^2}{4b^2}>0.
\]
Let
\[
\ell_m=\min_i r_{m,i},\qquad u_m=\max_i r_{m,i}.
\]
Every \(r_{m+1,j}\) is a convex combination of the preceding four ratios,
so \(\ell_m\) is nondecreasing and \(u_m\) is nonincreasing. The weights
on indices attaining the two endpoints are at least \(\delta\), whence
\[
\ell_m+\delta(u_m-\ell_m)
\le r_{m+1,j}\le
u_m-\delta(u_m-\ell_m)
\]
and
\[
u_{m+1}-\ell_{m+1}
\le(1-2\delta)(u_m-\ell_m).
\]
Thus all four \(r_{m,i}\) tend to one positive constant \(c\).
Finally \(Z_m(a)=Y_m(a)\mathcal P\). Every column of \(\mathcal P\) is
nonzero and nonnegative, so
\[
\frac{Z_m(A_0)_j}{Z_m(A_1)_j}
=
\frac{\sum_iq_{m,i}(\mathcal P)_{ij}r_{m,i}}
{\sum_iq_{m,i}(\mathcal P)_{ij}}
\]
is defined and is another convex combination of the \(r_{m,i}\). It tends
to \(c\). Since
\[
Z_m(a)_j=\frac{m^{j-1}}{(m!)^2}aG_m\e_j,
\]
the same is true of the four official quotients.
\end{proof}
The first-column identity \eqref{eq:first-column} fixes their common value:
\[
\lim_{m\to\infty}\frac{P_{m,j}}{Q_{m,j}}
=\frac{\sqrt{10005}}{\pi}
\qquad(j=1,2,3,4).
\]

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,167 @@
#!/usr/bin/env python3
"""Fail-closed structural validation for the Problem 2.8 FAMM scar bundle.
The JSON bundle is advisory interchange data, not a canonical Rust
``DiscoveryStore`` serialization. This verifier checks the boundary it does
claim: typed node/parent vocabulary, acyclic local references, exact artifact
hashes when finalized, explicit pending status otherwise, declared counts,
and the complete absence of hard-pruning authority.
"""
from hashlib import sha256
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
BUNDLE = Path(__file__).with_name("p28_famm_scars.json")
DISCOVERY_KINDS = {
"Observation",
"FailureSignature",
"Certificate",
"MinimizationCertificate",
"ProposedHardScar",
"AuthorizationCertificate",
"AuthorizedHardScar",
"ProposedDerivedConstraint",
"CompositionCertificate",
"AuthorizedDerivedConstraint",
"ObjectiveBoundCertificate",
"ComparisonCertificate",
"HardScar",
"SoftScar",
"Coarsening",
"RepresentativeSet",
"PolicyUpdate",
"RayInteraction",
"Bridge",
}
PARENT_ROLES = {
"ObservedFailure",
"CheckedBy",
"Authorizes",
"Supports",
"DerivedFrom",
"Refines",
"Supersedes",
"InteractsWith",
"BridgesFrom",
"BridgesTo",
}
HARD_KINDS = {"ProposedHardScar", "AuthorizationCertificate",
"AuthorizedHardScar", "HardScar"}
def digest(path):
return sha256(path.read_bytes()).hexdigest()
data = json.loads(BUNDLE.read_text(encoding="utf-8"))
assert data["schema"] == "mathpunch.p28-famm-scar-bundle.v1"
assert data["interchange_contract"]["ingested_into_discovery_store"] is False
assert data["interchange_contract"]["pruning_authority"] is False
assert data["interchange_contract"]["canonical_node_hashes"] is None
assert data["interchange_contract"]["mmr_commitment"] is None
assert data["authorized_hard_scars"] == []
assert data["authority_policy"]["authorized_hard_scars_present"] is False
scopes = {entry["scope"] for entry in data["scope_registry"]}
assert scopes
assert all(isinstance(scope, int) and 0 <= scope < 2**32 for scope in scopes)
nodes = data["nodes"]
by_id = {}
for node in nodes:
node_id = node["id"]
assert isinstance(node_id, int) and 0 <= node_id < 2**32
assert node_id not in by_id
assert node["kind"] in DISCOVERY_KINDS
assert node["kind"] not in HARD_KINDS
assert node["scope"] in scopes
assert isinstance(node["checker_version"], int)
assert 0 <= node["checker_version"] < 2**32
payload = node["payload"]
assert payload["variant"] == "Fields"
fields = payload["fields"]
assert all(
isinstance(field, list)
and len(field) == 2
and all(isinstance(value, str) for value in field)
for field in fields
)
keys = [field[0] for field in fields]
assert len(keys) == len(set(keys))
field_map = dict(fields)
assert field_map.get("pruning_authority", "false") == "false"
for parent in node["parents"]:
assert parent["role"] in PARENT_ROLES
assert parent["node"] in by_id
assert parent["node"] < node_id
by_id[node_id] = node
for node in nodes:
if node["kind"] == "FailureSignature":
assert any(
parent["role"] == "ObservedFailure"
and by_id[parent["node"]]["kind"] in {"Observation", "RayInteraction"}
for parent in node["parents"]
)
if node["kind"] == "SoftScar":
assert any(
parent["role"] == "Supports"
and by_id[parent["node"]]["kind"] == "FailureSignature"
for parent in node["parents"]
)
counts = data["counts"]
assert counts["nodes"] == len(nodes)
assert counts["certificate_nodes"] == sum(
node["kind"] == "Certificate" for node in nodes
)
assert counts["observation_nodes"] == sum(
node["kind"] == "Observation" for node in nodes
)
assert counts["failure_signature_nodes"] == sum(
node["kind"] == "FailureSignature" for node in nodes
)
assert counts["soft_scar_nodes"] == sum(
node["kind"] == "SoftScar" for node in nodes
)
assert counts["authorized_hard_scar_nodes"] == 0
assert counts["blocked_promotion_ideas"] == len(data["blocked_promotion_ideas"])
assert all(
item["current_disposition"] == "NOT_A_HARD_SCAR"
and item["pruning_authority"] is False
for item in data["blocked_promotion_ideas"]
)
finalized = 0
pending = 0
for checker in data["checker_registry"]:
artifact = ROOT / checker["artifact"]
assert artifact.is_file(), artifact
expected = checker.get("sha256")
if expected is None:
assert checker.get("pin_status", "").startswith("PENDING_")
pending += 1
else:
assert len(expected) == 64
assert digest(artifact) == expected, artifact
finalized += 1
problem = data["problem"]
if problem["release_hash_status"] == "FINAL":
assert digest(ROOT / "solution.tex") == problem["final_solution_tex_sha256"]
assert digest(ROOT / "solution.pdf") == problem["final_solution_pdf_sha256"]
else:
assert problem["release_hash_status"].startswith("PENDING_")
assert problem["final_solution_tex_sha256"] is None
assert problem["final_solution_pdf_sha256"] is None
print("PASS: FAMM scar interchange structure")
print(f"PASS: {len(nodes)} typed nodes and {len(scopes)} declared scopes")
print("PASS: zero hard-scar or pruning-authority nodes")
print(f"PASS: {finalized} finalized artifact hashes; {pending} explicit pending pins")

View file

@ -0,0 +1,60 @@
#!/usr/bin/env python3
"""Adversarial non-vacuity replay for the two optimized certificates.
Each valid checker is run separately by ``run_checks.sh``. Here one
authoritative coefficient is changed in an isolated temporary copy of each
checker. A PASS requires both corrupted copies to fail at the intended exact
identity, demonstrating that the coefficient tests are sensitive rather than
vacuous.
"""
from pathlib import Path
import subprocess
import sys
import tempfile
HERE = Path(__file__).resolve().parent
def rejected_mutant(filename, old, new, expected_failure):
source = (HERE / filename).read_text(encoding="utf-8")
assert old in source
mutant = source.replace(old, new, 1)
assert mutant != source
with tempfile.TemporaryDirectory(prefix="p28_mutation_") as directory:
target = Path(directory) / filename
target.write_text(mutant, encoding="utf-8")
completed = subprocess.run(
[sys.executable, str(target)],
capture_output=True,
text=True,
timeout=120,
check=False,
)
combined = completed.stdout + completed.stderr
assert completed.returncode != 0, f"mutant unexpectedly passed: {filename}"
assert expected_failure in combined, (
f"mutant failed outside the intended obligation: {filename}\n{combined}"
)
rejected_mutant(
"p28_positive_cone.py",
"[209067, 62208]",
"[209068, 62208]",
"failed obligation in group: 16 transfer identities",
)
print("PASS: positive-cone coefficient mutant rejected")
rejected_mutant(
"p28_optimized_gauge.py",
"-99*u**5 + 333*u**4",
"-98*u**5 + 333*u**4",
"D*M=J0+x*J1+x^2*J2, entry (1,1)",
)
print("PASS: optimized-gauge coefficient mutant rejected")
print("PASS: adversarial mutation sensitivity")

View file

@ -0,0 +1,634 @@
#!/usr/bin/env python3
"""Optimized exact gauge certificate for Ramanujan Challenge Problem 2.8.
The existing all-purpose standalone checker intentionally leaves rational
functions unreduced. That is maximally transparent, but the direct
sixteen-entry differential-gauge calculation creates very large temporary
denominators.
This independent checker first proves the exact decomposition
D M(u,x) = J0(u) + x J1(u) + x^2 J2(u),
D = diag(x,1,1,1),
and the additional relation
J2 = e4 * ((2u-9)/2) * b.
It then clears the common z-denominators before forming the gauge residual.
Every assertion is an equality in a sparse polynomial ring over QQ. The
implementation provides only addition, multiplication, integer powers,
formal differentiation, substitution, and coefficient extraction. It does
not call a simplifier, polynomial division, factorizer, Groebner basis,
special-function library, root finder, or numerical sampler.
"""
from fractions import Fraction as F
from time import perf_counter
START_TIME = perf_counter()
VARIABLES = ("u", "x", "n", "z", "t")
NVARS = len(VARIABLES)
INDEX = {name: position for position, name in enumerate(VARIABLES)}
ZERO_EXPONENT = (0,) * NVARS
class Poly:
"""Sparse multivariate polynomial over QQ."""
def __init__(self, terms=None):
combined = {}
for exponent, coefficient in (terms or {}).items():
exponent = tuple(exponent)
coefficient = F(coefficient)
if coefficient:
combined[exponent] = (
combined.get(exponent, F(0)) + coefficient
)
self.terms = {
exponent: coefficient
for exponent, coefficient in combined.items()
if coefficient
}
@staticmethod
def constant(value):
value = F(value)
return Poly({ZERO_EXPONENT: value}) if value else Poly()
@staticmethod
def variable(name):
exponent = [0] * NVARS
exponent[INDEX[name]] = 1
return Poly({tuple(exponent): F(1)})
def __add__(self, other):
other = as_poly(other)
terms = dict(self.terms)
for exponent, coefficient in other.terms.items():
terms[exponent] = (
terms.get(exponent, F(0)) + coefficient
)
return Poly(terms)
__radd__ = __add__
def __neg__(self):
return Poly({
exponent: -coefficient
for exponent, coefficient in self.terms.items()
})
def __sub__(self, other):
return self + (-as_poly(other))
def __rsub__(self, other):
return as_poly(other) - self
def __mul__(self, other):
other = as_poly(other)
terms = {}
for left_exp, left_coefficient in self.terms.items():
for right_exp, right_coefficient in other.terms.items():
exponent = tuple(
left_exp[position] + right_exp[position]
for position in range(NVARS)
)
terms[exponent] = (
terms.get(exponent, F(0))
+ left_coefficient * right_coefficient
)
return Poly(terms)
__rmul__ = __mul__
def __pow__(self, exponent):
if exponent < 0:
raise ValueError("polynomial powers must be nonnegative")
result = Poly.constant(1)
base = self
power = exponent
while power:
if power & 1:
result = result * base
base = base * base
power //= 2
return result
def derivative(self, name):
position = INDEX[name]
terms = {}
for exponent, coefficient in self.terms.items():
degree = exponent[position]
if degree:
new_exponent = list(exponent)
new_exponent[position] -= 1
terms[tuple(new_exponent)] = coefficient * degree
return Poly(terms)
def is_zero(self):
return not self.terms
def as_poly(value):
if isinstance(value, Poly):
return value
return Poly.constant(value)
class Rat:
"""Unreduced rational function represented by two sparse polynomials."""
def __init__(self, numerator=0, denominator=1):
self.numerator = as_poly(numerator)
self.denominator = as_poly(denominator)
if self.denominator.is_zero():
raise ZeroDivisionError("zero polynomial denominator")
def __add__(self, other):
other = as_rat(other)
return Rat(
self.numerator * other.denominator
+ other.numerator * self.denominator,
self.denominator * other.denominator,
)
__radd__ = __add__
def __neg__(self):
return Rat(-self.numerator, self.denominator)
def __sub__(self, other):
return self + (-as_rat(other))
def __rsub__(self, other):
return as_rat(other) - self
def __mul__(self, other):
other = as_rat(other)
return Rat(
self.numerator * other.numerator,
self.denominator * other.denominator,
)
__rmul__ = __mul__
def __truediv__(self, other):
other = as_rat(other)
if other.numerator.is_zero():
raise ZeroDivisionError("division by the zero rational function")
return Rat(
self.numerator * other.denominator,
self.denominator * other.numerator,
)
def __rtruediv__(self, other):
return as_rat(other) / self
def __pow__(self, exponent):
if exponent >= 0:
return Rat(
self.numerator ** exponent,
self.denominator ** exponent,
)
return Rat(
self.denominator ** (-exponent),
self.numerator ** (-exponent),
)
def derivative(self, name):
return Rat(
self.numerator.derivative(name) * self.denominator
- self.numerator * self.denominator.derivative(name),
self.denominator ** 2,
)
def is_zero(self):
return self.numerator.is_zero()
def as_rat(value):
if isinstance(value, Rat):
return value
if isinstance(value, Poly):
return Rat(value)
return Rat(F(value))
u, x, n, z, t = [
Rat(Poly.variable(name)) for name in VARIABLES
]
SYMBOLS = dict(zip(VARIABLES, (u, x, n, z, t)))
def substitute_polynomial(polynomial, replacements):
result = Rat(0)
for exponent, coefficient in polynomial.terms.items():
term = Rat(coefficient)
for position, degree in enumerate(exponent):
if degree:
name = VARIABLES[position]
term *= replacements.get(name, SYMBOLS[name]) ** degree
result += term
return result
def substitute_rational(expression, replacements):
expression = as_rat(expression)
return (
substitute_polynomial(expression.numerator, replacements)
/ substitute_polynomial(expression.denominator, replacements)
)
def coefficient(expression, name, degree):
"""Extract a coefficient when the denominator omits ``name``."""
expression = as_rat(expression)
position = INDEX[name]
assert all(
exponent[position] == 0
for exponent in expression.denominator.terms
)
terms = {}
for exponent, value in expression.numerator.terms.items():
if exponent[position] == degree:
reduced = list(exponent)
reduced[position] = 0
terms[tuple(reduced)] = value
return Rat(Poly(terms), expression.denominator)
def matrix_multiply(left, right):
return [
[
sum(
left[row][middle] * right[middle][column]
for middle in range(len(right))
)
for column in range(len(right[0]))
]
for row in range(len(left))
]
OBLIGATIONS = 0
def check_zero(label, expression):
global OBLIGATIONS
assert as_rat(expression).is_zero(), label
OBLIGATIONS += 1
def check_matrix_entries(label, matrix):
for row in range(len(matrix)):
for column in range(len(matrix[0])):
check_zero(
f"{label}, entry ({row + 1},{column + 1})",
matrix[row][column],
)
print(f"PASS: {label} ({len(matrix) * len(matrix[0])} entries)")
def matrix_subtract(left, right):
return [
[
left[row][column] - right[row][column]
for column in range(len(left[0]))
]
for row in range(len(left))
]
# ---------------------------------------------------------------------------
# Authoritative matrix and the exact J0+xJ1+x^2J2 decomposition.
# ---------------------------------------------------------------------------
r = 1 / x
w = u * (3*u - 2) * (3*u + 2)
a1 = (
r * (144*u**5 - 288*u**4 + 144*u**3)
- 99*u**5 + 333*u**4 - 229*u**3 - 114*u**2 + 40*u + 64
)
a2 = (
r * (432*u**4 - 864*u**3 + 432*u**2)
- 243*u**4 + 909*u**3 - 868*u**2 - 80*u + 272
)
a3 = (
r * (432*u**3 - 864*u**2 + 432*u)
- 153*u**3 + 648*u**2 - 860*u + 360
)
a4 = r * 144 * (u - 1)**2
b1 = (
r * (-144*u**3)
+ 9*u**4 + 63*u**3 + 158*u**2 + 168*u + 64
)
b2 = (
r * (216*u**2)
+ 36*u**3 - 189*u**2 - 316*u - 168
)
b3 = (
r * (108*u)
+ 54*u**2 - 189*u - 158
)
c1 = (
r**2 * (-288*u**3)
+ r * (54*u**4 + 378*u**3 + 948*u**2 + 1008*u + 384)
+ 18*u**5 + 45*u**4 - 251*u**3 - 1086*u**2 - 1384*u - 576
)
c2 = (
r**2 * (-432*u**2)
+ r * (153*u**4 - 657*u**3 + 1292*u**2 + 2064*u + 1072)
- 72*u**4 + 702*u**3 - 1069*u**2 - 2508*u - 1512
)
c3 = (
r**2 * (-216*u)
+ r * (180*u**3 - 891*u**2 + 1450*u + 1116)
- 108*u**3 + 864*u**2 - 1385*u - 1422
)
c4 = (
r**2 * (-4)
+ r * (6*u**2 - 33*u + F(536, 9))
- 4*u**2 + 32*u - 63
)
matrix_m = [
[a1/w, a2/w, a3/w, a4/w],
[-u**3, -3*u**2, -3*u, -1],
[
x*b1/144,
-x*b2/72,
-x*b3/36,
x*(-2*r - (2*u - 7))/2,
],
[x**2*c1/288, x**2*c2/144, x**2*c3/72, x**2*c4/4],
]
v = [u**3, 3*u**2, 3*u, 1]
alpha = 144*(u - 1)**2 / w
j0 = (
[[alpha*v[column] for column in range(4)]]
+ [[-v[column] for column in range(4)] for _ in range(3)]
)
a_finite = [
-99*u**5 + 333*u**4 - 229*u**3 - 114*u**2 + 40*u + 64,
-243*u**4 + 909*u**3 - 868*u**2 - 80*u + 272,
-153*u**3 + 648*u**2 - 860*u + 360,
0,
]
b_row = [
(u + 1)*(u + 2)*(3*u + 4)*(3*u + 8)/144,
(-36*u**3 + 189*u**2 + 316*u + 168)/72,
(-54*u**2 + 189*u + 158)/36,
(7 - 2*u)/2,
]
c_row = [
(u + 1)*(u + 2)*(3*u + 4)*(3*u + 8)/48,
(153*u**4 - 657*u**3 + 1292*u**2 + 2064*u + 1072)/144,
(180*u**3 - 891*u**2 + 1450*u + 1116)/72,
(54*u**2 - 297*u + 536)/36,
]
j1 = [
[entry/w for entry in a_finite],
[0, 0, 0, 0],
b_row,
c_row,
]
# J2 is entered independently from the finite c_i terms. The subsequent
# check against e4*beta*b is therefore not true by construction.
j2 = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[
(
18*u**5 + 45*u**4 - 251*u**3
- 1086*u**2 - 1384*u - 576
)/288,
(
-72*u**4 + 702*u**3 - 1069*u**2
- 2508*u - 1512
)/144,
(-108*u**3 + 864*u**2 - 1385*u - 1422)/72,
(-4*u**2 + 32*u - 63)/4,
],
]
beta = (2*u - 9)/2
j2_rank_one = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[beta*entry for entry in b_row],
]
check_matrix_entries(
"J2=e4*beta*b proportionality",
matrix_subtract(j2, j2_rank_one),
)
d_times_m = [
[
x*matrix_m[row][column] if row == 0
else matrix_m[row][column]
for column in range(4)
]
for row in range(4)
]
j_decomposition = [
[
j0[row][column]
+ x*j1[row][column]
+ x**2*j2[row][column]
for column in range(4)
]
for row in range(4)
]
check_matrix_entries(
"D*M=J0+x*J1+x^2*J2",
matrix_subtract(d_times_m, j_decomposition),
)
# ---------------------------------------------------------------------------
# Common-denominator clearing after x=-z/(1-z), u=2n+1.
# ---------------------------------------------------------------------------
substitutions = {"u": 2*n + 1}
j0_n = [
[substitute_rational(entry, substitutions) for entry in row]
for row in j0
]
j1_n = [
[substitute_rational(entry, substitutions) for entry in row]
for row in j1
]
j2_n = [
[substitute_rational(entry, substitutions) for entry in row]
for row in j2
]
e_diagonal = [1 - z, -z, -z, -z]
d_z = (1 - z)**2
g_bar = [
[
e_diagonal[row] * (
(1 - z)**2*j0_n[row][column]
- z*(1 - z)*j1_n[row][column]
+ z**2*j2_n[row][column]
)
for column in range(4)
]
for row in range(4)
]
# Bind the cleared formula directly to the authoritative matrix, rather than
# relying only on the already-checked decomposition.
matrix_nz = [
[
substitute_rational(
entry,
{"u": 2*n + 1, "x": -z/(1 - z)},
)
for entry in row
]
for row in matrix_m
]
g_direct = [[-z*entry for entry in row] for row in matrix_nz]
check_matrix_entries(
"Gbar=(1-z)^2*(-z*M) after the exact substitution",
[
[
g_bar[row][column] - d_z*g_direct[row][column]
for column in range(4)
]
for row in range(4)
],
)
def tail_operator(parameter):
return (
t*(t + 2*parameter - 1)**3
- z*(t + parameter)
*(t + parameter + F(1, 6))
*(t + parameter + F(1, 2))
*(t + parameter + F(5, 6))
)
def companion_and_cleared(parameter):
coefficients = [
coefficient(tail_operator(parameter), "t", degree)
for degree in range(5)
]
companion = [
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[-coefficients[column]/coefficients[4] for column in range(4)],
]
cleared = [
[0, 1 - z, 0, 0],
[0, 0, 1 - z, 0],
[0, 0, 0, 1 - z],
[-coefficients[column] for column in range(4)],
]
return companion, cleared
companion_n, c_bar_n = companion_and_cleared(n)
companion_n1, c_bar_n1 = companion_and_cleared(n + 1)
check_matrix_entries(
"Cbar_n=(1-z)*C_n",
[
[
c_bar_n[row][column]
- (1 - z)*companion_n[row][column]
for column in range(4)
]
for row in range(4)
],
)
check_matrix_entries(
"Cbar_(n+1)=(1-z)*C_(n+1)",
[
[
c_bar_n1[row][column]
- (1 - z)*companion_n1[row][column]
for column in range(4)
]
for row in range(4)
],
)
# Verify the quotient-rule conversion on every actual Gbar entry:
#
# d(1-z) theta(Gbar/d)
# = (1-z) z Gbar' + 2z Gbar, d=(1-z)^2.
quotient_rule_residual = []
for row in range(4):
residual_row = []
for column in range(4):
rational_entry = g_bar[row][column] / d_z
left = d_z*(1 - z)*z*rational_entry.derivative("z")
right = (
(1 - z)*z*g_bar[row][column].derivative("z")
+ 2*z*g_bar[row][column]
)
residual_row.append(left - right)
quotient_rule_residual.append(residual_row)
check_matrix_entries(
"entrywise quotient-rule clearing",
quotient_rule_residual,
)
# ---------------------------------------------------------------------------
# Sixteen-entry cleared polynomial gauge, checked coefficient by coefficient.
# ---------------------------------------------------------------------------
left_gauge = matrix_multiply(c_bar_n, g_bar)
right_gauge = matrix_multiply(g_bar, c_bar_n1)
cleared_residual = [
[
left_gauge[row][column]
- (1 - z)*z*g_bar[row][column].derivative("z")
- 2*z*g_bar[row][column]
- right_gauge[row][column]
for column in range(4)
]
for row in range(4)
]
# Gbar has z-degree at most three and Cbar has z-degree at most one.
# Therefore every cleared residual has z-degree at most four. Checking all
# five coefficients of all sixteen entries is a complete polynomial check.
for row in range(4):
for column in range(4):
for degree in range(5):
check_zero(
(
"cleared gauge coefficient "
f"entry ({row + 1},{column + 1}), z^{degree}"
),
coefficient(cleared_residual[row][column], "z", degree),
)
print(
"PASS: cleared gauge entry "
f"({row + 1},{column + 1}) coefficients z^0,...,z^4"
)
ELAPSED = perf_counter() - START_TIME
print("PASS: optimized denominator-cleared differential gauge")
print(f"PASS: {OBLIGATIONS} exact scalar obligations")
print(f"Runtime: {ELAPSED:.6f} seconds")
print("No simplifier, division algorithm, factorizer, root finder, or sampling.")

View file

@ -0,0 +1,663 @@
#!/usr/bin/env python3
"""Dependency-free positive-cone certificate for Problem 2.8.
This verifier constructs the authoritative deformed transfer matrix exactly
at x=1/R, balances it, and conjugates it by the Pascal matrix:
T_m = P * B_m * P^(-1).
With k=m-1 and s=R-4, every entry is checked coefficientwise against an
explicit rational function N_ij(k,s)/D_ij(m,R). Every coefficient of every
N_ij and D_ij is strictly positive, proving T_m>0 for m>=1 and R>=4.
The script also checks:
* both official seed rows enter this cone after the first transfer;
* the displayed positive limiting matrix is the exact limit of T_m; and
* specialization at the official R reproduces both official integer rows.
Only ``fractions.Fraction`` and sparse coefficient dictionaries are used.
There is no polynomial division, factorization, simplifier, root finder,
eigenvalue routine, numerical approximation, or finite sampling.
"""
from fractions import Fraction as F
class Poly:
"""Sparse polynomials in (k,s), represented by exponent pairs."""
__slots__ = ("terms",)
def __init__(self, terms=None):
normalized = {}
source = terms or {}
items = source.items() if hasattr(source, "items") else source
for exponent, coefficient in items:
coefficient = F(coefficient)
if coefficient:
normalized[tuple(exponent)] = (
normalized.get(tuple(exponent), F(0)) + coefficient
)
self.terms = {
exponent: coefficient
for exponent, coefficient in normalized.items()
if coefficient
}
@staticmethod
def constant(value):
value = F(value)
return Poly({(0, 0): value}) if value else Poly()
def __add__(self, other):
other = as_poly(other)
return Poly(list(self.terms.items()) + list(other.terms.items()))
__radd__ = __add__
def __neg__(self):
return Poly({exponent: -coefficient for exponent, coefficient in self.terms.items()})
def __sub__(self, other):
return self + (-as_poly(other))
def __rsub__(self, other):
return as_poly(other) - self
def __mul__(self, other):
if isinstance(other, Rat):
return other * self
other = as_poly(other)
terms = {}
for (ak, ass), ac in self.terms.items():
for (bk, bss), bc in other.terms.items():
exponent = (ak + bk, ass + bss)
terms[exponent] = terms.get(exponent, F(0)) + ac * bc
return Poly(terms)
__rmul__ = __mul__
def __pow__(self, exponent):
if exponent < 0:
return Rat(1, self ** (-exponent))
result = Poly.constant(1)
base = self
power = exponent
while power:
if power & 1:
result = result * base
base = base * base
power //= 2
return result
def __truediv__(self, other):
return Rat(self, as_poly(other))
def __rtruediv__(self, other):
return Rat(as_poly(other), self)
def __eq__(self, other):
return self.terms == as_poly(other).terms
def all_coefficients_positive(self):
return bool(self.terms) and all(value > 0 for value in self.terms.values())
def evaluate(self, k_value, s_value):
k_value = F(k_value)
s_value = F(s_value)
return sum(
coefficient * k_value**k_degree * s_value**s_degree
for (k_degree, s_degree), coefficient in self.terms.items()
)
def leading_in_k(self):
if not self.terms:
return -1, Poly()
degree = max(exponent[0] for exponent in self.terms)
coefficient = Poly(
{
(0, s_degree): value
for (k_degree, s_degree), value in self.terms.items()
if k_degree == degree
}
)
return degree, coefficient
def as_poly(value):
if isinstance(value, Poly):
return value
if isinstance(value, Rat):
if value.denominator == Poly.constant(1):
return value.numerator
raise TypeError("cannot coerce a non-polynomial rational function to Poly")
return Poly.constant(value)
class Rat:
"""Unsimplified rational functions; equality is by cross multiplication."""
__slots__ = ("numerator", "denominator")
def __init__(self, numerator=0, denominator=1):
if isinstance(numerator, Rat):
if denominator != 1:
raise TypeError("nested rational denominator")
self.numerator = numerator.numerator
self.denominator = numerator.denominator
return
self.numerator = as_poly(numerator)
self.denominator = as_poly(denominator)
if not self.denominator.terms:
raise ZeroDivisionError("zero polynomial denominator")
def __add__(self, other):
other = as_rat(other)
if self.denominator == other.denominator:
return Rat(self.numerator + other.numerator, self.denominator)
return Rat(
self.numerator * other.denominator
+ other.numerator * self.denominator,
self.denominator * other.denominator,
)
__radd__ = __add__
def __neg__(self):
return Rat(-self.numerator, self.denominator)
def __sub__(self, other):
return self + (-as_rat(other))
def __rsub__(self, other):
return as_rat(other) - self
def __mul__(self, other):
other = as_rat(other)
return Rat(
self.numerator * other.numerator,
self.denominator * other.denominator,
)
__rmul__ = __mul__
def __truediv__(self, other):
other = as_rat(other)
return Rat(
self.numerator * other.denominator,
self.denominator * other.numerator,
)
def __rtruediv__(self, other):
return as_rat(other) / self
def __pow__(self, exponent):
if exponent < 0:
return Rat(
self.denominator ** (-exponent),
self.numerator ** (-exponent),
)
return Rat(self.numerator**exponent, self.denominator**exponent)
def __eq__(self, other):
other = as_rat(other)
return (
self.numerator * other.denominator
== other.numerator * self.denominator
)
def evaluate(self, k_value, s_value):
denominator = self.denominator.evaluate(k_value, s_value)
if not denominator:
raise ZeroDivisionError("specialized denominator vanishes")
return self.numerator.evaluate(k_value, s_value) / denominator
def limit_in_k(self):
numerator_degree, numerator_lead = self.numerator.leading_in_k()
denominator_degree, denominator_lead = self.denominator.leading_in_k()
if numerator_degree < denominator_degree:
return Rat(0)
if numerator_degree > denominator_degree:
raise AssertionError("rational function diverges as k tends to infinity")
return Rat(numerator_lead, denominator_lead)
def as_rat(value):
return value if isinstance(value, Rat) else Rat(value)
def matrix_multiply(left, right):
rows = len(left)
inner = len(right)
columns = len(right[0])
assert all(len(row) == inner for row in left)
return [
[
sum(
(as_rat(left[i][h]) * as_rat(right[h][j]) for h in range(inner)),
Rat(0),
)
for j in range(columns)
]
for i in range(rows)
]
def row_matrix_multiply(row, matrix):
return matrix_multiply([row], matrix)[0]
def polynomial_from_coefficient_rows(rows):
"""Rows are indexed by k-degree; entries by s-degree."""
return Poly(
{
(k_degree, s_degree): coefficient
for k_degree, row in enumerate(rows)
for s_degree, coefficient in enumerate(row)
if coefficient
}
)
k = Poly({(1, 0): 1})
s = Poly({(0, 1): 1})
m = k + 1
R = s + 4
def authoritative_matrix(u, parameter_R):
"""The exact Problem 2.8 transfer at x=1/R."""
omega = u * (3 * u - 2) * (3 * u + 2)
a1 = parameter_R * (144*u**5 - 288*u**4 + 144*u**3) + (
-99*u**5 + 333*u**4 - 229*u**3 - 114*u**2 + 40*u + 64
)
a2 = parameter_R * (432*u**4 - 864*u**3 + 432*u**2) + (
-243*u**4 + 909*u**3 - 868*u**2 - 80*u + 272
)
a3 = parameter_R * (432*u**3 - 864*u**2 + 432*u) + (
-153*u**3 + 648*u**2 - 860*u + 360
)
a4 = parameter_R * 144 * (u - 1)**2
b1 = parameter_R * (-144*u**3) + (
9*u**4 + 63*u**3 + 158*u**2 + 168*u + 64
)
b2 = parameter_R * (216*u**2) + (
36*u**3 - 189*u**2 - 316*u - 168
)
b3 = parameter_R * (108*u) + (54*u**2 - 189*u - 158)
c1 = (
parameter_R**2 * (-288*u**3)
+ parameter_R * (54*u**4 + 378*u**3 + 948*u**2 + 1008*u + 384)
+ (18*u**5 + 45*u**4 - 251*u**3 - 1086*u**2 - 1384*u - 576)
)
c2 = (
parameter_R**2 * (-432*u**2)
+ parameter_R * (153*u**4 - 657*u**3 + 1292*u**2 + 2064*u + 1072)
+ (-72*u**4 + 702*u**3 - 1069*u**2 - 2508*u - 1512)
)
c3 = (
parameter_R**2 * (-216*u)
+ parameter_R * (180*u**3 - 891*u**2 + 1450*u + 1116)
+ (-108*u**3 + 864*u**2 - 1385*u - 1422)
)
c4 = (
parameter_R**2 * (-4)
+ parameter_R * (6*u**2 - 33*u + F(536, 9))
+ (-4*u**2 + 32*u - 63)
)
return [
[a1/omega, a2/omega, a3/omega, a4/omega],
[-u**3, -3*u**2, -3*u, -1],
[
b1/(144*parameter_R),
-b2/(72*parameter_R),
-b3/(36*parameter_R),
(-2*parameter_R-(2*u-7))/(2*parameter_R),
],
[
c1/(288*parameter_R**2),
c2/(144*parameter_R**2),
c3/(72*parameter_R**2),
c4/(4*parameter_R**2),
],
]
PASCAL = [
[1, 0, 0, 0],
[1, 1, 0, 0],
[1, 2, 1, 0],
[1, 3, 3, 1],
]
PASCAL_INVERSE = [
[1, 0, 0, 0],
[-1, 1, 0, 0],
[1, -2, 1, 0],
[-1, 3, -3, 1],
]
OBLIGATIONS = {}
def obligation(group, condition):
if not condition:
raise AssertionError("failed obligation in group: " + group)
OBLIGATIONS[group] = OBLIGATIONS.get(group, 0) + 1
obligation(
"Pascal inverse",
matrix_multiply(PASCAL, PASCAL_INVERSE)
== [[Rat(int(i == j)) for j in range(4)] for i in range(4)],
)
# Build B_m and T_m=P*B_m*P^(-1) exactly with m=k+1 and R=s+4.
M = authoritative_matrix(2*m + 3, R)
balanced = [
[
as_rat(M[i][j]) * (m+1)**j / m**i / (m+1)**2
for j in range(4)
]
for i in range(4)
]
T = matrix_multiply(matrix_multiply(PASCAL, balanced), PASCAL_INVERSE)
# Explicit coefficient arrays for N_ij(k,s). The outer list is indexed by
# k-degree and each inner list by s-degree.
NUMERATOR_COEFFICIENTS = [
[
[
[209067, 62208],
[409482, 124416],
[318165, 98496],
[122806, 38592],
[23580, 7488],
[1800, 576],
],
[
[216214, 62208],
[351120, 103680],
[210784, 63936],
[55584, 17280],
[5472, 1728],
],
[
[76079, 20736],
[98882, 27648],
[41796, 12096],
[5688, 1728],
],
[
[18432, 4608],
[27648, 6912],
[13824, 3456],
[2304, 576],
],
],
[
[
[44808, 15552],
[93312, 31104],
[62208, 20736],
[17280, 5760],
[1728, 576],
],
[
[186379, 62208],
[511210, 165888],
[519853, 167616],
[250678, 81216],
[58140, 19008],
[5256, 1728],
],
[
[66134, 20736],
[159568, 48384],
[131792, 39744],
[45216, 13824],
[5472, 1728],
],
[
[16222, 4608],
[42291, 11520],
[39050, 10368],
[15444, 4032],
[2232, 576],
],
],
[
[
[12995117, 8841456, 1492992],
[58685630, 37561608, 5971968],
[103594644, 64078200, 9828864],
[94855680, 57551496, 8640000],
[49440456, 29668248, 4396032],
[14835888, 8843664, 1299456],
[2392416, 1419552, 207360],
[160704, 95040, 13824],
],
[
[39423757, 27038952, 4478976],
[166410214, 105688080, 16422912],
[262665540, 160189416, 24012288],
[203963976, 121854816, 17915904],
[83704320, 49549824, 7216128],
[17449344, 10295424, 1492992],
[1461888, 860544, 124416],
],
[
[6744221, 4650768, 746496],
[26619818, 16612236, 2488320],
[37076724, 21985452, 3172608],
[23503608, 13602888, 1928448],
[6902496, 3967056, 559872],
[756864, 438048, 62208],
],
[
[87786, 60468, 9216],
[369593, 226474, 32256],
[559242, 320520, 43776],
[393892, 216608, 28800],
[131832, 70560, 9216],
[16992, 8928, 1152],
],
],
[
[
[33051981, 55702072, 23898528, 2985984],
[327240514, 376865532, 134112240, 14929920],
[930970540, 937602272, 303903216, 31601664],
[1279073232, 1205376648, 370469520, 36937728],
[994303368, 902431272, 268543536, 26072064],
[461588688, 409453104, 119369664, 11390976],
[127105056, 111089760, 31948032, 3013632],
[19185984, 16597440, 4727808, 442368],
[1223424, 1050624, 297216, 27648],
],
[
[124354341, 177927470, 72724752, 8957952],
[1045995002, 1120727784, 383156784, 41803776],
[2641611740, 2536092136, 794391552, 80870400],
[3164847768, 2875298832, 858173328, 83856384],
[2060023392, 1815713424, 527093136, 50264064],
[748445184, 648617760, 185300064, 17418240],
[142860672, 122627520, 34706880, 3234816],
[11197440, 9548928, 2685312, 248832],
],
[
[26276833, 32297441, 12409344, 1492992],
[188851718, 188046502, 61107192, 6469632],
[420585148, 383136068, 114774408, 11321856],
[431847432, 375502536, 107664480, 10202112],
[225990144, 191691072, 53691264, 4976640],
[58320000, 48926592, 13561344, 1244160],
[5847552, 4904064, 1358208, 124416],
],
[
[3759202, 4035454, 1433736, 165888],
[25198317, 23609115, 7287084, 746496],
[57385334, 50066438, 14346252, 1368576],
[62533980, 52200252, 14310108, 1306368],
[35688168, 28926216, 7710120, 684288],
[10310976, 8188128, 2142288, 186624],
[1192320, 933120, 241056, 20736],
],
],
]
N = [
[polynomial_from_coefficient_rows(NUMERATOR_COEFFICIENTS[i][j]) for j in range(4)]
for i in range(4)
]
g = (2*m+3) * (6*m+7) * (6*m+11)
D = [
[(m+1)**2*g, (m+1)*g, g, g],
[m*g, m*(m+1)*g, m*g, m*g],
[
24*m**2*(m+1)**2*g*R,
72*m**2*(m+1)*g*R,
36*m**2*g*R,
2*m**2*g*R,
],
[
48*m**3*(m+1)**2*g*R**2,
144*m**3*(m+1)*g*R**2,
72*m**3*g*R**2,
36*m**3*g*R**2,
],
]
for i in range(4):
for j in range(4):
obligation("16 transfer identities", T[i][j] == Rat(N[i][j], D[i][j]))
obligation("16 positive numerators", N[i][j].all_coefficients_positive())
obligation("16 positive denominators", D[i][j].all_coefficients_positive())
# Exact positive limiting matrix P*S*P^(-1).
LIMIT = [
[8*R-7, 4*(6*R-5), 24*R-17, 8*R],
[8*(R-1), 24*R-23, 4*(6*R-5), 8*R-1],
[
(R-1)*(8*R-1)/R,
2*(R-1)*(12*R-1)/R,
24*R-23,
2*(4*R**2-R-1)/R,
],
[
2*(R-1)*(4*R**2-R-1)/R**2,
(R-1)*(24*R**2-5*R-4)/R**2,
2*(R-1)*(12*R-1)/R,
(8*R**3-3*R**2-4)/R**2,
],
]
for i in range(4):
for j in range(4):
actual_limit = T[i][j].limit_in_k()
expected_limit = as_rat(LIMIT[i][j])
obligation("16 limiting-matrix identities", actual_limit == expected_limit)
obligation(
"16 positive limiting entries",
expected_limit.numerator.all_coefficients_positive()
and expected_limit.denominator.all_coefficients_positive(),
)
# Official seed rows and their first positive-cone states.
CHUD_A = 13_591_409
CHUD_B = 545_140_134
CHUD_S = 426_880
compact_denominator = [
18*R + F(159, 4),
54*R + F(131, 2),
54*R + 27,
18*R,
]
h0 = [CHUD_A+CHUD_B, CHUD_B, 0, 0]
seed_a1 = [CHUD_S*entry for entry in compact_denominator]
seed_a0 = [
CHUD_A*compact_denominator[index] - F(5, 4)*h0[index]
for index in range(4)
]
M0 = authoritative_matrix(Poly.constant(3), R)
cone_a1 = row_matrix_multiply(row_matrix_multiply(seed_a1, M0), PASCAL_INVERSE)
cone_a0 = row_matrix_multiply(row_matrix_multiply(seed_a0, M0), PASCAL_INVERSE)
EXPECTED_CONE_A1 = [
Rat(320160*polynomial_from_coefficient_rows([[451657, 259168, 36864]]), 77),
Rat(213440*polynomial_from_coefficient_rows([[1045771, 591288, 82944]]), 77),
Rat(3841920*polynomial_from_coefficient_rows([[30075, 16706, 2304]]), 77),
Rat(7683840*polynomial_from_coefficient_rows([[2612, 1421, 192]]), 77),
]
EXPECTED_CONE_A0 = [
Rat(polynomial_from_coefficient_rows([[13563858344917, 18828949838688, 4509303312384]]), 924),
Rat(2*polynomial_from_coefficient_rows([[2606908232573, 3613607517834, 845494371072]]), 231),
Rat(polynomial_from_coefficient_rows([[3584820267815, 4955797147464, 1127325828096]]), 308),
Rat(3*polynomial_from_coefficient_rows([[103400761441, 142363659388, 31314606336]]), 154),
]
for actual, expected in zip(cone_a1, EXPECTED_CONE_A1):
obligation("8 seed-cone identities", actual == expected)
obligation(
"8 positive seed coordinates",
expected.numerator.all_coefficients_positive()
and expected.denominator.all_coefficients_positive(),
)
for actual, expected in zip(cone_a0, EXPECTED_CONE_A0):
obligation("8 seed-cone identities", actual == expected)
obligation(
"8 positive seed coordinates",
expected.numerator.all_coefficients_positive()
and expected.denominator.all_coefficients_positive(),
)
R_OFFICIAL = 151_931_373_056_001
S_OFFICIAL = R_OFFICIAL - 4
OFFICIAL_A0 = [
37169305760442252761441,
111507917281327441564208,
111507917281327599720129,
37169305760442410917362,
]
OFFICIAL_A1 = [
1167416361542639692320,
3502249084627896132160,
3502249084627879697280,
1167416361542622723840,
]
obligation(
"official coefficient relation",
9*236_337_691_420_383 == 14*R_OFFICIAL - 567,
)
obligation(
"2 official seed specializations",
[as_rat(entry).evaluate(0, S_OFFICIAL) for entry in seed_a0] == OFFICIAL_A0,
)
obligation(
"2 official seed specializations",
[as_rat(entry).evaluate(0, S_OFFICIAL) for entry in seed_a1] == OFFICIAL_A1,
)
total = sum(OBLIGATIONS.values())
print("PASS: exact positive-cone certificate")
for group, count in OBLIGATIONS.items():
print(f"PASS: {group}: {count}")
print(f"PASS: {total} exact obligations")
print("T_m=P*B_m*P^(-1) is entrywise positive for every m>=1 and R>=4")
print("Both official seed rows enter the same positive cone after one transfer")
print("No sampling, factorizer, simplifier, root finder, or eigenvalue routine was used")

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -0,0 +1,203 @@
# FAMM scars for Ramanujan Challenge Problem 2.8
## Status
This file and `certificates/p28_famm_scars.json` are advisory discovery
artifacts. They do not alter the proof, authorize pruning, or assert membership
in a canonical `DiscoveryStore`.
The formula-optimization rebuild is finalized. SHA-256 pins for the rank/ODE,
convergence, standalone-equation, denominator-cleared-gauge, positive-cone,
FAMM-interchange, and package-runner checkers are recorded in the JSON, along
with the final `solution.tex` and `solution.pdf` hashes. The older solution
hashes are retained solely as provenance for baseline commit `492c8ab`.
The bundle records defects found during the adversarial proof loop so later
searches can prioritize equation-level checks without mistaking past failures
for universal impossibility results.
The governing rule is:
> An observation, failure signature, SoftScar, or blocked promotion idea may
> change route priority. It may not remove a proof candidate.
The JSON therefore contains no `AuthorizedHardScar`.
## Authoritative FAMM sources
The schema and authority policy were read from
`allaunthefox/MathPunch-FiniteState` at commit
`9df0f48576aefce91eb1fc13ff876bec1007162d`:
| File | Relevant rule |
|---|---|
| `docs/specs/FAMM_REFINED.md` | Exact and advisory memory are separate; only exact/formal, replayed, in-scope, instance-matched, version-matched scars may hard-apply. |
| `docs/specs/FAMM_TOPOLOGY_ESCALATION_V1.md` | Machine layout and physical observations never change mathematical authority; advisory or unreplayed scars never hard-prune. |
| `src/discovery/node.rs` | Defines `Observation`, `FailureSignature`, `Certificate`, `SoftScar`, `ProposedHardScar`, `AuthorizationCertificate`, and `AuthorizedHardScar`, along with typed parent roles. |
| `src/discovery/authorization.rs` | The implemented hard-scar gate requires a typed Boolean linear formula, complete failed assignment, deletion-minimized cube, exact linear-constraint certificate, `linear-cube-interval` authorization, and replay/reauthorization. |
| `src/discovery/canonical.rs` | Canonical bytes sort parents and field payloads and bind kind, payload, parents, scope, and checker version under a domain-separated hash. |
The Problem 2.8 failures are polynomial, analytic, asymptotic, and
proof-engineering failures. They are not instances of the current Boolean
linear `TypedFormula`/`CubeRegion` authorization language. Consequently, no
entry in this package is promoted to `AuthorizedHardScar`, even when an exact
standalone checker supports the underlying equation.
## JSON schema choices
`p28_famm_scars.json` uses the new interchange identifier
`mathpunch.p28-famm-scar-bundle.v1`.
It mirrors the Rust discovery vocabulary without pretending to be a Rust
serialization:
- `kind` uses exact `DiscoveryKind` names.
- `parents` use exact `ParentRole` names and bundle-local integer node IDs.
- A SoftScar's advisory relationship to its FailureSignature uses
`ParentRole::Supports`, never `DerivedFrom`; `CheckedBy` separately links a
replay certificate when one exists.
- `scope` is a bundle-local unsigned integer resolved through
`scope_registry`.
- `payload` uses the `Fields` variant as ordered key/value pairs; a future
importer must sort them as `canonical.rs` requires.
- `checker_version` is an unsigned schema/checker generation.
- replay commands, runtimes, artifact paths, and SHA-256 hashes are declared
separately in `checker_registry`.
The bundle intentionally sets these fields to non-authoritative values:
```text
ingested_into_discovery_store = false
canonical_node_hashes = null
mmr_commitment = null
pruning_authority = false
```
Local node and scope IDs must be remapped by an importer. Canonical discovery
hashes may be assigned only after the nodes are constructed through the
repository's canonical Rust path.
## Scar catalogue
Every row below corresponds to an
`Observation -> FailureSignature -> SoftScar` chain in the JSON.
| SoftScar | Exact scope | Failure signature | Assumption avoided | Replay support |
|---|---|---|---|---|
| `12` | Pinned transfer and package | An under-defined or transcription-divergent matrix is used by later identities | Omitted coefficients are harmless | Dependency-free equation replay |
| `22` | Tail contiguity for the displayed \(M_N(x)\) and shifted \({}_4F_3\) jet | CAS Ore division is cited without four cleared residual identities | A zero-remainder routine is itself an inspectable certificate | Dependency-free equation replay |
| `32` | Terminating denominator, \(n\ge1\), \(0\le k\le n\) | Fourth-order uniqueness is inferred from normalization at \(z=0\) | One datum determines a fourth-order analytic solution | Base/generic/top coefficient replay |
| `42` | Official matrix-to-scalar bridge | A scalar recurrence is accepted without an exact intertwiner | Sample agreement identifies the official module | Sixteen gauge entries and contraction replay |
| `52` | Official \(R,x_0\), \(|x|=1/4\), \(m\ge1\) | An inequality is inverted without reversing its direction | Integer powers preserve order for negative exponents | Exact rational convergence checker |
| `62` | Official seed rows, four columns, and positive cone | A named transport theorem hides the hypotheses or denominator conclusion | Spectral machinery is necessary for all-column transport | Exact Pascal-conjugated positive transfer and elementary min/max contraction |
| `72` | Historical characteristic quartic and displayed eigenvector | Native factor/GCD/root decisions are used as portable exact proof | CAS decisions carry proof authority by default | Exact coefficient homotopy and polynomial eigenvector replay for the retained legacy route |
| `82` | Official four columns in the proved positive cone | A quotient is formed before denominator positivity | Formal ratio notation guarantees a nonzero denominator | Exact cone entry and strictly positive transfer entries |
| `92` | Mandatory/optional checker split | A stored PASS transcript substitutes for live replay | A receipt proves the current bytes were executed | Mandatory standard-library runner |
| `102` | Release metadata | The reciprocal limit is labelled as the official orientation | Equivalent formulas have interchangeable submission labels | Boxed manuscript theorem and official-scope review |
| `112` | Wolfram source serialization | A line break terminates an assignment before leading-plus continuation terms | Printed multiline equality equals parsed equality | Parser round-trip is required; current Wolfram run is optional |
| `122` | Pinned rational gauge after denominator clearing | Raw rational expansion produces avoidable expression swell or resource failure | Raw rational normal form is required, or capacity failure falsifies the identity | 176 cleared polynomial obligations |
| `132` | Official Pascal-conjugated positive cone | Spectral machinery is introduced before testing an elementary positive transport | Eigenvalues and a stable graph are necessary for the official columns | 100 exact positive-cone obligations |
| `142` | Advisory FAMM interchange bundle | A SoftScar is linked as an exact derivation rather than advisory support | Advisory diagnosis has exact derivational authority | Structural validator requiring `Supports` and zero hard authority |
These scars are deliberately narrow:
- They apply only to the pinned Problem 2.8 objects and proof routes.
- They do not assert that Ore methods, scalar recurrences, asymptotic theorems,
CAS tools, or reciprocal formulations are invalid in general.
- They do not rule out a repaired candidate satisfying the missing equation or
hypothesis.
## Exact replay links
The advisory scars point to these replayable local artifacts:
```sh
python3 certificates/p28_rank_ode_bound_verifier.py
python3 certificates/p28_convergence_constants.py
python3 certificates/p28_standalone_equations.py
python3 certificates/p28_dominant_product_algebra.py
python3 certificates/p28_optimized_gauge.py
python3 certificates/p28_positive_cone.py
python3 certificates/p28_famm_scars_validator.py
```
The complete mandatory path is:
```sh
bash run_checks.sh
```
Sage and Wolfram files remain optional independent cross-checks. Their absence
does not convert a stored transcript into proof evidence.
Finalized artifact hashes and checker identifiers are in the JSON. Changing a
finalized checker, manuscript source, or PDF requires a new replay and a new
bundle version.
## Formula-optimization loop
Two optimization results change route priority without changing mathematical
authority:
1. The rational gauge is replayed after the diagonal scaling
\(D=\operatorname{diag}(x,1,1,1)\) and common clearing by \((1-z)^2\).
The resulting companion matrices have bounded polynomial degree, and the
checker expands the claim into 176 scalar polynomial obligations. A timeout,
capacity rejection, or expression explosion in the unreduced route is a
proof-engineering failure, not evidence that the rational identity is false.
2. The current all-column proof conjugates the balanced transfer by the exact
Pascal matrix, places both official seed rows in a strictly positive cone,
and uses the elementary min/max contraction of positive weighted averages.
The earlier spectral and stable-graph argument remains an audited historical
route, but it is no longer an active prerequisite for the four-column
transport or denominator nonvanishing.
The interchange validator records the corresponding route scars and checks
that each SoftScar is advisory: it must have a `Supports` edge from a
FailureSignature, may have a separate `CheckedBy` certificate, has no hard
authority, and cannot prune.
## Why no hard scars were emitted
Three exact-certificate-linked promotion ideas are recorded under
`blocked_promotion_ideas`:
1. nonzero cleared Ore residuals;
2. reversed negative-exponent inequalities;
3. nonzero matrix-to-scalar intertwiner residuals.
They are not `ProposedHardScar` or `AuthorizedHardScar` nodes. The present
authorizer cannot express their formula domain, region semantics, or
minimization rule. Promoting any of them requires all of:
1. a versioned typed proof-domain formula;
2. canonical coefficient or inequality encoding;
3. exact applicability-scope semantics;
4. a replayable witness;
5. a sound minimization rule;
6. an authorization certificate;
7. reauthorization after persistence;
8. hostile tests for forged witness, broadened scope, stale version, altered
parent, and valid-candidate pruning attacks.
Until that machinery exists, the exact certificates support diagnosis and
priority only.
## Import requirements
A future importer into `DiscoveryStore` must:
1. register canonical problem, instance, and scope objects;
2. run `certificates/p28_famm_scars_validator.py` and reject a malformed role,
scope, count, hash pin, or hard-authority claim;
3. verify every declared artifact hash;
4. execute the mandatory checker commands against those exact bytes;
5. translate local IDs to store `NodeId` values;
6. construct nodes through the Rust API;
7. recompute canonical discovery hashes;
8. replay the resulting store and MMR;
9. retain every SoftScar as non-pruning;
10. leave `blocked_promotion_ideas` outside `HardIndex`.
Failure at any step is a typed import or replay failure, not evidence that a
mathematical proof candidate is impossible.

View file

@ -0,0 +1,127 @@
# Adversarial Audit — Ramanujan Challenge Problem 2.8
## Verdict
The recurrence-specific proof path passes the repaired adversarial audit.
Every Ore, differential-gauge, terminating-induction, valuation, convergence,
and all-four-column obligation is now displayed as an equation and replayed
without a computer-algebra decision procedure. The active all-column proof is
an elementary positive-cone contraction; the earlier spectral/stable-graph
route remains in the package as a replayed legacy alternative.
The exact trust boundary is important:
- The proof imports the classical Chudnovsky formula as one explicitly named
theorem, with a precise citation to a complete modular/CM derivation.
- It also uses foundational results stated with their hypotheses: absolute
convergence of power series, the maximum modulus principle, and completeness
of bounded monotone real sequences.
- It does **not** claim to be axiom-free or to reconstruct those foundational
theorems from set theory.
Relative to that explicit boundary, no recurrence-specific assumption,
vacuous implication, numerical-equality inference, or hidden CAS remainder
remains.
## Defects found and repaired
| Initial defect | Why it failed | Equation-level repair |
|---|---|---|
| The deformed transfer was under-defined | Only one substituted coefficient was shown; later notation changed the meaning of the first argument | Displayed all sixteen entries of \(\mathcal M(u,x)\), defined \(M_N(x)=\mathcal M(2N+3,x)\), and displayed both official seed rows |
| Three matrix terms lost a plus sign during the first repair | The manuscript matrix then differed from the certified matrix | Restored the three sums in \(c_1,c_2,c_3\); hostile replay caught this before release |
| Ore divisions used `quo_rem` | A zero remainder was trusted rather than exhibited | Replaced every division with four direct cleared factorizations \(D_r=q_rL_+\), including the fourth companion closure |
| “Standard ascension identity” and transformed ODE were named but not derived | The coefficient mechanism was hidden | Added initial coefficient and consecutive-ratio equations; expanded the \({}_3F_2\) Euler operator explicitly |
| ODE normalization was claimed to determine the terminating \({}_4F_3\) uniquely | False: the exponent \(2n\) supplies an additional analytic branch | Replaced uniqueness with base, generic, and top coefficient induction for the actual one-step operator |
| The scalar one-step operator was not tied to the challenge matrix | Hard-coded \(d_0,d_1\) could have described a surrogate | Added horizontal reconstruction, all sixteen differential-gauge equations, and the exact matrix contraction producing \(d_0+zd_1\) |
| Only the first base component was initially checked | The actual compact seed row was not yet known to be horizontal | Added all four base-row reconstruction equations, the base terminating-operator equation, and all four base adjoint residuals |
| Two DVR-lemma hypotheses were only implicit | The induction had not displayed the \(k_{N+1}\) leading direction or \(J_N(0)e_1\ne0\) | Added both expansions and cited them explicitly at the induction step |
| A transfer norm inequality used an upper bound with exponent \(-1\) | The inequality direction was invalid for column four | Split \(j\le3\) and \(j=4\), then used coupled row factors to obtain \(\|\mathcal B_m\|_\infty\le4981375/512<10000\) |
| The maximum-modulus step omitted holomorphy of the quotient | Formal divisibility only supplied a local removable germ | Proved holomorphy on \(|x|\le1/4\), identified the only possible pole, and removed it with the \(2n\)-valuation |
| BirkhoffPoincaré was used as a black box for three columns | It hid the exceptional hyperplane, dominant functional, decay, and denominator nonvanishing | First replaced it with an explicit stable graph; the optimized proof now eliminates the spectral layer entirely via \(T_m=\mathcal P\mathcal B_m\mathcal P^{-1}>0\) and a four-weight min/max contraction |
| The spectral route required a quartic root count, eigenvector, and exceptional-hyperplane analysis | Although repaired, it created unnecessary proof surface | Verified all 285 positive numerator coefficients, the positive limiting transfer, and both positive seeds; all four quotients are now convex averages with uniformly positive weights |
| Division in columns \(2,3,4\) preceded an eventual-nonzero proof | The displayed quotients were not yet justified | The positive-cone seed and transfer identities now give \(Q_{m,j}>0\) for every \(m\ge1\), before any quotient is formed |
| The direct rational differential gauge produced large unreduced intermediates | Correct but slow replay increased resource and serialization risk | Added a separately reconstructed \(J_0+xJ_1+x^2J_2\) decomposition and checked the denominator-cleared polynomial gauge in 176 scalar coefficient obligations |
| The terminating step polynomial obscured its structure with 21 expanded terms | Large coefficients made transcription review difficult | Rewrote it in \(u=2n+1,\ q=2n-t\), then added a direct coefficient identity against the former expansion |
| A FAMM `SoftScar` was initially linked with `DerivedFrom` | It did not follow the repositorys calibrated `Supports` parent pattern | Corrected every parent role and added a fail-closed FAMM interchange validator; all scars remain advisory |
| The checker could succeed while Wolfram/Sage were absent | A stored transcript was being treated as proof evidence | Made standard-library rational-polynomial verifiers mandatory; Wolfram and Sage are now optional independent cross-checks |
| Metadata called \(Q/P\) the requested orientation | The official challenge asks for \(P/Q\) | Corrected every release document to state \(P/Q\to\sqrt{10005}/\pi\) as the official orientation |
## Mandatory replay
Run:
```sh
./run_checks.sh
```
The mandatory path executes:
1. `p28_rank_ode_bound_verifier.py`
2. `p28_convergence_constants.py`
3. `p28_standalone_equations.py`
4. `p28_optimized_gauge.py`
5. `p28_positive_cone.py`
6. `p28_mutation_sensitivity.py`
7. `p28_famm_scars_validator.py`
It then replays `p28_dominant_product_algebra.py` as a preserved legacy
cross-check; that quartic/spectral route is not required by the active proof.
The third verifier checks:
- four cleared tail factorizations;
- lowest and generic tail coefficients;
- horizontal reconstruction;
- the terminating-operator closure;
- all sixteen differential-gauge entries;
- the authoritative matrix-to-scalar contraction;
- the base polynomial and four base-row components;
- the base terminating equation and four base adjoint residuals;
- constant, generic, and top terminating induction;
- ascension and the \({}_3F_2\) Euler equation.
The positive-cone verifier checks:
- the authoritative \(M_m\), balanced \(\mathcal B_m\), and
\(T_m=\mathcal P\mathcal B_m\mathcal P^{-1}\);
- all sixteen rational identities \(T_{m,ij}=N_{ij}/D_{ij}\);
- all 285 strictly positive coefficients of the \(N_{ij}(m-1,R-4)\);
- the exact positive limiting matrix;
- all eight positive coordinates of the two official transformed seeds.
The optimized gauge separately checks 176 scalar coefficients while the
original sixteen-entry gauge remains in the standalone checker. These
verifiers use `fractions.Fraction` and explicit coefficient dictionaries. None
uses polynomial division, factorization, a simplifier, Gröbner bases,
irreducibility, GCD, a root finder, a special-function package, sampling, or
a stored transcript.
## Forbidden-shortcut search
The mandatory runner rejects these constructs in the proof path:
- `quo_rem`
- `is_irreducible`
- polynomial `gcd`
- Birkhoff/Poincaré delegation
- “standard ascension”
- ODE-normalization uniqueness
- the former dominant-product lemma in the active manuscript
No occurrence of `native_decide`, `axiom`, `sorry`, or `admit` was found.
## Independent hostile replays
Independent reviews and mutation replays targeted:
- logical validity, indexing, vacuity, and denominator domains;
- Ore/special-function and matrix-to-scalar algebra;
- convergence and all-column division;
- one-coefficient corruption of the positive-cone numerator table;
- one-coefficient corruption of the optimized \(J\)-decomposition.
The defects in the table above were discovered during those loops. The final
Ore, gauge, positive-cone, convergence, and logic/vacuity replays return PASS,
and both corrupted checkers fail at their intended identities. Release
engineering then repeats the mandatory checks in a clean extraction, rebuilds
the PDF, and performs page-by-page visual inspection.

Binary file not shown.