Z3
 
Loading...
Searching...
No Matches
Solver.java
Go to the documentation of this file.
1
19package com.microsoft.z3;
20
21import com.microsoft.z3.enumerations.Z3_lbool;
22
23import java.lang.ref.ReferenceQueue;
24import java.util.*;
25
29@SuppressWarnings("unchecked")
30public class Solver extends Z3Object {
34 public String getHelp()
35 {
36 return Native.solverGetHelp(getContext().nCtx(), getNativeObject());
37 }
38
44 public void setParameters(Params value)
45 {
46 getContext().checkContextMatch(value);
47 Native.solverSetParams(getContext().nCtx(), getNativeObject(),
48 value.getNativeObject());
49 }
50
57 {
58 return new ParamDescrs(getContext(), Native.solverGetParamDescrs(
59 getContext().nCtx(), getNativeObject()));
60 }
61
67 public int getNumScopes()
68 {
69 return Native
70 .solverGetNumScopes(getContext().nCtx(), getNativeObject());
71 }
72
77 public void push()
78 {
79 Native.solverPush(getContext().nCtx(), getNativeObject());
80 }
81
86 public void pop()
87 {
88 pop(1);
89 }
90
98 public void pop(int n)
99 {
100 Native.solverPop(getContext().nCtx(), getNativeObject(), n);
101 }
102
108 public void reset()
109 {
110 Native.solverReset(getContext().nCtx(), getNativeObject());
111 }
112
118 public void interrupt()
119 {
120 Native.solverInterrupt(getContext().nCtx(), getNativeObject());
121 }
122
128 public void add(Expr<BoolSort>... constraints)
129 {
130 getContext().checkContextMatch(constraints);
131 for (Expr<BoolSort> a : constraints)
132 {
133 Native.solverAssert(getContext().nCtx(), getNativeObject(),
134 a.getNativeObject());
135 }
136 }
137
138
153 public void assertAndTrack(Expr<BoolSort>[] constraints, Expr<BoolSort>[] ps)
154 {
155 getContext().checkContextMatch(constraints);
156 getContext().checkContextMatch(ps);
157 if (constraints.length != ps.length) {
158 throw new Z3Exception("Argument size mismatch");
159 }
160
161 for (int i = 0; i < constraints.length; i++) {
162 Native.solverAssertAndTrack(getContext().nCtx(), getNativeObject(),
163 constraints[i].getNativeObject(), ps[i].getNativeObject());
164 }
165 }
166
181 {
182 getContext().checkContextMatch(constraint);
183 getContext().checkContextMatch(p);
184
185 Native.solverAssertAndTrack(getContext().nCtx(), getNativeObject(),
186 constraint.getNativeObject(), p.getNativeObject());
187 }
188
192 public void fromFile(String file)
193 {
194 Native.solverFromFile(getContext().nCtx(), getNativeObject(), file);
195 }
196
200 public void fromString(String str)
201 {
202 Native.solverFromString(getContext().nCtx(), getNativeObject(), str);
203 }
204
205
211 public int getNumAssertions()
212 {
213 ASTVector assrts = new ASTVector(getContext(), Native.solverGetAssertions(getContext().nCtx(), getNativeObject()));
214 return assrts.size();
215 }
216
223 {
224 ASTVector assrts = new ASTVector(getContext(), Native.solverGetAssertions(getContext().nCtx(), getNativeObject()));
225 return assrts.ToBoolExprArray();
226 }
227
235 @SafeVarargs
236 public final Status check(Expr<BoolSort>... assumptions)
237 {
238 Z3_lbool r;
239 if (assumptions == null) {
240 r = Z3_lbool.fromInt(Native.solverCheck(getContext().nCtx(),
241 getNativeObject()));
242 } else {
243 r = Z3_lbool.fromInt(Native.solverCheckAssumptions(getContext()
244 .nCtx(), getNativeObject(), assumptions.length, AST
245 .arrayToNative(assumptions)));
246 }
247 return lboolToStatus(r);
248 }
249
257 @SuppressWarnings("rawtypes")
258 public Status check()
259 {
260 return check((Expr[]) null);
261 }
262
274 public Status getConsequences(Expr<BoolSort>[] assumptions, Expr<?>[] variables, List<Expr<BoolSort>> consequences)
275 {
276 ASTVector result = new ASTVector(getContext());
277 ASTVector asms = new ASTVector(getContext());
278 ASTVector vars = new ASTVector(getContext());
279 for (Expr<BoolSort> asm : assumptions) asms.push(asm);
280 for (Expr<?> v : variables) vars.push(v);
281 int r = Native.solverGetConsequences(getContext().nCtx(), getNativeObject(), asms.getNativeObject(), vars.getNativeObject(), result.getNativeObject());
282 for (int i = 0; i < result.size(); ++i) consequences.add((BoolExpr) Expr.create(getContext(), result.get(i).getNativeObject()));
283 return lboolToStatus(Z3_lbool.fromInt(r));
284 }
285
286
297 {
298 long x = Native.solverGetModel(getContext().nCtx(), getNativeObject());
299 if (x == 0) {
300 return null;
301 } else {
302 return new Model(getContext(), x);
303 }
304 }
305
316 {
317 long x = Native.solverGetProof(getContext().nCtx(), getNativeObject());
318 if (x == 0) {
319 return null;
320 } else {
321 return Expr.create(getContext(), x);
322 }
323 }
324
335 {
336
337 ASTVector core = new ASTVector(getContext(), Native.solverGetUnsatCore(getContext().nCtx(), getNativeObject()));
338 return core.ToBoolExprArray();
339 }
340
345 public String getReasonUnknown()
346 {
347 return Native.solverGetReasonUnknown(getContext().nCtx(),
348 getNativeObject());
349 }
350
355 {
356 return new Solver(ctx, Native.solverTranslate(getContext().nCtx(), getNativeObject(), ctx.nCtx()));
357 }
358
365 {
366 return new Statistics(getContext(), Native.solverGetStatistics(
367 getContext().nCtx(), getNativeObject()));
368 }
369
373 @Override
374 public String toString()
375 {
376 return Native
377 .solverToString(getContext().nCtx(), getNativeObject());
378 }
379
383 private Status lboolToStatus(Z3_lbool r)
384 {
385 switch (r)
386 {
387 case Z3_L_TRUE:
388 return Status.SATISFIABLE;
389 case Z3_L_FALSE:
390 return Status.UNSATISFIABLE;
391 default:
392 return Status.UNKNOWN;
393 }
394 }
395
396 Solver(Context ctx, long obj)
397 {
398 super(ctx, obj);
399 }
400
401 @Override
402 void incRef() {
403 Native.solverIncRef(getContext().nCtx(), getNativeObject());
404 }
405
406 @Override
407 void addToReferenceQueue() {
408 getContext().getReferenceQueue().storeReference(this, SolverRef::new);
409 }
410
411 private static class SolverRef extends Z3ReferenceQueue.Reference<Solver> {
412
413 private SolverRef(Solver referent, ReferenceQueue<Z3Object> q) {
414 super(referent, q);
415 }
416
417 @Override
418 void decRef(Context ctx, long z3Obj) {
419 Native.solverDecRef(ctx.nCtx(), z3Obj);
420 }
421 }
422}
Solver translate(Context ctx)
Definition Solver.java:354
Status getConsequences(Expr< BoolSort >[] assumptions, Expr<?>[] variables, List< Expr< BoolSort > > consequences)
Definition Solver.java:274
ParamDescrs getParameterDescriptions()
Definition Solver.java:56
final Status check(Expr< BoolSort >... assumptions)
Definition Solver.java:236
void assertAndTrack(Expr< BoolSort > constraint, Expr< BoolSort > p)
Definition Solver.java:180
void setParameters(Params value)
Definition Solver.java:44
BoolExpr[] getUnsatCore()
Definition Solver.java:334
BoolExpr[] getAssertions()
Definition Solver.java:222
void fromString(String str)
Load solver assertions from a string.
Definition Solver.java:200
void add(Expr< BoolSort >... constraints)
Definition Solver.java:128
void fromFile(String file)
Load solver assertions from a file.
Definition Solver.java:192
void assertAndTrack(Expr< BoolSort >[] constraints, Expr< BoolSort >[] ps)
Definition Solver.java:153
Statistics getStatistics()
Definition Solver.java:364
static long[] arrayToNative(Z3Object[] a)
Definition Z3Object.java:73
static Status fromInt(int v)
Definition Status.java:41
Z3_lbool
Lifted Boolean type: false, undefined, true.
Definition z3_api.h:58
@ Z3_L_TRUE
Definition z3_api.h:61
@ Z3_L_FALSE
Definition z3_api.h:59