Z3 托管异常:尝试使用 propagate-ineqs 策略时 Java API
Z3 Managed Exception : Java API while trying to use propagate-ineqs tactic
(declare-const a Int)
(declare-const b Int)
(declare-const c Int)
(assert (exists ((a0 Int) (b0 Int) (c0 Int))
(and (<= a 3)
(>= a 0)
(<= b 3)
(>= b 0)
(<= c 3)
(>= c 0)
(= 3 (+ a b c))
(> a 1)
(= a0 a)
(= b0 b)
(= c0 c)
(= a0 2)
(= b0 0)
(= c0 1))))
(apply (then qe ctx-solver-simplify propagate-ineqs))
我正在尝试使用为 Z3 Solver 提供的 Java-API 生成此代码。但是,这最终会抛出以下异常:
Z3 托管异常:propagate-ineqs 不支持 unsat 核心生产
Goal g = ctx.mkGoal(true, true, false);
g.add((BoolExpr) exp);
Tactic qe = ctx.mkTactic("qe");
Tactic simpify = ctx.mkTactic("simplify");
Tactic ctxSimpify = ctx.mkTactic("ctx-simplify");
Tactic ctxSolverSimplify = ctx.mkTactic("ctx-solver-simplify");
Tactic propagateIneqs = ctx.mkTactic("propagate-ineqs");
Tactic then = ctx.then(qe, simpify, ctxSimpify, ctxSolverSimplify,
propagateIneqs);
ApplyResult ar = then.apply(g);
BoolExpr result = ctx.mkAnd(ar.getSubgoals()[0].getFormulas());
请告诉我哪里出错了,以及如何在 Java-API 中使用策略 propagate-ineqs。这样,我就可以得到简化了琐碎不等式的答案。
您可以尝试在构建 Context ctx 期间明确关闭 unsat 核心功能。您可以传递带有选项及其值的 Map。 unsat cores 的选项是 "unsat_core" 并且可以设置为 "true" 或 "false".
命令
Goal g = ctx.mkGoal(true, true, false);
要求为目标 g
启用 unsat 核心提取(第二个 true
),但 propagate-ineqs
策略不支持该功能,因此它抛出异常.
(declare-const a Int)
(declare-const b Int)
(declare-const c Int)
(assert (exists ((a0 Int) (b0 Int) (c0 Int))
(and (<= a 3)
(>= a 0)
(<= b 3)
(>= b 0)
(<= c 3)
(>= c 0)
(= 3 (+ a b c))
(> a 1)
(= a0 a)
(= b0 b)
(= c0 c)
(= a0 2)
(= b0 0)
(= c0 1))))
(apply (then qe ctx-solver-simplify propagate-ineqs))
我正在尝试使用为 Z3 Solver 提供的 Java-API 生成此代码。但是,这最终会抛出以下异常:
Z3 托管异常:propagate-ineqs 不支持 unsat 核心生产
Goal g = ctx.mkGoal(true, true, false);
g.add((BoolExpr) exp);
Tactic qe = ctx.mkTactic("qe");
Tactic simpify = ctx.mkTactic("simplify");
Tactic ctxSimpify = ctx.mkTactic("ctx-simplify");
Tactic ctxSolverSimplify = ctx.mkTactic("ctx-solver-simplify");
Tactic propagateIneqs = ctx.mkTactic("propagate-ineqs");
Tactic then = ctx.then(qe, simpify, ctxSimpify, ctxSolverSimplify,
propagateIneqs);
ApplyResult ar = then.apply(g);
BoolExpr result = ctx.mkAnd(ar.getSubgoals()[0].getFormulas());
请告诉我哪里出错了,以及如何在 Java-API 中使用策略 propagate-ineqs。这样,我就可以得到简化了琐碎不等式的答案。
您可以尝试在构建 Context ctx 期间明确关闭 unsat 核心功能。您可以传递带有选项及其值的 Map。 unsat cores 的选项是 "unsat_core" 并且可以设置为 "true" 或 "false".
命令
Goal g = ctx.mkGoal(true, true, false);
要求为目标 g
启用 unsat 核心提取(第二个 true
),但 propagate-ineqs
策略不支持该功能,因此它抛出异常.