3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-14 04:48:45 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-03-07 15:12:20 +01:00
parent 983a552325
commit dd5744a357

View file

@ -19,6 +19,7 @@ Notes:
package com.microsoft.z3;
import com.microsoft.z3.enumerations.Z3_lbool;
import java.util.*;
/**
* Solvers.
@ -229,15 +230,7 @@ public class Solver extends Z3Object {
.nCtx(), getNativeObject(), assumptions.length, AST
.arrayToNative(assumptions)));
}
switch (r)
{
case Z3_L_TRUE:
return Status.SATISFIABLE;
case Z3_L_FALSE:
return Status.UNSATISFIABLE;
default:
return Status.UNKNOWN;
}
return lboolToStatus(r);
}
/**
@ -252,6 +245,30 @@ public class Solver extends Z3Object {
return check((Expr[]) null);
}
/**
* Retrieve fixed assignments to the set of variables in the form of consequences.
* Each consequence is an implication of the form
*
* relevant-assumptions Implies variable = value
*
* where the relevant assumptions is a subset of the assumptions that are passed in
* and the equality on the right side of the implication indicates how a variable
* is fixed.
*
*/
public Status getConsequences(BoolExpr[] assumptions, Expr[] variables, List<BoolExpr> consequences)
{
ASTVector result = new ASTVector(getContext());
ASTVector asms = new ASTVector(getContext());
ASTVector vars = new ASTVector(getContext());
for (BoolExpr asm : assumptions) asms.push(asm);
for (Expr v : variables) vars.push(v);
int r = Native.solverGetConsequences(getContext().nCtx(), getNativeObject(), asms.getNativeObject(), vars.getNativeObject(), result.getNativeObject());
for (int i = 0; i < result.size(); ++i) consequences.add((BoolExpr)result.get(i));
return lboolToStatus(Z3_lbool.fromInt(r));
}
/**
* The model of the last {@code Check}.
* Remarks: The result is
@ -345,6 +362,22 @@ public class Solver extends Z3Object {
.solverToString(getContext().nCtx(), getNativeObject());
}
/**
* convert lifted Boolean to status
*/
private Status lboolToStatus(Z3_lbool r)
{
switch (r)
{
case Z3_L_TRUE:
return Status.SATISFIABLE;
case Z3_L_FALSE:
return Status.UNSATISFIABLE;
default:
return Status.UNKNOWN;
}
}
Solver(Context ctx, long obj)
{
super(ctx, obj);