Python NLTK ResolutionProver 找到了一个解决方案,而实际上没有

问题描述

我有这样的格式规则“if A&B then C”:如果b is_mans issister_of b,然后 b 是 s 的兄弟

添加一个事实,即 is_man(luc) 并且我请求 brother_of(b,leia)

是否有任何“b”

我希望答案是否定的,因为并没有说 leia 是 luc 的妹妹,所以在我的规则中“如果 A&B 则 C” B 部分不正确,但 ResolutionProver 出人意料地回答'卢克' ??!?

import nltk.inference
rexp = nltk.sem.Expression.fromstring
p1 = rexp('is_man(luc)')
p2 = rexp('(is_man(b) & sister_of(s,b)) -> brother_of(b,s)')
answer = rexp('brother_of(b,leia) -> ANSWER(b)')
tp = nltk.ResolutionProverCommand(None,[p1,p2,answer])
if list(tp.find_answers()): 
    for ans in list(tp.find_answers()): print(ans,end=' ')
else: print('No answer')

它不应该回答 Luc 而是 False,我怎样才能得到 False ?并且只有在我另外声明sister_of(leia,luc) 时才得到'luc'。谢谢!

PS:有关信息,这里是证据:

[1] {is_man(luc)}                                                  A  (that is p1)
[2] {-is_man(z368),-sister_of(z369,z368),brother_of(z368,z369)}  A  (that is p2)
[3] {-brother_of(z370,leia),ANSWER(z370)}                         A  (that is answer)
[4] {-sister_of(z369,luc),brother_of(luc,z369)}                   (1,2)  (combination of 1 & 2)
[5] {ANSWER(z370),-is_man(z370),-sister_of(leia,z370)}           (2,3) 
[6] {-sister_of(leia,ANSWER(luc)}                            (1,5) 
[7] {-sister_of(leia,ANSWER(luc)}                            (3,4) 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)