1956年IPL-I版逻辑理论家定理证明器的重现
摘要
重现第一个公开发布版本(1956年,IPL-I)的逻辑理论家定理证明器,这是Newell、Shaw和Simon开创性的人工智能程序,附带可运行的Python代码和文档。
查看缓存全文
缓存时间: 2026/05/16 21:42
dmoews/logic-theorist
来源:https://github.com/dmoews/logic-theorist
本代码的目标是实现首个公开版本的逻辑理论机(Logic Theory Machine,亦称 Logic Theorist)。
逻辑理论机
逻辑理论机是由 Allen Newell、J. C. Shaw 和 Herbert A. Simon 在启发式问题解决方法研究过程中编写的程序。它旨在利用《数学原理》[1]中的逻辑系统证明命题逻辑定理。Newell 和 Simon 于 1955 年末左右开始编写该程序。他们最初通过手工模拟程序,一度借助 Simon 的妻子、孩子以及一些研究生协助进行。[3]程序最初用一种名为 IPL-I 的伪代码编写,但该伪代码从未实际实现。[2][3]首个在计算机上运行的版本采用 IPL-II 编写,并在 JOHNNIAC 计算机上运行,于 1956 年 8 月产生第一个证明。[1][2][3][4]随后由 Fred Tonge 转换为 IPL-V,并由 Einar Stefferud 进一步开发。[5]
逻辑理论机首个公开版本
一个早期版本的逻辑理论机源代码于 1956 年发表在文献 [6] 和 [7] 中;该代码采用 IPL-I 编写,这是一种面向抽象机器的类汇编语言。两份参考文献中的代码几乎完全相同。遗憾的是,代码中存在一些拼写错误和问题,其印刷形式无法直接运行。我已尝试按需修复这些问题,具体说明见源代码文件。
逻辑系统
《数学原理》[8] 中的命题逻辑系统通过一元否定(~)和二元或(\/)从命题变量构建公式。蕴涵(->)定义为 ( p -> q ) 等于 ( ~ p \/ q ),这两个表达式视为可互换(*1.01)。五个公理如下:
( ( p \/ p ) -> p )(*1.2)( q -> ( p \/ q ) )(*1.3)( ( p \/ q ) -> ( q \/ p ) )(*1.4)( ( p \/ ( q \/ r ) ) -> ( q \/ ( p \/ r ) ) )(*1.5)( ( q -> r ) -> ( ( p \/ q ) -> ( p \/ r ) ) )(*1.6)
推理规则包括分离规则(*1.11),即从p和( p -> q )推断出q;以及将表达式代入已知公理或定理的命题变量中(尽管在《数学原理》中,代入并未被明确列为演绎规则,但在 *2 开头被广泛使用并承认是可接受的)。除代入和分离外,逻辑理论机还使用了链式证明方法,即从( p -> q )和( q -> r )推断出( p -> r )。这可由《数学原理》中的定理 *2.05 或 *2.06 证明。
关于代码
此处可直接运行的 Python 文件包括 logic.py、run_logic.py 和 analyze_output.py。使用 --help 选项调用时,它们将打印基本用法信息。
logic.py 是 IPL-I 抽象机器的解释器。
analyze_output.py 旨在从 logic.py 打印的输出中提取找到的证明(如果有的话),因为提供的 IPL-I 源代码中没有相关的打印机制。建议与 logic.py 的 --info 选项配合使用。
run_logic.py 旨在模仿文献 [1],在《数学原理》*2 中的每个定理上依次运行程序,允许在证明每个定理时使用所有公理以及 *2 中之前的全部定理(无论是否成功证明它们)。
文件列表
README.md— 本文件- IPL-I 源代码:
logic-routines.txt— 逻辑理论机的 IPL-I 源代码,已修订为可运行版本orig-logic-routines.txt— 文献 [7] 中印刷的原始 IPL-I 源代码,仅包含标签、操作码和操作数transcription.txt— 文献 [7] 中所有源代码的转录,包括注释
- 《数学原理》:
pm-axioms.txt— 《数学原理》*1 中的五个命题逻辑公理pm-theorems.txt— 《数学原理》*2 中的定理
- IPL-I 解释器:
analyze_output.py— 提取并验证解释器所找到的证明的程序grammar.py— 包含 CFG 例程的模块logic.py— IPL-I 抽象机器的解释器run_logic.py— 驱动程序simple_parser.py— 包含 CFG 解析器的模块utils.py— 包含语法和代入工具例程的模块
- 测试:
test.sh,test.py— 测试框架analyze_output.test,analyze_output.test-input,analyze_output.usage—analyze_output.py的测试logic.test,test-source.txt,test-source-2.txt,test-source-3.txt,test-theorems-1.txt,test-theorems-2.txt,test-theorems-3.txt,logic.usage—logic.py的测试run_logic.test,say-hi.py,run_logic.usage—run_logic.py的测试verify.py— 验证orig-logic-routines.txt中的源代码与transcription.txt的一致性
参考文献
关于逻辑理论机/逻辑理论家的更多信息,请参见 CMU 数字馆藏档案,其中包含 Newell 和 Simon 的专题收藏。见 URL ,特别是 和 。
[1]: Empirical Explorations of the Logic Theory Machine: a Case Study in Heuristic, A. Newell, J. C. Shaw, H. A. Simon, IRE-AIEE-ACM ’57 (Western): Papers presented at the February 26-28, 1957, Western joint computer conference: Techniques for reliability, Feb. 1957, pp. 218-230, DOI: 10.1145/1455567.1455605 (https://dx.doi.org/10.1145/1455567.1455605).
[2]: Introduction to the First Edition in: Information Processing Language-V Manual, second ed., Allen Newell et al., RAND Corporation, pub. Englewood Cliffs, NJ : Prentice-Hall, Inc., 1964, .
[3] Chapter 13, Models of My Life, Herbert A. Simon, Cambridge, Mass., etc.: MIT Press, 1996 (first pub. 1991, Basic Books.)
[4] Programming the Logic Theory Machine, A. Newell, J. C. Shaw, IRE-AIEE-ACM ’57 (Western): Papers presented at the February 26-28, 1957, Western joint computer conference: Techniques for reliability, Feb. 1957, pp. 230-240, DOI: 10.1145/1455567.1455606 (https://dx.doi.org/10.1145/1455567.1455606).
[5] Introduction in: The Logic Theory Machine: A Model Heuristic Program, Einar Stefferud, RAND Research Memorandum RM-3731-CC, June 1963, .
[6] The Logic Theory Machine–A Complex Information Processing System, A. Newell, H. Simon, IRE Transactions on Information Theory 2, #3 (September 1956), pp. 61-79, DOI: 10.1109/TIT.1956.1056797 (https://dx.doi.org/10.1109/TIT.1956.1056797).
[7] The Logic Theory Machine: A Complex Information Processing System, Allen Newell, Herbert A. Simon, RAND paper P-868, July 12, 1956, Revised, . (与 [6] 极为相似.)
[8] *1 and *2, Principia Mathematica, A. N. Whitehead and B. Russell, Volume I, Cambridge: Cambridge University Press, 1910. 可在 HathiTrust 获取;参见 .
相似文章
The Proof Machine (2016)
The Incredible Proof Machine 是一款可视化工具,通过拖拽并连接模块来在各种逻辑中进行证明。它旨在让定理证明变得既易于理解又有趣,无需传统证明工具的语法。
对编程建模程序的可执行考古学:重现启发式编译器(1961)与 KBEmacs(1984)
一篇关于“可执行考古学”的 arXiv 论文,复活了两个历史上的人工智能编程系统——赫伯特·西蒙于 1961 年开发的启发式编译器和麻省理工学院于 1984 年开发的 KBEmacs——揭示了它们惊人相似的编程理论,而复活工作本身则得到了 Anthropic 的 Claude Code 的协助。
面向程序员的逻辑
一本实用的书,面向程序员介绍逻辑,以改进软件设计、验证和推理,涵盖从简化条件语句到形式化验证和约束求解等主题。
数学家应该了解的 Lean 定理证明器:可靠性与人工智能
Thomas Hales 为 Terence Tao 的博客撰写客座文章,介绍了数学家应该了解的 Lean 定理证明器相关知识,涵盖形式化证明的可靠性、mathlib 库的发展,以及 AI 驱动的自动形式化如何在 2026 年成为现实。
RePro:基于证明验证的基准重写,用于可靠评估LLM的数学问题求解能力
RePro将面向Lean的神经自动化定理证明器集成到基准重写中,以确保问题有效性和答案正确性,从而可靠评估LLMs在数学问题求解中的表现。