推理概述
推理的基本概念
推理就是按照某種策略從已有事實和知識推出結論的過程
推理的分類
分類方式 | 類別1 | 類別2 |
---|---|---|
邏輯基礎 | 演繹推理 | 歸納推理 |
所用知識的確定性 | 確定性推理 | 不確定性推理 |
推理策略是否使用啟發式知識 | 啟發式推理 | 非啟發式推理 |
詳談邏輯推理分類
推理方式 | 概念 | 常用形式 | 特點 |
---|---|---|---|
演繹推理 | 一般到個別 | 三段論法(大前提、小前提、結論) | 不能增殖新知識 |
歸納推理 | 個別到一般 | 完全歸納推理,不完全歸納推理 | 可以增殖新知識 |
產生式系統的推理
可以分為以下類別:正向推理,逆向推理,雙向推理
推理形式 | 優點 | 缺點 |
---|---|---|
正向推理 | 較為直觀 | 推理無明確的目標,求解問題時可能會執行許多與解無關的操作,導致推理效率較低 |
逆向推理 | 不必尋找和使用那些與假設目標無關的信息和規則,推理過程的目標明確 | 當用戶對解的情況認識不清時,由系統自主選擇假設目標的盲目性比較大,若選擇不好,會影響系統效率。 |
正向推理
- 把用戶提供的初始證據放入綜合數據庫。
- 檢查綜合數據庫中是否包含了問題的解,若已包含,則求解結束,並成功推出;否則執行下一步。
- 檢查知識庫中是否有可用知識,若有,形成當前可用知識集,執行下一步; 否則轉(5)。
- 按照某種沖突消解策略,從當前可用知識集中選出一條規則進行推理,並將 推出的新事實加入綜合數據庫種,然后轉(2)。
- 詢問用戶是否可以進一步補充新的事實,若可補充,則將補充的新事實加入 綜合數據庫中,然后轉(3);否則表示無解,失敗退出。

逆向推理
- 將要求證的目標(稱為假設)構成一個假設集。
- 從假設集中選出一個假設,檢查該假設是否在綜合數據庫中。
- 若不在,則執行第3步。
- 若在, 則該假設成立,刪除假設集中成立的假設,重復執行第2步。
- 此時,若假設集為空,則成功退出,否則仍執行。
- 檢查該假設是否可由知識庫的某個知識導出,將知識庫中可以導出該假設的所有知識構成一個可用知識集。
- 檢查可用知識集是否為空,若是,失敗退出;否則執行下一步。
- 按沖突消解策略從可用知識集中取出一個知識。將該知識的前提中的每個子條件都作為新的假設放入假設集,刪除原假設,然后轉(2)。

雙向推理
結合版,可以先正向后逆向,也可以先逆向后正向
例子
假設知識庫中包含有以下2條規則:
r1 :IF B THEN C
r2 :IF A THEN B
已知初始證據A,求證目標C。
正向推理求解
- 推理開始前,綜合數據庫為空。
- 推理開始后,先把A放入綜合數據庫,然后檢查綜合數據庫中是否含有該問題的解,回答為“N”。
- 接着檢查知識庫中是否有可用知識,顯然r2可用,形成僅含r2 的知識集。從該知識集中取出r2 ,推出新的實事B,將B加入綜合數據庫。
- 檢查綜合數據庫中是否含有目標C, 回答為“N”。
- 再檢查知識庫中是否有可用知識,此時由於B的加入使得r1為可用,形成僅含r1的知識集。從該知識集中取出r1 ,推出新的事實C,將C加入綜合數據庫,檢查綜合數據庫中是否含有目標C,回答為“Y”。
- 它說明綜合數據庫中已經含有問題的解,推理成功結束,目標C得證。
逆向推理求解
- 推理開始前,綜合數據庫和假設集均為空。
- 推理開始后,先將初始證據A和目標C分別放入綜合數據庫和假設集,然后從假設集中取出一 個假設C,查找C是否為綜合數據庫中的已知事實,回答為“N”。
- 再檢查C是否能被知識庫中的知識所導出,發現C可由r1 導出,於是r1 被放入可用知識集。由於知識庫中只有r1 可用,故可用知識集中僅含r1 。 接着從可用知識集中取出r1 ,將其前提條件B作為新的假設放入假設集。
- 從假設集中取出B,檢查B是否為綜合數據庫中的實事,回答為“N”。
- 再檢查B是否能被知識庫中 的知識所導出,發現B可由r2 導出,於是r2被放入可用知識集。由於知識庫中只有r2可 用,故可用知識集中僅含r2 。 從可用知識集中取出r2 ,將其前提條件A作為新的假設放入假設集。
- 然后從假設集中取出A,檢查A是否為綜合數據庫中的實事,回答為“Y”。
- 它說明該假設成立,由於無新的假設,故推理過程成功結束,於是目標C得證。
一階謂詞邏輯基礎
謂詞公式的解釋
定義,設D是謂詞公式P的非空個體域,若對P中的常量,函數和謂詞按如下規定賦值:
- 為每個個體常量指派D中的一個元素;
- 為每個n元函數指派一個從Dn到D的一個映射,其中 Dn = {(x1,x1,...,xn)|x1,x1,...,xn ∈ D}
- 為每個n元謂詞指派一個從Dn到{F,T}的映射
則稱這些指派為P在D上的一個解釋。
- 可以確定在一個指派下,某個謂詞公式的真或假。
例子,謂詞公式在解釋下的真值確定


全稱固化
y是個體域中的任一個體,依此可消去謂詞公式中的全稱量詞。
存在固化
y是個體域中某一個可以使P(y)為真的個體,依此可消去謂詞公式中的存在量詞。
置換與合一
置換與合一的目的:將相同謂詞名但個體不同的情況做出處理,使得二者變量名相同
- 差異集:在對兩個謂詞公式中的項從左到右進行比較時,那些第一個不 相同的項所構成的集合,稱為差異集。
合一,設有公式集F={F1 , F2 ,…,Fn },若存在一個置換θ,可使 F1θ=F2θ=…=Fnθ, 則稱θ是F的一個合一。稱F1 ,F2 ,…,Fn是可合一的。否則,是不可合一的。
最一般合一的求取算法
-
置k=0, 謂詞公式集Sk=S,置換集σk=ε
-
若Sk只含有一個謂詞公式,則算法停止,σk就是要求的最一般合一
-
求Sk的差異集Dk
-
若Dk中存在元素xk和tk,其中xk是變元,tk是項且xk不在tk中出現,則置Sk+1= Sk · {tk /xk}, σk+1=σk · {tk / xk},k=k+1,然后轉②
-
算法停止,S的最一般合一不存在。
以本人看來,就是尋找差異集作為置換,使用常元替換變元,使用函詞替換簡單個體元
例子


自然演繹推理
概念
思想
從一組已知為真的事實出發,直接運用命題 邏輯或謂詞邏輯中的推理規則推出結論的過程
推理基礎:
名稱 | 邏輯表示 |
---|---|
假言三段論 | 𝑃 → 𝑄,𝑄 → 𝑅 ⇒ 𝑃 → R |
假言推理 | 𝑃, 𝑃 → 𝑄 ⇒ 𝑄 |
拒取式推理 | 𝑃 → 𝑄,¬Q ⇒ ¬P |
例子,純粹的邏輯應用
已知,下列公式為真
\[R, S, R→T, S∧T →P, P →Q \]求證,Q為真
例子,合一+推理
已知,下列公式為真
\[W (a),(∀x)(W (x) → Q(x)) \]求證,Q(a)為真

例子,實用例子
設已知如下事實
- 如果是需要編程序的課,王程都喜歡。
- 所有的程序設計語言課都是需要編程序的課。
- C是一門程序設計語言課。
求證:王程喜歡C這門課。

歸結演繹推理
概念
思想
采用反證法的思想, 把關於永真性的證明轉化為關於不可滿足性的證明,要證明P→Q永真,只要能夠證明P∧﹁Q是不可滿足的即可。
子句集化簡方法
-
消去連接詞
→
和↔
,反復使用如下等價公式P→Q ⇔﹁P∨Q
&&P↔Q ⇔(P∧Q)∨(﹁P∧﹁Q)
-
減少否定符號的轄域,使用
﹁(∀x)P(x)⇔(∃x)﹁P(x)
&&﹁(∃x)P(x)⇔(∀x)﹁P(x)
-
不同量詞約束的變元有不同的名字。
-
化為前束范式,把所有量詞都移到公式的左邊,並且在移動時不能 改變其相對順序。
-
消去存在量詞。
- 若存在量詞不出現在全稱量詞的轄域內(即它的左邊沒有全稱量詞),只要用一個新的個體常量替換受該存在量詞約束的變元,就可消去該存在量詞。
- 若存在量詞位於一個或多個全稱量詞的轄域內,則需要該全稱量詞的函詞替換受該存在量詞約束的變元y,然后再消去該存在量詞。(值得注意的是,是否在某個全程量詞的轄域,請看化為前束范式之前的等式,且必須是在轄域內,如果是兩個共享一個轄域可以交換,不做處理)
-
展開為標准合取式。
-
消去全稱量詞。直接去掉就可以。
-
消去合取詞,並更換變量名稱,得到子句集。
歸結
命題邏輯的歸結
設C1 和C2是子句集中的任意兩個子句,if C1中的文字L1與C2中的文字L2互補,then可從C1 和C2 中分別消去L1 和L2 ,並將C1 和C2 中余下的部分按析取關系構 成一個新的子句C12 ,則C12為C1和C2的二元歸結式。
謂詞邏輯的歸結
設C1和C2是兩個沒有公共變元的子句,L1和L2分別是C1和C2中的文字。if L1和¬L2存在一個最一般合一σ,then 稱 C12 =({C1σ}-{ L1σ})∪({ C2σ}-{ L2σ}) 為C1和C2的二元歸結式。
- 歸結前,消去每個歸結式中可以合一的文字
- 換元消去兩個歸結式中相同的元素
- 一次歸結只能消去一個變元
歸結演繹推理總問題
已知 F,求證G
- 否定目標公式G,得﹁G
- 把﹁G並入到公式集F中,得到{F,﹁G}
- 把{F,﹁G}化為子句集S。
- 應用歸結原理對子句集S中的子句進行歸結,並把每次得到的歸結式並入S中(並入S中,不代表刪除歸結的原子句)。如此反復進行,若出現空子句,則停止歸結,此時就證明了G為真。
求解問題
- 把已知條件用謂詞公式表示,並化成相應的子句集S1
- 把待求解的問題也用謂詞公式表示,然后將其否定,並與謂詞ANSWER構成析取式G1;
- 把G1化為子句集S2,並把子句集S2與S1合並構成新子句集S
- 對子句集S應用謂詞歸結原理進行歸結,在歸結過程中通過合一置換, 改變ANSWER中的變元
- 如果得到歸結式ANSWER,則問題的答案就在ANSWER謂詞中
歸結策略
歸結策略的目的:每一步選取何時的歸結子句,以盡快得到空子句
有用的歸結策略 | 闡述 |
---|---|
純文字刪除法 | 刪除子句集中包含純文字的子句 |
重言式刪除法 | 刪除子句集中包含重言式的子句 |
包孕刪除法 | 刪除子句集中被包孕的子句 |
支持集策略 | 被歸結的子句必須有目標子句或者其后裔 |
沒用的,看看就可的歸結策略 | 闡述 |
---|---|
排序策略 | 每一步都盡可能地計算子句 |
線形輸入策略 | 被歸結的子句必須有原子句集的子句 |
單文字子句策略 | 被歸結的子句必須有單文字子句 |
純文字刪除法
- 純文字:如果某文字L在子句集中不存在可與其互補的文字﹁L,則稱該文字為純文字。
- 刪除子句集中包含純文字的子句
例子
\[S=\{ P∨Q∨R, ﹁Q∨R, Q, ﹁R \} \]
P是純文字,因此可以將子句P∨Q∨R從子句集S中刪除
重言式刪除法
- 重言式:如果一個子句中包含有互補的文字對,則稱其為重言式。
- 刪除子句集中包含重言式的子句
例子
\[P(x)∨﹁P(x), P(x)∨Q(x)∨﹁P(x) \]
全部可以刪除
包孕刪除法
- 包孕:設有子句C1 和C2 ,如果存在一個置換σ,使得C1σ ⊆ C2 ,則稱C1包孕於C2。
- 刪除子句集中被包孕的子句
\[\begin{align} & P(x) & 包孕於 & \quad P(a) & σ=\{a/x\}\\ & P(x) & 包孕於 & \quad P(a)∨Q(z) & σ=\{a/x\}\\ & P(x)∨Q(a) & 包孕於 & \quad P(f(a))∨Q(a)∨R(y) & σ=\{f(a)/x\}\\ & P(x)∨Q(y) & 包孕於& \quad P(a)∨Q(u)∨R(w) & σ=\{a/x, u/y\} \\ \end{align} \]
全部可以刪除左邊的部分
支持集策略
- 要求每一次參加歸結的兩個親本子句中,至少應該有一個是由目標公式的否定所得到的子句或它們的后裔。
特點
- 完備,縮減了子句集的歸結,增加了子句集歸結的深度
例子
\[S=\{﹁I(x)∨R(x), I(a),﹁R(y)∨L(y), ﹁L(a) \} \]其中﹁I(x)∨R(x)為目標公式的否定。

排序策略(廣度度優先策略)
過程:
-
從S0出發,對S0中的全部子句作所有可能的歸結,得到第一層歸結式,把這些歸結式的集合記為S1
-
用S0中的子句與S1中的子句進行所有可能的歸結,得到第二層歸結式,把這些歸結式的集合記為S2
-
用S0和S1中的子句與S2中的子句進行所有可能的歸結,得到第三層歸結式,把這些歸結式的集合記為S3。
-
如此繼續,知道得出空子句或不能再繼續歸結為止
特點
- 完備,可以找到最短歸結路徑
- 歸結效率較低,可能出現組合爆炸
例子
\[S=\{﹁I(x)∨R(x), I(a), ﹁R(y)∨L(y), ﹁L(a) \} \]

線形輸入策略
- 要求每次參加歸結的兩個親本子句中,至少應該有一個是初始子句集中的子句。
- 所謂初始子句集是指開始歸結時所使用的子句集。
特點
- 不完備,可能高效
例子
\[S=\{﹁I(x)∨R(x), I(a), ﹁R(y)∨L(y), ﹁L(a) \} \]

祖先過濾策略
每次參加歸結的兩個親本子句,只要滿足以下兩個條件中的任意一個就可進行歸結
- 兩個親本子句中至少有一個是初始子句集中的子句。
- 如果兩個親本子句都不是初始子句集中的子句,則一個子句應該是另一個 子句的先輩子句。
特點:完備的
例子
\[S=\{﹁Q(x)∨﹁P(x), Q(y)∨﹁P(y),﹁Q(w)∨P(w) , Q(a)∨P(a) \} \]

單文字子句策略
- 單文字:如果一個子句只包含一個文字,則稱此子句為單文字子句
- 要求每次參加歸結的兩個親本子句中至少有一個子句是單文字子句
特點
- 不完備的,效率較高
例子
\[S={﹁I(x)∨R(x), I(a), ﹁R(y)∨L(y), ﹁L(a) } \]
例子:化簡子句集
\[(∀x)((∀y)P(x,y)→﹁(∀y)(Q(x,y)→R(x,y))) \]
- 消去連接詞
→
和↔
- 減少否定符號的轄域
- 不同量詞約束的變元有不同的名字。
- 化為前束范式
- 消去存在量詞。
- 展開為標准合取式。
- 消去全稱量詞。
- 消去合取詞,並更換變量名稱,得到子句集。
例子:歸結(比較重要)
設:C1 =P(a)∨R(x),C2 =﹁P(y)∨Q(b),求C12
- 取L1 = P(a), L2 =﹁P(y),則L1 和﹁L2 的合一是σ={a/y}
設:C1 =P(x)∨Q(a),C2 =﹁P(b)∨R(x) ,求C12
- 先換元,令C2 =﹁P(b)∨R(y)
- 取L1 = P(x), L2 =﹁P(b),L1 和﹁L2 的合一是σ={b/x}。
設:C1 =P(x)∨﹁Q(b),C2 =﹁P(a)∨Q(y)∨R(z)
-
這道題需要注意的是,C1和C2的一次歸結只能消去一個互補對,不能同時消去兩個互補對
-
如在 σ={a/x, b/y}下,若同時消去兩個互補對所得R(z)不是C1 和C2 的二元歸結式
-
可以從另一個角度說明這道題的正確性:﹁P∨Q與P∨﹁Q永真,但是如果使用同時歸結,那么可歸結為NIL,是不可滿足的,產生矛盾。
設:C1 =P(x)∨P(f(a))∨Q(x) ,C2 =﹁P(y)∨R(b),求C12
-
對參加歸結的某個子句,若其內部有可合一的文字,則在進行歸結之前應先進行合一。
-
嚴格來講C1經過合一之后所得式子將不是C1,但是仍然認為該式與C2的二元歸結式等同於C1和C2的二元歸結式。也就是說,子句集合一之不影響原歸結結果。
設C1 =P(y)∨P(f(x))∨Q(g(x)) ,C2 =﹁P(f(g(a)))∨Q(b),求C12
- 對C1 ,取合一σ={f(x)/y},得C1 的因子 C1 σ=P(f(x))∨Q(g(x))
- 對C1 的因子和C2 歸結(σ={g(a)/x }),可得到C1 和C2的二元歸結式 C12 =Q(g(g(a)))∨Q(b)
例子,使用歸結演繹證明問題
設已知的公式集為{P, (P∧Q)→R, (S∨T)→Q, T},求證結論R
假設結論R為假, 將﹁R加入公式集, 並化為子句集
歸結如下圖:

已知
\[F: (∀x)((∃y)(A(x, y)∧B(y))→(∃y)(C(y)∧D(x, y)))\\ G: ﹁(∃x)C(x)→(∀x)(∀y)(A(x, y)→﹁B(y)) \]求證G 是 F 的邏輯結論。
子句集為
歸結過程如下

“激動人心的生活”問題
假設:
- 所有不貧窮並且聰明的人都是快樂的
- 那些看書的人是聰明的
- 李明能看書且不貧窮
- 快樂的人過着激動人心的生活。
求證:
- 李明過着激動人心的生活。
問題用謂詞表示如下:
知識 | 知識表示 |
---|---|
所有不貧窮並且聰明的人都是快樂的 | (∀x)((﹁Poor(x)∧Smart(x))→Happy(x)) |
那些看書的人是聰明的 | (∀y) (Read(y) →Smart(y)) |
李明能看書且不貧窮 | Read(Liming)∧﹁Poor(Liming) |
快樂的人過着激動人心的生活。 | (∀z) (Happy(z)→Exciting(z)) |
目標的否定:李明過着激動人心的生活 | ﹁Exciting(Liming) |
子句集
子句集的歸結

“快樂學生”問題
假設:
- 任何通過計算機考試並獲獎的人都是快樂的
- 任何肯學習或幸運的人都可以通過所有考試
- 張不肯學習但他是幸運的
- 任何幸運的人都能獲獎。
求證:張是快樂的。
問題用謂詞表示如下
知識 | 知識表示 |
---|---|
任何通過計算機考試並獲獎的人都是快樂的 | (∀x)(Pass(x, computer)∧Win(x, prize)→Happy(x)) |
任何肯學習或幸運的人都可以通過所有考試 | (∀x) (∀y) (Study(x)∨Lucky(x)→Pass(x, y)) |
張不肯學習但他是幸運的 | ﹁Study(zhang)∧Lucky(zhang) |
任何幸運的人都能獲獎 | (∀x) (Lucky(x)→Win(x, prize)) |
目標的否定:張是快樂的 | ﹁Happy(zhang) |
子句集
子句集的歸結

例子,使用歸結演繹求解問題
已知:
- 如果x和y是同班同學,則x的老師也是y的老師。
- 王先生是小李的老師。
- 小李和小張是同班同學。
問:小張的老師是誰?
知識表示
知識 | 知識表示 |
---|---|
如果x和y是同班同學,則x的老師也是y的老師 | (∀x)(∀y)(∀z)(C(x,y)∧T(z,x)→T(z,y) |
王先生是小李的老師 | T(Wang,Li) |
小李和小張是同班同學 | C(Li,Zhang) |
問題的表示 | ﹁ T(u,Zhang)∨ANSWER(u) |
化為子句集
歸結
最終
- u=Wang,即小張的老師是王先生。