java 中的 z3 使用问题和奇怪的错误
z3 usage problem in java and strange error
我正在使用 Z3 进行约束检查,我目前正在使用 java Z3 包。
我正在做的是,这是我的 java 代码:
Context context = new Context();
Solver s=context.mkSolver();
IntExpr i=context.mkIntConst("i");
IntExpr zero=context.mkInt(1);//int i;
BoolExpr initial=context.mkEq(i,zero);//i=0;
IntExpr one=context.mkInt(1); //initial 1
ArithExpr ipp=context.mkAdd(i,one);//i+1
BoolExpr ippResult=context.mkEq(i,ipp);//i=i+1
BoolExpr gtI=context.mkGe(i,zero);
s.add(initial);
s.add(ippResult);
s.add(gtI);
System.out.println(s+"\n\n");
System.out.println(s.check());
这是我的输出
(declare-fun i () Int)
(assert (= i 1))
(assert (= i (+ i 1)))
(assert (>= i 1))
UNSATISFIABLE
所以我不知道为什么 z3 returns 它是不可满足的?因为实际上i+1>=1,所以很奇怪。我不知道我写错了什么代码。谢谢!
您的程序未完成;你使用 gtI
但你从未定义它。可能 cut-and-paste 错误。
无论如何,输出的 SMTLib 部分很好地捕获了您的问题:
(declare-fun i () Int)
(assert (= i 1))
(assert (= i (+ i 1)))
(assert (>= i 1))
第二行说i
是1
。第三行表示 i
等于 i+1
。结合这两者,求解器推断出一定是 1 = 2
的情况。这显然不是真的,因此你得到 UNSATISFIABLE
结果。
我怀疑您想创建一个新变量并在创建 i+1
时使用它,或许 j
?但是很难在不知道你想要达到什么目标的情况下发表意见。
我正在使用 Z3 进行约束检查,我目前正在使用 java Z3 包。
我正在做的是,这是我的 java 代码:
Context context = new Context();
Solver s=context.mkSolver();
IntExpr i=context.mkIntConst("i");
IntExpr zero=context.mkInt(1);//int i;
BoolExpr initial=context.mkEq(i,zero);//i=0;
IntExpr one=context.mkInt(1); //initial 1
ArithExpr ipp=context.mkAdd(i,one);//i+1
BoolExpr ippResult=context.mkEq(i,ipp);//i=i+1
BoolExpr gtI=context.mkGe(i,zero);
s.add(initial);
s.add(ippResult);
s.add(gtI);
System.out.println(s+"\n\n");
System.out.println(s.check());
这是我的输出
(declare-fun i () Int)
(assert (= i 1))
(assert (= i (+ i 1)))
(assert (>= i 1))
UNSATISFIABLE
所以我不知道为什么 z3 returns 它是不可满足的?因为实际上i+1>=1,所以很奇怪。我不知道我写错了什么代码。谢谢!
您的程序未完成;你使用 gtI
但你从未定义它。可能 cut-and-paste 错误。
无论如何,输出的 SMTLib 部分很好地捕获了您的问题:
(declare-fun i () Int)
(assert (= i 1))
(assert (= i (+ i 1)))
(assert (>= i 1))
第二行说i
是1
。第三行表示 i
等于 i+1
。结合这两者,求解器推断出一定是 1 = 2
的情况。这显然不是真的,因此你得到 UNSATISFIABLE
结果。
我怀疑您想创建一个新变量并在创建 i+1
时使用它,或许 j
?但是很难在不知道你想要达到什么目标的情况下发表意见。