本节我们将介绍一种表达能力更强的逻辑,即谓词逻辑。我们将看到谓词逻辑如何用来表达数学和计算机科学中各种语句的意义,并允许我们推理和探索对象之间的关系。
对于语句“x大于3”。我们可以用P(x)表示语句“x大于3”,其中P表示谓词“大于3”,而x是变量。语句P(x)也可以说成是命题函数P在x的值。一旦给变量x赋一个值,语句P(x)就称为命题并具有真值。
形式为P(x1,x2,…,xn)的语句是命题函数P在n元组(x1,x2,…,xn)的值,P也称为n位谓词 或n元谓词
- 前置条件和后置条件
- 谓词还可以用来验证计算机程序,也就是证明当给定合法输入时计算机程序总是能产生所期望的输出。描述合法输入的语句叫做前置条件,而程序运行的输出应满足的条件称为后置条件。
处理谓词和量词的逻辑领域称为谓词演算。
- 全称量词
- 许多数学命题断言某一性质对于变量在某一特定域内的所有值均为真,这一特定域称为变量的论域或全体域,时常简称为域。对特定论域而言P(x)的全称量化是这样一个命题:它断言P(x)对x在其论域中的所有值均为真。论域对顶了变脸x所有可能取的值。当我们改变论域时,P(x)的全称量化的意义也随之改变。在使用全称量词是必须制定论域,否则语句的全称量化就是无定义的。
全称量化
P(x)的全称量化是语句:“P(x)对x在其论域中的所有值均为真。”
符号∀xP(x)表示P(x)的全称量化,其中∀称为全称量词。命题∀xP(x)读做“对所有x,P(x)”或“对每个x,P(x)”。
一个使P(x)为假的个体称为∀xP(x)的反例。
通常,我们会做一个隐式的假设,即量词的论域均为非空的。注意如果论域为空的。注意如果论域为空,那么∀xP(x)对任何命题函数P(x)都为真,因为论域中没有单个x使P(x)为假。
存在量化
P(x)的存在量化命题是:“论域中存在一个个体x满足P(x)”。
我们用符号∃xP(x)表示P(x)的存在量化,其中∃称为存在量词。
当使用∃xP(x)时必须制定一个论域。
唯一量词
符号∃!或∃1表示唯一量词,∃!xP(x)或∃1xP(x)表示“存在一个唯一的x使得P(x)为真”。
约束论域的量词
在限定一个量词的论域时经常IXUS会采用简写的表示法。在这个表示法中,变量必须满足的条件直接放在量词的后面。如下:
- ∀x<0(x2>0),这里的论域为x<0
- ∃z>0(z2=2),这里的论域为z>0
量词的优先级
量词∀和∃比命题演算中的所有逻辑运算符都具有更高的优先级。
∀xP(x)∨Q(x)是∀xP(x)和Q(x)的析取。
变量绑定
当量词作用于变量x时,我们说次变量的这次出现为约束的。如果没有量词约束或设置为某一特定值,则称为是自由的。
语句∃x(x+y=1),变量x受存在量词∃x约束,但是变量y是自由的。
涉及量词的逻辑等价式
- 定义3
- 涉及谓词和量词的语句是逻辑等价的当且仅当无论用什么谓词代入这些语句,也无论为这些命题函数里的变量指定什么论域,它们都有相同的真值。我们用S≡T表示涉及谓词和量词的两个语句S和T是逻辑等价的。
例如:∀x(P(x)∧Q(x))≡∀xP(x)∧∀xQ(x)
量化表达式的否定
对于“班上每个学生都学过一门微积分课”,这个语句的全称量化命题是:∀xP(x),其中P(x)为“x学过一门微积分课”。
只要班上有一个学生没有学过微积分,那么以上命题就不成立。这一语句的否定命题就是**“并非班上每一个学生都学过一门微积分课”**,即:∃x¬P(x)
“班上每个学生都学过一门微积分课”的否定命题不是:“班上每个学生都没有学过一门微积分课”
∀xP(x) 的否定命题是:∃x¬P(x)
这个例子说明了下面的等价关系
¬∀xP(x)¬∃xQ(x)≡∃x¬P(x)≡∀x¬Q(x)
量词的否定规则称为量词的德·摩根律
否定 | 等价语句 | 何时为真 | 何时为假 |
---|
¬∃xP(x) | ∀x¬P(x) | 对于每个x,P(x)为假 | 存在一个x,使P(x)为真 |
¬∀xP(x) | ∃x¬P(x) | 存在一个x,使$P(x)为假 | 对于每个x,P(x)为真 |
语句到逻辑表达式的翻译
例1:
语句“班上的每个学生都学过微积分”。如何翻译为逻辑表达式?
- 首先重写此语句,使得能很清楚的确定所要使用的合适的量词。重写后的语句为:“对班上的每一个学生,该学生学过微积分”,
- 然后引入变量x,语句变为“对班上的每一个学生x,x学过微积分”。
- 然后引入谓词C(x)表示语句“x学过微积分”。
- 如果x的论域是班上的学生,我们可以将语句翻译为∀xC(x)
如果S(x)表示语句“x在这个班上”,则表达式可写为∀x(S(x)→C(x))
不能表示为∀x(S(x)∧C(x)),因为这表示每个x都是班上的学生并且学过微积分。
我们倾向于使用双变量谓词Q(x,y)表示语句“学生x学过课程y”,我们可以把C(x)替换成Q(x,微积分)。得到∀xQ(x,微积分)或∀x(S(x)→Q(x,微积分))。
例2:
用谓词和量词表达语句“这个班上的某个学生去过墨西哥”和“这个班上的每个学生或去过加拿大,或去过莫斯哥”。
语句“这个班上的某个学生去过墨西哥”的意思是“在这个班上有个学生,他去过墨西哥”。引入变量x,因此语句变成“在这个班上有个学生x,他去过墨西哥”。引入谓词M(x)表示语句“x去过墨西哥”。如果论域为这个班上的学生,则可以翻译为∃xM(x)。
如果x的论域为所有人,我们引入谓词S(x)表示“x是这个班上的一个学生”。答案就变成了∃x(S(x)∧M(x)),它表示“存在一个人x,他是班上的学生并且他去过墨西哥”。
语句不能表示为∃x(S(x)→M(x)),它表示当有一个人不在这个班里时也是真的。(参见p→q的真值表)当S(x)为F时,无论M(x)为何值,表达式的真值都为真。
第二个语句表示成“对于班上的每一个x,x具有这样的特性:x去过加拿大或x去过墨西哥”。令谓词C(x)表示语句“x去过加拿大”。如果论域为这个班的学生,则第二个语句可以表达为:∀x(C(x)∨M(x))。
如果x的论域时所有人,我们的语句就可以表示成:
“对于每一个人x,如果x在这个班,则x去过加拿大或去过墨西哥”。此时语句表示成∀x(S(x)→(C(x)∨M(x))),这里的S(x)是C(x)∨M(x)的充分条件。
这里要理解题意,题目的意思是“只要是这个班上的学生,那么他要么去过加拿大要么去过墨西哥”,并不是“去过加拿大或去过墨西哥的人都是这个班上的同学。”
系统规范说明中量词的使用
- 每封大于1MB的邮件会被压缩
- 如果一个用户处于活动状态,那么至少有一条网络链路是有效的
令S(m,y)表示是“邮件m大于yMB”,其中变量x的论域是所有邮件。变量y是一个正实数;令C(m)表示“邮件会被压缩”,那么表达式就可以写为:∀m(S(m,1)→C(m))
A(u)表示“用户u处于活动状态”,S(n,x)表示“网络链路n处于x状态”。那么 2 可以表示为 ∃uA(u)→∃nS(n,有效)
习题部分
空量化
当受量词约束的变元没有出现在语句的某一部分时,称之为空量化。如∀xA,其中x在A中不作为自由变元出现。
空量化规则,其中x在A中不作为自由变元出现。假设论域非空。
(∀xP(x))∨A(∀xP(x))∧A(∃xP(x))∨A(∃xP(x))∧A∀x(A→P(x))∃x(A→P(x))∀x(P(x)→A)∃x(P(x)→A)≡∀x(P(x)∨A)≡∀x(P(x)∧A)≡∃x(P(x)∨A)≡∃x(P(x)∧A)≡A→∀xP(x)≡A→∃xP(x)≡∃xP(x)→A≡∀xP(x)→A