Algorithm 命题逻辑算法中的混淆
我无法理解以下关于命题逻辑和蕴涵的算法,这些算法摘自《人工智能现代方法》一书 确定命题蕴涵的真值表枚举算法。TT代表真值表。真的吗?如果一个句子在模型中成立,则返回true。变量模型表示仅对部分变量进行部分模型赋值。函数调用EXTEND(P,true,model)返回一个新的部分模型,其中P的值为trueAlgorithm 命题逻辑算法中的混淆,algorithm,logic,artificial-intelligence,Algorithm,Logic,Artificial Intelligence,我无法理解以下关于命题逻辑和蕴涵的算法,这些算法摘自《人工智能现代方法》一书 确定命题蕴涵的真值表枚举算法。TT代表真值表。真的吗?如果一个句子在模型中成立,则返回true。变量模型表示仅对部分变量进行部分模型赋值。函数调用EXTEND(P,true,model)返回一个新的部分模型,其中P的值为true function TT-ENTAILS? (KB,α) returns true or false inputs: KB, the knowledge base, a senten
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,[])
函数TT-includes?(KB,α)返回true或false
输入:知识库,命题逻辑中的一个句子
α、 命题逻辑中的疑问句
符号当然,TT-includes
所做的唯一事情就是使用适当的参数调用TT-CHECK-ALL
,因此这里没有太多要说的。有趣的位开始于TT-CHECK-ALL
的else
部分,它递归地为知识库和查询中出现的符号的所有可能赋值构造一个巨大的连接(“模型”)
例如,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,模型)
)。这些模型对应于真值表中的行,在KB列中有一个true
。对于这些,算法然后检查查询的计算结果是否为true(PL-true?(查询,模型)
)。通过返回true
(共轭的中性元素),不考虑与KB不一致的所有其他模型
换句话说,这与PL-TRUE?(KB,模型)->PL-TRUE?(查询,模型)
相同
因此,简言之,TT-CHECK-ALL检查与KB一致的每个模型(每个可能的“真”或“假”符号赋值)的查询结果是否为真:
foreach模型:PL-TRUE?(KB,模型)->PL-TRUE?(查询,模型)
这在逻辑上等同于
不存在模型:PL-TRUE?(KB,模型)和not PL-TRUE?(查询,模型)
也就是说,没有模型,因此KB和查询的否定都可以为真,即KB和查询的否定在逻辑上不一致
这正是KB includes query
的定义
编辑:
关于符号
。这些是词汇表中的原子命题符号。在本书的示例中,这些将是各种pi,j
和bi,j
,表示房间(i,j)是否有凹坑和/或微风。请注意,R1
到R5
不是符号的一部分,因为这些符号只是为了方便起见的缩写,代表更复杂的术语。因此,当将KB
传递到算法中时,我们不会传递R1和R2,并且。。。R5
,但(不是P_1,1)和(B_1,1(P_1,2或P_2,1))以及。。。和(B_2,1)
TT-CHECK-ALL(KB,α,符号,模型)
在第一次迭代中,TT-CHECK-ALL的第二部分
i)TT-CHECK-ALL(KB、a、Q、Extend(P、true、[]))
一开始
TT-CHECK-ALL(KB、a、Q、Extend(P、false、[]))
然后托拜厄斯说了什么
最后有一个TT-CHECK的连接,从TT-includes函数返回-all()
ii)(TT-CHECK-ALL(KB,a,[],[p=true,Q=true])和TT-CHECK-ALL(KB,a,[],[p=true,Q=false])和(TT-CHECK-ALL(KB,a,[],[p=false,Q=false])和TT-CHECK-ALL(KB,a,[],[p=false,Q=false])
注:如果为空?(符号),则
如果PL-TRUE?(KB,模型),则返回PL-TRUE?(α,模型)
在i)符号不是空的,有q,所以它会进入TT-CHECK-ALL的第二部分,但在ii)符号是空的,它会进入第一部分(KB,模型),如果模型不是真的,它不会检查alpha是否是真的。关键是,如果alpha查询在知识库的每个(真)模型中都是真的。如果所有alpha在每个真实的知识库(模型)中都是真实的。如果alpha在每个真实的知识库(模型)中都不是真的,那么alpha的值也是可能的。那么我们就不能确定这个问题了
exmp:在wumpus世界的例子中,相关的命题
符号为B1,1、B1,2、P1,2、P2,1、P2,3和P3,1。有七个符号,有
27=128个可能的模型;在其中三种情况下,KB(这些符号的不同值的合并)为真。在这三个模型中,
-p1,2为真,因此[1,2]中没有凹坑。另一方面,P2,1在三个中的两个中为真
模型和假在一个,所以我们还不能判断是否有一个坑在[2,2]
TT的整个要点需要使用我拥有的知识库,通过算法来查看查询是否有答案。知识库(模型)是真的,查询(一个命题句)在所有模型中都是真的,那么宾果是
我发现托比亚斯的解释非常有用。只是想添加一些元素,使其更好。那么符号到底由什么组成呢?这不只是知识库的一套规则吗?谢谢,这非常有帮助!
(
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])
)