##EasyReadMore##

4.14.2013

述詞邏輯的語法

我們學英文這門語言時,首先會學這個英文有哪些符號(a, b, c, ...),然後學單字(apple, water, ...),再學怎麼組成合文法的句子。

述詞邏輯也是一門語言,所以我們先學這個語言有哪些符號,然後學term,再學well-formed formula(合文法的句式,有人翻成完構式,簡稱wff)長什麼樣。

符號
邏輯符號(所有述詞邏輯的語言都會有這些符號,而且這些符號的詮釋是規定好的,不開放任意詮釋)
  • 變元(variable):v1,v2, (有時會用x,y,z,u,v之類的)
  • 連接詞(connective):¬,,,,
    ¬的其他寫法:~
    的其他寫法:·
    的其他寫法:
    的其他寫法:
  • 量限詞(quantifier):,(有些人認為量限詞是非邏輯符號才對)
  • 等號:=(有些人認為等號是非邏輯符號才對)
  • 括號,或叫分段符號:(, ), [, ], {, } 
非邏輯符號(不是所有述詞邏輯的語言都會有這些符號)
  • 常元(constant):a,b,c,,c1,c2, (長相不固定,如果有某個述詞邏輯的語言就是要拿「這個是放在,荷花的左邊」當常元,我們也沒辦法)
  • 述詞(predicate):A,B,C,,P1,P2,,,<,(長相不固定)
  • 函數(function):f,g,h,,f1,f2,,+,,×,÷,(長相不固定)
在以上這些符號之外的東西,就不是述詞邏輯這門語言的符號了。

Term
  1. 所有變元和常元都是term。
  2. 如果f是一個n元函數,那麼把f的參數位置都用term填滿後得到的東西,也是term。
  3. 以上兩點之外的東西都不是term。
所以,如果語言Lc這個常元和g這個二元函數,那麼下列都是這個語言的term:
  • g(x,c)
  • g(g(x,c),c)
  • g(g(x,c),g(y,c))
  • g(g(g(x,y),c),g(c,z))
下列這些都不是這個語言的term:
  • g(c,x,c)L裡沒有三元的函數g
  • g(a,c)L裡沒有符號a
  • g(c)L裡沒有一元的函數g
  • cc
Well-formed formula
  1. 如果P是一個n元述詞,那麼把P的參數位置都用term填滿後得到的東西,就是wff。這種wff有個特定的名字叫atomic formula(原子句式),是最簡單的wff。
  2. 如果α,β都是wff,v是隨便哪個變元,那麼下列這些也都是wff:(¬α), (αβ), (αβ), (αβ), (αβ), (vα), (vα)。(有時會適度省略一些括號)
  3. 以上兩點以外的東西都不是wff。
所以,如果語言Lc這個常數,和g這個二元函數,和Q這個二元述詞,那麼下列都是這個語言的wff:
  1. Q(c,c)
  2. Q(x,y)
  3. Q(c,z)
  4. Q(x,y)Q(x,y)
  5. zQ(x,y)
  6. xy[zQ(x,y)¬Q(x,y)]
我們會把裡面沒有出現自由(free)變元的formula稱為sentence。上列六個formula中,只有第一個和第六個是sentence。

下列都不是這個語言的wff:

  • Q(c,c)=Q(c,c)(等號是述詞,述詞的參數位置要放term,不是放formula)
  • Q(Q(x,y),c)Q是述詞,述詞的參數位置要放term,不是放formula)
  • Q(c)L裡沒有一元的述詞Q
  • Q(x,y)
  • Q(x,y)z

述詞邏輯的語意

有了L這個語言的structure,先把這個structure叫M好了,我們就可以判斷這個語言中沒有自由變元(free variable)的語句(sentence),在M裡是真的還是假的。

L這個有a,b,P,Q,f,g這些非邏輯符號的語言為例,其中a,b是常數,P是一元述詞,Q是二元述詞,f是一元函數,g是二元函數。我們設計一個L的structure A如下:
U={0,1,2}
aA=0
bA=1
PA={0,2}
QA={(0,1),(1,2),(2,1)}
fA={(0,2),(1,2),(2,0)}
——意思是,fA(0)=2,fA(1)=2,fA(2)=0
gA={(0,0,0),(0,1,1),(0,2,2),(1,0,1),(1,1,1),(1,2,1), (2,0,1),(2,1,0),(2,2,1)}
—— 意思是,gA(0,0)=0,gA(0,1)=1,gA(0,2)=2,
原子語句(atomic sentence)的真假值
A這個structure裡,P(a)是真的還是假的?我們先看aA指到什麼東西,再看看aA指到的東西是不是在P的詮釋裡。在裡面,那麼P(a)是真的;不在裡面,那麼P(a)就是假的。aA指到0,而且0PA,所以P(a)A裡是真的。P(a)A裡是真的,通常會記為AP(a)AP(a)

P(b)因為1PA,便是假的。P(b)A中為假,則記為AP(b)AP(b)Q(a,b)是真的,記為AQ(a,b),因為(0,1)QAAQ(a,a),因為(0,0)QA

至於P(f(a))在A裡的真假值,就把aA指到的東西輸進fA裡,看輸出的東西是不是在PA裡。aA指到00輸入fA會輸出2(因為(0,2)fA,其中0是輸入,2是輸出),而2PA,所以AP(f(a))。而AP(g(b,a)),因為往gA的第一個參數位置輸入1,第二個位置輸入0後,輸出的1不在PA裡。

有連接詞的語句的真假值
和語句邏輯的計算方式差不多。例如
  • AP(g(b,a)),所以A¬P(g(b,a))AP(a),故A¬P(a)
  • P(a)P(g(b,a))只會在P(a)P(g(b,a))都為真的情況下為真,所以AP(a)P(g(b,a))
有量限詞(quantifier)的句子的真假值
xP(x)的意思是,所有domain裡的東西都有P這個性質。目前U={0,1,2},也就是說,xP(x)的意思是0PA而且1PA而且2PA。因為1PA,所以AxP(x)

xP(x)的意思是,至少有一個domain裡的東西有P這個性質。也就是說,xP(x)的意思是0PA或者1PA或者2PA。所以AxP(x)

xyQ(x,y)的意思是,所有domain裡的東西,都和domain裡至少一個東西有Q這個關係。要講得具體一點以幫助理解的話,我們可以先把Q視為某個二元關係,例如x喜歡y(這不代表Q這個述詞就是x喜歡y的意思,Q就只是某個述詞符號,QA僅僅是某個由二元序列構成的集合。就像國小或幼稚園老師教1+1=2的時候,把「1這個自然數,填進+這個函數的兩個參數位置後,就會輸出2」生動地講成,一個蘋果和另一個蘋果放在一起就是兩個蘋果那樣。雖然1+1=2和蘋果半毛關係也沒有,但這樣舉例子比較容易理解),那麼xyQ(x,y)的意思便是,每個東西都至少喜歡一個東西。

不過句子太複雜或太長的話,我們可能沒辦法用舉實例的方式,理解句子的意思。不過還有別的辦法。也可以這樣理解xyQ(x,y)xyQ(x,y)是指所有domain裡的東西都滿足yQ(x,y),也就是
yQ(x,y)[0x]而且yQ(x,y)[1x]而且yQ(x,y)[2x]
yQ(x,y)[0x]的意思是yQ(x,y)中的x會指到domain裡的0。我們不能直接寫yQ(0,y)是由於,0不是term,所以yQ(0,y)不是合文法的字串。(私底下想把yQ(x,y)[0x]腦補成yQ(0,y)是沒問題,但別在正式場合這麼做)

yQ(x,y)[0x]可以理解成,至少有一個domain裡的東西會滿足Q(x,y)[0x],也就是,
Q(x,y)[0x,0y]或者Q(x,y)[0x,1y]或者Q(x,y)[0x,2y]
所以,yQ(x,y)[0x]而且yQ(x,y)[1x]而且yQ(x,y)[2x]的意思就會是:
Q(x,y)[0x,0y]或者Q(x,y)[0x,1y]或者Q(x,y)[0x,2y]】而且
Q(x,y)[1x,0y]或者Q(x,y)[1x,1y]或者Q(x,y)[1x,2y]】而且
Q(x,y)[2x,0y]或者Q(x,y)[2x,1y]或者Q(x,y)[2x,2y]】。
也就是
0喜歡0,或者0喜歡1,或者0喜歡2】而且
1喜歡0,或者1喜歡1,或者1喜歡2】而且
2喜歡0,或者2喜歡1,或者2喜歡2
因為domain裡的每個東西的確都喜歡至少一個東西,所以AxyQ(x,y)

有自由變元的句式(formula)的真假值
有自由變元的句式,基本上沒辦法判斷真假值。試想以下幾個句式:
  • 1=1
  • 2=1
  • x=1
第一個句式顯然是真的,第二個顯然是假的,但第三個就難辦了,因為我們不知道x到底是指哪個數,所以無從判斷x是不是等於1

既然問題的根源在於,不知道x到底是指什麼,那麼就發派一個東西給x去指不就得了。負責這項指派業務的玩意兒,就是一元的assignment function(我不知道這個東西有沒有固定的中文譯名,如果硬要翻的話,就叫指派函數好了)。這個函數和邏輯語言裡那個非邏輯符號的函數的詮釋不一樣。Assignment function的定義域是所有變數的集合(而不是structure的domain,和對非邏輯符號的函數的詮釋不一樣),值域是structure的domain裡的某一個東西。也就是,只要我們輸入某個變數給assignment function,問它這個變數是指啥,它就會輸出一個structure的domain裡的東西,回答我們此變數是指structure的domain裡的這個東西。

問不同的assignment function同一個問題,可能會得到不同的答案。例如h1(x)=1h2(x)=2之類的。這時在h1這個assignment function的指派之下,P(x)A中為假,因為1PA,記為AP(x)[h1],而在h2的的指派之下,P(x)A中為真,因為2PA,記為AP(x)[h2]

有時我們會看到一些長相比較奇特的assignment function,例如h1xh1x是指,我們已經有一個assignment function h,而h1x是個這樣的函數:輸入x會輸出1,輸入x以外的變數會輸出和h一樣的東西;也就是
h1x(v)=1    , if v=x,v是variable的意思)
h1x(v)=h(v), if vx
依此類推,
h1x2y(v)=1    , if v=x,
h1x2y(v)=2    , if v=y,
h1x2y(v)=h(v), if vx and vy

重要概念
  1. 某個structure M讓某個句子φ為真的話,我們就會就說M這個structure是φ模型(model)。(不過structure和mode這兩個字常混用就是了)
  2. 某個語言L中的句子φ可滿足的(satisfiable),若且唯若,至少有一個L的structure,和一個該structure的assignment function(如果φ裡有自由變元的話會用上,沒有的話,assignment function就只是來插花的)會讓φ為真。
  3. 某個語言L中的句子φ邏輯真理(logical truth),記為φ,若且唯若,所有L的structure,和所有該structure的assignment function都會讓φ為真。
    也就是,任選一個L的structur和它的隨便那個assignment function,φ在裡面都會是真的。
  4. 某個語言L中的語句集合Γ蘊含(imply)該語言的某個句子φ,記為Γφ,若且唯若,所有會讓Γ裡全部句子都為真的L的structure,和所有該structure的assignment function,也都會讓φ為真。
    也就是,Γ裡全部句子都為真的時候,φ也會為真。
第3點,是第4點中的Γ取為空集合而產生的特例。

4.13.2013

述詞邏輯的structure

語句邏輯的句子是用真值表來判斷真假值,述詞邏輯的句子則是用structure來判斷。Structure是由domain和對非邏輯符號的詮釋(interpretation)構成的;至於要詮譯哪些非邏輯符號,就看語言中的非邏輯符號有哪些,詮釋那些就可以了。

以某個有c1,c2,P1,P2,f1,f2這些非邏輯符號的語言為例,其中c1,c2是常數,P1是一元述詞,P2是二元述詞,f1是一元函數,f2是二元函數此處符號的下標和述詞及函數是幾元一模一樣只是偶然),這個語言的structure大致會長成這樣:M=(U,c1M,c2M,P1M,P2M,f1M,f2M)以下一一介紹這些符號的意思。

Structure的名字
M=(U,c1M,c2M,P1M,P2M,f1M,f2M)中的M和上標的M顯示了這個structure的名字是M,意思是model。取名時通常會用大寫英文字母,有時會用特殊字形呈現,以示區隔,例如M的花體字是M

Domain
U指structure的domain,U是universe的意思。有些人不會寫U來表示domain,而是寫D,或dom(M),或|M|(最後兩個寫法和structure的名字有關。不過|M|這個寫法可能會讓人誤以為你想談的是M的domain的基數(cardinality),也就是domain裡有幾個東西)。或者structure的名字用特殊字形,然後domain就用一般字形呈現,例如A這個structure的domain就用A表示

當我們在說structure的大小、structure有多大時,我們指的是它的domain的基數。

Domain是一個集合,而且不能是空集合。我們可以把structure理解成是某個世界,domain則決定了這個世界上有哪些東西。你可以依自己喜好往domain這個集合裡加進任何東西,例如數字、英文字、中文字、人、幾何圖案;加無限個東西進去也行,例如讓domain是所有實數的集合。以下是一些domain這個集合可能的長相:
  • {0,1,2} 
  • {0,,@,a, Doctor House, 嗨!, 飛天麵條神}
不過為了書寫方便起見,通常只會放數字或英文字。我們暫定M的domain是{0,1,2}

常數的詮釋
c1M是指,c1這個常數在M裡的詮釋。c1MU,也就是,c1M會等於domain裡的某一個成員。我們可以把常數理解成domain裡某個東西的名字;一個東西可以有很多個常數當作名字,就像一個人可以有很多個綽號類似;但一個常數不能指到一個以上的東西,因為重名的話,我們就不知道那到底是在叫誰了。以下是一些c1,c2這兩個常數在M中可能的詮釋:
  • c1M=0,c2M=1
  • c1M=0,c2M=0
述詞的詮釋
P1M是指,P1這個述詞在M裡的詮釋。我們對述詞的詮釋是外延(extension)式的。如果P是一個n元述詞,那麼PMUnPM也是一個集合,而和domain不同的是,述詞的詮釋可以是空集合。

UnU××Un次的意思。A×B是一個由二元序列(tuple)構成的集合,序列中的第一個東西來自A,第二個來自B,把所有符合此條件的序列蒐集起來形成的集合,就是A×B。例如,
A={1,2},B={3,4},則A×B= {(1,3),(1,4),(2,3),(2,4)}
A×B×C則是由許多三元序列構成的集合,序列中的第一個東西來自A,第二個來自B,第三個來自C,把所有符合此條件的序列蒐集起來形成的集合,就是A×B×C。例如,
A={1,2},B={3,4}C={5,6},則A×B×C= {(1,3,5),(1,4,5),(2,3,5),(2,4,5),(1,3,6),(1,4,6),(2,3,6),(2,4,6)}
在序列裡,東西的順序很重要,(1,2)(2,1)是不同的序列,這點和集合很不一樣,{1,2}{2,1}都是同一個集合。(也有人用角括號表示序列,但是我還沒弄清楚怎麼在blogger上打出角括號)

完全沒弄懂前面PMUn是什麼鬼玩意的人別擔心,先來看幾個例子。我們可以把一元述詞P1的詮釋想成,我們想讓domain裡的哪些東西有P1這個性質,我們就把那些東西放到P1M這個集合裡。P1M裡幾個可能的詮釋:
  • {1} 
  • {0,2} 
  • {0,1,2} 
我們可以把二元述詞P2的詮釋想成,我們想讓domain裡哪兩個東西有P2這個關係,就把那兩個東西放到P2M這個集合裡。或者更生動一點地說(就像國小或幼稚園老師教1+1=2的時候,把「1這個自然數,填進+這個函數的兩個參數位置後,就會輸出2」生動地講成,一個蘋果和另一個蘋果放在一起就是兩個蘋果那樣。雖然1+1=2和蘋果半毛關係也沒有,但這樣舉例子比較容易理解),把P2想成某個二元關係,例如x喜歡y,我們想讓domain裡的0喜歡自己的話,就把(0,0)放進P2M這個集合裡,想讓domain裡的1喜歡domain裡的2的話,就把(1,2)放進去。

P2M裡幾個可能的詮釋:
  • {(0,0),(0,1),(0,2)}0喜歡domain裡的所有東西,12則什麼東西都不喜歡)
  • {(0,1),(1,0),(2,0)}01互相喜歡,2單戀0
  • ∅(每個東西都不喜歡每個東西)
如果我們遇到的是三元述詞,而且這個述詞的詮釋不是空集合的話,集合裡的東西會長得像(,,),其中空格的部分各填進一個domain裡的東西。總的來說,如果遇到的是n元述詞,而且述詞的詮釋不是空集合的話,集合裡的東西會長得像(,...,),共n個空格,其中每個格子都填進一個domain裡的東西。

等號這個述詞非常特別,它是邏輯符號(不過有些邏輯學家不這麼認為,但目前先當作等號是邏輯符號),所以一般而言等號的詮釋已經規定好了,不是我們想要讓哪兩個domain裡的東西相等,就可以把那兩個東西組成的序列丟進等號的詮釋裡。等號的詮釋這個集合裡,放的東西一律是,每個domain裡的東西,自己和自己構成的序列,也就是,{(x,x)|xdomain}。現在domain={0,1,2},所以=M={(0,0),(1,1),(2,2)}

函數的詮釋
f1M是指,f1這個函數在M裡的詮釋。如果函數fn元的,則它的定義域是Un,值域是U

我們有個把函數轉成集合的辦法:函數是n元,我們就弄出n+1元的序列,序列的前面n格放輸入值,最後一格放輸出值。例如g(x)=x+1這個定義在自然數上的一元函數,轉成集合後會長這樣:{(0,1),(1,2),(2,3),...}

函數的定義是,如果輸入值在定義域裡的話,就一定要有輸出值,而且輸出值只能有一個。所以在詮釋函數時也要符合這條規定。

所以,f1M的定義域是{0,1,2},因為f1是一元函數。而f1M會長這樣:{(0,),(1,),(2,)},其中每個空格都填進一個domain裡的東西,就能得到一個可能的詮釋。所有空格都填同一個東西也沒關係。

f2M的定義域是{(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)},因為f2是二元函數。而f2M會長這樣:{(0,0,),(0,1,),(0,2,),(1,0,), (1,1,),(1,2,),(2,0,),(2,1,),(2,2,)},其中每個空格都填進一個domain裡的東西。

如何用structure判斷句子是真的還是假的?請見述詞邏輯的語意