您的位置:首页 > 运维架构

Mathematics for computer science-Propositions

2017-10-17 17:35 274 查看

1、命题(Propositions)

定义:命题是一种非真即假的陈述。

(__Definition.__A proposition is a statement that is either true or false.)

例如,以下都是命题,且第一个为真,第二个为假。

Proposition 1.0.1. 2 + 3 = 5.

Proposition 1.0.1. 1 + 1 = 3.

“真”或”假”听起来不像是特别多的限制,但是它确实排除了类似“为什么你是罗密欧?”、“给我一个A!”之类的陈述。

不幸的是,判断一个命题是否为真或是为假并不总是如此简单,或者也很难弄清这个命题表述了什么意思。在某种程度上,这是因为英语是带有歧义的。例如,思考如下陈述:

“You may have cake, or you may have ice cream.”

“If pigs can fly, then you can understand the Chebyshev bound.”

“If you can solve any problem we come up with, then you get an A for the course.”

“Every American has a dream.”

这些句子到底是什么意思?你能同时选择cake和ice cream还是说只能选择其中一种?如果第二个句子为真,那么意味着切比雪夫(Chebyshev)边界是无法理解的吗?如果你能解决我们提出的部分问题,那么你是否可以得到A?并且你是否能在一个问题都无法解决的情况下仍然得到A?最后一个句子是否暗示所有的美国人都有着同样的梦想还是说一些人有着不一样的梦想?

在日常谈话中存在一些歧义是可以忍受的。但是当我们需要精确表达思路时(例如在数学或者程序中),这种日常语言固有的模棱两可就会成为表述时的问题。如果我们不能完全确定这些陈述的确切含义,我们也无法提出确切的论点。因此在正式进入数学殿堂之前,我们需要研究一下如何去表述数学。

为了绕过英语存在的歧义性,数学家们设计了一种特殊的迷你语言去描述逻辑关系。这门语言主要使用了传统的英语单词和短语,例如”or”、”implies”、”for all”,但是数学家们赋予了这些单词比普通字典中更为精确地定义。如果不知道这些定义,你可能有时能抓住这些语句的要点,但是也会经常会对其真实含义产生误解。

令人兴奋的是,在学习数学语言的过程中,我们会接触到计算机科学中最重要的开放性问题,并且这个问题的解决方案可能会改变世界。

1.1、复合命题(Compound Propositions)

在英语中,我们可以使用”not”、”and”、”or”、”implies”、”if-then”这类词来修饰、组合和关联命题。例如,我们能够将三个命题联合如下:

If all humans are mortal and all Greeks are human, then all Greeks are mortal.

接下来,我们会把重点放在如何进行命题的组合和关联,而不是命题本身的内容及组成(不论它们是和数学有关还是和希腊的死亡率有关
whether they involve mathematics or Greek mortality
)。因此我们会经常使用诸如P和Q这样的变量来指代诸如“所有人类都是凡人”、“2+3=5”这样的具体命题。这样理解的好处是,这些变量(亦或是命题)只能取值为T(true)和F(false)。true/false变量有时又被称为布尔(Boolean)变量,因为它们的发明者叫做George Boole。

1.1.1、NOT,AND,and OR

我们可以利用真值表(truth tables)精确定义这些变量。如果变量P代表了某个任意的命题,那么命题”NOT(P)”的定义则由如下真值表给出。

PNOT(P)
TF
FT
第一行表示当命题P为true时,命题”NOT(P)”为false。第二行则表示当命题P为false时,命题”NOT(P)”为true。这或许正是你所期望的。

普遍而言,真值表表征了一个命题在每个变量可能的设置下的true/false取值。例如,因为P和Q两个变量由四种不同的设置组合,因此命题”P AND Q”的真值表有四行,如下:

PQP AND Q
TTT
TFF
FTF
FFF
从上表可以看出,命题”P AND Q”当且仅当P和Q都为真的时候才为真。这也与我们平时对”and”这一单词的认知一致。

在命题”P OR Q”的真值表中则存在一个微妙之处:

PQP OR Q
TTT
TFT
FTT
FFF
上述真值表第一行表明即使P和Q都为真,”P OR Q”也为真。这与我们日常生活中的”or”的含义并不完全一致,但是这却是数学中的标准定义。因此如果一个数学家说”You may have cake, or you may have ice cream.”,他的意思是你也可以同时拥有两个。

如果你想要排除掉两者都拥有的情况,那么你应该使用异或(“exclusive-or”)(XOR):

PQP XOR Q
TTF
TFT
FTT
FFF

1.1.2、IMPLIES(蕴含)

“implies”或许是最不直观的最容易让人误解连接词。它的真值表如下,上面的标签我们之后会进行讨论。

PQP IMPLIES Q
TTT (tt)
TFF (tf)
FTT (ft)
FFT (ff)
让我们对这个定义进行以下解释。首先,如下命题为真还是为假?

“If the Riemann Hypothesis is true, then x2≥0 for every real number x.”

“如果黎曼假设成立,那么对于任意实数x,均满足x2≥0”

黎曼假设是数学中一个著名的且尚未被证实的猜想(没有人知道它到底是正确的还是错误的),但是这并不会妨碍你回答以下问题。这一命题有着P蕴含(IMPLIES)Q的形式,其中假设P为”Riemann Hypothesis is true”,结论Q为”x2≥0 for every real number x”。因为结论明确为真,我们可以查看真值表的tt行和ft行。无论哪种,命题本身都是为真的。

我们最初的一个例子展示了一个更奇怪的现象。

“If pigs can fly, then you can understand the Chebyshev bound.”

“如果猪会飞,那么你能够理解切比雪夫边界。”

不要将这句话视为侮辱,我们所需要的只是弄清楚这个命题是真还是假。奇怪的是,回答与你是否能够理解切比雪夫边界没有关系。猪并不会飞,所以我们可以参考真值表中的ft行和ff行。在这两种情况下,该命题都是为真的。

相应的,这儿给出结论为假的例子:

“If the moon shines white, then the moon is made of white cheddar.”

“如果月亮是白色的,那么月亮是用白色的cheddar做的。”

月亮是白色的没错;但是月亮不是用白色cheddar做的。所以我们可以参考真值表的tf行,可知该命题为假。

对于蕴含的真值表可以用如下文字总结:

“An implication is true exactly when the if-part is false or the then-part is true.”

“当if部分为假或者then部分为真是,蕴含为真。”

数学陈述中的很大一部分都是以if-then形式构成的,这句话值得被记下。

1.1.3、IFF(if and only if)

数学家通常会以日常用语中不会出现的另外一种方式加入命题。命题”P当且仅当 Q”断言P和Q再逻辑上是等价的;也就是说,两者同时为真或同时为假。

PQP IFF Q
TTT
TFF
FTF
FFT
例如,如下”if-and-only-if”语句对于任意实数x成立:

x2−4≥0 iff |x|≥2

对于x的某些取值,两个不等式都为真。对于x的其他取值,两个不等式都不为真。这两种情况下,命题整体上都为真。

1.1.4、符号表示 (Notation)

数学家们已经设计了一系列符号用来表示诸如”AND”、”NOT”之类。最常用的符号表示如下表:

EnglishSymbolic Notation
NOT(P)¬P(alternatively, P¯)
P AND QP∧Q
P OR QP∨Q
P IMPLIES QP⟶Q
if P then QP⟶Q
P IFF QP⟷Q
例如,”If P AND NOT(Q), then R”用符号表示如下所示:

(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)”。比较这两个命题的真值表:

PQP IMPLIES QNOT(Q) IMPLIES NOT(P)
TTTT
TFFF
FTTT
FFTT
可以肯定的是,这两条陈述的真值表每一行都是相同的,因此这也意味着它们是完全等价的。通俗而言,”NOT(Q) IMPLIES NOT(P)”被称为”P IMPLIES Q”的逆否命题。并且就如真值表展示的那样,这两种只不过是同意陈述的不同表示。

相反的,”P IMPLIES Q”的逆命题是”Q IMPLIES P”。对于我们提到的例子,它的逆命题为:

If I am grumpy, then I am hungry.

这看起来是个完全不同的命题,它的真值表也证实了这一点。

PQP IMPLIES QQ IMPLIES P
TTTT
TFFT
FTTF
FFTT
因此我们可以得到如下结论,蕴含命题与其逆否命题逻辑等价,但是与其逆命题不等价。

其次,一个蕴含命题和它的逆命题结合与一个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.

我们可以利用真值表来证实:

PQP IMPLIES QQ IMPLIES PP IMPLIES Q AND Q IMPLIES PP IFF Q
TTTTTT
TFFTFF
FTTFFF
FFTTTT

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”

ABA OR (NOT(A) AND B)A OR B
TTTT
TFTT
FTTT
FFFF
这也就意味着我们可以再不改变程序功能的基础上简化代码。

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.For every nonnegative integar,n,the value of n2+n+41 is prime.

命题1.3.1:对于任意非负整数,n2+n+41都为质数。

这个命题并不那么直观容易判断真假。在这种情况下,我们往往希望通过取一部分n的值,来计算

p(n)::=n2+n+41.

然后判断求得的值是否为质数。如果存在不为质数的结果,那么我们可以判断该命题为假;反而如果我们求到的所有的结果都是质数,那么我们可能会由此推断这个命题为真。

首先我们计算得到p(0)=41,结果为质数;p(1)=43也为质数。同样p(2)=47,p(3)=53,...,p(20)=461,这些结果都为质数。我们也许会由此认为对于任意非负整数n,都会有p(n)的结果为质数。那么事实是否真的如此呢?实际上对于n/leq39,都满足p(n)为质数。这个命题像是真的,

但是p(40)=402+40+41=41⋅41,结果不是质数。所以并不是对所有的非负整数n都满足p(n)为质数,也就是说这个命题为假。

尽管这个结果让人很惊讶,但是这个例子并不像你所想的那样是人为的或者罕见的。我们会发现,很多命题都会在部分情况(或者非常多的情况)下成立,但是在某一个点下又会转而为假。要记住的关键是,我们无法通过检查有限集去判断无限集的真伪,无论这个有限集有多大。

由于涉及到所有数字的命题很常见,因此有一个特殊的符号用来表示它们。比如,命题1.3.1可以写为如下形式:

∀ n∈N. p(n) is prime.

其中,符号∀表示”for all”;符号N指代了非负整数集合,即0、1、2、3…(向你的导师询问完整列表);符号∈可读作”is a member of”或者”belongs to”,再或者”is in”。符号N后面的句点其实只是段落之间的分隔符。

还有一个例子,起初看起来命题为真,但是事实证明为假:

Proposition 1.3.2. a4+b4+c4=d4 has no solution when a;b;c;d are positive integers.

命题1.3.2:当a、b、c、d都为正整数时,方程 a4+b4+c4=d4 无解。

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+. a4+b4+c4≠d4

其中,符号Z+表示正整数。为了便于阅读,∀通常合并简写,如下:

∀a,b,c,d∈Z+. a4+b4+c4≠d4

下面的这个命题可能会更糟糕:

Proposition 1.3.3. 313(x3+y3)=z3 has no solution when x,y,z∈Z+.

命题1.3.3:当x,y,z∈Z+,方程313(x3+y3)=z3无解。

这个命题也是为假的,但是能找到的x、y、z的最小反例值也超过1000位数。即使当今世上最大的计算机也无法通过暴力进行求解。当然,你可能会好奇为什么会有人关心这个方程有没有解。事实证明是因为在椭圆曲线研究领域,找到这类方程的解是很重要的,其次这对大整数分解研究而言也是很有意义的,而这通常会被用于常用的密码系统破解(见第四章),这大概也就是为什么数学家们愿意致力于找出近千位数的解。

当然,并不是所有包含无数情况的命题都会被证明为假。比如”四色定理”则被证明为真。

Proposition 1.3.4.Every map can be colored with 4 colors so that adjacent regions have different colors.

命题1.3.4:每个地图都可以只用四种颜色进行着色,使得相邻两个区域有着不同的颜色。

这个命题的证明十分困难并且耗费了近乎一个世纪去完善。在这期间提出了很多不正确的证明,其中包括一个在十九世纪后期发现了错误的证明,而在此之前这个证明被坚信了十年。数学家Appel和Haken终于在1976年发现了一个十分令人费解的证明,他们利用了一个十分复杂的计算机程序对四色地图进行分类;这个程序留下了数千张未分类的地图,而这些地图则有Haken和他的助手手工进行检查,包括他15岁的女儿也参与了这项工作。对于这个证明是否合理合法存在很大的争议,整个证明过程太过庞大复杂,如果不借助计算机无法进行检查,没有人能够保证计算机的计算是完全正确的,也没有人有精力再次去检查那数千张手工完成的四色地图。在过去的十年内,人们发现了四色定理的一份可被理解的证明,尽管仍然需要计算机来检查数百张特殊地图的着色性。

某些情况下,我们没法知道一个命题到底为真还是为假。例如哥德巴赫猜想,这个命题从1742年就被大量研究但是至今仍不知道它是否为真。当然,人们已经利用计算机验证了很多n值,但是这并不意味着有足够的把握就去总结它是正确的。

Proposition 1.3.5.(Goldbach).Every even integer n greater than 2 is the sum of two primes.

命题1.3.5:任意大于2的偶数都可表示为两个素数的和。

虽然前面的命题对于数学家而言是很重要的,但是计算机科学家可能会更关注程序和系统的正确性问题,以确保程序和系统能够实现应完成的功能。众所周知程序总是会存在bug的,并且越来越多的研究人员和社区从业者试图找到证明程序正确性的方法。这些努力在CPU芯片领域取得了巨大成功,它们被众多领先的芯片制造商使用来证明芯片的正确性和避免错误,比如20世纪90年代臭名昭著的因特尔奔腾芯片存在的除法运算bug。

研究数学方法来验证程序和系统仍然是一个十分重要的研究领域,我们稍后会在文中谈论到其中的一些方法。

1.3.2、谓词(Predicates)

当一个命题的真假取决于一个或者多个变量时,将其称为谓词。大多数命题都是以谓词形式定义的。例如:

"n is a perfect square"

这个命题的真实性取决于变量n的取值,因此该命题又是谓词。因为当n=4时,该谓词为真;而当n=5时,该谓词为假。

和其他命题一样,谓词也常常用字母来命名。此外,函数形式的符号表达用来表示去特定变量值的谓词。例如,我们可以用字母P来对之前的谓词进行命名:

P(n)::="n is a perfect square"

(n是完全平方数)

这样的话,P(4)为真,而P(5)为假。

这样的表达和普通函数的符号表达很相似。如果P是谓词,那么P(n)要么为true要么为false,取决于变量n的取值。此外,如果p是一个普通函数,例如n2+n,那么p(n)则是一个数值。不要将两者混淆。

1.3.3、量词(Quantifiers)

有两种常见的谓词断言:有时为真;总是为真。例如:

"x2≥0"

总是为真;另一方面,对于谓词:

"5x2−7=0"

仅当x=±7/5−−−√时为真。

在英语中对于”always true”和”sometimes true”有很多不同的表达方式。如下表,左边给出了常见的形式,右边根据左边的形式给出的具体示例。你会在数学中看到很多次这样的短语。

Always True

For all n, P(n) is true.For all x ∈R,x2≥0.
P(n) is true for every nx2≥0 for every x∈R
Sometime True

There exists an n such that P(n) is trueThere exists an x∈R such that 5x2−7=0
P(n) is true for some n5x2−7=0 for some x∈R
P(n) is true for at least one n5x2−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 every problem we come up with,”或者

“You can solve at least one problem we come up with.”

如上所提的示例中,量化短语经常出现在if−then语句中。这很常见,因为量化语句自身可作为命题,也可以利用”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.”。

∀和∃符号通常会接一个变量(通常包含变量所取值集合的范围),然后一个谓词,就像如上两个例子。

如果令Probs表示我们提出的问题的集合,Solves(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∈Probs. Solves(x)) IMPLIES G

(∃ x∈Probs. Solves(x)) IMPLIES G

1.3.5、混合量词

许多数学陈述都会涉及到多个量词,例如哥德巴赫猜想:

Every even integer n greater than 2 is the sum of two primes.

我们把这句话尽可能详细的改写令量词更为明确:

For every even integer n greater than 2,there exist primes p and q such that n=p+q.

令Evens表示大于2的偶数集合,令Primes表示质数集合。哥德巴赫猜想可用逻辑符号表示如下:

∀ n∈Evens.∃ p∈Primes∃ q∈Primes.n=p+q.

可简写如下:

∀ n∈Evens.∃ p, q∈Primes.n=p+q.

1.3.6、量词顺序

改变命题中不同量词的顺序往往也会改变命题表达的含义。让我们再回到我们提到过的这个例子:

Every American has a dream.

由于量词顺序的不确定,这句话的含义也是存在歧义的。我们令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∈Primes. ∀ n∈Evens. 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∈Evens) IMPLIES (∃ p.∃ q.p∈Primes AND q∈Primes AND 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.

利用逻辑符号进行表示,谓词公式之间存在这如下这一属性:

“NOT(∀ x. P(x)” is equivalent to “∃ x. NOT(P(x)).”

同理,如下两个句子也表达了相同的意思:

There does not exist anyone who likes skiing over magma(岩浆).

Everyone dislikes skiing over magma.

我们可以用逻辑符号表示以上等价关系:

NOT(∃ x. P(x)) IFF ∀ x. NOT(P(x)).

由上可知,我们可以通过移动not的位置来改变量词的类别。

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)]

是永真式。我们可以通过真值表来进行验证:

PQR[P AND (Q OR R)][(P AND Q) OR (P AND R)]
TTTTT
TTFTT
TFTTT
TFFFF
FTTFF
FTFFF
FFTFF
FFFFF
对于一个谓词公式,如果在任意论述域上无论其变量何种取值都为真,则称该谓词公式永真。

另一个有用的永真断言如下:

∃ x ∀ y. P(x,y) IMPLIES ∀ y ∃ x. P(x,y). (1.7)

解释如下:

令D为变量x的取值域,P0为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)为真,然后根据∃的定义,可知存在d0∈D使得:

∀ y∈D. P0(d0,y).

又由∀定义,表示下式在所有d∈D成立:

P0(d0,d).

所以任给d∈D,存在元素d0∈D,使得P0(d0,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个变量的命题的真值表有2n种情况,所以判断一个命题是否可满足的工作量会随着命题变量的个数呈指数增长。对于一个有着30个变量的命题,我们需要检查10亿种情况。

那么是否存在更为有效解决方法呢?特别是是否存在特别精妙的程序,对于任何给定的命题,能在该命题变量个数的多项式关系(例如n2或者n14)步数内进行判断而不是指数关系,暂时没有人知道。如果存在一个有效的解决方案,确实可以应用在很多领域,比如Packing、Scheduling、Routing、Circuit Verification等方面。但存在好处的同时也会对当前世界的一些方面产生消极的影响,对于大多数编码信息的解密可能变得十分容易,同时线上交易可能变得不安全,同时加密的交流信息能被所有人破解。

当前,对于数字电路验证等实际应用领域,sat-solvers取得了令人激动的进步。这些程序对于处理即使存在数百万个变量的公式的问题上,仍然有着惊人的效率。但是不幸的是,很难去预测什么类型的公式适用于sat-solvers提出的方法,对于并不适用的公式,sat-solvers的方法可能也会花费指数倍时间来进行验证。

所以如何在多项式关系的时间效率内解决SAT问题,或者证明这一工作并不可解,当前并没有一个好的办法。这也就是著名的计算机理论科学中尚未被证明的”P vs. NP”问题,也是七大”千禧年问题”之一,如果你找到该问题的解决方案,Clay Institute会支付你$1,000,000作为奖励。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机科学 数学