z3py 对 Exists 可满足数量的强制约束
z3py cast constraint on number satisfiable of Exists
我对 z3/z3py 很陌生。
我的目标:
假设我有一个大小为 5 的 IntVector。我有 5 个 Exists(...) 表达式,并且想将 exists expressiosn 是 true 还是 false 作为 1 和 0 存储在相应位置的 IntVector 中。最后,我想将 Sum(IntVector) 的约束设置为一个数字,表示必须有这么多的 Exists 表达式为真,其余为假。我不关心 Exists 表达式是否可满足,我唯一期望的是一定数量的 Exists 表达式是否为真。
我的问题:
我只是使用求解器并将上述所有假设添加到其中以检查可满足性。上面的实现耗时很长returns"unknown"。但是,如果我只检查一个 Exists 表达式而不添加 true Exists 表达式数量的约束,我将在短时间内得到 sat 或 unsat。如果我一起检查所有 Exists 表达式而不添加 true Exists 表达式数量的约束,我将得到不满意的(因为一些 Exists 表达式本质上是不满意的)。
我觉得战术和子目标可能会解决我的问题。但是我对它们的了解还不够
我希望我上面的问题是有道理的。有人可以在这里给我一些指示吗?
也许您可以将其视为最大卫星问题。
我最近向 Z3 添加了优化功能,它允许您设置软约束。
此外,解决 Exists(x1, Fml(x1)) 的可满足性相当于解决
Fml(x1) 的可满足性,其中 x1 是一个自由常数。所以听起来存在闭包是一种矫枉过正。
示例:
(define-fun f1 ((x Int)) Bool < definition of formula f1 >)
(define-fun f2 ((x Int)) Bool < definition of formula f2 >)
(define-fun f3 ((x Int)) Bool < definition of formula f3 >)
(declare-const x1 Int)
(declare-const x2 Int)
(declare-const x3 Int)
(assert-soft (f1 x1))
(assert-soft (f2 x2))
(assert-soft (f3 x3))
(check-sat)
结果将最大化满足软约束的数量。
部分输出是违反软约束的数量。
我对 z3/z3py 很陌生。
我的目标:
假设我有一个大小为 5 的 IntVector。我有 5 个 Exists(...) 表达式,并且想将 exists expressiosn 是 true 还是 false 作为 1 和 0 存储在相应位置的 IntVector 中。最后,我想将 Sum(IntVector) 的约束设置为一个数字,表示必须有这么多的 Exists 表达式为真,其余为假。我不关心 Exists 表达式是否可满足,我唯一期望的是一定数量的 Exists 表达式是否为真。
我的问题:
我只是使用求解器并将上述所有假设添加到其中以检查可满足性。上面的实现耗时很长returns"unknown"。但是,如果我只检查一个 Exists 表达式而不添加 true Exists 表达式数量的约束,我将在短时间内得到 sat 或 unsat。如果我一起检查所有 Exists 表达式而不添加 true Exists 表达式数量的约束,我将得到不满意的(因为一些 Exists 表达式本质上是不满意的)。 我觉得战术和子目标可能会解决我的问题。但是我对它们的了解还不够
我希望我上面的问题是有道理的。有人可以在这里给我一些指示吗?
也许您可以将其视为最大卫星问题。 我最近向 Z3 添加了优化功能,它允许您设置软约束。 此外,解决 Exists(x1, Fml(x1)) 的可满足性相当于解决 Fml(x1) 的可满足性,其中 x1 是一个自由常数。所以听起来存在闭包是一种矫枉过正。
示例:
(define-fun f1 ((x Int)) Bool < definition of formula f1 >)
(define-fun f2 ((x Int)) Bool < definition of formula f2 >)
(define-fun f3 ((x Int)) Bool < definition of formula f3 >)
(declare-const x1 Int)
(declare-const x2 Int)
(declare-const x3 Int)
(assert-soft (f1 x1))
(assert-soft (f2 x2))
(assert-soft (f3 x3))
(check-sat)
结果将最大化满足软约束的数量。 部分输出是违反软约束的数量。