簡體   English   中英

命題邏輯算法的困惑

[英]Confusion in propositional logic algorithm

我無法理解以下與命題邏輯和蘊涵有關的算法,該算法取自《人工智能一種現代方法》一書。

用於確定命題蘊含度的真值表枚舉算法。 TT代表真相表。 PL-TRUE? 如果句子包含在模型中,則返回true。 變量模型僅代表部分變量的部分模型分配。 函數調用EXTEND(P,true,model)返回一個新的局部模型,其中P的值為true。

function  TT-ENTAILS? (KB,α) returns  true  or  false
  inputs: KB, the knowledge base, a sentence in propositional logic
           α, the query, a sentence in propositional logic

symbols <--- a list of the propositional symbols in KB and α
return TT-CHECK-ALL(KB,α,symbols,[])

function TT-CHECK-ALL(KB,α,symbols,model ) returns true or false
   if EMPTY?(symbols) then
       if PL-TRUE?(KB, model) then return PL-TRUE?(α,model)
       else return true

   else do
       P <---FIRST(symbols); rest <--- REST(symbols)
       return TT-CHECK-ALL(KB,α,rest,EXTEND(P,true,model) and
              TT-CHECK-ALL(KB, α, rest, EXTEND(P,false,model)

當然, TT-ENTAILS唯一要做的就是使用適當的參數調用TT-CHECK-ALL ,因此這里沒有太多要說的。 有趣的部分始於TT-CHECK-ALLelse部分,該部分遞歸地為知識庫和查詢中出現的符號(“模型”)的所有可能賦值構造一個巨大的合集。

例如, TT-CHECK-ALL(KB, a, [P, Q], [])將計算為

(
   TT-CHECK-ALL(KB, a, [], [P=true, Q=true]) 
   and 
   TT-CHECK-ALL(KB, a, [], [P=true, Q=false])
) 
and 
(
    TT-CHECK-ALL(KB, a, [], [P=false, Q=true]) 
    and 
    TT-CHECK-ALL(KB, a, [], [P=false, Q=false])
)

TT-CHECK-ALL的第一部分在模型中所有符號均已賦予值時執行,它檢查給定的模型(例如[P = true,Q = false])是否與知識庫一致( PL-TRUE?(KB, model) )。 這些模型對應於真值表中的行,這些行在KB列中為true 對於那些,算法然后檢查查詢是否評估為true( PL-TRUE?(query, model) )。 通過返回true (它是共軛的中性元素),不會考慮所有其他與KB不一致的模型。

換句話說,這與PL-TRUE?(KB, model) -> PL-TRUE?(query, model)

簡而言之,TT-CHECK-ALL會檢查每個與KB一致的模型(對不同符號的每個可能的“ true”或“ false”賦值),查詢結果是否為true:

foreach model: PL-TRUE?(KB, model) -> PL-TRUE?(query, model)

在邏輯上等價於

not exist model: PL-TRUE?(KB, model) and not PL-TRUE?(query, model)

也就是說,沒有模型,使得KB和查詢的取反都可以為真,即KB和查詢的取反邏輯上是不一致的

而這恰恰是KB entails query的定義KB entails query

編輯:關於symbols 這些是詞匯中的原子命題符號。 在書中的示例中,這些將是各種P_i,jB_i,j ,表示房間(i,j)是否有坑和/或微風。 請注意, R1R5不是symbols一部分,因為它們只是為了方便起見,代表更復雜的術語。 因此,當將KB傳遞給算法時,我們不會傳遞R1 and R2 and ... R5 ,而是(not P_1,1) and (B_1,1 <=> (P_1,2 or P_2,1)) and ... and (B_2,1)

TT-CHECK-ALL(KB,α,symbols,model)在第一次迭代中,TT-CHECK-ALL的第二部分i) TT-CHECK-ALL(KB,a,Q,Extend(P,true,[])) at first TT-CHECK-ALL(KB,a,Q,Extend(P,false,[]))然后執行tobias所說的。

最后,所有這些TT-CHECK-ALL()從TT-entails函數返回。

ii) (TT-CHECK-ALL(KB, a, [], [P=true, Q=true]) and TT-CHECK-ALL(KB, a, [], [P=true, Q=false])) and (TT-CHECK-ALL(KB, a, [], [P=false, Q=true]) and TT-CHECK-ALL(KB, a, [], [P=false, Q=false]))

PS。 如果為EMPTY?(符號),則如果為PL-TRUE?(KB,模型),則返回PL-TRUE?(α,模型)

在i)上,符號不為空,有q,所以它將移至TT-CHECK-ALL的第二部分,但是在ii)上,符號為空,它將移至第一部分(KB,model),如果model不正確,則不檢查alpha是否正確。 整個問題是,如果使用alpha,則在知識庫的所有(true)模型中查詢都是正確的。 如果在每個真實的知識庫(模型)中所有alpha都成立。 如果每個真實知識庫(模型)中的alpha都不正確,則alpha的值又可能變為可能。 那么我們不能確定該查詢。

例題:在wumpus-world示例中,相關的命題符號為B1、1,B1,2,P1,2,P2,1,P2,3和P3,1。 有七個符號,就有27 = 128個可能的模型; 在其中的三個中,KB(這些符號的不同值的結合)是正確的。 在這三個模型中,-p1,2為真,因此在[1,2]中沒有凹坑。 另一方面,P2,1在三個模型中的兩個中為true,在一個模型中為false,因此我們尚無法確定[2,2]中是否存在凹坑。

TT-entails算法的整個要點是,借助我所擁有的知識庫,您可以看到查詢是否具有答案。 知識庫(模型)是正確的,而查詢(一個命題句子)在所有條件下都是正確的,那么BINGO! :)

我發現tobias的解釋非常有幫助。 只是考慮添加一些裝飾品,以使其更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM