コンピュータ代数システムは数学研究に大きな助けとなっていますが、ソフトウェア内の予期しないエラーが研究に深刻な影響を与えることもあります。例として、著者らはMathematicaが整数行列の行列式計算時に発生させるエラーを検出した方法を示しています。このエラーは行列式を誤って計算するだけでなく、同じ行列式を2回計算すると異なる結果が得られるという問題も含んでいます。
著者らは直交多項式のCasoratti行列式を研究中に以下の行列を扱いました:
P_{f_1}(a_k) & P_{f_1}(a_{k+1}) & \cdots & P_{f_1}(a_{k+l}) \\ P_{f_2}(a_k) & P_{f_2}(a_{k+1}) & \cdots & P_{f_2}(a_{k+l}) \\ \vdots & \vdots & \ddots & \vdots \\ P_{f_l}(a_k) & P_{f_l}(a_{k+1}) & \cdots & P_{f_l}(a_{k+l}) \end{pmatrix}$$ 浮動小数点数の問題を回避するために整数を使用してすべての例を構築しましたが、MathematicaとMapleが異なる結果を与えることを発見しました。 ### エラー隔離方法 計算問題を隔離するため、著者らは以下の方法でエラーをトリガーする行列を生成しました: 1. **基本行列の生成**: ```mathematica basicMatrix = Table[Table[RandomInteger[{-99, 99}], {i, 1, 14}], {j, 1, 14}] ``` 2. **大整数の作成**: ```mathematica powersMatrix = DiagonalMatrix[{10^123, 10^152, 10^185, 10^220, 10^397, 10^449, 10^503, 10^563, 10^979, 10^1059, 10^1143, 10^1229, 10^1319, 10^1412}] ``` 3. **ランダムな摂動の追加**: ```mathematica smallMatrix = Table[Table[RandomInteger[{-999, 999}], {i, 1, 14}], {j, 1, 14}] ``` 4. **最終行列の構築**: ```mathematica bigMatrix = basicMatrix.powersMatrix + smallMatrix ``` ### エラー検証 同じ行列の行列式を複数回計算することでエラーを検証しました: ```mathematica a = Det[bigMatrix]; b = Det[bigMatrix]; ``` 結果として `a==b` がしばしば `False` を返すことが判明しました。 ## 実験設定 ### テスト環境 - **ソフトウェアバージョン**: Mathematica 8.0~9.0.1 - **オペレーティングシステム**: MacおよびWindows - **比較ソフトウェア**: 検証ツールとしてMapleおよびSage ### テストデータ - **行列規模**: 14×14 - **数値範囲**: 約10,000桁の大整数を含む - **生成方法**: ランダムに基本行列を生成し、その後べき乗による拡大と小さな摂動により構築 ## 実験結果 ### 主要な発見 1. **計算エラー**: Mathematicaが計算した行列式の値は完全に誤っている 2. **非決定性**: 同じ行列の複数回の計算が異なる結果を生成する 3. **バージョン依存性**: エラーはバージョン8および9に出現し、バージョン6および7は影響を受けていないようである ### 具体的な事例 ある具体例では: - Mathematica第1回計算: `N[a] = -3.263388173990166 × 10^9768` - Mathematica第2回計算: `N[b] = -8.158470434975415 × 10^9768` - 正しい結果(Maple/Sage): `≈ 1.95124219131987 × 10^9762` ### エラー報告 著者らは2013年10月7日にこのエラーをWolfram Researchに報告しました(ケース番号:CASE:303438)。確認の返信を受け取りましたが、その後のバージョンでも問題は解決されていません。 ## 関連研究 1. **歴史的先例**: 1994年にThomas Nicelyが発見したPentium除算エラーに類似 2. **ソフトウェア検証**: オープンソースコンピュータ代数システムの検証技術研究に言及 3. **数学ソフトウェアの成功事例**: - 四色定理の証明(AppelおよびHaken) - ケプラー予想の証明(Thomas Hales) - Kenzoソフトウェアが発表済み定理のエラーを発見 ## 結論と考察 ### 主要な結論 1. **信頼性の問題**: 記号計算(整数演算)であっても、コンピュータ代数システムはエラーを生成する可能性がある 2. **影響範囲**: 大整数計算エラーは理論数学だけでなく、暗号学などの応用分野にも影響を与える 3. **体系的問題**: 商用ソフトウェアの「ブラックボックス」特性により、エラーの予測と回避が困難である ### 限界 1. **エラートリガー条件が不明確**: どの行列がエラーをトリガーするかを正確に予測できない 2. **バージョン特異性**: エラーは特定のバージョンにのみ出現する 3. **プラットフォーム依存性**: 異なるオペレーティングシステムでの検証が必要 ### 今後の方向性 1. より優れたソフトウェア検証技術の開発 2. 商用ソフトウェアの透明性の向上 3. より完全なエラー報告と修正メカニズムの確立 ## 深い評価 ### 利点 1. **実用的意義が大きい**: 広く使用されている数学ソフトウェアの深刻なエラーを明らかにした 2. **方法が科学的**: 複数の独立したシステムによる検証により、発見の信頼性を確保 3. **再現性が高い**: エラーの再現方法について詳細な説明を提供 4. **記述が明確**: 具体的な数学研究を背景として、問題発見プロセスを生き生きと示している ### 不足点 1. **理論的分析が限定的**: エラー発生の根本原因の深い分析がない 2. **解決策の欠如**: 主に問題報告であり、このようなエラーを予防または検出する方法が不足している 3. **テスト範囲**: 主に特定の計算タイプ(大整数行列の行列式)に集中している ### 影響力 1. **学術的価値**: 計算機支援証明の信頼性問題に研究者の注意を喚起 2. **実用的価値**: Mathematicaを使用して大整数計算を行うユーザーにとって重要な警告 3. **ソフトウェア改善**: ソフトウェア開発企業にこのようなエラーの重視と修正を促す ### 適用シーン 本研究の発見は以下に適用可能です: - Mathematicaを使用した大整数行列計算を行う研究 - 暗号学における大数演算 - 高精度記号計算が必要な数学研究 - コンピュータ代数システムの信頼性評価 ## 参考文献 論文は以下の重要な文献を引用しています: 1. Karlin & Szegő (1960/1961) - 直交多項式の行列式に関する原始的研究 2. Appel & Haken (1977) - 四色問題の計算機支援証明 3. Hales (2005) - ケプラー予想の証明 4. Ciaurri & Varona (2006) - 計算機計算の信頼性に関する初期研究 --- 本論文は篇幅は短いものの、重要な問題を明らかにしています。すなわち、一見信頼できるように見える記号計算であっても、体系的なエラーが存在する可能性があるということです。これは、数学研究にコンピュータを使用する際には慎重さを保つ必要があること、そしてソフトウェア検証と透明性の重要性を強調しています。