2015-11-01 28 views
0

因此,这个问题涉及存储不同命题模态公式的列表列表。我有能力删除重复的内容,但我不知道如何找到不一致的地方。因此,例如:列表中的不一致公式python

名单的初步名单:

[[('not', ('box', 'p')), ('box', 'p'), ('not', 'q'), ('q'), ('diamond', 'r')], 
[('not', 'p'), 'q'], ['or', ('p', 'q')], 
['not',('or', ('p', 'q'))],['r', 'q']] 

列出的上述样本列表有一些问题,我想简单地找到它们,并打印出的消息。对于示例第一个列表具有框p和取反框 p我希望它被检测到。它也有不q和q

类似地,第二列表具有而不是(p或q)和(p或q)。任何人都可以提出解决这个问题的办法,它可能是一件容易的事,但我似乎无法想到它。

理想情况下,是否可以将子列表标记为已关闭?也许分配状态关闭?

+0

好的审讯时间:你说的'我希望它被发现'是什么意思?你能分享你的代码不工作,以便我们在同一页面上的某个地方开始工作吗?为什么你不使用像'sympy'这样的逻辑库? – dopstar

+0

所以,我正在将字符串翻译成类似上面列表的tableau格式。通过检测,我只是想打印一条消息,告诉我在列表[1]中存在p而不是p公式,因此这个列表不一致。我不使用sympy,因为它对于模态逻辑来说不够好。 – aki

回答

0

这是我在问题中提出的问题的解决方案。正确运作,以防某人可以改善或缩短(或更快),请张贴您的建议。

def inconsistent(psi): 
for i in range(0,len(psi)): 
    for j in range(0,len(psi[i])): 
     main = psi[i] 
     form = psi[i][j] 
     if form[0] == 'not': 
      notform = form[1] 
      if form and notform in main: 
       print "inconsistent: ", psi[i][j] 
     else: 
      notform = ('not', psi[i][j]) 
      if form and notform in main: 
       print "inconsistent: ", psi[i][j] 
      else: 
       print "consistent: ", psi[i][j] 


test = [[('not', ('box', 'p')), ('box', 'p'), ('not', 'q'), ('q'), ('diamond', 'r')], [('or', ('p', 'q')),('not',('or',('p','q')))],['not',('or', ('p', 'q'))],['r', 'q']] 

inconsistent(test);