2025-11-23T08:55:16.500829

Misfortunes of a mathematicians' trio using Computer Algebra Systems: Can we trust?

Durán, Pérez, Varona
Computer algebra systems are a great help for mathematical research but sometimes unexpected errors in the software can also badly affect it. As an example, we show how we have detected an error of Mathematica computing determinants of matrices of integer numbers: not only it computes the determinants wrongly, but also it produces different results if one evaluates the same determinant twice.
academic

Misfortunes of a mathematicians' trio using Computer Algebra Systems: Can we trust?

基本信息

  • 论文ID: 1312.3270
  • 标题: Misfortunes of a mathematicians' trio using Computer Algebra Systems: Can we trust?
  • 作者: Antonio J. Durán (Universidad de Sevilla), Mario Pérez (Universidad de Zaragoza), Juan L. Varona (Universidad de La Rioja)
  • 分类: cs.SC (Symbolic Computation), cs.MS (Mathematical Software)
  • 发表时间: 2013年10月15日 (arXiv预印本)
  • 论文链接: https://arxiv.org/abs/1312.3270

摘要

计算机代数系统对数学研究有很大帮助,但软件中的意外错误有时也会严重影响研究。作为例子,作者展示了他们如何检测到Mathematica在计算整数矩阵行列式时的错误:它不仅错误地计算行列式,而且对同一个行列式进行两次计算会产生不同的结果。

研究背景与动机

  1. 要解决的问题: 作者在使用Mathematica进行数学研究时发现了软件在计算大整数矩阵行列式时存在严重错误,包括计算结果错误和同一计算产生不同结果的问题。
  2. 问题重要性:
    • 数学家越来越依赖计算机代数系统进行研究
    • 错误的计算结果可能导致错误的数学结论
    • 大整数计算在密码学等领域有重要应用
  3. 现有方法局限性:
    • 商业计算机代数系统是"黑盒子",算法不透明
    • 已知错误通常不向用户公开
    • 难以应用现代软件验证技术
  4. 研究动机: 作者在研究Karlin和Szegő关于正交多项式的结果扩展时,发现Mathematica和Maple给出了不同的计算结果,进而深入调查发现了Mathematica的系统性错误。

核心贡献

  1. 发现并报告了Mathematica的严重计算错误: 在计算大整数矩阵行列式时产生错误结果
  2. 提供了可重现的错误生成方法: 设计了一个随机程序来生成触发错误的矩阵
  3. 揭示了错误的非确定性特征: 同一矩阵的行列式计算可能产生不同结果
  4. 提出了对计算机代数系统可信度的质疑: 引发了关于如何信任这些系统的重要讨论

方法详解

问题发现过程

作者在研究正交多项式的Casorati行列式时:

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第一次计算: `N[a] = -3.263388173990166 × 10^9768` - Mathematica第二次计算: `N[b] = -8.158470434975415 × 10^9768` - 正确结果(Maple/Sage): `≈ 1.95124219131987 × 10^9762` ### 错误报告 作者于2013年10月7日向Wolfram Research报告了该错误(案例编号:CASE:303438),收到了确认回复,但问题在后续版本中仍未解决。 ## 相关工作 1. **历史先例**: 类似于1994年Thomas Nicely发现的奔腾除法错误 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) - 关于计算机计算可靠性的早期研究 --- 这篇论文虽然篇幅不长,但揭示了一个重要问题:即使是看似可靠的符号计算,也可能存在系统性错误。它提醒我们在依赖计算机进行数学研究时需要保持谨慎,并强调了软件验证和透明度的重要性。