Python 列表中的公式不一致

Python 列表中的公式不一致,python,modal-logic,Python,Modal Logic,所以这个问题与存储不同命题模态公式的列表有关。我有能力删除重复项,但我不知道如何找出不一致之处。例如: 初步名单: 上面的列表示例有一些问题,我只想找到它们并打印一条消息。例如,第一个列表有方框p和否定方框 p我希望它被检测到。它也没有q和q 类似地,第二个列表没有p或q和p或q。有人能提出解决这个问题的办法吗?这可能很简单,但我似乎想不起来 理想情况下,是否可以将子列表标记为已关闭?也许分配状态已关闭?这是我在问题中提出的问题的解决方案。工作正确,如果有人可以改进它或使它更短或更快,请张贴您的

所以这个问题与存储不同命题模态公式的列表有关。我有能力删除重复项,但我不知道如何找出不一致之处。例如:

初步名单:

上面的列表示例有一些问题,我只想找到它们并打印一条消息。例如,第一个列表有方框p和否定方框 p我希望它被检测到。它也没有q和q

类似地,第二个列表没有p或q和p或q。有人能提出解决这个问题的办法吗?这可能很简单,但我似乎想不起来


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

这是我在问题中提出的问题的解决方案。工作正确,如果有人可以改进它或使它更短或更快,请张贴您的主张

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);

好的,审问时间到了:“我希望被发现”是什么意思?你能分享你不工作的代码吗?这样我们就可以从你的同一页开始了?为什么不使用sympy这样的逻辑库呢?所以,我将字符串转换为tableau格式,如上面的列表所示。通过检测,我只想打印一条消息,告诉我在列表[1]中有p而不是p公式,因此该列表不一致。我不使用sympy,因为它不适合模态逻辑。
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);