如何识别z3中Tseitin编码引入的变量?

时间:2017-12-12 16:10:06

标签: z3 z3py

我需要计算一个位向量理论的解决方案的数量。我想首先进行爆破,然后在生成的CNF上调用(命题)模型计数器。然而,为了使计数等于原始理论的解的数量,我必须执行所谓的投影模型计数(由于添加的Tseitin变量)。问题是我无法识别此任务所需的正确变量子集(未通过Tseitin编码添加的变量子集)。这就是我现在正在做的事情:

F = z3.parse_smt2_file(inst)
g = Goal()
g.add(F)

t = Then('simplify', 'bit-blast')
subgoal = t(g)

vars = z3_util.get_vars(subgoal.as_expr())

t = Tactic('tseitin-cnf')
subgoal = t(subgoal.as_expr())

print_cnf(subgoal)

'vars'是我需要的变量子集。但是,当我将CNF打印到文件并运行使用这些变量执行投影模型计数的工具时,返回的模型数量不正确。关于如何获得正确的变量子集的任何想法? (即如何排除Tseitin变量)

0 个答案:

没有答案