四本入っています。問いが違うので、一本では足りません。
| 問い | 項目 | |
|---|---|---|
independent_check.py |
定理は正しいか。 証明の記述から独立に実装して、同じ結論に達するか | 15 |
claims_audit.py |
紙面に印字されている数字は、その通りに出るか。 | 32 |
check_errata.py |
正誤表が紙面について述べていることは、紙面と合うか。 | 108 |
check_route.py |
ROUTE.md の九段階は、他の文書と食い違わないか。 | 143 |
定理が正しくても、論文に印字された数字が別の設定で計算されたものだったり、 書き写す段階で崩れていたりすることはあります。逆に、数字が全部合っていても、 定理そのものが記述どおりには成り立たないことがある —— この系列の初版がまさにそれです。 だから複数の方向から見ます。
python3 independent_check.py # 15 項目
python3 claims_audit.py # 32 項目
python3 check_errata.py # 108 項目(pypdf が要る)
python3 check_route.py # 143 項目
python3 check_text.py # 誤変換・使わないと決めた語
上の二本は NumPy のみを必要とします。乱数種は固定してあるので、何度実行しても同じ数値が出ます。 通れば、それぞれ終了コード 0 を返します。
なお、各論文は series1_verification.py などを同梱していると謳っているが、
そのスクリプトは存在しない(../ERRATA.md の E3)。謳っているのは
謝辞だけではなく、三本で合計 6 箇所です。ここにある四本は、その復元でも代用でもなく、
別に書いたものです。
check_errata.py は、その 6 箇所が本当に紙面に印字されているかを PDF から取り出して
突き合わせる(108 項目)。正誤表の引用が紙面と食い違ったら、そこで落ちます。
見る内容は audit.toml に宣言してあります。引用が一字一句あるか、
「印字されていない」と述べたものが本当に無いか、宣言した件数だけ挙がっているか、
名乗る数値が実際に走らせた結果と一致するか、未解決の項目がそのまま残っているか、
PDF が差し替わっていないか(SHA-256)、最終更新が本文のどの日付よりも古くないか。
当たる側は errata_check.py で、これは
errata-check(MIT、v0.1.0、10.5281/zenodo.22649054)を写したものです。
単一ファイルなので、ここに置いて使っています。
A — 残った定理。 f(x) = αQx + (1−α)p について、変位がちょうど α 倍されること、
不動点が閉形式 (1−α)(I−αQ)⁻¹p と一致すること、誤差がちょうど αᵏ で減衰すること。
巡回置換について n = 2, 3, 4, 5, 8 で確認します。
なお、Series I の記述は ‖Tₙ − T*‖ ≤ αⁿ‖T₀ − T*‖ と不等号だが、線形部分がちょうど
α × 等長写像なので等号が成り立つ。24 反復まで、差は 1.1×10⁻¹⁶ 以内です。
B — 本質的でなかった三つの前提。 証明が使っているのは「Q が長さを変えない」ことだけです。
つまり、三要素であることも、巡回置換であることも、状態空間が [0,1]ⁿ であることも、 収束には効いていません。
C — 異方性の縮小定数。 Series II の maxᵢ aᵢ は「タイトな上界」ではなく、
DQ(D = diag(a))の作用素ノルムそのものです。スペクトルノルムはユニタリ不変なので
‖DQ‖₂ = ‖D‖₂ = maxᵢ aᵢ。20,000 方向の経験的上限と照合して 10⁻¹² 以内で一致します。
D — 残らなかった主張。 改訂前の作用素(自己言及的な統合)を記述どおり実行すると、 極限が初期値に依存します。1000 回の試行で、極限の平均 0.5052、標準偏差 0.1655、範囲 [0.0437, 0.9422]。
Series I が別実装で報告した値は 平均 0.4995、範囲 [0.0403, 0.9589] です。 別々に書かれた二つの実装が、同じ記述から同じ結論に達しています。
論文の紙面から数値を書き写し、その隣に計算し直した値を並べる。判定は三つです。
MATCH |
印字された値と計算値が、示した許容差の中で一致する |
CONSISTENT |
乱数を使う主張なので一致は求められない。分布の理論値と整合する |
MISMATCH |
一致しない |
32 項目のうち 28 が MATCH、4 が CONSISTENT、MISMATCH は 0 です。
補正した作用素の不動点 (0.510204, 0.306122, 0.183673) を閉形式から計算し、さらに
閉形式を信じずに 5 点から 400 回反復して同じ点に着くことを確かめる(差 10⁻¹⁶ 台)。
第3節の利得表は πC(n)=n+1, πD(n)=n+2 という定義から 8 行を生成し直して 1 行ずつ突き合わせ、
裏切りの強支配とパレート支配も判定します。閾値 δ*=1/2 は 200 万点の格子で
VC ≥ VD が最初に成り立つ δ を探して確かめる。
自己言及的な統合(撤回された方)については、乱数の再実行より強いことが言える。 極限は初期値の三成分の平均に等しいので、その分布は解析的に分かる —— U(0,1) 三個の平均は 平均 1/2、標準偏差 1/6 = 0.16667。論文の報告値 0.4995 / 0.1676 はこの理論値と整合します。
異方的な不動点 (0.754190, 0.527933, 0.508380)、20,000 組の経験的な縮小比、
離散時間の V(xₙ₊₁) ≤ max(aᵢ)² V(xₙ)、ミニマックス利得 2。
第4節の凸包は SciPy を使わずに計算します。8 点なので全ての 3 点組から支持超平面を総当たりで拾い、 同一平面上の点をまとめて面を作り、扇状に分割して体積を出します。結果は 4.000000、面 6 枚 (論文の 4.00 と一致)。端点かどうかは、その点を除いて凸包を作り直し、体積が真に減るかで判定する (8 点すべてが端点)。
第6節は 3閉路のグラフラプラシアンの固有値 0,3,3、ρ(0.25K)=0.75、200 項の部分和と閉形式の差
2.7×10⁻¹⁵(論文は 3×10⁻¹⁵ 以内)、K∞ の行列一致。
表1 を n=2〜8 で作り直します。等長写像の誤差は全て厳密に 0、閉形式の不動点への最大偏差は 1.1×10⁻¹⁶、
P² = I となるのは n=2 のみ —— 論文の表1 の三列がそのまま再現します。
加えて、収束の速さが n に依存しないことを 24 反復まで確認します。
四本とも、系列の内容を読んだうえで Claude Code(Anthropic)を用いて書かれ、実行されました。 論文本体には含まれていません。数値はすべて実行して得たものです。