21 using System.Diagnostics.Contracts;
23 namespace Microsoft.Z3
28 [ContractVerification(
true)]
38 Contract.Requires(a != null);
51 Contract.Requires(f != null);
56 throw new Z3Exception(
"Non-zero arity functions and arrays have FunctionInterpretations as a model. Use FuncInterp.");
72 Contract.Requires(f != null);
89 throw new Z3Exception(
"Argument was not an array constant");
96 throw new Z3Exception(
"Constant functions do not have a function interpretation; use ConstInterp");
102 if (n == IntPtr.Zero)
112 public uint NumConsts
124 Contract.Ensures(Contract.Result<
FuncDecl[]>() != null);
128 for (uint i = 0; i < n; i++)
149 Contract.Ensures(Contract.Result<
FuncDecl[]>() != null);
153 for (uint i = 0; i < n; i++)
166 Contract.Ensures(Contract.Result<
FuncDecl[]>() != null);
168 var nFuncs = NumFuncs;
169 var nConsts = NumConsts;
170 uint n = nFuncs + nConsts;
172 for (uint i = 0; i < nConsts; i++)
174 for (uint i = 0; i < nFuncs; i++)
207 Contract.Requires(t != null);
208 Contract.Ensures(Contract.Result<
Expr>() != null);
210 IntPtr v = IntPtr.Zero;
220 public Expr Evaluate(
Expr t,
bool completion =
false)
222 Contract.Requires(t != null);
223 Contract.Ensures(Contract.Result<
Expr>() != null);
225 return Eval(t, completion);
247 Contract.Ensures(Contract.Result<
Sort[]>() != null);
251 for (uint i = 0; i < n; i++)
265 Contract.Requires(s != null);
266 Contract.Ensures(Contract.Result<
Expr[]>() != null);
271 for (uint i = 0; i < n; i++)
272 res[i] =
Expr.Create(
Context, nUniv[i].NativeObject);
280 public override string ToString()
289 Contract.Requires(ctx != null);
292 internal class DecRefQueue : Z3.DecRefQueue
294 public override void IncRef(Context ctx, IntPtr obj)
296 Native.Z3_model_inc_ref(ctx.nCtx, obj);
299 public override void DecRef(Context ctx, IntPtr obj)
301 Native.Z3_model_dec_ref(ctx.nCtx, obj);
305 internal override void IncRef(IntPtr o)
307 Context.Model_DRQ.IncAndClear(Context, o);
311 internal override void DecRef(IntPtr o)
313 Context.Model_DRQ.Add(o);