horn公式,中文名一般翻譯成「霍恩公式」,也是正規化的一種。
horn原子有三:
p::= ┴ | t |p horn原子
分別是底公式、頂公式和命題原子。
horn原子合取後的蘊含稱為horn字句:
a::= p | pλa
c::= a → p horn子句
繼續合取就是horn公式:
h::= c | cλh horn公式
下面的都是horn公式例子:
(pλqλr->p)λ(pλqλr->q)λ(pλqλr->r)
(pλqλr->┴
)λ(pλr->q)λ(t->r)
(p1λq2λr3->p13)λ(t->q)λ(p4λq5->┴
)
下面的都不是horn公式例項:
(pλqλr->┐p)λ(pλqλr->q)λ(pλqλr->r) 包含了命題原子否定
(pλqλr->┴)λ(pλ┐r->q)λ(t->r)
(p1λq2λr3->p13λr30
)λ(t->q)λ(p4λq5->
┴) 蘊含右邊是合取公式而非命題原子
(t->q)λ(p4λq5) 字句有不是蘊含關係的
對於給定的horn公式,是否是可滿足的(還記得這個概念嗎),我們有乙個簡單的演算法:
公式的可滿足判定演算法
horn
是正確的且演算法
horn
的執行過程中,
while
語句至多被執行的次數不超過
n+1次。其中n是
ф中所含的命題原子數目。
先來證明第二個論斷:演算法
horn
執行過程中
while
語句被執行的次數不超過
n+1次。
由於在執行
while
語句之前已對
t作標記,且執行
while
語句的語句體一次就標記乙個尚未標記的p(
p可能是命題原子或
┴)於是只能進行不超過
n+1次標記。
再來證明它的正確性。為了證明演算法
horn
的正確性,我們先需證明以下論斷:
「對於所有使ф取值
t的求值
v必使所有被標記的p為
t。」------(*
)我們對
while
語句的執行次數
k作數學歸納法。
歸納基本步:
k=0時,此時被標記的僅是
t,於是(
*)成立。
歸納假設:假設在執行
while語句k
次後(*
)成立,要證明執行
while
語句(k+1
)次後(
*)也成立。
設在第k+1
次執行while
語句時,有ф的子句
滿足:所有
pj已被標記,而
p』尚未被標記。記
v是任一使
ф取值為真的一次求值。根據歸納假設,
v使所有pj為
true
,從而子句左邊
為true
。又子句為
true
。於是p』
必為true
。其次我們對演算法
horn
中的if
語句作分析。
[1]若
┴被標記,如果有使ф取值
true
的求值v, 由(*
)可知,該子句必在
v中取值為
false
。這是不可能的。於是
ф不可滿足。
[2]若
┴始終沒有被標記,此時,令被標記的命題原子取
t而未被標記的原子取f。則
ф在此求值中必取值
true。事實
此時ф中任一子句中要麼所有的
pj連同
p』已被標記,因而取值
true
;要麼中存在有尚未被標記的
pj,
由此得取值
false
,由」→」
的語義定義可知,
取值true
。
數理邏輯之 正規化
今天開始說正規化。先介紹幾個概念。語義等值 令 和 是命題邏輯公式,我們稱 和 語義等值當且僅當 且 成立。記為 可滿足公式 給定命題邏輯公式 我們說 是可滿足的,如果存在 的一次求值使得 取值 true.文字 文字l 是指命題原子p或 p。l p p 析取子句 析取子句 d是若干個文字的析取 d ...
數理邏輯蘊含 數理邏輯(1) 命題邏輯的基本概念
學習階段 自由。前置知識 基本的邏輯思維。很多人連基本的邏輯關係都搞不清,在這個系列科普一下離散數學中的數理邏輯。1.命題 命題 proposition 就是非真即假的陳述句。命題的真假,稱為真值,真 記為t true 或1,假 記為f false 或0.因為真值只有兩種,這種邏輯也稱為二值邏輯。在...
數理邏輯蘊含 數理邏輯(1) 命題邏輯的基本概念
學習階段 自由。前置知識 基本的邏輯思維。很多人連基本的邏輯關係都搞不清,在這個系列科普一下離散數學中的數理邏輯。命題 proposition 就是非真即假的陳述句。命題的真假,稱為真值,真 記為t true 或1,假 記為f false 或0.因為真值只有兩種,這種邏輯也稱為二值邏輯。在真值不止2...