跳轉到內容

計算機科學家邏輯/謂詞邏輯/SATCHMO

來自華夏公益教科書,開放的世界,開放的書籍

SATCHMO 定理證明器是最早使用模型生成的系統之一,即自下而上的證明過程。該證明器由一個小型的 Prolog 程式給出,該程式實現了一個表格證明過程。一個限制是,它需要範圍受限公式。

定義 30

[編輯 | 編輯原始碼]

一階子句 稱為 *範圍受限*,如果出現在頭部 中的每個變數也出現在主體 中。

  1. 將子句轉換為範圍受限形式
  2. 在 Prolog 資料庫中斷言範圍受限子句和 dom 子句。
  3. 呼叫 satisfiable
kill satisfiable :-    assume(X) :- asserta(X).     
       (Head <- Body)            assume(X) :-  
       Body, not Head, !,          retract(X), !, fail.  
       component(HLit, Head),      component(E, (E ; _)).      
       assume(HLit),               component(E, (_ ; R)) :-    
       not false,                   !, component(E, R).   
       satisfiable.                component(E, E).  
  satisfiable.

透過級別飽和修改實現一階完備性。該證明過程在地面情況下實現了超表格。

超表格 - 地面情況

[編輯 | 編輯原始碼]

所有開放分支僅包含正文字。以以下子句集為例

定義 31(文字樹,子句表格)

[編輯 | 編輯原始碼]

一個 *文字樹* 是一個對 ,由一個有限的、有序的樹 和一個標記函式 組成,該函式將文字分配給 的每個非根節點。

在一個有序樹 中,節點 後繼序列 是所有直接前驅為 的節點的序列,按照 給出的順序排列。

一組子句 (子句)真值表 是一個文字樹 ,其中,對於 中的每個後繼序列 ,分別標記為文字 ,都存在一個替換 和一個子句 ,使得對於每個 都有 稱為 真值表子句,真值表子句的元素稱為 真值表文字

定義 32 (分支、開放和封閉真值表、選擇函式)

[edit | edit source]

A branch of a tableau is a sequence () of nodes in such that is the root of , is the immediate predecessor of for , and is a leaf of . We say branch is a prefix of branch , written as or , iff for some nodes , . The branch literals of branch are the set . We find it convenient to use a branch in place where a literal set is required, and mean its branch literals. For instance, we will write expressions like instead of .

為了記住一個分支包含矛盾這一事實,我們允許將一個分支標記為 開放封閉。如果真值表中的每個分支都是封閉的,那麼該真值表是 封閉 的,否則它是 開放 的。

選擇函式是一個全函式 ,它將一個開放的 tableau 對映到它的一個開放分支。如果 ,我們也說選擇在 中由

請注意,分支始終是有限的,因為 tableau 是有限的。幸運的是,對使用哪種選擇函式沒有限制。例如,可以使用一個始終選擇“最左側”分支的選擇函式。

定義 33 (超 Tableau - 基本情況)

[編輯 | 編輯原始碼]

是一個有限的子句集,而 是一個選擇函式。對於 的超 Tableau 如下所示遞迴定義
初始化步驟:一個單節點文字樹是 的超 Tableau。它的單個分支標記為“開啟”。

超擴充套件步驟:如果

  1. 的一個開放超 Tableau,(即 被選擇在 中由 )具有開放的葉節點 ,並且
  2. 中的一個子句(),在此上下文中稱為擴充套件子句,並且
  3. 使得(稱為 *超條件*)。

那麼文字樹 的超表格,其中 是透過將 個子節點 附加到 上,並分別用以下標籤標記:



並將每個新的分支 標記為“開啟”,並標記每個新的分支 標記為“關閉”。

最小模型推理

[edit | edit source]

子句集 顯然有兩個不同的模型:。在集合包含下,這些模型可以進行比較,在某些任務中,計算最小模型(或一般來說是 *一個* 最小模型)是合適的。例如,以下情況就是如此:

  • 知識表示、迴圈定義
  • 預設否定的基礎(GCWA)
  • 應用:演繹資料庫更新、診斷

基本上有兩種不同的方法來計算最小模型。

最小模型推理 - Niemel¨a 的方法

[edit | edit source]

給定一組地子句,這些方法應用一個模型生成過程,例如超表格,它能夠生成所有模型。

引理 1: 對於每個最小模型 存在一個分支,其文字為

假設 是來自 的子句頭部出現的原子集,那麼以下引理成立。

引理 2: 的最小模型當且僅當

這提供了一種通用方法:生成模型候選者,並使用引理 2 進行測試。

在我們上面的例子中不是最小模型,因為 當且僅當 不可滿足,但事實並非如此,因此 不對應於最小模型,因此該分支被關閉。

是最小的,因為 當且僅當 不可滿足。這是正確的,因此 是最小的,該分支保持開啟狀態。

特性: 健壯性(根據引理 2) 完備性(根據引理 1),空間效率

最小模型推理 - Bry & Yayha 的方法

[edit | edit source]

例如,我們有集合


引理: 使用補碼分割時,最左邊的開放分支是 的一個最小模型。

通用方法: 重複:生成最小模型 ,將 新增到 屬性: 由於引理的健全性,完整性與之前相同,可能有指數級的新子句

華夏公益教科書