自动化



Automath是N.G.the Bruijn在六十年代末设计的一种语言,用于在计算机中表示数学证明。它是校对助理其中最著名的是Nuprl和Coq。

此网页是Automath的现代重新实现主页弗里克·维迪克它为AUT-68和AUT-QE语言提供了一个便携式、简单且快速的检查器(用C编写)。

*

程序的当前版本是版本4.2但因为手册描述了版本4.1,这一个也在这里(尽管它与最新版本几乎没有什么不同:主要区别是新版本可以将Automath文本编译为“单行”表示。)这两个都是包含大量C文件的gzipped tar文件。将它们全部编译在一起,您就有了一个程序,可以从其输入中读取Automath,并将有关它的诊断打印到其输出中。

关于这个Automath实现没有足够的文档:例如,还没有Unix风格的手册页。目前所存在的只是一篇名为一种精确的数学语言自动机检查器(点击此链接将下载一个postscript文件PDF版本也),其中包含系统4.1版的手册。

70年代编写的最大的Automath文本是朱廷对朗道的翻译格兰德拉赫德分析(此链接提供了一个压缩的tar文件,其中包含Landau书的纯TeX版本以及Juting的翻译。)

*

Automath与衍生自Automath的“现代”系统之间有三个主要区别:

  • 在现代系统中,证明对象是由用户交互调用所谓的“策略”生成的。在Automath中,所有证明术语都必须手工“编码”。这意味着Automath没有自动化,但另一方面,Automath证明中的自动化更加明确。半成品系统是在这两个世界之间妥协的有趣尝试。)

  • Automath没有“归纳型”。这意味着现代系统中由归纳类型构建的基本类型必须在Automath中以公理方式引入。因此,由于Automath的逻辑内置的“数据类型”较少,因此在Automath中,在证明开发开始时使用公理是不可避免的。

    这反过来又导致了在Automath中,人们通常不太倾向于停留在系统内置的构造逻辑中。七十年代在Automath项目中创建的大型开发都使用了经典逻辑。

  • Automath所基于的类型理论与基于“构造演算”(其精细结构由Barendregt立方体给出)的“现代”类型理论略有不同具体来说:假设在某种情况下

    x:D

    我们有一个表达式f(x),它的类型是R(x)而它的类型又是T(x)

    f(x):R(x):T(x)

    (实际上,变量x不会出现在“kind”t(x)中,所以我们可以只写“t”。)那么在现代系统中,我们有

    [x:D]f(x):(x:D)R(x):T(x)

    (其中“[x]”应读作“λx”,“(x)”应读为“Pi x”。)然而,在Automath系统中

    [x:D]f(x):[x:D/]R(x):[x:D]T(x)

    在某种程度上,Automath“[]”抽象器概括了lambda和Pi抽象器。或者相反,λ和π可以被视为自动装置“[]”的前两个阶段。(实际上,在Aut-QE语言中有一种称为“类型包含”的东西,这意味着

    [x:D]R(x):T(x)

    允许,混淆了键入lambda抽象的“旧”和“新”方式之间的区别。)

(上次修改1999-09-29)