LCF确实是所有这些系统的祖父:Coq,Isabelle,HOL,包括ML编程语言(我们今天将其称为OCaml,SML以及F#)。是的,我将Coq纳入更大的LCF家族。相较于美国的美国举证助理(尤其是ACL2)或完全不相关的Mizar,Coq在文化上与伊莎贝尔(Isabelle)和HOL相当接近,这主要是由于战术的共同思想。
那么,从偶然的观察中剔除关于重写,转换,引入或消除连接词的策略是什么呢?
这里的主要分层原理继承自Milner的LCF:
核心推理(正向推理),可以作为thm
原始LCF方法中的抽象数据类型,也可以通过家族的Type-Theory分支(Coq,Matita)中的证明术语进行单独检查。这为证明者认为定理的结果提供了一定的逻辑基础。因此,您可能有一个采用⊢A和⊢B并得到gives A∧B的原始推论。另一个原始推论可以使您⊢t = u,其中u是t的β正规形式。这些机制都不是战术,但是,它们是标准逻辑中的推理规则。
目标导向的证明(向后推理)。这个想法是通过对“目标状态”进行细化,将其细分为越来越多的子目标,关闭子目标,直到全部解决,您才能对其进行操作。完成目标状态,将使定理从过程中弹出。LCF为目标引入了某些额外的逻辑基础结构,而这些基础结构仍然存在于HOL中:策略是一些ML功能,用于细化目标,并为细化提供理由。在证明的最后,根据上面概述的原始推论,以相反的顺序重放证明,以向前的方式生成证明。
Coq和Matita仍非常接近LCF原则。伊莎贝尔在这里与众不同:早在1989年,拉里·保尔森(Larry Paulson)就目标和战术的概念进行了改革,使它们更接近逻辑,这就是伊莎贝尔在这里的“纯粹”逻辑框架。Isabelle / Pure提供了含蕴含==>和量词!!的最小高阶逻辑!表示自然演绎规则的结构和目标状态。
例如,⊢A ==> B ==>A∧B是作为逻辑框架定理的(对象逻辑的)合取引入规则。
目标状态也只是定理,对于初始声明C,以⊢C ==> C开头,在中间状态(其中X,Y,Z为C)中,目标状态细化为⊢X ==> Y ==> Z ==> C是当前的子目标,该过程以⊢C结尾(无子目标)。
现在回到对所有这些证明更为统一的策略:给定一些目标状态的概念(例如上面的Isabelle),策略是一种将目标状态映射到(0、1或更多)后续行动的功能目标状态。而且,战术是这种战术功能的组合器,例如表达顺序组成,选择,重复等。实际上,战术和战术的语言与解析器组合器的“成功列表”方法有关。
策略允许系统地描述目标细化的某些策略。自从1970/80年代在LCF中发明以来,他们就取得了相当大的成功,但是它们却出了名的难以理解的证明脚本。
A. Asperti等人在PLMMS 2009中对该策略语言的某些方面进行了最新概述,请参见第22页的研讨会论文集。
人们已经提到Mizar和Isabelle / Isar是人类可读的结构化推理的替代方法,但它们并不是基于这种意义上的策略。Mizar与LCF家族无关,因此它不知道该战术术语。Isabelle / Isar在某种程度上融合了战术传统,但是其证明方法的概念更加结构化(具有明确的Isar证明上下文,明确的链式事实指示以及在推理过程中避免了内部目标攻击)。
在过去的几十年中,对战术语言进行了更多的改革和重新考虑。例如,Coq社区的一个新分支更喜欢SSReflect(由G. Gonthier设计),而不是传统的Ltac。