( P ∧ Q ¯ ) ⟶ R
这种象征性的语言对于简化描述复杂的逻辑关系时十分有效,但是,诸如“OR”和“IMPLIES”这样的词通常与∨ 和⟶ 一样地常被使用,它们的含义容易被记住。本文中大部分情况使用以前的符号,但是您可以使用其中任何一种,只要让你觉得方便简洁即可。
1.1.5、逻辑等价(Logically Equivalent Implications)
以下这两句话是否表达了相同的意思?
If I am hungry, then I am grumpy.(如果我饿了,那么我会很暴躁。)
If i am not grumpy, then I am not hungry.(如果我没有很暴躁,那么我就没饿。)
我们可以根据命题逻辑重写这两个句子来回答这个问题,令P 为”I am hungry”,令Q 为”I am grumpy”。第一句话可表示为”P IMPLIES Q ”,第二句话可表示为”NOT(Q ) IMPLIES NOT(P )”。比较这两个命题的真值表:
P
Q P IMPLIES Q NOT(Q ) IMPLIES NOT(P ) T T T T T F F F F T T T F F T T
可以肯定的是,这两条陈述的真值表每一行都是相同的,因此这也意味着它们是完全等价的。通俗而言,”NOT(Q ) IMPLIES NOT(P )”被称为”P IMPLIES Q ”的逆否命题。并且就如真值表展示的那样,这两种只不过是同意陈述的不同表示。
相反的,”P IMPLIES Q ”的逆命题是”Q IMPLIES P ”。对于我们提到的例子,它的逆命题为:
If I am grumpy, then I am hungry.
这看起来是个完全不同的命题,它的真值表也证实了这一点。
P
Q P IMPLIES Q Q IMPLIES P T T T T T F F T F T T F F F T T
因此我们可以得到如下结论,蕴含命题与其逆否命题逻辑等价,但是与其逆命题不等价。
其次,一个蕴含命题和它的逆命题结合与一个iff形式命题逻辑等价,例如:
If I am grumpy, then I am hungry, AND
if I am hungry, then I am grumpy.
与如下单一语句逻辑等价:
I am grumpy IFF I am hungry.
我们可以利用真值表来证实:
P
Q P IMPLIES Q Q IMPLIES P P IMPLIES Q AND Q IMPLIES P P IFF Q T T T T T T T F F T F F F T T F F F F F T T T T
1.2、计算机程序中的命题逻辑(Propositional Logic in Computer Programs)
命题和逻辑连接词会大量出现在计算机程序中。例如,考虑如下代码片段:
if (x > 0 ) || (x <= 0 && y > 100 ))
·
·
·
(further instructions)
其中,符号”||”表示”OR”,符号”&&”表示”AND”。而further instructions部分当且仅当if条件为真时才会执行。进一步分析,if条件可以由两个更简单的命题组合表示。令A 表示”x > 0 ”,令B 表示”y > 100 ”。然后我们可以将if条件重写为”A OR (NOT(A ) AND B )”。如下真值表表明了这个复杂的表达式逻辑等价于”A OR B ”
A B
A OR (NOT(A ) AND B )A OR B T T T T T F T T F T T T F F F F
这也就意味着我们可以再不改变程序功能的基础上简化代码。
if (x > 0 ) || y > 100 )
·
·
·
(further instructions)
当表达式涉及到很多变量时对其进行简化是很困难但是也很重要。在软件中精简表达式可以提高程序的运行速度;与此类似的是,芯片设计师也会面临类似的问题,不过不是在程序中简化”&&”、”||”的使用而是在芯片上减少类似物理器件的数量。这样做的潜在收益是巨大的,当芯片上的设备越少那么芯片就会越小,同时功耗、产生缺陷的概率、生产成本都会有所降低。
1.3、谓词和量词(Predicates and Quantifiers)
1.3.1、存在无限多情况的命题(Propositions with Infinitely Many Cases)
到目前为止,我们所讨论过的命题都是直截了当且相对容易判断为真还是为假的。但是糟糕的是只有少数情况下可以通过参考真值表来对命题进行判断,并且也不是所有的命题都会很容易去进行判断。那是因为有些命题会包含大量甚至无限个需要判断的情况。例如,考虑如下涉及到质数(prime number)的命题(质数是指比1到且只能被其自身和1整除的数)。如2、3、5、7、11是质数,但是4、6、9则不是。我们将比1到而又不是质数的数称为合数(composite)。
Proposition 1.3.1. F o r e v e r y n o n n e g a t i v e i n t e g a r , n , t h e v a l u e o f n 2 + n + 41 i s p r i m e .
命题1.3.1: 对于任意非负整数,n 2 + n + 41 都为质数。
这个命题并不那么直观容易判断真假。在这种情况下,我们往往希望通过取一部分n的值,来计算
p ( n ) :: = n 2 + n + 41.
然后判断求得的值是否为质数。如果存在不为质数的结果,那么我们可以判断该命题为假;反而如果我们求到的所有的结果都是质数,那么我们可能会由此推断这个命题为真。
首先我们计算得到p ( 0 ) = 41 ,结果为质数;p ( 1 ) = 43 也为质数。同样p ( 2 ) = 47 , p ( 3 ) = 53 , . . . , p ( 20 ) = 461 ,这些结果都为质数。我们也许会由此认为对于任意非负整数n,都会有p ( n ) 的结果为质数。那么事实是否真的如此呢?实际上对于n / l e q 39 ,都满足p ( n ) 为质数。这个命题像是真的,
但是p ( 40 ) = 40 2 + 40 + 41 = 41 ⋅ 41 ,结果不是质数。所以并不是对所有的非负整数n 都满足p ( n ) 为质数,也就是说这个命题为假。
尽管这个结果让人很惊讶,但是这个例子并不像你所想的那样是人为的或者罕见的。我们会发现,很多命题都会在部分情况(或者非常多的情况)下成立,但是在某一个点下又会转而为假。要记住的关键是,我们无法通过检查有限集去判断无限集的真伪,无论这个有限集有多大。
由于涉及到所有数字的命题很常见,因此有一个特殊的符号用来表示它们。比如,命题1.3.1可以写为如下形式:
∀ n ∈ N . p ( n ) i s p r i m e .
其中,符号∀ 表示”for all”;符号N 指代了非负整数集合,即0、1、2、3…(向你的导师询问完整列表);符号∈ 可读作”is a member of”或者”belongs to”,再或者”is in”。符号N 后面的句点其实只是段落之间的分隔符。
还有一个例子,起初看起来命题为真,但是事实证明为假:
Proposition 1.3.2. a 4 + b 4 + c 4 = d 4 h a s n o s o l u t i o n w h e n a ; b ; c ; d a r e p o s i t i v e i n t e g e r s .
命题1.3.2: 当a 、 b 、 c 、 d 都为正整数时,方程 a 4 + b 4 + c 4 = d 4 无解。
1769年,欧拉猜测这个命题为真。在接下来的两个世纪,人们利用手工和计算机技术验证了a 、 b 、 c 、 d 的很多取值。最终在1987年被Noam Elkies证明该命题为假。他找到的证明反例是a = 95800 , b = 217519 , c = 414560 , d = 422481 ,也难怪经过了218年才得知该命题为假。
如果利用逻辑符号,命题1.3.2可表示如下:
∀ a ∈ Z + ∀ b ∈ Z + ∀ c ∈ Z + ∀ d ∈ Z + . a 4 + b 4 + c 4 ≠ d 4
其中,符号Z + 表示正整数。为了便于阅读,∀ 通常合并简写,如下:
∀ a , b , c , d ∈ Z + . a 4 + b 4 + c 4 ≠ d 4
下面的这个命题可能会更糟糕:
Proposition 1.3.3. 313 ( x 3 + y 3 ) = z 3 h a s n o s o l u t i o n w h e n x , y , z ∈ Z + .
命题1.3.3:当x , y , z ∈ Z + ,方程313 ( x 3 + y 3 ) = z 3 无解。
这个命题也是为假的,但是能找到的x 、 y 、 z 的最小反例值也超过1000位数。即使当今世上最大的计算机也无法通过暴力进行求解。当然,你可能会好奇为什么会有人关心这个方程有没有解。事实证明是因为在椭圆曲线研究领域,找到这类方程的解是很重要的,其次这对大整数分解研究而言也是很有意义的,而这通常会被用于常用的密码系统破解(见第四章),这大概也就是为什么数学家们愿意致力于找出近千位数的解。
当然,并不是所有包含无数情况的命题都会被证明为假。比如”四色定理”则被证明为真。
Proposition 1.3.4. E v e r y m a p c a n b e c o l o r e d w i t h 4 c o l o r s s o t h a t a d j a c e n t r e g i o n s h a v e d i f f e r e n t c o l o r s .
命题1.3.4:每个地图都可以只用四种颜色进行着色,使得相邻两个区域有着不同的颜色。
这个命题的证明十分困难并且耗费了近乎一个世纪去完善。在这期间提出了很多不正确的证明,其中包括一个在十九世纪后期发现了错误的证明,而在此之前这个证明被坚信了十年。数学家Appel和Haken终于在1976年发现了一个十分令人费解的证明,他们利用了一个十分复杂的计算机程序对四色地图进行分类;这个程序留下了数千张未分类的地图,而这些地图则有Haken和他的助手手工进行检查,包括他15岁的女儿也参与了这项工作。对于这个证明是否合理合法存在很大的争议,整个证明过程太过庞大复杂,如果不借助计算机无法进行检查,没有人能够保证计算机的计算是完全正确的,也没有人有精力再次去检查那数千张手工完成的四色地图。在过去的十年内,人们发现了四色定理的一份可被理解的证明,尽管仍然需要计算机来检查数百张特殊地图的着色性。
某些情况下,我们没法知道一个命题到底为真还是为假。例如哥德巴赫猜想,这个命题从1742年就被大量研究但是至今仍不知道它是否为真。当然,人们已经利用计算机验证了很多n 值,但是这并不意味着有足够的把握就去总结它是正确的。
Proposition 1.3.5. ( G o l d b a c h ) . E v e r y e v e n i n t e g e r n g r e a t e r t h a n 2 i s t h e s u m o f t w o p r i m e s .
命题1.3.5:任意大于2的偶数都可表示为两个素数的和。
虽然前面的命题对于数学家而言是很重要的,但是计算机科学家可能会更关注程序和系统的正确性问题,以确保程序和系统能够实现应完成的功能。众所周知程序总是会存在bug的,并且越来越多的研究人员和社区从业者试图找到证明程序正确性的方法。这些努力在CPU芯片领域取得了巨大成功,它们被众多领先的芯片制造商使用来证明芯片的正确性和避免错误,比如20世纪90年代臭名昭著的因特尔奔腾芯片存在的除法运算bug。
研究数学方法来验证程序和系统仍然是一个十分重要的研究领域,我们稍后会在文中谈论到其中的一些方法。
1.3.2、谓词(Predicates)
当一个命题的真假取决于一个或者多个变量时,将其称为谓词。大多数命题都是以谓词形式定义的。例如:
" n i s a p e r f e c t s q u a r e "
这个命题的真实性取决于变量n 的取值,因此该命题又是谓词。因为当n = 4 时,该谓词为真;而当n = 5 时,该谓词为假。
和其他命题一样,谓词也常常用字母来命名。此外,函数形式的符号表达用来表示去特定变量值的谓词。例如,我们可以用字母P 来对之前的谓词进行命名:
P ( n ) :: = " n i s a p e r f e c t s q u a r e "
(n是完全平方数)
这样的话,P ( 4 ) 为真,而P ( 5 ) 为假。
这样的表达和普通函数的符号表达很相似。如果P 是谓词,那么P ( n ) 要么为true 要么为false ,取决于变量n 的取值。此外,如果p 是一个普通函数,例如n 2 + n ,那么p ( n ) 则是一个数值。不要将两者混淆。
1.3.3、量词(Quantifiers)
有两种常见的谓词断言:有时为真;总是为真。例如:
" x 2 ≥ 0 "
总是为真;另一方面,对于谓词:
" 5 x 2 − 7 = 0 "
仅当x = ± 7 / 5 − − − √ 时为真。
在英语中对于”always true”和”sometimes true”有很多不同的表达方式。如下表,左边给出了常见的形式,右边根据左边的形式给出的具体示例。你会在数学中看到很多次这样的短语。
Always True
For all n, P ( n ) is true. For all x ∈ R , x 2 ≥ 0. P ( n ) is true for every n
x 2 ≥ 0 for every x ∈ R
Sometime True
There exists an n such that P ( n ) is true There exists an x ∈ R such that 5 x 2 − 7 = 0 P ( n ) is true for some n
5 x 2 − 7 = 0 for some x ∈ R P ( n ) is true for at least one n
5 x 2 − 7 = 0 for at least one x ∈ R
这些句子对谓词为真的可能性进行了量化。始终为真的谓词断言被称作全称量化;可能为真的谓词断言则被称为存在量化。
有时英语对于量化的程度是不明确的。
“If you can solve any problem we come up with, then you get an A for the course.”
其中,短语”you can solve any problem we come up with”既可以被理解为全程语句也可以被理解为存在语句。
“You can solve e v e r y problem we come up with,”或者
“You can solve a t l e a s t o n e problem we come up with.”
如上所提的示例中,量化短语经常出现在i f − t h e n 语句中。这很常见,因为量化语句自身可作为命题,也可以利用”AND、OR、IMPLIES”等连接词进行连接。
1.3.4、量词符号
和∧ 用来表示”AND”,⟶ 来表示”IMPLIES”一样,我们也有相应的符号用来表示全程量化语句和存在量化语句。例如对于集合D 中的任意取值x ,谓词P ( x ) 都为真,我们可以写作:
∀ x ∈ D . P ( x ) (1.3)
全程量词∀ 读作”for all”,所以如上(1.3)表达式可以读作”For all x in D , P ( x ) is true.”。
如果说至少存在一个集合D 中元素x ,使得谓词P ( x ) 为真,我们可以写作:
∃ x ∈ D . P ( x ) (1.4)
存在量词∃ 读作”there exists”,所以表达式(1.4)可读作”There exists an x in D such that P ( x ) is true.”。
∀ 和∃ 符号通常会接一个变量(通常包含变量所取值集合的范围),然后一个谓词,就像如上两个例子。
如果令P r o b s 表示我们提出的问题的集合,S o l v e s ( x ) 表示谓词”You can solve problem x”,G 表示命题”You get an A for the course.”。那么对于”If you can solve any problem we come up with, then you get an A for the course.”会有两种不同的解释,可分别写作如下:
( ∀ x ∈ P r o b s . S o l v e s ( x ) ) I M P L I E S G
( ∃ x ∈ P r o b s . S o l v e s ( x ) ) I M P L I E S G
1.3.5、混合量词
许多数学陈述都会涉及到多个量词,例如哥德巴赫猜想:
E v e r y e v e n i n t e g e r n g r e a t e r t h a n 2 i s t h e s u m o f t w o p r i m e s .
我们把这句话尽可能详细的改写令量词更为明确:
F o r e v e r y e v e n i n t e g e r n g r e a t e r t h a n 2 , t h e r e e x i s t p r i m e s p a n d q s u c h t h a t n = p + q .
令E v e n s 表示大于2的偶数集合,令P r i m e s 表示质数集合。哥德巴赫猜想可用逻辑符号表示如下:
∀ n ∈ E v e n s . ∃ p ∈ P r i m e s ∃ q ∈ P r i m e s . n = p + q .
可简写如下:
∀ n ∈ E v e n s . ∃ p , q ∈ P r i m e s . n = p + q .
1.3.6、量词顺序
改变命题中不同量词的顺序往往也会改变命题表达的含义。让我们再回到我们提到过的这个例子:
E v e r y A m e r i c a n h a s a d r e a m .
由于量词顺序的不确定,这句话的含义也是存在歧义的。我们令A 表示美国人这一集合,令D 表示梦想这一集合,并且定义谓词H ( a , d ) 表示”American a has dream d.”。这个句子可以表示所有的美国人共享一个梦想(比如所有的美国人都梦想拥有一套大房子),逻辑表达如下:
∃ d ∈ D . ∀ a ∈ A . H ( a , d )
但是,这个句子也可表达为每个美国人都有着自己的梦想(比如有的美国人梦想安心退休,有的美国人梦想终生学习,有的美国人梦想变得富有而不需要担心工作问题),逻辑表达如下:
∀ a ∈ A . ∃ d ∈ D . H ( a , d ) .
如果将哥德巴赫猜想中的量词顺序会生成一个明显的虚假陈述语句:存在两个质数,多有的偶数都等于这两个质数的和。
∃ p , q ∈ P r i m e s . ∀ n ∈ E v e n s . n = p + q .
1.3.7、同域变量?
如果公式中所有变量被认定取值于同一个非空集合D ,往往可以省略D 。例如" ∀ x ∈ D , ∃ y ∈ D . Q ( x , y ) " 可简写为" ∀ x ∃ y . Q ( x , y ) . " 。其中x 和y 的取值范围叫做论述域 或者个体域 。
我们可以很容易地把所有的变量安排在同一个域上,例如哥德巴赫猜想可以表示为(不知道什么意思)。
原文:It’s easy to arrange for all the variables to range over one domain. For example,
Goldbach’s Conjecture could be expressed with all variables ranging over the
domain N as
∀ n . ( n ∈ E v e n s ) I M P L I E S ( ∃ p . ∃ q . p ∈ P r i m e s A N D q ∈ P r i m e s A N D n = p + q ) .
1.3.8、量词否定
全称量词和存在量词之间有着很简单的关系。如下两次句子表达了相同的含义:
It is not the case that everyone likes to snowboard.
There exists someone who does not like to snowboard.
利用逻辑符号进行表示,谓词公式之间存在这如下这一属性:
“N O T ( ∀ x . P ( x ) ” is equivalent to “∃ x . N O T ( P ( x ) ) . ”
同理,如下两个句子也表达了相同的意思:
There does not exist anyone who likes skiing over magma(岩浆).
Everyone dislikes skiing over magma.
我们可以用逻辑符号表示以上等价关系:
N O T ( ∃ x . P ( x ) ) I F F ∀ x . N O T ( P ( x ) ) .
由上可知,我们可以通过移动n o t 的位置来改变量词的类别。
1.4、有效性(永真性?)
对于一个命题公式,无论其中的命题变量取得何种真值(任意指派),该命题公式都为真,则称为永真式(重言式) 。例如,命题的分配律可表述为[ P AND ( Q OR R ) ] 与[ ( P AND Q ) OR ( P AND R ) ] 等价,即:
[ P AND ( Q OR R ) ] IFF [ ( P AND Q ) OR ( P AND R ) ]
是永真式。我们可以通过真值表来进行验证:
P
Q R
[ P AND ( Q OR R ) ] [ ( P AND Q ) OR ( P AND R ) ] T T T T T T T F T T T F T T T T F F F F F T T F F F T F F F F F T F F F F F F F
对于一个谓词公式,如果在任意论述域上无论其变量何种取值都为真,则称该谓词公式永真。
另一个有用的永真断言如下:
∃ x ∀ y . P ( x , y ) IMPLIES ∀ y ∃ x . P ( x , y ) . (1.7)
解释如下:
令D 为变量x 的取值域,P 0 为D 上的二值谓词。我们只需要验证当(1.8)在这种情况为真时,(1.9)是否为真:
∃ x ∈ D ∀ y ∈ D . P ( x , y ) . (1.8)
∀ y ∈ D ∃ x ∈ D . P ( x , y ) . (1.9)
假设(1.8)为真,然后根据∃ 的定义,可知存在d 0 ∈ D 使得:
∀ y ∈ D . P 0 ( d 0 , y ) .
又由∀ 定义,表示下式在所有d ∈ D 成立:
P 0 ( d 0 , d ) .
所以任给d ∈ D ,存在元素d 0 ∈ D ,使得P 0 ( d 0 , d ) 为真。这有正好是式(1.9)所表示的含义,因此我们得证(1.9)如要求在此情况下为真。
我们希望这个解释是有用的,尽管可能纯粹主义者不愿意将这称为证明。这也因为如同(1.7),很难找出更基本的公理来证明这个基本命题。而我们上面所做的解释也不过是将逻辑公式转换为英语,然后根据”for all”和”there exists”的含义上做出相应解释。
与(1.7)相反,如下公式并不是永真式。
∀ y ∃ x . P ( x , y ) . IMPLIES ∃ x ∀ y . P ( x , y ) (1.10)
我们只需要找到一个当假设∀ y ∃ x . P ( x , y ) . 为真时,结论∃ x ∀ y . P ( x , y ) 为假的描述来进行解释。
例如,令该谓词公式的论述域为整数,P ( x , y ) 表示x > y 。这种情况下,假设为真,因为任给一个整数y ,总会存在比该数大的整数x 。但是在这种解释情况下,结论表示存在一个整数大于所有的整数,这显然是错误的。因此可以得证(1.10)非永真式。像这样伪造一个断言被称为断言的counter model 。
1.5、可满足性
如果一个命题的变量取某些值时可使该命题为真,则称该变量为可满足的。比如”P AND Q ¯ ”是可满足的,因为当P 为真且Q 为假时可使表达式为真。而”P AND P ¯ ”不可满足,因为该表达式始终为假。
确定一个更复杂的命题是否可满足并不容易,如下:
( P OR Q OR R ) AND ( P ¯ OR Q ¯ ) AND ( P ¯ OR R ¯ ) AND ( R ¯ OR Q ¯ )
我们将确定一个命题是否可满足的问题称为SAT 。通常情况下我们会通过构造真值表来检查是否存在使命题为真的情况,但是这种方法效率太低,一个包含n 个变量的命题的真值表有2 n 种情况,所以判断一个命题是否可满足的工作量会随着命题变量的个数呈指数增长。对于一个有着30个变量的命题,我们需要检查10亿种情况。
那么是否存在更为有效解决方法呢?特别是是否存在特别精妙的程序,对于任何给定的命题,能在该命题变量个数的多项式关系(例如n 2 或者n 1 4 )步数内进行判断而不是指数关系,暂时没有人知道。如果存在一个有效的解决方案,确实可以应用在很多领域,比如Packing、Scheduling、Routing、Circuit Verification等方面。但存在好处的同时也会对当前世界的一些方面产生消极的影响,对于大多数编码信息的解密可能变得十分容易,同时线上交易可能变得不安全,同时加密的交流信息能被所有人破解。
当前,对于数字电路验证等实际应用领域,sat-solvers取得了令人激动的进步。这些程序对于处理即使存在数百万个变量的公式的问题上,仍然有着惊人的效率。但是不幸的是,很难去预测什么类型的公式适用于sat-solvers提出的方法,对于并不适用的公式,sat-solvers的方法可能也会花费指数倍时间来进行验证。
所以如何在多项式关系的时间效率内解决SAT问题,或者证明这一工作并不可解,当前并没有一个好的办法。这也就是著名的计算机理论科学中尚未被证明的”P vs. N P ”问题,也是七大”千禧年问题”之一,如果你找到该问题的解决方案,Clay Institute会支付你$1,000,000作为奖励。
确定要放弃本次机会?
福利倒计时
:
:
立减 ¥
普通VIP年卡可用
立即使用
目录
展开全部
收起
目录
展开全部
收起
成就一亿技术人!