z3py 中 check-sat-using 的等价物是什么?

What is the equivalent of check-sat-using in z3py?

我一直在努力实现与此 post 完全相同的目标。 Z3 randomness of generated model values

除了,答案在 smt 中,我如何在 python 中使用 z3py 中的 check-sat-using? 有人可以帮我把这段代码翻译成 python 代码吗?

(set-option :smt.arith.random_initial_value true)
(declare-const x Int)
(declare-const y Int)
(assert (> (+ x y) 0))
(check-sat-using (using-params qflra :random_seed 1))
(get-model)
(check-sat-using (using-params qflra :random_seed 2))
(get-model)
(check-sat-using (using-params qflra :random_seed 3))
(get-model)

在 SMTLib 接口中,check-sat-using 是一种告诉 z3 使用何种策略的方式。当您使用 z3py 时,您直接使用战术语言并显式创建求解器。所以,从某种意义上说,z3py 中没有对应的调用check-sat-using。相反,你会得到一整套战术语言,它更加灵活和强大。

示例见:http://www.cs.tau.ac.il/~msagiv/courses/asv/z3py/strategies-examples.htm

另请注意,check-sat-using在某种意义上结合了策略和设置,在z3py中您使用set_param来实现参数设置,并使用策略语言来表达您要使用的策略。

根据一般经验,不要尝试在 SMTLib 和 Z3 Python 接口之间 "translate"。虽然两者都可以表达相同的查询,但编程模型不同,尝试翻译 "command-by-command" 会导致您使用非惯用且难以维护的代码。相反,如果您想使用 Z3py,只需了解那里的工作方式,记住它们看起来可能与 SMTLib 领域截然不同。这是一个很好的资源,可以通读以帮助您入门:http://www.cs.tau.ac.il/~msagiv/courses/asv/z3py/