【數理邏輯三】命題邏輯及形式系統【上】

命題邏輯及形式系統 【上】

一、數理邏輯簡介

邏輯學是一門研究推理的科學、同時也是研究語義關係的科學。最早由古希臘學者亞里士多德創立。其中最具有代表性的就是亞里士多德的三段論學說。只要符合三段論的推理就是正確的。一個三段論就是一個包括有大前提、小前提和結論三個部分的論證。


① 凡是人都會死(大前提)
② 蘇格拉底是人(小前提)
③ 所以:蘇格拉底會死(結論)
在這一階段,邏輯學還是以自然語言來表述,但其中最大的問題就是自然語言的模糊性損害其準確和權威。直到邏輯學開始使用用數學的方法研究關於推理、證明等問題的時候,這門學科就叫做數理邏輯(也叫做符號邏輯

  • 數理邏輯的萌芽與發展

萊布尼茨(Leibniz)就曾經設想能不能創造一種“通用的科學語言”,可以把推理過程象數學一樣利用公式來進行計算,從而得出正確的結論。即利用計算的方法來代替人們思維中的邏輯推理過程。他的想法雖然在當時沒有實現。但是他的思想卻是現代數理邏輯部分內容的萌芽。是數理邏輯的先驅。

1847年,英國數學家布爾G.Boole發表了《邏輯的數學分析》,建立了“布爾代數”。他創造了一套符號系統,利用符號來表示
邏輯中的各種概念。還建立了一系列的運算法則,利用代數的方法研究邏輯問題,初步奠定了數理邏輯的基礎,

1884年,德國數學家關鍵性人物弗雷格Frege出版了《數論的基礎》一書,在書中引入量詞的符號,使得數理邏輯的符號系統更加完備。慢慢地現代數理邏輯最基本的理論基礎逐步形成,成爲一門獨立的學科。

  • 數理邏輯的主要內容 --- 四大分支
  1. 數學史上的第三次大危機是由於發現了集合論的邏輯悖論引起的。悖論的提出,促使許多數學家去研究集合論的無矛盾性問題,從而產生了數理邏輯的一個重要分支—公理集合論
  2. 爲了研究數學系統的無矛盾性問題,需要以數學理論體系的概念、命題、證明等作爲研究對象,研究數學系統的邏輯結構和證明的規律,這樣又產生了另一個分支—證明論
  3. 遞歸論主要研究可計算性的理論,它和計算機的發展和應用有密切的關係。它與 λ 演算與函數式編程等等都有關。
  4. 模型論主要是研究形式系統和數學模型之間的關係。

而這四大分支的共同基礎部分便是接下來將要介紹的命題演算謂詞演算
 

二、命題邏輯

【命題邏輯】,各種邏輯系統中最簡單、最基本的系統。學習邏輯需要將它看成是一門外語(人工語言)、和一門代數來學。

邏輯學其本質就是一門人工語言。語言本身沒有思想內容,如何使用全看語言的使用者。作爲語言,邏輯的描述對象是哲學命題、數學對象以及自然語言的某些語義現象;因此學習邏輯要學習詞彙、語法以及語義。

要隨時記得分清【元語言】和【對象語言】的區別:用命題邏輯語言描述自然語言時,前者是元語言、後者是對象語言;在描述命題邏輯語言時,大半使用自然語言,有時又要使用一些特殊的符號系統,這時自然語言和該符號系統又成了元語言,而命題邏輯語言則成了對象語言。

在學習命題邏輯時,我們應該明確以下幾點:

1. 命題邏輯和代數一樣,包含字母,各自代表命題和數;有各自的運算:析取、合取、蘊含、等價和否定,和加、減、乘、除和相反數操作(加負號)。
2. 命題邏輯和其它人工語言一樣,有嚴格的語法(這裏稱作句法)和語義解釋;
3. 命題邏輯中每個命題的“語義”由【真值】表示,而不是某個命題的具體意義。
4. 命題真值是一個由兩元素構成的集合:{T, F},其中T代表真,F代表假。

  • 基本概念

命題:對確定的對象作出判斷的陳述句。判斷一個語句是命題的幾個充要條件:陳述句、判斷、確定的對象。

真值:命題的固有屬性。不過,是否知道真值,能否知道真值是另一回事。

悖論:(自相矛盾)不能作爲命題。命題非真即假(注:這裏是形式邏輯情景下的非真即假,與現實世界不相關)。

反證法與排中律:  從一個命題非真即假推出。反證法的著名範例:歐幾里德證明素數有無窮多個。

直覺主義認爲反證法雖然對命題的反面推出矛盾,但不意味着命題本身具有構造性證明。對其表示質疑。
邏輯聯結詞(logical connectives):連接命題,對真值進行運算的詞,併產生了新的真值。

原子命題(atom proposition):不含有邏輯聯結詞的命題,命題邏輯中的最小單元。

複合命題(compound proposition):包含了原子命題和邏輯聯結詞的命題。

 

  • 如何將命題符號化

數理邏輯創立的初衷便是對邏輯和思維過程進行形式化、符號化,使之象算術那樣簡單明瞭,確切無誤。那麼怎麼將命題符號化、算術化呢 ?

  1. 形式化的第一步:抽象 (abstraction),僅關注命題的本質屬性:真值,而拋棄其豐富的內涵;僅關注邏輯聯結詞的本質屬性:對真值的運算,而拋棄多變的語言表達方式。
  2. 然後將命題和邏輯連接詞都變成符號,以規則相連接,真命題用t表示,假命題用f表示。原子命題一般用p, q, r, s或pi, qi, ri, si表示。邏輯聯結詞用特殊符號來表示: 並非(not):¬,並且(and):∧;或(or):∨;如果……那麼……(if ... then ...):→;當且僅當(if and only if):↔
  3. 對符號進行賦值語義,從而使得邏輯符號系統可以進行演算。命題的真值爲真(true)用1表示,爲假(false)用0表示。邏輯聯結詞真值表來定義。真值表列出了原子命題的真值組合(0、1),以及經過聯結詞作用後的真值。
  4. 符號體系對於數學乃至科學體系的發展至關重要。簡潔清晰的符號能使人的抽象思維效率飛躍。形式主義者甚至認爲,數學就是符號變換的遊戲。
     
  • 從初等代數的角度看命題邏輯

在最上面我們說到命題邏輯和代數結構具有很強的相似性,都自成一個形式邏輯系統。這裏我們再來討論一下代數的語義和命題邏輯的語義,以及它們之間的異同點。

例如,a = 5,表示用a代表5。那麼a代表的不是“5”這個單詞,而是這個單詞所代表的量。也就是說,“5”這個字符所代表的“語義”是5這個量(quantity)。
而命題邏輯,命題的語義就是T或F,所以,一個命題字母p所表示的不是這個命題的一串字符,也是該命題所代表的“語義”:T或F。
p = T,表示用p代表T。在命題邏輯系統中,T和F可以看做是相當於代數中的有理數。也就是說在代數中我們面對的是無限多數,而在命題邏輯中,一共只有兩個“數”:T,F。
因此,在我們所認識的數系中,除了有理數、實數和複數外,我們可以再加上一個:布爾數。和數系中其它數不同的是,布爾數“自成一家”,和實數、複數等沒有包容關係。將布爾數當做一個數系,通常不是數學家的習慣,而是計算機科學家的習慣。在計算機編程語言中,是用“數據類型”表示這種運算對象的不同:前者稱爲“浮點數”(如C語言),或“實數”(Pascal)數域是無限集合,而後者,稱爲布爾值,數域是隻有兩個成員的有限集合。

在上面我們討論了命題邏輯和初中代數的相似性和對應關係。通過上面的討論,我們應逐漸建立“系統”或者“結構的概念。也就是說,初中代數自成一個系統(所謂“自成一統”是謂也)或稱作“代數結構”;而我們現在研究的命題邏輯也自成一個系統,也有自己的“代數結構”。各個系統、結構的基本框架都相似:有一個基本的運算對象,代數中是所有的有理數{…-2,-1,0,1,2,…};命題邏輯就簡單了:只有兩個:{T, F},也就是真假值。所以從純形式的角度來看,命題邏輯和“命題”無關,只和這個系統的運算對象真值集合{T, F}有關。

除此之外,對這些運算對象定義了若干種運算,代數的基本運算是加、減、乘、除,當然後續課程還有冪、開方和對數的運算;而命題邏輯則包括取否、合取、析取、蘊含和等價5種運算。爲了展現運算的一般規律,代數和命題邏輯都引進了字母表示各自系統中的運算對象,例如,代數通常用拉丁字母表中開頭的小寫字母表示已知量,而用字母表結尾的字母表示未知量;而命題邏輯通常用p(英語“命題”的第一個字母)、q等代表真值。除此之外,兩個系統都是用括號表示運算順序。因此,我們對照代數再將命題邏輯中的種種概念再重新整理如下圖:

                                      命題邏輯系統和代數系統對照

對命題邏輯的整體輪廓有了大致印象後,我們就可以討論它的運算了。下面就讓我們開始每個具體的邏輯聯結詞的介紹。

 

  • 邏輯聯結詞(命題邏輯運算符)

在這些運算中,我們把【否定】看做是這些運算中的最基本運算之一,另一個,既可以是【合取】也可以是【析取】,但選一個就可以了。因爲他們就構成了一個聯結詞集的最小功能完備集,也成極小的功能完備集。比如 {¬,→}, {¬,∧}, {¬,∨}都是極小功
能完備集,即其他的聯結詞都可以通過最小功能完備集裏的邏輯聯結詞進行構造得到。

  • 下面先來看一下否定

(1)~T = F
(2)~F = T
可以看出,T和F像是代數裏的相反數:-(-1) = 1, -1 = -(+1)。
由於命題邏輯的“數”只有兩個,所以任何命題字母的運算結果都可以窮舉:
(3)
p ~p
---------
T F
F T
(3)的意思是說,如果p = T,那麼~p = F;如果p = F,那麼~p = T;也就說,一旦一個命題字母被賦予一個真值,那麼【否定】運算就會將這個真值“反轉”:由T變成F,由F變成T。很簡單,是吧!

  • 下面我們再來看一下【合取】。【合取】與除了【否定】之外的其它運算一樣是二值運算(binary operation),和代數中的加減乘除相同:

(4)
T ∧ T = T
T ∧ F = F
F ∧ T = F
F ∧ F = F
也就是說,只有兩個值都是T的情況下【合取】運算的結果纔是T,其餘皆是F。例如,你在大學4年,只有把所有必修課程全學完才能畢業。

如果我們用兩個命題變量p、q分別代表兩個真值,則它們的運算結果是:
(5)
p......q...........p ∧ q
----------------------------
T......T..............T
T......F..............F
F......T..............F
F......F..............F
可以看出,(5)的真值分佈其實和(4)一樣,只是(4)更像小學算術,只進行具體運算,而(5)則像代數,因爲我們用字母代表某個“量”。

  • 下面再來看【析取】。【析取】有兩種:一種是相容性【析取】,另一種是排他性【析取】,所以應當看做是兩種不同的運算。先來看相容性【析取】:

(6)
T ∨ T = T
T ∨ F = T
F ∨ T = T
F ∨ F = F

相容性【析取】的語義是:二值中至少有一個是T,結果就是T。例如大學中的選修課,數理邏輯和數論可選其一,但是不能一個都不選,但如你學習慾望旺盛都選也無妨。

而排他性【析取】的語義則是:二值中只能其中之一爲T,而不能二者同時爲T。這個語義代表了我們生活中的【決策】行爲:同時拿到清華和哈佛的錄取通知書,是去美國還是留中國?突然接到陌生人電話說我中了大獎,“領獎”是去還是不去?這些都屬於排他性【析取】。其真值表如下:
(7)
T ⊻ T = F
T ⊻ F = T
F ⊻ T = T
F ⊻ F = F

注意,排他性【析取】中當兩個值都是F時,其結果也是F;這是因爲在只有兩個選項的時候不可能什麼都不選,例如上面“領獎”的例子。

此外如果你真的理解了【合取】和【析取】,你就會知道在這樣的邏輯式中,只要我知道一個邏輯項的真值,就會馬上知道這個邏輯式的真值:
例如:兩個邏輯項
p = T
q = X (表示未知)
在【析取】式 p v q中,讀到p是T時,後面就不用再看了,整個式子就是T。這個技巧在式子變得複雜時尤爲有用:
p v(~p ^ q -> (p -> (~p v q)))
因爲p = T,所以後面括號裏的內容可以忽略就可知整個式子的值爲T。

在【合取】中正好相反:設
p = F
q = X (表示未知)
如果p的真值爲F,那麼整個式子的值就是F,理由和上面一樣。

不光人可以偷這樣的“懶”計算機解讀程序設計語言時,也是這樣“偷懶”。例如,設:
姓名 = “張三”,學號 = 12345

在驗證用戶登錄時,一般計算機程序會有這樣“一段話”:

if 姓名 = “李四”and 學號 = 12345 then 登錄通過
else 登錄沒通過,顯示錯誤信息

計算機解讀時,當讀到姓名時已知不是“李四”,這時計算機將忽略後面的“and 學號=12345”直接跳到“else 登錄沒通過,顯示錯誤信息”。

從上可以看出,命題邏輯的運算比代數簡單多了。最重要的是,慢慢訓練自己脫離自然語言的具體背景,能夠像代數那樣,在做“合併同類項”、“恆等變形”、“分解因式”等練習時,完全脫離這些代數式背後現實意義,只考慮它們的等量關係。這就需要練習和做題才能達到。

  • 蘊涵詞(implication)”如果…那麼…”(if…then…): →

其中【蘊含】的真值表:

p……q……p→q
……………………
T…….T.………T
T…….F.………F
F…….T.………T
F…….F.………T

【蘊含】非常像【析取】,獲得T值的條件非常“寬鬆”,只有當前面的邏輯項p=T,後面的邏輯項q=F時,整個式子才爲F,其餘皆爲T。蘊含包含的唯一邏輯爲,如果if 條件成立,則 then 結論必須成立。如果條件成立,結論不成立。整個蘊含式子才爲假。其他情況下都爲真。

和【析取】相比較,我們會發現兩個本質不同:
1. 【蘊含】不滿足交換律,p→q通常情況下並不等價於q→p,而【析取】則滿足交換律:p v q = q v p
所以,和【析取】不同,【蘊含】的兩個邏輯項“習慣上”分別稱作前件(antecedent)和後件(consequent),但二者作用完全不同:前件指的是條件,和後件是結論,就像除法中被除數和除數一樣,二者的意義是不同的:被除數是指一個量,而除數是指將被除數劃分的“個數”。
2. 【蘊含】式的真值,只和後件有關,和前件無關。【蘊含】又稱作【實質條件式】(material conditional),因爲只有後件在起“實質”作用。所以【蘊含】在語義上,又稱作“充分條件式”(sufficient condition),意思是說,前件的值爲T固然整個邏輯式的值亦爲真,但是前件的值爲F,也不會改變整個邏輯式的真值。

 

  • 現在來看【等價】又稱雙向蘊含

首先要注意的是【等價】並不相當於數學上的“等於”概念。如果混淆,會造成非常荒謬的錯誤。爲什麼?假如設p = T,q = T,那豈不是說p“等於”q。數學中如果兩個量相等,則可以有替換性:如果a=b,則當b+c=c+b,一定有a+c=c+a。在邏輯中,等價概念的內涵要大於“等於”,也就是說等價在某些情況下可以相當於等於有時卻不能,這取決於要討論的形式系統是什麼。

在一階命題邏輯中,等價相當於形式:(p→q)∧(q→p)

意思是,只有p和q的真值相同時等價的真值才能爲T,這裏就不給出真值表了。從推理(證明)的角度,如果要證明兩個命題等價,就要從兩個方向證明,首先證明“如果p則q”爲真;然後證明“如果q則p”。因此等價和蘊含不一樣,等價滿足交換律:(p⇄q) ⇄ (q⇄p)。

關於等價最後一點要注意的是,在邏輯運算中,等價相當於代數中等號的作用,在運算優先級上級別最低。

如果拿代數作比較的話,蘊含有些像除法運算,可以進行“消元運算”:(p→q)∧p → q;類似於 q/p × p = q;這樣,我們就可以將邏輯運算和代數運算作逐一的對比:

....代數運算.......邏輯運算
----------------------------
........+.................∨
........−.................−
........×.................∧
........÷.................→
........=.................⇄

當然有些人會認爲這樣的對比比較牽強附會,畢竟【蘊含】運算的優先級要小於【析取】和【合取】,而在代數中除法的運算優先級要高於加減法,等同於乘法。但是這裏的比較,會爲我們今後理解範疇語法有一定的幫助。比較沒有爭議的是,無論代數運算還是邏輯運算,都有各自獨立的運算對象、運算符號和運算規則,由不同運算對象、運算符號和運算規則組成的不同系統,如果抽出其各自的特異的性質,抽象地觀察它們共同的特徵,我們可以將它們統稱“代數結構”。換句話說,【代數結構】就像數學中的哲學,它只研究從各個研究對象抽取的共同特徵和一般規律。所以,一階命題語言從這種“數學哲學”的觀點來看,也是一種【代數結構】。

如果抽取出初等代數與一階命題邏輯的共同點,我們會發現:

1. 都有一個明確的運算對象集合;
2. 都精確定義了操作符的語義;
3. 都有一個明確的運算結果集合;

也就是說,內容雖不同,但都在一個框架(framework)之內。數學上,將這種框架稱之爲代數結構

前面內容中我們提到這六種運算其實只有否定、合取與析取是屬於真值函項式的,也就是說只有這三種運算的結果只依賴於運算符的語義和基本命題的真值(這裏可以參考數學中函數的定義進行理解)。在懷特海和羅素的不朽鉅著《Principia Mathematica》中,只定義了析取和否定(作爲基本公理),剩下的運算可通過運算規則派生得到。例如:
1. 合取:p ∧ q ==> ~(~p∨~q)
2. 蘊含:p → q ==> ~p∨q
3. 等價:p ⇄ q ==> (p → q) ∧ (q → p)
4. 排他析取:p ⊻ q ==> ~(p ⇄ q)
其中,==> 表示“由…派生”。不過,這些運算只有否定是“最”基本的,剩下的以“合取”、“析取”或“蘊含”任何一個作爲基本運算都可以派生出其他運算,例如,上世紀60年代著名邏輯學家Montague在其與他人合著的著作《Logic: Techniques of Formal Reasoning》中,就將“蘊含”和“否定”作爲基本運算。因爲它們所構成的是一個最小邏輯完備組。

 

  • 命題公式與真值函數 => 分別對應句法規則和語義規則

有了邏輯聯結詞之後,我們就可以使用聯結詞將原子命題進行符號組合構成複合命題,像一個算式一樣。那麼其邏輯符號組合的規則就是句法結構或規則。其邏輯符號組合後的算式句子或公式所具有的意義,就是由語義規則所決定的。

前面我們曾提到過邏輯的本質是語言,可人工定義的形式語言。如果從語言學的角度看命題邏輯,我們會發現以下規律:
1. 諸如像p、q等命題字母可以看做是名詞;
2. 析取、合取等運算符可看做是動詞;
3. 由這些“名詞”、“動詞”構成的表達式可以看成是“句子”。
4. 由“句子”得到的真值可以看做是句子的語義。
同時我們還知道p、q這些“名詞”其實代表某個命題,這個命題既可以是自然語言的某個句子,如“地球比太陽小”,也可以是數學中某個式子,如“2+2=4”;這個時候,我們用命題邏輯語言描述自然語言或數學語言,前者是“元語言”,而後者是“對象語言”。但既然命題邏輯語言本身也有“句子”,例如
(~(~p∨q) ∧ (p → r)) → (r → p)
是不是也可以用一個符號代表這個“句子”呢?如果這個符號上述代表一個句子,是否我們又走向進一步的抽象,將命題邏輯語言看做是“對象語言”而用另一種更抽象的語言作爲研究的“元語言”呢?其實,確實存在着這樣的符號和語言,例如,我們可以用希臘字母表示命題邏輯語言的“句子”,而進一步研究這些“句子”之間的關係,但實際上,這個“元語言”和命題邏輯語言本質上是相似的,爲了不使問題複雜化,我們只利用前一個選擇:使用希臘字母表示命題邏輯語言的“句子”,但不再深入探討命題邏輯語言的“元語言”問題。這樣,我們用Φ(讀作“fai”)Ψ(讀作“sai”或“psai”)分別表示上面表達式中→兩側的句子:
Φ= (~(~p∨q) ∧ (p → r))
Ψ= (r → p)
這樣上面的表達式就可以寫成:
Φ→Ψ
再說一遍,用希臘字母的目的是爲了區分命題邏輯語言的“句子”和p、q、r等原子命題,稱呼上,我們將前者稱爲“句子”或者“公式”,而後者則仍然稱爲“原子命題”或運算項;

爲什麼將前者又分成“句子”和“公式”呢?這是因爲Φ或Ψ所代表的都是複合表達式,如果表達式中所有“原子命題”的真值都已確定,我們直接可以確定Φ或Ψ的真值,那末Φ或Ψ就稱作是“句子”;但如果像代數一樣含有未知數,那末Φ或Ψ只能稱作“公式”(formula)。不過有些教科書不做這樣的區分,“句子”和“公式”是混用的。

 

命題公式的組成成分

  • 命題常元(proposition constants):表示具體命題及表示常命題的p, q, r, s 等和t,f
  • 命題變元(proposition variables):以“真,假”或者“1,0”爲取值範圍的變量,仍用p, q, r, s等表示
  • 命題公式(proposition formula):由命題常元、變元和聯結詞組成的形式更爲複雜的命題
     

命題公式的定義(歸納定義)

它其實是屬於句法結構的一部分,後面還會詳細地說明。

① 命題常元和命題變元是命題公式,特別的稱作原子公式或原子
② 如果A,B是命題公式,那麼(¬A), (A∧B), (A∨B), (A→B), (A↔B)也是命題公式
③ 只有有限步引用上述兩條所組成的符號串是命題公式

命題公式簡稱做公式,採用大寫A,B,C等表示,或者上述所提到的希臘字母 Φ或Ψ 。符號系統前後保持一致就可以了。

命題公式的這種定義方法稱作歸納定義,在集合論中將會詳細討論歸納定義。
 

邏輯聯結詞優先級


聯結詞{¬,∧,∨,→,↔}中, ¬是一元聯結詞,其它都是連接兩個命題的二元聯結詞。我們定義優先級爲:¬, [∧∨], →, ↔ 。除非有括號,否則按照優先級從高到低, 從左到右的次序結合。例如: ¬p∨q 等同於 ((¬p)∨q); p→q∧r→s 並不是 ((p→q)∧(r→s)),其實是 ((p→(q∧r))→s)

命題公式的意義,命題公式是一個按照歸納定義構成的字符串,其形式上具有既定的規則。那麼其內容上具有什麼意義呢?

 

真值函數

如果將聯結詞看作邏輯運算符,那麼包含命題變元p1, p2, …pn的公式 A 可以看作是關於p1, p2, …pn的一個真值函數(類比數學函數),每個變元的取值範圍是{0, 1},真值函數值的取值範圍也是{0, 1}。

對任意給定的p1, p2, …pn的一種取值 狀 況 組 合 , 稱 爲 指 派 或 者 賦 值(assignments)。賦值用希臘字母α, β等表示。對於每個賦值,公式A均有一個確定的真值。這樣,命題公式在形式上是一個規則的字符串,內容上則對應一個真值函數。

例如:x是圓的;這個公式的真值取決於x是什麼。如果x=太陽,命題函數的值就是T,如果x=身份證,命題函數假;不過,在命題邏輯語言中我們不涉及原子命題內部的成分(謂詞邏輯會涉及一部分),我們這裏所說的命題函數更像“我和小張昨晚都在我家”。我在我家當然爲真了。

但小張在我家未必爲真所以可看做是變量:設p=昨晚我在我家;設q=昨晚小張在我家;
p ∧q爲真只取決於q的值,所以,可以將看做是命題函數 f(x) = p ∧ x;如果x = q 則 f(q) = p ∧ x = T。那麼f(~p) = p ∧ x = F

 

  • 深入解析一階命題邏輯的句法和語義

一個命題邏輯的語言,由三個部分組成:

詞彙表(vocabulary):詞彙表中有三種詞類


1. 命題字母:代表原子命題。命題字母以及所代表的具體命題可自由選擇,從而形成不同的命題邏輯語言。
例如,原子命題可以代表數學某一分支的一個定義、定理,不同的數學分支所包含的原子命題的內容、範圍是不同的。原子命題還可以是自然語言的一部分句子,一般是符合命題邏輯規範的句子。計算機程序語言中的語句也可以是原子命題。
原子命題通常用小寫拉丁字母表示。
2. 邏輯連接符(connective),又稱邏輯常項(logical constant)
這些,我們現在應當很熟悉了,就是用符號表示的否定、合取、析取、蘊含和等價。
3. 輔助符號:括號:(),用來表示運算優先順序。

句法規則(syntax):原子命題和邏輯連接符、輔助符號搭配可以形成更大的語言單位,通常叫做句子或公式(sentence or formula),而生成這些更大語言單位的“機器”,就是句法規則。
在符號邏輯中,原子命題和句法生成的更大語言單位,統稱爲:表達式(expression),換句話說,表達式既可以是原子命題也可以是更大的語言單位。

和自然語言的句法規則不同,命題邏輯的句法規則是以歸納性的(inductive)的方法“定義”出來的。也就是說,從已知的表達式出發,利用連接符和輔助符號、以蘊含推理的方法生成新的表達式。基本思路和我們在高中所學的“數學歸納法”完全一樣。(如果你的數學歸納法知識生鏽了,可以參看華羅庚的小冊子《數學歸納法》
對於命題邏輯語言句法的形式定義我們將在下面給出。

語義解釋(semantics):對於所有的“良形的”表達式(well-formed expression),命題邏輯必須要給出相應的真值,這個過程又稱作“語義解釋”。
和句法規則一樣,語義解釋也有相應的規則,這個規則就是我們在第一章談到的弗雷格的“語義組合性原則”(compositionality)。它的基本精神和句法規則一致:複合表達式的語義是組合成分語義的函數。說的通俗一點就是:一個由各種連接符連接起來的表達式的真值,取決於各個成分表達式的真值。這個和算術的四則運算一樣:一個複雜運算式子的最後結果取決於出現在式子中的數值、運算符號和運算優先順序。
那麼原子命題的真值/語義解釋如何確定呢?這個問題在命題邏輯中無解。因爲這取決於原子命題的應用範圍,例如上面給出了在數學、自然語言和計算機語言的例子,在不同範圍領域,原子命題的內容和真值是不同的,命題邏輯無從知道這些原子命題來自何方,因而,在命題邏輯語言的範圍內,原子命題的真值是“任意”的。不過,在建立命題邏輯的語義解釋時,必須假定所有原子命題都已經被賦予了確定的真值,這是前提條件。

語義解釋是建立命題邏輯的最終目的,因爲作爲邏輯學的終極任務--論證(argument),從前提達到結論,靠的就是每一個前提表達式的真值(語義解釋)。有了所有前提的真值,就自然可以得到結論(邏輯歸結)的真值,從而獲得論證的有效性。

下面我們將給出命題邏輯語言的句法、語義的形式定義和其背後的哲學方法

一、命題邏輯語言的句法:


這部分有三個內容:

  1. 句法的形式定義;
  2. 形式定義的說明;
  3. 句法形式定義背後的方法。


定義
設:存在一個命題邏輯語言,用大寫字母L表示;
(i) 所有的命題字母都是良形的句子;(well-formed sentence)
(ii) 如果𝜓是良形句子,那麼¬𝜓也是良形句子;
(iii) 如果𝜙和𝜓是良形句子,那麼(𝜙 v 𝜓)、(𝜙 ^ 𝜓)、(𝜙 → 𝜓)、(𝜙 ↔ 𝜓)也是良形句子。
(iv) 當且當由(i)-(iii)規則在有限的步驟內所生成的句子纔是良形句子。

說明
現在拿這個定義看幾個例子:
(1) p  ; p是命題字母;根據定義1,p是良形句子;
(2) ¬¬¬¬p ;  p是良形的(定義(i));  ¬p是良形的(定義(ii)); ¬¬p是良形的(定義(ii));¬¬¬p是良形的(定義(ii));
                                                            ;¬¬¬¬p是良形的(定義(ii));
(3) ((¬p ^ q) ^ r) ;         p和q是良形的(定義(i)); (¬p ^ q)是良形的(定義(ii)、定義(iii));整個表達式是良形的(定義(iii))
(4) ((¬(p v q) → ¬¬¬q) ↔ r) ;   整個表達式是良形的(定義(i)、定義(ii)、定義(iii)反覆運用)
(5) pq  ;                                        整個表達式是病形的(ill-formed)(定義(iv))
(6) ¬(¬¬p) ;                               整個表達式是病形的(說明後述)
(7) ^ p¬q ;                                  整個表達式是病形的(ill-formed)(定義(iv))
(8) ¬((p → q v r)) ;                       整個表達式是病形的(說明後述)
 

上面的例子(1)-(4)是良形的,而(5)-(8)是病形的;這裏除了(6)和(8),其它都可以直觀的從定義直接導出。而(6),從我們直觀來看應當也是良形的,只是三個否定運算順序不同,畢竟,-(--4) = -4,完全合法。但是如果我們拿着定義一條條對照,就會發現,沒有任何規則允許單純的否定式可以帶括號。爲什麼它是病形的呢 ?

首先,我們一開始就提到,命題邏輯語言並不是一個,而是可以有多個。從命題字母到句法規則、語義解釋,都可以根據需要按照命題邏輯的基本框架任意定義。我們上面這個定義在某種意義上也是“任意”定義的。如果你不喜歡,你完全可以定義自己的命題邏輯語言句法說(5)-(8)是非法的,只是說根據我們目前的定義它們是非法的(病形的)。

例(8)是病形的是因爲它違反了定義(iii):所有由二元連接符構成的表達式兩側必須有且只有一對括號,而p → q只有左括號而沒有右括號,而否定符號後面的表達式兩側有兩對括號。

句法樹(construction tree)
複合表達式,可以表示成一個倒立的樹:

                                句法樹

每一個句子都會對應一個唯一的句法樹,這是因爲在我們這裏排除了連接符的“天然”運算優先級,“衆生平等”,然後只由括號來決定運算順序,使得任何良形表達式都不會產生“歧義”,因此相應的句法樹是唯一的。樹中每一個節點上決定當前表達式真值的連接符稱作“主連接符”(main sign),例如最高節點上的主連接符即等價連接符。樹中每個節點都有一個部分表達式,這些表達式稱作“子句”(subformula)。在每層節點右側都標有從簡單表達式生成更大表達式所適用的規則,這種表記法其實是邏輯證明所使用的方法:從最簡單的已知條件出發,通過對規則的多次運用,得到更大、更復雜的表達式,直至生成所有子句達到句子的最大“主連接符”。

句法定義所使用的方法

或許有朋友可能會對定義(iv)產生疑問,既然定義(i)-(iii)已經定義了產生規則,定義(iv)有必要嗎?
這裏面有兩個問題:第一,學過普通邏輯的朋友都知道,歸納定義往往是不完全的,不能對事物的本質做完全的概括,而是經驗主義。只要對歸納概括的定義能提出“反例”那麼這個定義就會失敗。也就是說,如果外延的實例超出了定義的範圍,這個定義真值就會由真成假。而定義(iv)就是爲了防止這種情況出現,亦即,良形表達式的定義不允許外延,只能是在(i)-(iii)範圍內。
第二,這種方法實際使用了“循環定義”(circular definition),也就是說用被定義的對象定義被定義對象。例如,同義反復是典型的循環定義:什麼是兔子?兔子就是兔子。在這樣的定義當中被定義的對象是由其本身定義,這種定義在一般情況下是要避免的。另一種循環定義兩個對象相互定義,例如:什麼是“意義”?“意義”就是內容;什麼是“內容”?“內容”就是意義。這種循環定義在有些情況下還是有用的:例如知道二對象之一而不是二者都知道,比同義反復要“好些”。
第三種循環定義就是本書中所使用的定義:例如否定句的定義:
什麼是¬p?¬p就是p前綴¬:等於是拿p定義¬p。也就是說定義兩端都出現了p。但是和第一、第二種情況不同的是,定義左側的句子比右側的句子更復雜,例如本例:左側句子有否定而右側句子沒有。這種有“附加價值”的循環定義其實是邏輯、數學甚至人類認知過程必不可少的過程。我們學習新知識的過程往往是通過既有的舊知識加上一些新概念進行的。就像滾雪球一樣,通過在既有知識的基礎上逐漸增加新的知識使我們的知識範圍擴大。但是如果沒有定義(iv),這個推廣就成了無限的了。例如我可以隨便再加上一個規則:如果φ是句子,那麼)φ(也是句子(如果沒有(iv)誰說不可以?)

換一種說法,如果沒有定義(iv),那我們只能說,定義(i)-(iii)定義了良形句子成立的充分條件,而不是必要條件。即如果表達式符合定義(i)-(iii),句子是良形的,但是表達式如果不符合定義(i)-(iii),沒有任何保證句子是否良形。

這第三種循環定義法,其基本形式就是:被定義概念:同一概念+新屬性;從命題邏輯的句法角度看就是:
被定義的表達式=原表達式+新屬性;
而右側的原表達式必須具有和被定義表達式相同的屬性,但右側句子結構必須比左側句子簡單:亦即
複雜表達式 = 簡單表達式+新屬性;

這種根據句子複雜度、或長度的循環定義有時稱作:基於句子複雜度(或長度)的歸納法:proof by induction on the complexity/length of formula。

這種定義方法也是非常有用的證明法

 

二、命題邏輯語言的語義

命題邏輯的語義解釋就是對錶達式的的真值賦值過程

函數再認識:在介紹正題之前,首先要重新認識函數的概念。函數在符號邏輯學中是十分重要的概念。不過,邏輯學中的函數概念,已經不再侷限於數的範圍,爲了在邏輯中使用函數,首先必須將函數的概念擴大。

在中學和大學低年級階段,函數主要是研究數量之間的依賴關係,從而形成了自變量和因變量的概念。由變量之間的對應關係形成了定義域和值域之間映射關係。如果擴展數的概念,亦即,所謂的自變量和因變量不再侷限於數,那就可以在某種程度上揭示世界各種對象之間的相互關係。

                              

當然,並不是所有的關係都是函數關係,例如“x的弟弟”,就可能不是函數關係,因爲並非所有人都有弟弟。例如“x的父母”,也不是函數關係,因爲x所對應的不是一個人而是兩個人,而函數定義則規定函數值只能是單一值。

還有一些函數要求定義域不止一個,也就是說,自變量的數量大於一。如下:

                            

從上面可以看出,函數保留了其最基本的特徵:給定定義域和值域集合,函數就是定義在這兩類集合之間的映射關係。寫成式子:
設A是定義域,B是值域,則函數f可定義爲
f: A → B,讀作:f是從A到B的函數;或:f映射A到B。
從邏輯學的角度看函數有一點需要注意的是,定義域和值域是非對稱的,亦即,定義域中每個對象必須在值域有對應物,而值域中的對象未必在定義域有對應物。例如:x的母親,其值域是“女性”,但在這個值域中,有許多對象並非是任何人的母親。不過,邏輯學中使用的函數,不但容許值域大於定義域而且認爲大值域更可取。
如果值域的對象和定義域的對象一一對應,那就稱作f是從A到B的“滿射”。例如上例中的性別函數關係,人與性別的關係就是滿射函數的關係。而加法函數關係也是滿射。

在函數中,自變量又稱作參數(argument,不要和論證混淆),參數在函數映射關係中的排列順序至關重要,不同的參數排列,會得到值域中不同的值。

命題邏輯語言的語義解釋

有了擴展的函數概念,我們就可以定義命題邏輯句子的語義了。所謂命題邏輯句子的語義,無非就是我們前面在真值表中看到的邏輯運算,用函數的概念再重新形式化定義一番而已。
首先,我們將某個命題邏輯語言中的所有句子的集合看做是定義域,而將真假值看做是值域。這個頗像上面的性別函數。爲了方面,我們設真值爲“真”時其值爲1,設真值爲假時其值爲0.這樣,我們就有了這樣一個函數:
設函數爲V,V:{所有該命題邏輯語言的表達式} → {0, 1}
通常,我們稱函數V作“賦值函數”(valuation)。
例如:表達式¬𝜙 的真值,當且當𝜙等於0時,等於1。如果我們用函數來表示,則是:
V(¬𝜙 ) = 1 當且當 V(𝜙 ) = 0
其中,“當且當”可以用“iff”表示

有了賦值函數的概念,定義命題邏輯句子的語義則非常簡單了:
(i) V(¬𝜙) = 0 iff V(𝜙) = 1
(ii) V(𝜙 ∧ 𝜓) = 1 iff V(𝜙) = 1 且 V(𝜓) = 1
(iii)V(𝜙 ∨ 𝜓) = 1 iff V(𝜙) = 1 或 V(𝜓) = 1
(iv) V(𝜙 → 𝜓) = 0 iff V(𝜙) = 1 且 V(𝜓) = 0
(v) V(𝜙 ↔ 𝜓) = 1 iff V(𝜙) = V(𝜓)

這樣,所有的命題邏輯句子都可以通過賦值函數得到相應的真值。

有朋友可能會問既然已經有了真值表,爲什麼還需要這個賦值函數呢 ?

 這個其實就像我們在中學學函數概念一樣,當時我們就知道函數有多種表達法:圖表法、公式法,圖像法、映射法、座標法等。
如果說真值表相當於圖表法的話,那麼,賦值函數則是更加常用的公式法。

  • 自然語言句子的形式化
     

由自然語言表述的命題,經過抽象,可以形式化爲命題公式
〉 首先確定原子命題
〉 其次確定聯結詞
〉 最後處理命題之間的聯結關係及順序
 

例如:如果他不來那麼是生病了或者不在本地(p:他來,q:他生病,r:他在本地)。形式化命題爲:¬p→(q∨¬r)

無論是否下雨,我都去上學(p:天下雨,q:我去上學); 形式化命題:(p→q)∧(¬p→q)  或者:(p∧q)∨(¬p∧q)  或者:q
 

注意事項:要善於確定原子命題,如兄弟這個概念就無需進一步拆分;要善於識別自然語言中的聯結詞;

對於涉及多個對象進行否定的否定詞位置要準確;不能省略必要的括號,另外,爲了提高公式的可讀性,要保留一些括號;

有時候語句的形式化結果不是唯一的,可能具有不同形式,但是邏輯上是等價的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章