CNF的z3基数约束

CNF的z3基数约束,z3,z3py,theorem-proving,Z3,Z3py,Theorem Proving,我正在使用z3py将基数约束转换为CNF。我使用的策略是t=Then('simplify','card2bv','simplify','bit blast','tseitin cnf')。我的目标是在大约800个变量上设置100个约束。在Intel Xeon CPU上,转换大约需要48分钟。在紧凑性或速度方面,我使用的策略是最有效的吗 z3是否实现了类似于Sinz,2005[1]中的顺序计数器 [1] Z3能够使用伪布尔不等式约束,可以使用 表示基数 导入z3 s=z3.Solver() bva

我正在使用z3py将基数约束转换为CNF。我使用的策略是
t=Then('simplify','card2bv','simplify','bit blast','tseitin cnf')
。我的目标是在大约800个变量上设置100个约束。在Intel Xeon CPU上,转换大约需要48分钟。在紧凑性或速度方面,我使用的策略是最有效的吗

z3是否实现了类似于Sinz,2005[1]中的顺序计数器


[1]

Z3能够使用伪布尔不等式约束,可以使用 表示基数

导入z3
s=z3.Solver()
bvars=[z3.Bool(“Var{0}”.format(x))表示范围(10)内的x]
#其中有3个变量应该为真
s、 添加(z3.PbEq([(x,1)表示bvars中的x],3))
s、 检查()
m=s.模型()
s=z3.Solver()
bvars=[z3.Bool(“Var{0}”.format(x))表示范围(10)内的x]
#=3个变量应为真
s、 添加(z3.PbGe([(x,1)表示bvars中的x],3))
s、 检查()
m=s.模型()

使用起来可能更简单、更快。它具有内置的
基数
门。请参阅。