给定CNF中的Z3公式,是否可以使用Z3Py将其转换为列表列表形式?我想这样做是为了更方便地访问和操作文字。如果Python是一种功能语言,我可能会做类似使用Z3Py将Z3 CNF公式转换为列表列表形式
def cnf2list(fm) :
match fm with
| And(P,Q) -> cnf2list(P) + cnf2list(Q)
| P -> clause2list(P)
def clause2list(fm) :
match fm with
| Or(P,Q) -> clause2list(P) + clause2list(Q)
| P -> [P]
但我不知道我可以在Python中做到这一点。是否有可能像上面那样执行模式匹配(或者使用一些完全不同的方法)来获得Z3 CNF公式的列表表示?
这是定制'__eq__'的必然结果。 –
根据[这些规则],列表成员资格测试'x in xs'大致等于'any(bool(x == el)for el in xs)',而bool()' (https://docs.python.org/3/reference/datamodel.html#object.__bool__)。 这种行为当然不足以牺牲符号'=='的便利性,但我认为可能有小的改进。考虑添加引发异常的方法'__bool__',以防止这种用法。我非常肯定,在具体布尔上下文中使用符号布尔表达式的大多数情况都是错误。 –
太好了,谢谢你解释@VladShcherbina!我将继续添加__bool__方法。 –