首先我们用一个简单的逻辑系统来介绍一些必要的符号。
在这个简单的系统里,关注于叙述之间的推理关系,不去烦恼叙述的构成细节。因为如此所以我们称这个逻辑系统为命题逻辑(Propositional calculus)。我们用英文大写字母$\displaystyle A_1, A_2, A_3$来代表一段基本叙述,称为叙述字母(statement letter),并可以下标数码来进一步分辨。(事实上就是承认自然数先于逻辑而存在)。另外我们假设每段叙述都有真假之分[1],分别以$\top$代表真;和$\bot$代表假。
$\mathcal{A}\asymp\mathcal{B}$代表代表两者完全相等(也就是符号辨识的意义上相等)。
符号定义(有时称为形式定义)是以另一组符号去简记原来的符号。我们以$\mathcal{A}:=\mathcal{B}$代表符号上$\mathcal{A}$是$\mathcal{B}$的简记。
在逻辑上最简单的概念就是否定(negation)了,否定一段叙述字母$\displaystyle A$我们用$\neg A$代表。我们用一个表称为真值表(truth table)描述它在逻辑上的真假状况。真值表的意思是,"如果$\displaystyle A$是假的,那否定$\displaystyle A$的叙述是真的"。
|
日常对话里常常会说,"开了电视才会看到新闻";或是"加热够久以后会沸腾"。但事实上没看电视一样可以上网看新闻;就算没有加热也会沸腾(如常温下的液态氮)。这说明了有$\displaystyle A$则$\displaystyle B$($A\Rightarrow B$)的直观逻辑意义,也就是$\displaystyle A$是真的话必会得到$\displaystyle B$为真,但$\displaystyle A$为假的情况下$\displaystyle B$的真假无法确定。这个逻辑运算的观念称为实质条件(material conditional ),以真值表表示就是:
|
直观看起来,实质条件的定义,似乎跟日常生活中的"若....则"不一样。但是假想一个情况,你跟朋友在玩猜数字,你跟朋友打赌"如果你的数字$\displaystyle n$是奇数,则我可以对$\displaystyle x^n+y^n$因式分解";这显然是个必赢的赌局,因为依照普通日常的逻辑,你朋友挑偶数的话,因为你有言在先,说如果"挑奇数的话",所以你会自动胜利。而这个日常逻辑正跟我们的实质条件相符合,尽管如果他取偶数的话会让$\displaystyle x^n+y^n$无法因式分解,但你的"断言"在逻辑上是无懈可击的。
一般日常所说的因果关系,会额外要求如果$\displaystyle B$是真的话,那$\displaystyle A$也要为真(而且会要求时间的先后顺序)。但这正对应著我们下面会提到的实质双条件。而且一般的数学推理,并不是总是能找到如因果关系这样完美的推理关系。
我们可以直观的从真值表定义下面两个逻辑连接词:
|
|
$A\wedge B$就是所谓的且,也可以形式的定义为不可能$\displaystyle A$是对的情况下推出$\displaystyle B$是错的,也就是
$A\wedge B:=\neg( A\Rightarrow \neg B)$
另一方面,或($A\vee B$)也可以形式的定义为若$\displaystyle A$是错的则$\displaystyle B$是对的,也就是
$A\vee B:=\neg A\Rightarrow B$
读者可以自行画出真值表,证明这个形式定义跟真值表一致。
我们很直观的把$\displaystyle A$跟$\displaystyle B$间的实质双条件(material biconditional)定义为$\displaystyle A$可以推出$\displaystyle B$且$\displaystyle B$可以推出$\displaystyle A$,也就是
$A \Leftrightarrow B:= (A\Rightarrow B)\wedge(B\Rightarrow A)$
以真值表表示就是
|
跟一般的语言一样,数学叙述有一定的文法规则才能清楚表达。这样在一套数学理论里符合文法规则的叙述称为合式公式(well-formed formulas),简写为$\displaystyle wf$。在命题逻辑里我们用以下的文法规则规定甚么是一段合式公式:
$\displaystyle (1)$叙述字母是$\displaystyle wf$。
$\displaystyle (2)$如果$\mathcal{A},\mathcal{B}$是$\displaystyle wf$,则$\neg\mathcal{A},\,\mathcal{A}\Rightarrow \mathcal{B}$也都是 $\displaystyle wf$。而$\neg,\Rightarrow$被称为命题连接词(propositional connectives)
$\displaystyle (3)wf$只能透过上面两个规则建构出来。
记住我们第二条文法规则可以这么简单,是因为其他的命题连结词可以用否定跟实质条件组合出来。我们习惯用草写的大写英文字母去表达合式公式。
就像一般的语言一样,符合文法规则让人听得懂的话,是有真有假的,合式公式也是有真有假。不管组成的它的叙述字母的真假怎么取,一段合式公式如果都是真的称为恒等式(tautology),反之都是假的合式公式则称为矛盾(contradiction)。例如对叙述字母$\displaystyle A$
$A\Rightarrow A$
就是恒等式;而
$A\wedge(\neg A)$
就是矛盾。
对于合式公式的恒等式,我们有以下最直观,但重要的modus ponens律,简称MP律:
元定理(MP律):
若$\mathcal{A}$, $\mathcal{A}\Rightarrow\mathcal{B}$两个都是恒等式,则$\mathcal{B}$也是恒等式。
这个"元定理"以后抽象化以后,将在命题逻辑的形式理论里被当成唯一的推理规则。
事实上我们还可以从合式公式去稍稍推广逻辑推理的观念;回忆一下我们一开始就假设组成合式公式的叙述字母都是有真有假,它们的真假可以决定合式公式的真假,所以如果每个让$\mathcal{A}$为真的真假组合,都会让$\mathcal{B}$是真的话,我们称$\mathcal{A}$在逻辑上推出$\mathcal{B}$($\mathcal{A}$logically implies $\mathcal{B}$) 。读者可以自己简单证明,$\mathcal{A}$在逻辑上推出$\mathcal{B}$等价于$\mathcal{A}\Rightarrow\mathcal{B}$是恒等式。
另外我们说$\mathcal{A}$在逻辑上等价于$\mathcal{B}$($\mathcal{A}$is logically equivalent to $\mathcal{B}$),如果任何的叙述字母的真假组合,都会让两者同为真或是同为假,一样可以证明$\mathcal{A}$在逻辑上等价于$\mathcal{B}$当且仅仅当$\mathcal{A}\Leftrightarrow\mathcal{B}$是恒等式。
为了让合式公式的书写更加便捷,我们做以下的规定:
$\displaystyle (1)$从左方开始判断
$\displaystyle (2)$括弧内的命题连接词是最优先施用的。
$\displaystyle (3)$作用于同个叙述字母(或是以括弧包起来的$\displaystyle wf$)的命题连接词,我们依照$\neg,\,\wedge,\,\vee,\,\Rightarrow,\,\Leftrightarrow$的顺序施用。
$\displaystyle (4)$以上规则都无法判别施用顺序的话,以最靠近左端的命题连接词为先施用。
事实上判别一段合式公式真假值的时候,不用每次都以叙述字母为基础去判定,我们有以下两个"元定理"(metatheorem)描述命题逻辑取代的性质
元定理:
如果合式公式$\mathcal{T}$是恒等式,内含的叙述字母是$\displaystyle A_1,A_2,....,A_n$。如果取一组合式公式$\mathcal{A}_1,\mathcal{A}_2,....,\mathcal{A}_n$去依序取代$\displaystyle A_1,A_2,....,A_n$,得到新的合式公式$\mathcal{T}'$,则$\mathcal{T}'$也会是恒等式。
元定理:
合式公式$\mathcal{T}_A$里内含合式公式$\mathcal{A}$,设合式公式$\mathcal{T}_B$是把$\mathcal{T}_A$里内含的$\mathcal{A}$都取代成$\mathcal{B}$而生成的。那么$[(\mathcal{A}\Leftrightarrow\mathcal{B})\Rightarrow(\mathcal{T}_A\Leftrightarrow\mathcal{T}_B)]$是恒等式。
(此元定理可以推论出如果$\mathcal{A},\mathcal{B}$在逻辑上等价,则$\mathcal{T}_A,\mathcal{T}_B$在逻辑上也是等价的。)
以上两个元定理都可以透过命题连结词的定义去简单证明,在此不赘述。
在进入形式的逻辑理论之前,我们岔题一下,去讨论一个在电脑的设计上很有用的结果。
想抽象一点,我们可以把前面所介绍的命题连接词当成一种"神奇的黑箱",只要给它叙述字母的真假值,就会给你逻辑关系是真是假的结果。更抽象的来说,我们可以把命题连接词当成一种"对应",每一组叙述字母的真假值都对到唯一的一个真假值,就像每个商品都有自己的价格一样。事实上这就是数学上函数的概念。
思考一下,我们定义"函数"的时候,是要指定是哪一群东西(一堆商品)被对应到哪一群东西(代表价格的数字们)。这个"一群"的概念在数学上对应著集合的概念;也就是我们要能区分每一个个体(每个商品从外观都很容易的区分),而且还要有一个准则去划分它们是哪个群体的(商品的意思是,在商店里可以用钱交换而得到的任何物体)。但有些龟毛的数学家发现,有些划分群体的准则会造成自相矛盾的结果,像著名的罗素悖论。所以我们想要讨论"集合"这个观念的话,我们必须小心翼翼地罗列出划分群体需要遵守的规则,也就是集合论的公理。但小心翼翼讨论这些公理所需要的逻辑规则,我们还没完全学完。所以在这里讨论"真值函数",也就是刚刚提到的叙述字母的真假值跟逻辑关系真假的对应关系,要采用一种半直观的方法讨论,等到有一个正式的公理化集合论,就可以轻松地把这些直观的观念严谨化。
回忆一下我们用实质条件跟否定,就可以形式的定义"且"和"或"。那一般来说,一个内含叙述字母$\displaystyle A_1,A_2,....,A_n$的任意合式公式$\mathcal{T}$,它的真值函数$f_{\mathcal{T}}$如果用真值表表示成下面这个样子:
|
$f_{\mathcal{T}}(\top,\top,....,\top)$的意思只是照函数$f_{\mathcal{T}}$的规则下,"输入"$\top,\top,....,\top$所得到的对应值。那它能不能被命题连接词组合出来呢? 如果真值表的第$\displaystyle i$列($i\le 2^n$)的真值函数值为真;为了要凑出$\top$,我们在这列取$\bot$值的叙述字母前面加$\neg$,然后跟其他叙述字母用"$\wedge$"接起来,写清楚就是
$\displaystyle\mathcal{C}_i:=(\bigwedge_{A_k=\top}A_k)\wedge[\bigwedge_{A_j=\bot}(\neg A_j)]$
我们偷懒的用大写的"$\wedge$"符号代表连续用"且"连接而成的合式公式,大写的"$\wedge$"下面说明被连接的$\displaystyle A_k$们需要满足甚么条件,而不用麻烦的列举他们;同样的偷懒写法对"$\vee$"也适用。那么这样定义的合式公式$\mathcal{C}_i$在第$\displaystyle i$列一定为真;另一方面只要稍稍跟这列的真假值组合不同,就会导致$\mathcal{C}_i$为假。把这些取函数值为真的列所生成的$\mathcal{C}_i$用"或"连接起来,就是我们寻找的$\mathcal{T}$一般表达式。说清楚一点,以$\displaystyle f_i$代表第$\displaystyle i$列的真值函数值,那么
$\displaystyle\mathcal{T}\Leftrightarrow(\bigvee_{f_i=\top}\mathcal{C}_i)$
是恒等式,也就是两者在逻辑上等价。因为"或"只要一者为真结果就为真;但另一方面为,函数值为假的某列,它的真假值组合代进任意的$\mathcal{C}_i$都必然为假,而且假用"或"连结起来还是假的,所以这条合式公式的确重现$\mathcal{T}$真值表的状况;一方面也证明了任意的真值函数可以用$\neg,\wedge,\vee$三者构造出来。
那么更进一步的,有没有一个"双元"的命题连接词(也就是像"或"一样吃两个"输入值"),可以构造出所有的真值函数呢?这个问题的重要性在于,电脑是基于二进位演算的"黑箱子";我们可以把$\top$当成$\displaystyle 1$;$\bot$当成$\displaystyle 0$,由此可以把电脑所有的功能拆成真值函数,如果能确定真值函数可以用更少的命题连接词构成,那用电晶体去组合出逻辑电路的时候,可以依据一定的运算规则减少需要使用的电晶体数量。
如果一个"双元"命题连接词可以配出所有的真值函数,第一个要配的就是$\neg$;唯一配的方法就是重复输入同一个叙述字母的真假值来构造。假设这个命题连接词用符号"$\star$"代表,那
|
要完全决定这个命题连接词,只剩下真值组合不相等的两个部分;如果把两个$\displaystyle ?$取为相异值,可以发现不是$(A\star B)$逻辑上等价于$(\neg A)$;不然就是$(A\star B)$逻辑上等价于$(\neg B)$。但依照我们上面的讨论,$\neg$是不足以构筑出所有真值函数的;故两个$\displaystyle ?$只能取相同值。
如果取的是$\top$的话,我们称为NAND或是谢费尔竖线(Sheffer stroke),以"$\mid$"代表
|
事实上它就是
$\neg(A\wedge B)$
这就是它的名子"NAND"的来源。然后注意到,$(A\vee B)$逻辑上等价于$[\neg(\neg A\wedge\neg B)]$("或"就是不可能全部都是假的),所以NAND的确可以构造出所有的真值函数。
如果取的是$\bot$,我们称它为NOR,以$\downarrow$代表它
|
事实上它就是
$\neg(A\vee B)$
然后读者自己画表验证,$A\vee B$逻辑上等价于$[(\neg A)\downarrow(\neg B)]$,然后因为刚刚说过"且"可以用"或"跟否定拼凑出来,所以NOR也可以生成所有真值函数。
我们在这里提供一个网站,可以根据你写出的合式公式计算真值表
https://www.erpelstolz.at/gateway/formular-uk-zentral.html