【发布时间】:2022-01-05 06:29:24
【问题描述】:
我想使用现有的solver() 作为输入。例如,我有三个求解器:
Tie, Shirt = Bools('Tie Shirt')
s_one = Solver()
s_one.add(Or(Tie, Shirt))
s_two = Solver()
s_two.add(Or(Not(Tie), Shirt))
s_three = Solver()
s_three.add(Or(Not(Tie), Not(Shirt)))
现在我想将所有求解器组合成这样的东西: (这个脚本不起作用,只是为了说明我的意思)
s_four = Solver()
s_four.add(s_one, Or(s_two, s_three))
我该怎么做?
【问题讨论】:
-
那么,告诉您如何将
s_one结果与Or(s_two, s_three)结果结合起来的规则是什么? -
@KarlKnechtel 这个问题对于 SMT 求解器来说确实有意义。告诉您如何组合它们的规则在某种意义上是每个求解器中断言的“元”合取和析取。对于最终用户程序来说,这是一件奇怪的事情,但我可以想象构建在 z3 之上的库可能需要这种工具。