一阶逻辑是数学家、哲学家、语言学家使用的一种形式演绎系统。它有很多名字包括:一阶谓词演算、低等谓词演算、一阶逻辑的语言或谓词逻辑。不像自然语言如英语,FOL使用由数学结构来解释的完全无歧义的形式语言。一阶逻辑是通过允许在给定论域的个体上的量化而扩展命题逻辑的演绎系统。例如,在FOL中可陈述“所有个体都有性质P”。
命题逻辑处理简单的陈述性命题,一阶逻辑补充覆盖了谓词和量化。例如下列句子:“苏格拉底是男人”,“柏拉图是男人”。在命题逻辑中,它们是两个无关的命题,比如指示为p和q。但是在一阶逻辑中,这两个句子将由同一个性质联系起来:Man(x),这里的Man(x)意味着x是个男人。在x = 苏格拉底时我们得到了第一个命题p,而在x = 柏拉图时我们得到了第二个命题q。这种构造在介入了量词的时候允许更加强力的逻辑,比如“对于所有x...”。例如,“对于所有x,如果Man(x)则...”。没有量词的话,所有在FOL中的有效论证在命题逻辑中也有效,反之亦然。
一阶理论构成自公理的集合(通常有限的或递归可枚举的)和给定底层可演绎性关系从它们可演绎出的那些陈述。“一阶理论”通常意味着某个公理集合和“与之在一起的完备(和可靠)的一阶逻辑公理化”,它闭合在FOL的规则之下。(对任何这种系统FOL将引出同样的抽象可演绎性关系,所以我们在头脑中不需要有固定的公理化系统。)一阶语言有足够的表达能力来形式化两个重要的数学理论:ZFC集合论和皮亚诺算术。但是一阶语言不能无条件的表达可数性的概念,即使它在一阶理论ZFC中在ZFC符号论的预期释义下是可表达的。这种想法可以用二阶逻辑无条件的表达。
谓词演算构成如下
有两种类型的公理:逻辑公理,它是对于谓词演算有效的,和非逻辑公理,它是在特殊情况下为真的,就是说,在它所在的理论的标准解释中是真的。例如,非逻辑的皮亚诺公理在算术的符号主义标准解释下是真的,但是对于谓词演算它们不是有效的。
在公理的集合是无限的的时候,需要能判定给定的合式公式是否是一个公理的一个算法。进一步的,应当有可以判定一个推理规则的应用是否正确的算法。
"词汇表"构成如下
下面列出一些次要的变化:
常量、函数和关系的集合通常被认为形成了一个语言,而变量、逻辑算子和量词通常被认为属于逻辑。例如,群论的语言由一个常量(单位元素),一个1价函数(反),一个2价函数(积),和一个2价关系(等于)组成,等号可以被包含在底层的逻辑中而被忽略。
形成规则定义项,公式和自由变量。
项的集合按如下规则递归的定义:
合式公式(通常叫做wff或只是公式)按如下规则递归的定义:
因为¬(φ → ¬ψ)逻辑等价于 (φ ∧ ψ),(φ ∧ ψ)经常用做简写。(φ ∨ ψ)和 (φ ↔ ψ)也是同样的道理。还有∃x φ是¬∀y ¬φ的简写。 实际中,如果P是2价关系,我们经常写"a P b"替代"P a b";例如,我们写1 < 2而不是<(1 2)。类似的,如果f是2价函数,我们有时写"a f b"替代"f(a b)";例如,我们写1 + 2而不是 +(1 2)。经常省略某些圆括号,如果不导致歧义的话。
有时声称"P(x)对精确的一个x成立"是有用的,这可表达为∃!x P(x)。还可以表达为∃x (P(x)∧ ∀y (P(y)→ (x = y)))。
在计算机科学术语中,公式实现内置“布尔”类型,而项实现所有其他类型。
例如,在 x y (P(x) Q(x,f(x),z))中,x和y是约束变量,而z是自由变量,而w不是二者因为它没有出现在任何公式中。
有序阿贝尔群的语言有一个常量0,一个一元函数−,一个二元函数 +,和一个二元关系≤。所以
设 t是项。φ(x)是可能包含x作为自由变量的公式。
φ(t)可定义为把自由变量x替代为t的结果,但前提是必须没有任何t在φ(x)中是约束的。
若非如此,则x替代成t之前,必须先把φ中的约束变量,改为不同于t的符号。
例如把公式φ(x)假定为∀y:y ≤ x("x是极大的")。
若用t代换x,则φ(t)即∀y:y ≤ t就表示t是极大的。
这里举个错误的例子,若在φ(x)中含有约束变量y的状况下,不去修改φ(x)中含有约束变量y,直接把x代换成y,代换结果如下
∀y:y ≤ y
如此一来即成为跟φ(x)意义完全不同的公式。
正确的演算方法为先把φ(x)中的约束变量用到y的地方改成不同于y的符号,好比z
即把 ∀y:y ≤ x 改成 ∀z:z ≤ x,这两命题的意义一致。
再把x代换成y,即为 ∀z:z ≤ y
所以 φ(y) 表示 ∀z:z ≤ y,而不是 ∀y:y ≤ y
忘记这个条件是声名狼籍的犯错误原因。
肯定前件充当推理的唯一规则。
叫做全称普遍化的推理规则是谓词演算的特征。它可以陈述为
这里的Z(x)假定表示谓词演算的一个已证明的定理,而∀xZ(x)是它针对于变量x的闭包。谓词字母Z可以被任何谓词字母所替代。
下面描述一阶逻辑的公理。如上所述,一个给定的一阶理论有进一步的非逻辑公理。下列逻辑公理刻画了本文的样例一阶逻辑的一种演算[1]。
对于任何理论,知道公理的集合是否可用算法生成,或是否存在算法确定合式公式为公理,是很有价值的。
如果存在生成所有公理的算法,则公理的集合被称为递归可枚举的。
如果存在算法在有限步骤后确定一个公式是否是公理,则公理的集合被称为递归的或“可判定的”。在这种情况下,你还可以构造一个算法来生成所有的公理:这个算法简单的(随着长度增长)一个接一个的生成所有可能的公式,而算法对每个公式确定它是否是个公理。
一阶逻辑的公理总是可判定的。但是在一阶理论中非逻辑公式就不必需如此。
下列四个公理是谓词演算的特征:
它们实际上是公理模式:表达式W表示对于其中任何wff,x不是自由的;而表达式Z(x)表示对于任何wff带有额外的约定,即Z(t)表示把Z(x)中的所有x替代为项t的结果。
在一阶逻辑中对使用等式(或恒等式)有多种不同的约定。本节总结其中主要的。不同的约定对同样的工作给出本质上相同的结果,区别主要在术语上。
谓词演算是命题演算的扩展,它定义了哪些一阶逻辑的陈述是可证明的。它是用来描述数学理论的形式系统。如果命题演算用一组合适的公理和一个单一的推理规则肯定前件来定义(可以有很多不同的方式),则谓词演算可以通过增加一些补充的公理和补充的推理规则"全称普遍化"来定义。更精确地说,谓词演算采用的公理有:
一个句子被定义为是在一阶逻辑中可证明的,如果可以通过从谓词演算的公理开始并重复应用推理规则"肯定前件"和"全称普遍化"来得出它。
如果我们有一个理论T(在某些语言中叫做公理的陈述的集合),则一个句子φ被定义为是在理论T中可证明的,如果
在一阶逻辑中对于理论T的某个公理a, b,...的有限集合是可证明的。
可证明性的一个明显问题是它好像非常特别:我们采用了显然随机的公理和推理规则的搜集,不清楚是否意外的漏掉了某个关键的公理或规则。哥德尔完备性定理确保这实际上不是问题:这个定理声称在所有模型中为真的任何陈述在一阶逻辑中都是可证明的。特别是,在一阶逻辑中"可证明性"的任何合理定义都必须等价于上述定义(尽管在不同的可证明性的定义下证明的长度可能有巨大差别)。
有很多不同(但等价)的方式来定义可证明性。前面的演算是"希尔伯特风格"演算的一个典型例子,它有许多不同的公理但只有非常少的推理规则。"根岑风格"谓词演算有非常少的公理但有许多推理规则。
文法上说谓词演算在现存的命题演算上增加了“谓词-主词结构”和量词。主词是给定的个体群组(集合)的一个成员的名字,而谓词是在这个群组上的关系,一元谓词在哲学中称为性质,在数学中称为指示函数,在数理逻辑中称为布尔值函数。
下面列出了一些重要的元逻辑定理。
用自然语言表达的概念必须在一阶逻辑(FOL)可以为为其效力之前必须被转换到FOL,而在这种转换中可能有一些潜在的缺陷。在FOL中,意味着“要么p要么q要么二者”,就是说它是“包容性”的。在英语中,单词“or”有时是包容性的(比如,“加牛奶或糖?”),有时是排斥性的(比如,“喝咖啡或茶?”,通常意味着取其中一个或另一个但非二者)。类似的,英语单词“some”可以意味着“至少一个,可能全部”,有时意味着“不是全部,可能没有”。英语单词“and”有时要按“or”转换(比如,“男人和女人可以申请”)。 [2]
所有数学概念都有它的强项和弱点;下面列出一阶逻辑的一些问题。
太奇怪了,(如典型定义的)带有等式的FOL不包含或允许定义if-then-else谓词或函数if(c,a,b),这里的c是表达为公式的条件,而a和b是要么都是项要么都是公式,并且它的结果是a如果c为真,或者b如果它为假。问题在于FOL中,谓词和函数二者只接受(“非布尔类型”)项作为参数,而条件的明确表达是(“布尔类型”)公式。这是不幸的,因为很多数学函数是依据if-then-else而方便的表达的,而if-then-else是描述大多数计算机程序的基础。
在数学上,有可能重定义匹配公式算子的新函数的完备集合,但是这是非常笨拙的。[3] 谓词if(c,a,b)如果重写为就可以在FOL中表达,但是如果条件c是复杂的这就是笨拙的。很多人扩展FOL增加特殊情况谓词叫做“if(条件,a, b)”(这里a和b是公式)和/或函数“ite(条件,a, b)”(这里的a和b是项),它们都接受一个公式作为条件,并且等于a如果条件为真,或b如果条件为假。这些扩展使FOL易于用于某些问题,并使某类自动定理证明更容易。[4] 其他人进一步扩展FOL使得函数和谓词可以在任何位置接受项和公式二者。
除了在公式(“布尔类型”)和项(“非布尔类型”)之间的区别之外,FOL不包括类型(种类)到自身的概念中。 某些人争辩说缺乏类型是巨大优点 [5],而很多其他人发觉了定义和使用类型(种类)的优点,比如帮助拒绝某些错误或不想要的规定 [6]。 想要指示类型的那些人必须使用在FOL中可获得的符号来提供这种信息。这么做使得这种表达更加复杂,并也容易导致错误。
单一参数谓词可以用来在合适的地方实现类型的概念。例如:
谓词Man(x)可以被认为是一类“类型断言”(就是说,x必须是男人)。 谓词还可以同指示类型的“存在”量词一起使用,但这通常应当转而与逻辑合取算子一起来做,比如:
容易写成,但这将等价与(“存在不是男人的事物或者存在是人类的事物”),这通常不是想要的。类似的,可以做一个类型是另一个类型的子类型的断言,比如:
从Löwenheim–Skolem定理得出在一阶逻辑中不可能刻画有限性或可数性。例如,在一阶逻辑中你不能断言实数的集合的上确界性质,它声称实数的所有有界的、非空集合都有上确界;这就需要二阶逻辑了。
很多情况可以被建模为节点和有向连接(边)的图。例如,效验很多系统要求展示不能从“好”状态触及到“坏”状态,而状态的相互连接经常可以建模为图。但是,可以证明这种可及性不能用谓词逻辑完全表达。换句话说,没有谓词逻辑公式f,带有u和v作为它的唯一自由变量,而R作为它唯一的(2元)谓词符号,使得f在一个有向图中成立,如果在这个图中存在从关联于u的节点到关联于v的节点的路径。[7]