三年前

校招季得不到认可

价值观受到冲击

事情的进展和预想的完全不同

我陷入了迷茫

机械化

”适应社会的游戏规则,往上爬“,我无法接受这样的一生

我信奉,“人生的意义在于创造价值”

工作实现的价值太小,一直以来我给自己的期望很高

我不停地思考,希望能有机会做出些什么

适逢吴文俊院士逝世一周年,想起自己对机器证明的兴趣,开始学习几何机械化理论

我大致理解了吴老的方法

很巧妙,但不是我想要的,这样的机械化不能启发人思考

有没有可能把人的证明机械化

如果能行,无疑会有更大的价值

初衷

一开始我准备做一个欧式几何的证明机器,和人的证明方式一致,不依赖计算机的强大运算能力

我很快意识到问题的难点在于如何表达数学问题

我对点,线分别建立类,然后依赖点,线作为输入,建立角,三角形的类;

对线段,角相等,赋值分别建立类,对平行,垂直关系建立类。

完成了一个很迷你的表示系统。

也就是用类去表达基础的数学概念和数学关系。

另一个问题是自动推理的问题,也就是定理的触发。

调研发现很多研究有尝试的过程,被指数爆炸击败。

我不断思考我自己解题的时候是怎么想的,为什么人脑不会指数爆炸。

最后我提炼出一个准则,即定理作为概念的属性,由概念的状态触发。

第一版自动推理系统,尽管简陋,却让我看到无限的可能。

符号计算

线段角度的计算很快出现三角函数,勾股定理相关的计算。

很多问题是披着几何外衣的代数问题。

我决定直接上手搭建符号计算系统,像 mathematica 一样。

简单调研之后发现了 sympy 这个符号计算包,和我之前的思路是一致的。

用类去表示基础概念如变量,基础关系如加法。

我认识到概念先于定理可能是我独特的想法。

准备搭建一个解决线性代数问题的系统,测试用例用北大教材的习题。

理论基础

mathematica 对矩阵向量的支持很有限,不支持带变量维度的矩阵,如 \(\{a_{ij}\}_ {m\times n}\)

我做到了,我把前三章的习题,除了少数几道,都自动化了。

分类讨论,变量赋值,不等式约束,不断引入新的东西。

代码开始变得很臃肿,加入新特性的代价越来越大。

我的方法局限性太大了。

我需要建立一套理论,用理论来指导代码,规范代码。

巨人的肩膀

面对象编程,编译原理,类型系统,形式证明,图灵,丘奇,……

在理解前人的理论的同时,我脑子里一些模糊的想法清晰了起来

图灵机对应莱布尼茨的设想,问题的关键有两点:编码 和 转换

丘奇的理论表明,所有编码问题可以归结为 复合 与 抽象

复合,函数,类型系统,面对象编程,是一体的

prototype-based 比 class-based 更一般

我不断重塑我的系统,分三个方向:

  • 用抽象与复合的方式建立符号体系。
  • 搭建类型系统(类比prototype,类型与符号不做区分)。
  • 搭建解析器,语言采用数学语法(而非程序语法)。

转换采用流的思想,所有状态按有序的方式转化。

不同

理解了这些就能理解学术界,工业界,和我的不同。

目前的形式证明系统如lean,基于丘奇的lambda calculus,丢失了复合的边界。

目前的复合计算软件如mathematica,对抽象做得不够彻底。

这是在编码上,最本质的不同在转化上。

系统的思路模拟人的思路,这是最高的指导思想,也是最朴素的。

自动推理不是去找一个通用的解决问题的方法,而是去深入理解前人的思想,然后翻译给计算机执行。

这比听上去困难许多。

路漫漫

三年过去了,类型系统和解析器都还有很多内容需要填补。

赋值传导逻辑,等式不等式化简逻辑,加法乘法逻辑,lambda表达式逻辑……

还有一系列的问题需要解决和发现。

最近身体出了不小的问题,调理了近三个月才好了一些。

理想的压力,工作的压力,生活的压力,让我的神经崩溃了。

计划用十年完成一个初步成熟的系统,现在看来还是太心急了。

用三十年吧。

把身体放在第一位,等生活安顿下来,换一个压力小一点的工作。

虽然计划可能会停滞很长一段时间,没有关系。

我要尽可能地延长自己的职业生涯,才有可能完成这个计划。

说起来我一开始做这个系统,就是希望把竞技体育的优点引入学术研究。

诸如科学系统的方法,不同水平选手都能参与的分级制度。

就当是退出这个赛季,会有复出的那一天。


在issues中讨论