计算(Computation)与证明(Proof)是一体两面的,计算的过程也是证明的过程,反之亦然。LEAN语言是其中的一个体现。LEAN 是通用编程语言(General Purpose Programming Language),亦是交互式定理证明工具(Interactive Theorem Prover)。其理论基础是,基于归纳构造演算(calculus of inductive constructions)而衍生理论, LEAN 类型理论 (LEAN Type Theory)。
也就是说,基于其理论,可以支持通用编程语言编写程序,即图灵完备(Turing Complete),应用了《计算(Computation)即常规化(Normalization)》 ,也支持数理上的理论证明,即《类型理论(Type Theory)、类型系统(Type System)及证明系统(Proof System)浅析》 里阐述的,作为证明系统所使用。
LEAN 类型理论的核心有三大组成部分,
1. 依赖类型(Dependent Type)
2. 归纳类型(Inductive Type)
3. 非累积类型宇宙架构(A Hierarchy of non-accumulative Universers)
这三大组成部分共同作用,支撑了LEAN既可作为通用编程语言,亦可作为交互式定理证明工具的使用。
归根到底就是,计算与证明是一体两面的,计算的过程也是证明的过程,反之亦然。这由同构理论(Curry Howard Isomorphism)得以论证。同时,直觉类型理论(Intuitionistic Type Theory)提供类型可构建(Constructive)的观点,解决了可操作性的问题,解析了如何无中生有,即操作对象是如何产生的。这样,基于可以构建的元素及类型,定义相关的操作(函数)去作用于对应的元素及类型,输出该操作所定义结果。形成了所需的计算与证明。另外就是定义推演规则(Inference Rules)去定义计算的过程,即表达式的转化,基于怎样的A,得到怎样的B。换个角度看,定义的操作(函数)就是这写推演规则的组合,作用于其输入对象,产生对应的输出内容。
另外有个很重要的观察或经验,很复杂的体系往往能够简化(reduce)成小小的一些(a few)规则(rules)(或原则)的相互作用。即通过一小撮规则的演变( evolve / develop),可以表达(express)或构建(construct)很复杂的体系,也就是所谓的核心规则演变。
总结一下,三大关键基础,即 直觉类型理论(Intuitionistic Type Theory),同构理论(Curry Howard Isomorphism),以及 基于公理体系(Axiomatic Framework)的推演规则(Inference Rules),和一个关键观察,即核心规则演变,形成了LEAN理论体系的支点,由此,塑造了LEAN自身的类型理论(相似的还有Coq的类型理论),从而,通过编程语言、定理证明的方式来体现了LEAN的作用。
后面,相关的文章如需用到编程语言的话,主要以LEAN为载体,表达相关概念,如自然数、整数,以理论证明等。