21 using System.Collections.Generic;
22 using System.Runtime.InteropServices;
23 using System.Diagnostics.Contracts;
25 namespace Microsoft.Z3
30 [ContractVerification(
true)]
47 public Context(Dictionary<string, string> settings)
50 Contract.Requires(settings != null);
53 foreach (KeyValuePair<string, string> kv
in settings)
71 Contract.Ensures(Contract.Result<
IntSymbol>() != null);
81 Contract.Ensures(Contract.Result<
StringSymbol>() != null);
89 internal Symbol[] MkSymbols(
string[] names)
91 Contract.Ensures(names == null || Contract.Result<
Symbol[]>() != null);
92 Contract.Ensures(names != null || Contract.Result<
Symbol[]>() == null);
93 Contract.Ensures(Contract.Result<
Symbol[]>() == null || Contract.Result<
Symbol[]>().Length == names.Length);
94 Contract.Ensures(Contract.Result<
Symbol[]>() == null || Contract.ForAll(Contract.Result<
Symbol[]>(), s => s != null));
96 if (names == null)
return null;
98 for (
int i = 0; i < names.Length; ++i) result[i] = MkSymbol(names[i]);
105 private IntSort m_intSort = null;
115 Contract.Ensures(Contract.Result<
BoolSort>() != null);
117 if (m_boolSort == null) m_boolSort =
new BoolSort(
this);
return m_boolSort;
128 Contract.Ensures(Contract.Result<
IntSort>() != null);
129 if (m_intSort == null) m_intSort =
new IntSort(
this);
return m_intSort;
144 Contract.Ensures(Contract.Result<
BoolSort>() != null);
153 Contract.Requires(s != null);
156 CheckContextMatch(s);
167 return MkUninterpretedSort(MkSymbol(str));
175 Contract.Ensures(Contract.Result<
IntSort>() != null);
185 Contract.Ensures(Contract.Result<
RealSort>() != null);
194 Contract.Ensures(Contract.Result<
BitVecSort>() != null);
204 Contract.Requires(domain != null);
205 Contract.Requires(range != null);
206 Contract.Ensures(Contract.Result<
ArraySort>() != null);
208 CheckContextMatch(domain);
209 CheckContextMatch(range);
210 return new ArraySort(
this, domain, range);
218 Contract.Requires(name != null);
219 Contract.Requires(fieldNames != null);
220 Contract.Requires(Contract.ForAll(fieldNames, fn => fn != null));
221 Contract.Requires(fieldSorts == null || Contract.ForAll(fieldSorts, fs => fs != null));
222 Contract.Ensures(Contract.Result<
TupleSort>() != null);
224 CheckContextMatch(name);
225 CheckContextMatch(fieldNames);
226 CheckContextMatch(fieldSorts);
227 return new TupleSort(
this, name, (uint)fieldNames.Length, fieldNames, fieldSorts);
235 Contract.Requires(name != null);
236 Contract.Requires(enumNames != null);
237 Contract.Requires(Contract.ForAll(enumNames, f => f != null));
239 Contract.Ensures(Contract.Result<
EnumSort>() != null);
241 CheckContextMatch(name);
242 CheckContextMatch(enumNames);
243 return new EnumSort(
this, name, enumNames);
249 public EnumSort MkEnumSort(
string name,
string[] enumNames)
251 Contract.Requires(enumNames != null);
252 Contract.Ensures(Contract.Result<
EnumSort>() != null);
254 return new EnumSort(
this, MkSymbol(name), MkSymbols(enumNames));
262 Contract.Requires(name != null);
263 Contract.Requires(elemSort != null);
264 Contract.Ensures(Contract.Result<
ListSort>() != null);
266 CheckContextMatch(name);
267 CheckContextMatch(elemSort);
268 return new ListSort(
this, name, elemSort);
276 Contract.Requires(elemSort != null);
277 Contract.Ensures(Contract.Result<
ListSort>() != null);
279 CheckContextMatch(elemSort);
280 return new ListSort(
this, MkSymbol(name), elemSort);
288 Contract.Requires(name != null);
291 CheckContextMatch(name);
319 Contract.Requires(name != null);
320 Contract.Requires(recognizer != null);
321 Contract.Ensures(Contract.Result<
Constructor>() != null);
323 return new Constructor(
this, name, recognizer, fieldNames, sorts, sortRefs);
335 public Constructor MkConstructor(
string name,
string recognizer,
string[] fieldNames = null,
Sort[] sorts = null, uint[] sortRefs = null)
337 Contract.Ensures(Contract.Result<
Constructor>() != null);
339 return new Constructor(
this, MkSymbol(name), MkSymbol(recognizer), MkSymbols(fieldNames), sorts, sortRefs);
347 Contract.Requires(name != null);
348 Contract.Requires(constructors != null);
349 Contract.Requires(Contract.ForAll(constructors, c => c != null));
351 Contract.Ensures(Contract.Result<
DatatypeSort>() != null);
353 CheckContextMatch(name);
354 CheckContextMatch(constructors);
363 Contract.Requires(constructors != null);
364 Contract.Requires(Contract.ForAll(constructors, c => c != null));
365 Contract.Ensures(Contract.Result<
DatatypeSort>() != null);
367 CheckContextMatch(constructors);
368 return new DatatypeSort(
this, MkSymbol(name), constructors);
378 Contract.Requires(names != null);
379 Contract.Requires(c != null);
380 Contract.Requires(names.Length == c.Length);
381 Contract.Requires(Contract.ForAll(0, c.Length, j => c[j] != null));
382 Contract.Requires(Contract.ForAll(names, name => name != null));
383 Contract.Ensures(Contract.Result<
DatatypeSort[]>() != null);
385 CheckContextMatch(names);
386 uint n = (uint)names.Length;
388 IntPtr[] n_constr =
new IntPtr[n];
389 for (uint i = 0; i < n; i++)
391 var constructor = c[i];
392 Contract.Assume(Contract.ForAll(constructor, arr => arr != null),
"Clousot does not support yet quantified formula on multidimensional arrays");
393 CheckContextMatch(constructor);
395 n_constr[i] = cla[i].NativeObject;
397 IntPtr[] n_res =
new IntPtr[n];
400 for (uint i = 0; i < n; i++)
413 Contract.Requires(names != null);
414 Contract.Requires(c != null);
415 Contract.Requires(names.Length == c.Length);
416 Contract.Requires(Contract.ForAll(0, c.Length, j => c[j] != null));
417 Contract.Requires(Contract.ForAll(names, name => name != null));
418 Contract.Ensures(Contract.Result<
DatatypeSort[]>() != null);
420 return MkDatatypeSorts(MkSymbols(names), c);
426 #region Function Declarations
432 Contract.Requires(name != null);
433 Contract.Requires(range != null);
434 Contract.Requires(Contract.ForAll(domain, d => d != null));
435 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
437 CheckContextMatch(name);
438 CheckContextMatch(domain);
439 CheckContextMatch(range);
440 return new FuncDecl(
this, name, domain, range);
448 Contract.Requires(name != null);
449 Contract.Requires(domain != null);
450 Contract.Requires(range != null);
451 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
453 CheckContextMatch(name);
454 CheckContextMatch(domain);
455 CheckContextMatch(range);
457 return new FuncDecl(
this, name, q, range);
465 Contract.Requires(range != null);
466 Contract.Requires(Contract.ForAll(domain, d => d != null));
467 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
469 CheckContextMatch(domain);
470 CheckContextMatch(range);
471 return new FuncDecl(
this, MkSymbol(name), domain, range);
479 Contract.Requires(range != null);
480 Contract.Requires(domain != null);
481 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
483 CheckContextMatch(domain);
484 CheckContextMatch(range);
486 return new FuncDecl(
this, MkSymbol(name), q, range);
496 Contract.Requires(range != null);
497 Contract.Requires(Contract.ForAll(domain, d => d != null));
498 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
500 CheckContextMatch(domain);
501 CheckContextMatch(range);
502 return new FuncDecl(
this, prefix, domain, range);
510 Contract.Requires(name != null);
511 Contract.Requires(range != null);
512 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
514 CheckContextMatch(name);
515 CheckContextMatch(range);
516 return new FuncDecl(
this, name, null, range);
524 Contract.Requires(range != null);
525 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
527 CheckContextMatch(range);
528 return new FuncDecl(
this, MkSymbol(name), null, range);
538 Contract.Requires(range != null);
539 Contract.Ensures(Contract.Result<
FuncDecl>() != null);
541 CheckContextMatch(range);
542 return new FuncDecl(
this, prefix, null, range);
546 #region Bound Variables
554 Contract.Requires(ty != null);
555 Contract.Ensures(Contract.Result<
Expr>() != null);
561 #region Quantifier Patterns
567 Contract.Requires(terms != null);
568 if (terms.Length == 0)
569 throw new Z3Exception(
"Cannot create a pattern from zero terms");
571 Contract.Ensures(Contract.Result<
Pattern>() != null);
573 Contract.EndContractBlock();
575 IntPtr[] termsNative =
AST.ArrayToNative(terms);
586 Contract.Requires(name != null);
587 Contract.Requires(range != null);
588 Contract.Ensures(Contract.Result<
Expr>() != null);
590 CheckContextMatch(name);
591 CheckContextMatch(range);
601 Contract.Requires(range != null);
602 Contract.Ensures(Contract.Result<
Expr>() != null);
604 return MkConst(MkSymbol(name), range);
611 public Expr MkFreshConst(
string prefix,
Sort range)
613 Contract.Requires(range != null);
614 Contract.Ensures(Contract.Result<
Expr>() != null);
616 CheckContextMatch(range);
626 Contract.Requires(f != null);
627 Contract.Ensures(Contract.Result<
Expr>() != null);
637 Contract.Requires(name != null);
638 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
648 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
658 Contract.Requires(name != null);
659 Contract.Ensures(Contract.Result<
IntExpr>() != null);
669 Contract.Requires(name != null);
670 Contract.Ensures(Contract.Result<
IntExpr>() != null);
680 Contract.Requires(name != null);
681 Contract.Ensures(Contract.Result<
RealExpr>() != null);
691 Contract.Ensures(Contract.Result<
RealExpr>() != null);
701 Contract.Requires(name != null);
702 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
704 return (
BitVecExpr)MkConst(name, MkBitVecSort(size));
712 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
714 return (
BitVecExpr)MkConst(name, MkBitVecSort(size));
724 Contract.Requires(f != null);
725 Contract.Requires(args == null || Contract.ForAll(args, a => a != null));
726 Contract.Ensures(Contract.Result<
Expr>() != null);
728 CheckContextMatch(f);
729 CheckContextMatch(args);
730 return Expr.Create(
this, f, args);
733 #region Propositional
739 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
749 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
759 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
761 return value ? MkTrue() : MkFalse();
769 Contract.Requires(x != null);
770 Contract.Requires(y != null);
771 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
773 CheckContextMatch(x);
774 CheckContextMatch(y);
783 Contract.Requires(args != null);
784 Contract.Requires(Contract.ForAll(args, a => a != null));
786 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
788 CheckContextMatch(args);
797 Contract.Requires(a != null);
798 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
800 CheckContextMatch(a);
812 Contract.Requires(t1 != null);
813 Contract.Requires(t2 != null);
814 Contract.Requires(t3 != null);
815 Contract.Ensures(Contract.Result<
Expr>() != null);
817 CheckContextMatch(t1);
818 CheckContextMatch(t2);
819 CheckContextMatch(t3);
820 return Expr.Create(
this,
Native.
Z3_mk_ite(nCtx, t1.NativeObject, t2.NativeObject, t3.NativeObject));
828 Contract.Requires(t1 != null);
829 Contract.Requires(t2 != null);
830 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
832 CheckContextMatch(t1);
833 CheckContextMatch(t2);
842 Contract.Requires(t1 != null);
843 Contract.Requires(t2 != null);
844 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
846 CheckContextMatch(t1);
847 CheckContextMatch(t2);
856 Contract.Requires(t1 != null);
857 Contract.Requires(t2 != null);
858 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
860 CheckContextMatch(t1);
861 CheckContextMatch(t2);
870 Contract.Requires(t != null);
871 Contract.Requires(Contract.ForAll(t, a => a != null));
872 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
874 CheckContextMatch(t);
883 Contract.Requires(t != null);
884 Contract.Requires(Contract.ForAll(t, a => a != null));
885 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
887 CheckContextMatch(t);
898 Contract.Requires(t != null);
899 Contract.Requires(Contract.ForAll(t, a => a != null));
900 Contract.Ensures(Contract.Result<
ArithExpr>() != null);
902 CheckContextMatch(t);
911 Contract.Requires(t != null);
912 Contract.Requires(Contract.ForAll(t, a => a != null));
913 Contract.Ensures(Contract.Result<
ArithExpr>() != null);
915 CheckContextMatch(t);
924 Contract.Requires(t != null);
925 Contract.Requires(Contract.ForAll(t, a => a != null));
926 Contract.Ensures(Contract.Result<
ArithExpr>() != null);
928 CheckContextMatch(t);
937 Contract.Requires(t != null);
938 Contract.Ensures(Contract.Result<
ArithExpr>() != null);
940 CheckContextMatch(t);
949 Contract.Requires(t1 != null);
950 Contract.Requires(t2 != null);
951 Contract.Ensures(Contract.Result<
ArithExpr>() != null);
953 CheckContextMatch(t1);
954 CheckContextMatch(t2);
964 Contract.Requires(t1 != null);
965 Contract.Requires(t2 != null);
966 Contract.Ensures(Contract.Result<
IntExpr>() != null);
968 CheckContextMatch(t1);
969 CheckContextMatch(t2);
979 Contract.Requires(t1 != null);
980 Contract.Requires(t2 != null);
981 Contract.Ensures(Contract.Result<
IntExpr>() != null);
983 CheckContextMatch(t1);
984 CheckContextMatch(t2);
993 Contract.Requires(t1 != null);
994 Contract.Requires(t2 != null);
995 Contract.Ensures(Contract.Result<
ArithExpr>() != null);
997 CheckContextMatch(t1);
998 CheckContextMatch(t2);
1007 Contract.Requires(t1 != null);
1008 Contract.Requires(t2 != null);
1009 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1011 CheckContextMatch(t1);
1012 CheckContextMatch(t2);
1021 Contract.Requires(t1 != null);
1022 Contract.Requires(t2 != null);
1023 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1025 CheckContextMatch(t1);
1026 CheckContextMatch(t2);
1035 Contract.Requires(t1 != null);
1036 Contract.Requires(t2 != null);
1037 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1039 CheckContextMatch(t1);
1040 CheckContextMatch(t2);
1049 Contract.Requires(t1 != null);
1050 Contract.Requires(t2 != null);
1051 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1053 CheckContextMatch(t1);
1054 CheckContextMatch(t2);
1070 Contract.Requires(t != null);
1071 Contract.Ensures(Contract.Result<
RealExpr>() != null);
1073 CheckContextMatch(t);
1086 Contract.Requires(t != null);
1087 Contract.Ensures(Contract.Result<
IntExpr>() != null);
1089 CheckContextMatch(t);
1098 Contract.Requires(t != null);
1099 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1101 CheckContextMatch(t);
1113 Contract.Requires(t != null);
1114 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1116 CheckContextMatch(t);
1126 Contract.Requires(t != null);
1127 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1129 CheckContextMatch(t);
1139 Contract.Requires(t != null);
1140 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1142 CheckContextMatch(t);
1152 Contract.Requires(t1 != null);
1153 Contract.Requires(t2 != null);
1154 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1156 CheckContextMatch(t1);
1157 CheckContextMatch(t2);
1167 Contract.Requires(t1 != null);
1168 Contract.Requires(t2 != null);
1169 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1171 CheckContextMatch(t1);
1172 CheckContextMatch(t2);
1182 Contract.Requires(t1 != null);
1183 Contract.Requires(t2 != null);
1184 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1186 CheckContextMatch(t1);
1187 CheckContextMatch(t2);
1197 Contract.Requires(t1 != null);
1198 Contract.Requires(t2 != null);
1199 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1201 CheckContextMatch(t1);
1202 CheckContextMatch(t2);
1212 Contract.Requires(t1 != null);
1213 Contract.Requires(t2 != null);
1214 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1216 CheckContextMatch(t1);
1217 CheckContextMatch(t2);
1227 Contract.Requires(t1 != null);
1228 Contract.Requires(t2 != null);
1229 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1231 CheckContextMatch(t1);
1232 CheckContextMatch(t2);
1242 Contract.Requires(t != null);
1243 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1245 CheckContextMatch(t);
1255 Contract.Requires(t1 != null);
1256 Contract.Requires(t2 != null);
1257 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1259 CheckContextMatch(t1);
1260 CheckContextMatch(t2);
1270 Contract.Requires(t1 != null);
1271 Contract.Requires(t2 != null);
1272 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1274 CheckContextMatch(t1);
1275 CheckContextMatch(t2);
1285 Contract.Requires(t1 != null);
1286 Contract.Requires(t2 != null);
1287 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1289 CheckContextMatch(t1);
1290 CheckContextMatch(t2);
1305 Contract.Requires(t1 != null);
1306 Contract.Requires(t2 != null);
1307 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1309 CheckContextMatch(t1);
1310 CheckContextMatch(t2);
1329 Contract.Requires(t1 != null);
1330 Contract.Requires(t2 != null);
1331 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1333 CheckContextMatch(t1);
1334 CheckContextMatch(t2);
1348 Contract.Requires(t1 != null);
1349 Contract.Requires(t2 != null);
1350 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1352 CheckContextMatch(t1);
1353 CheckContextMatch(t2);
1369 Contract.Requires(t1 != null);
1370 Contract.Requires(t2 != null);
1371 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1373 CheckContextMatch(t1);
1374 CheckContextMatch(t2);
1387 Contract.Requires(t1 != null);
1388 Contract.Requires(t2 != null);
1389 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1391 CheckContextMatch(t1);
1392 CheckContextMatch(t2);
1404 Contract.Requires(t1 != null);
1405 Contract.Requires(t2 != null);
1406 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1408 CheckContextMatch(t1);
1409 CheckContextMatch(t2);
1421 Contract.Requires(t1 != null);
1422 Contract.Requires(t2 != null);
1423 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1425 CheckContextMatch(t1);
1426 CheckContextMatch(t2);
1438 Contract.Requires(t1 != null);
1439 Contract.Requires(t2 != null);
1440 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1442 CheckContextMatch(t1);
1443 CheckContextMatch(t2);
1455 Contract.Requires(t1 != null);
1456 Contract.Requires(t2 != null);
1457 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1459 CheckContextMatch(t1);
1460 CheckContextMatch(t2);
1472 Contract.Requires(t1 != null);
1473 Contract.Requires(t2 != null);
1474 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1476 CheckContextMatch(t1);
1477 CheckContextMatch(t2);
1489 Contract.Requires(t1 != null);
1490 Contract.Requires(t2 != null);
1491 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1493 CheckContextMatch(t1);
1494 CheckContextMatch(t2);
1506 Contract.Requires(t1 != null);
1507 Contract.Requires(t2 != null);
1508 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1510 CheckContextMatch(t1);
1511 CheckContextMatch(t2);
1523 Contract.Requires(t1 != null);
1524 Contract.Requires(t2 != null);
1525 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1527 CheckContextMatch(t1);
1528 CheckContextMatch(t2);
1544 Contract.Requires(t1 != null);
1545 Contract.Requires(t2 != null);
1546 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1548 CheckContextMatch(t1);
1549 CheckContextMatch(t2);
1564 Contract.Requires(t != null);
1565 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1567 CheckContextMatch(t);
1581 Contract.Requires(t != null);
1582 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1584 CheckContextMatch(t);
1599 Contract.Requires(t != null);
1600 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1602 CheckContextMatch(t);
1614 Contract.Requires(t != null);
1615 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1617 CheckContextMatch(t);
1635 Contract.Requires(t1 != null);
1636 Contract.Requires(t2 != null);
1637 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1639 CheckContextMatch(t1);
1640 CheckContextMatch(t2);
1658 Contract.Requires(t1 != null);
1659 Contract.Requires(t2 != null);
1660 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1662 CheckContextMatch(t1);
1663 CheckContextMatch(t2);
1683 Contract.Requires(t1 != null);
1684 Contract.Requires(t2 != null);
1685 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1687 CheckContextMatch(t1);
1688 CheckContextMatch(t2);
1701 Contract.Requires(t != null);
1702 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1704 CheckContextMatch(t);
1717 Contract.Requires(t != null);
1718 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1720 CheckContextMatch(t);
1733 Contract.Requires(t1 != null);
1734 Contract.Requires(t2 != null);
1735 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1737 CheckContextMatch(t1);
1738 CheckContextMatch(t2);
1751 Contract.Requires(t1 != null);
1752 Contract.Requires(t2 != null);
1753 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1755 CheckContextMatch(t1);
1756 CheckContextMatch(t2);
1772 Contract.Requires(t != null);
1773 Contract.Ensures(Contract.Result<
BitVecExpr>() != null);
1775 CheckContextMatch(t);
1796 Contract.Requires(t != null);
1797 Contract.Ensures(Contract.Result<
IntExpr>() != null);
1799 CheckContextMatch(t);
1811 Contract.Requires(t1 != null);
1812 Contract.Requires(t2 != null);
1813 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1815 CheckContextMatch(t1);
1816 CheckContextMatch(t2);
1828 Contract.Requires(t1 != null);
1829 Contract.Requires(t2 != null);
1830 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1832 CheckContextMatch(t1);
1833 CheckContextMatch(t2);
1845 Contract.Requires(t1 != null);
1846 Contract.Requires(t2 != null);
1847 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1849 CheckContextMatch(t1);
1850 CheckContextMatch(t2);
1862 Contract.Requires(t1 != null);
1863 Contract.Requires(t2 != null);
1864 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1866 CheckContextMatch(t1);
1867 CheckContextMatch(t2);
1879 Contract.Requires(t1 != null);
1880 Contract.Requires(t2 != null);
1881 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1883 CheckContextMatch(t1);
1884 CheckContextMatch(t2);
1896 Contract.Requires(t != null);
1897 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1899 CheckContextMatch(t);
1911 Contract.Requires(t1 != null);
1912 Contract.Requires(t2 != null);
1913 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1915 CheckContextMatch(t1);
1916 CheckContextMatch(t2);
1928 Contract.Requires(t1 != null);
1929 Contract.Requires(t2 != null);
1930 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
1932 CheckContextMatch(t1);
1933 CheckContextMatch(t2);
1944 Contract.Requires(name != null);
1945 Contract.Requires(domain != null);
1946 Contract.Requires(range != null);
1947 Contract.Ensures(Contract.Result<
ArrayExpr>() != null);
1949 return (
ArrayExpr)MkConst(name, MkArraySort(domain, range));
1957 Contract.Requires(domain != null);
1958 Contract.Requires(range != null);
1959 Contract.Ensures(Contract.Result<
ArrayExpr>() != null);
1961 return (
ArrayExpr)MkConst(MkSymbol(name), MkArraySort(domain, range));
1979 Contract.Requires(a != null);
1980 Contract.Requires(i != null);
1981 Contract.Ensures(Contract.Result<
Expr>() != null);
1983 CheckContextMatch(a);
1984 CheckContextMatch(i);
2007 Contract.Requires(a != null);
2008 Contract.Requires(i != null);
2009 Contract.Requires(v != null);
2010 Contract.Ensures(Contract.Result<
ArrayExpr>() != null);
2012 CheckContextMatch(a);
2013 CheckContextMatch(i);
2014 CheckContextMatch(v);
2029 Contract.Requires(domain != null);
2030 Contract.Requires(v != null);
2031 Contract.Ensures(Contract.Result<
ArrayExpr>() != null);
2033 CheckContextMatch(domain);
2034 CheckContextMatch(v);
2051 Contract.Requires(f != null);
2052 Contract.Requires(args == null || Contract.ForAll(args, a => a != null));
2053 Contract.Ensures(Contract.Result<
ArrayExpr>() != null);
2055 CheckContextMatch(f);
2056 CheckContextMatch(args);
2069 Contract.Requires(array != null);
2070 Contract.Ensures(Contract.Result<
Expr>() != null);
2072 CheckContextMatch(array);
2083 Contract.Requires(ty != null);
2084 Contract.Ensures(Contract.Result<
SetSort>() != null);
2086 CheckContextMatch(ty);
2095 Contract.Requires(domain != null);
2096 Contract.Ensures(Contract.Result<
Expr>() != null);
2098 CheckContextMatch(domain);
2107 Contract.Requires(domain != null);
2108 Contract.Ensures(Contract.Result<
Expr>() != null);
2110 CheckContextMatch(domain);
2119 Contract.Requires(
set != null);
2120 Contract.Requires(element != null);
2121 Contract.Ensures(Contract.Result<
Expr>() != null);
2123 CheckContextMatch(
set);
2124 CheckContextMatch(element);
2134 Contract.Requires(
set != null);
2135 Contract.Requires(element != null);
2136 Contract.Ensures(Contract.Result<
Expr>() != null);
2138 CheckContextMatch(
set);
2139 CheckContextMatch(element);
2148 Contract.Requires(args != null);
2149 Contract.Requires(Contract.ForAll(args, a => a != null));
2151 CheckContextMatch(args);
2160 Contract.Requires(args != null);
2161 Contract.Requires(Contract.ForAll(args, a => a != null));
2162 Contract.Ensures(Contract.Result<
Expr>() != null);
2164 CheckContextMatch(args);
2173 Contract.Requires(arg1 != null);
2174 Contract.Requires(arg2 != null);
2175 Contract.Ensures(Contract.Result<
Expr>() != null);
2177 CheckContextMatch(arg1);
2178 CheckContextMatch(arg2);
2187 Contract.Requires(arg != null);
2188 Contract.Ensures(Contract.Result<
Expr>() != null);
2190 CheckContextMatch(arg);
2199 Contract.Requires(elem != null);
2200 Contract.Requires(
set != null);
2201 Contract.Ensures(Contract.Result<
Expr>() != null);
2203 CheckContextMatch(elem);
2204 CheckContextMatch(
set);
2213 Contract.Requires(arg1 != null);
2214 Contract.Requires(arg2 != null);
2215 Contract.Ensures(Contract.Result<
Expr>() != null);
2217 CheckContextMatch(arg1);
2218 CheckContextMatch(arg2);
2225 #region General Numerals
2234 Contract.Requires(ty != null);
2235 Contract.Ensures(Contract.Result<
Expr>() != null);
2237 CheckContextMatch(ty);
2250 Contract.Requires(ty != null);
2251 Contract.Ensures(Contract.Result<
Expr>() != null);
2253 CheckContextMatch(ty);
2266 Contract.Requires(ty != null);
2267 Contract.Ensures(Contract.Result<
Expr>() != null);
2269 CheckContextMatch(ty);
2282 Contract.Requires(ty != null);
2283 Contract.Ensures(Contract.Result<
Expr>() != null);
2285 CheckContextMatch(ty);
2298 Contract.Requires(ty != null);
2299 Contract.Ensures(Contract.Result<
Expr>() != null);
2301 CheckContextMatch(ty);
2319 Contract.Ensures(Contract.Result<
RatNum>() != null);
2320 Contract.EndContractBlock();
2332 Contract.Ensures(Contract.Result<
RatNum>() != null);
2344 Contract.Ensures(Contract.Result<
RatNum>() != null);
2356 Contract.Ensures(Contract.Result<
RatNum>() != null);
2368 Contract.Ensures(Contract.Result<
RatNum>() != null);
2380 Contract.Ensures(Contract.Result<
RatNum>() != null);
2393 Contract.Ensures(Contract.Result<
IntNum>() != null);
2405 Contract.Ensures(Contract.Result<
IntNum>() != null);
2417 Contract.Ensures(Contract.Result<
IntNum>() != null);
2429 Contract.Ensures(Contract.Result<
IntNum>() != null);
2441 Contract.Ensures(Contract.Result<
IntNum>() != null);
2455 Contract.Ensures(Contract.Result<
BitVecNum>() != null);
2457 return (
BitVecNum)MkNumeral(v, MkBitVecSort(size));
2467 Contract.Ensures(Contract.Result<
BitVecNum>() != null);
2469 return (
BitVecNum)MkNumeral(v, MkBitVecSort(size));
2479 Contract.Ensures(Contract.Result<
BitVecNum>() != null);
2481 return (
BitVecNum)MkNumeral(v, MkBitVecSort(size));
2491 Contract.Ensures(Contract.Result<
BitVecNum>() != null);
2493 return (
BitVecNum)MkNumeral(v, MkBitVecSort(size));
2503 Contract.Ensures(Contract.Result<
BitVecNum>() != null);
2505 return (
BitVecNum)MkNumeral(v, MkBitVecSort(size));
2509 #endregion // Numerals
2533 Contract.Requires(sorts != null);
2534 Contract.Requires(names != null);
2535 Contract.Requires(body != null);
2536 Contract.Requires(sorts.Length == names.Length);
2537 Contract.Requires(Contract.ForAll(sorts, s => s != null));
2538 Contract.Requires(Contract.ForAll(names, n => n != null));
2539 Contract.Requires(patterns == null || Contract.ForAll(patterns, p => p != null));
2540 Contract.Requires(noPatterns == null || Contract.ForAll(noPatterns, np => np != null));
2542 Contract.Ensures(Contract.Result<
Quantifier>() != null);
2544 return new Quantifier(
this,
true, sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID);
2553 Contract.Requires(body != null);
2554 Contract.Requires(boundConstants == null || Contract.ForAll(boundConstants, b => b != null));
2555 Contract.Requires(patterns == null || Contract.ForAll(patterns, p => p != null));
2556 Contract.Requires(noPatterns == null || Contract.ForAll(noPatterns, np => np != null));
2558 Contract.Ensures(Contract.Result<
Quantifier>() != null);
2560 return new Quantifier(
this,
true, boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID);
2569 Contract.Requires(sorts != null);
2570 Contract.Requires(names != null);
2571 Contract.Requires(body != null);
2572 Contract.Requires(sorts.Length == names.Length);
2573 Contract.Requires(Contract.ForAll(sorts, s => s != null));
2574 Contract.Requires(Contract.ForAll(names, n => n != null));
2575 Contract.Requires(patterns == null || Contract.ForAll(patterns, p => p != null));
2576 Contract.Requires(noPatterns == null || Contract.ForAll(noPatterns, np => np != null));
2577 Contract.Ensures(Contract.Result<
Quantifier>() != null);
2579 return new Quantifier(
this,
false, sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID);
2587 Contract.Requires(body != null);
2588 Contract.Requires(boundConstants == null || Contract.ForAll(boundConstants, n => n != null));
2589 Contract.Requires(patterns == null || Contract.ForAll(patterns, p => p != null));
2590 Contract.Requires(noPatterns == null || Contract.ForAll(noPatterns, np => np != null));
2591 Contract.Ensures(Contract.Result<
Quantifier>() != null);
2593 return new Quantifier(
this,
false, boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID);
2602 Contract.Requires(body != null);
2603 Contract.Requires(names != null);
2604 Contract.Requires(sorts != null);
2605 Contract.Requires(sorts.Length == names.Length);
2606 Contract.Requires(Contract.ForAll(sorts, s => s != null));
2607 Contract.Requires(Contract.ForAll(names, n => n != null));
2608 Contract.Requires(patterns == null || Contract.ForAll(patterns, p => p != null));
2609 Contract.Requires(noPatterns == null || Contract.ForAll(noPatterns, np => np != null));
2611 Contract.Ensures(Contract.Result<
Quantifier>() != null);
2614 return MkForall(sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID);
2616 return MkExists(sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID);
2625 Contract.Requires(body != null);
2626 Contract.Requires(boundConstants == null || Contract.ForAll(boundConstants, n => n != null));
2627 Contract.Requires(patterns == null || Contract.ForAll(patterns, p => p != null));
2628 Contract.Requires(noPatterns == null || Contract.ForAll(noPatterns, np => np != null));
2630 Contract.Ensures(Contract.Result<
Quantifier>() != null);
2633 return MkForall(boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID);
2635 return MkExists(boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID);
2665 #region SMT Files & Strings
2676 public string BenchmarkToSMTString(
string name,
string logic,
string status,
string attributes,
2679 Contract.Requires(assumptions != null);
2680 Contract.Requires(formula != null);
2681 Contract.Ensures(Contract.Result<
string>() != null);
2684 (uint)assumptions.Length,
AST.ArrayToNative(assumptions),
2685 formula.NativeObject);
2698 public void ParseSMTLIBString(
string str,
Symbol[] sortNames = null,
Sort[] sorts = null,
Symbol[] declNames = null,
FuncDecl[] decls = null)
2700 uint csn =
Symbol.ArrayLength(sortNames);
2701 uint cs =
Sort.ArrayLength(sorts);
2702 uint cdn =
Symbol.ArrayLength(declNames);
2703 uint cd =
AST.ArrayLength(decls);
2704 if (csn != cs || cdn != cd)
2707 AST.ArrayLength(sorts),
Symbol.ArrayToNative(sortNames),
AST.ArrayToNative(sorts),
2708 AST.ArrayLength(decls),
Symbol.ArrayToNative(declNames),
AST.ArrayToNative(decls));
2715 public void ParseSMTLIBFile(
string fileName,
Symbol[] sortNames = null,
Sort[] sorts = null,
Symbol[] declNames = null,
FuncDecl[] decls = null)
2717 uint csn =
Symbol.ArrayLength(sortNames);
2718 uint cs =
Sort.ArrayLength(sorts);
2719 uint cdn =
Symbol.ArrayLength(declNames);
2720 uint cd =
AST.ArrayLength(decls);
2721 if (csn != cs || cdn != cd)
2724 AST.ArrayLength(sorts),
Symbol.ArrayToNative(sortNames),
AST.ArrayToNative(sorts),
2725 AST.ArrayLength(decls),
Symbol.ArrayToNative(declNames),
AST.ArrayToNative(decls));
2740 Contract.Ensures(Contract.Result<
BoolExpr[]>() != null);
2742 uint n = NumSMTLIBFormulas;
2744 for (uint i = 0; i < n; i++)
2758 public BoolExpr[] SMTLIBAssumptions
2762 Contract.Ensures(Contract.Result<
BoolExpr[]>() != null);
2764 uint n = NumSMTLIBAssumptions;
2766 for (uint i = 0; i < n; i++)
2784 Contract.Ensures(Contract.Result<
FuncDecl[]>() != null);
2786 uint n = NumSMTLIBDecls;
2788 for (uint i = 0; i < n; i++)
2802 public Sort[] SMTLIBSorts
2806 Contract.Ensures(Contract.Result<
Sort[]>() != null);
2808 uint n = NumSMTLIBSorts;
2810 for (uint i = 0; i < n; i++)
2823 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
2825 uint csn =
Symbol.ArrayLength(sortNames);
2826 uint cs =
Sort.ArrayLength(sorts);
2827 uint cdn =
Symbol.ArrayLength(declNames);
2828 uint cd =
AST.ArrayLength(decls);
2829 if (csn != cs || cdn != cd)
2832 AST.ArrayLength(sorts),
Symbol.ArrayToNative(sortNames),
AST.ArrayToNative(sorts),
2833 AST.ArrayLength(decls),
Symbol.ArrayToNative(declNames),
AST.ArrayToNative(decls)));
2842 Contract.Ensures(Contract.Result<
BoolExpr>() != null);
2844 uint csn =
Symbol.ArrayLength(sortNames);
2845 uint cs =
Sort.ArrayLength(sorts);
2846 uint cdn =
Symbol.ArrayLength(declNames);
2847 uint cd =
AST.ArrayLength(decls);
2848 if (csn != cs || cdn != cd)
2851 AST.ArrayLength(sorts),
Symbol.ArrayToNative(sortNames),
AST.ArrayToNative(sorts),
2852 AST.ArrayLength(decls),
Symbol.ArrayToNative(declNames),
AST.ArrayToNative(decls)));
2867 public Goal MkGoal(
bool models =
true,
bool unsatCores =
false,
bool proofs =
false)
2869 Contract.Ensures(Contract.Result<
Goal>() != null);
2871 return new Goal(
this, models, unsatCores, proofs);
2875 #region ParameterSets
2881 Contract.Ensures(Contract.Result<
Params>() != null);
2891 public uint NumTactics
2899 public string[] TacticNames
2903 Contract.Ensures(Contract.Result<
string[]>() != null);
2905 uint n = NumTactics;
2906 string[] res =
new string[n];
2907 for (uint i = 0; i < n; i++)
2916 public string TacticDescription(
string name)
2918 Contract.Ensures(Contract.Result<
string>() != null);
2928 Contract.Ensures(Contract.Result<
Tactic>() != null);
2930 return new Tactic(
this, name);
2939 Contract.Requires(t1 != null);
2940 Contract.Requires(t2 != null);
2941 Contract.Requires(ts == null || Contract.ForAll(0, ts.Length, j => ts[j] != null));
2942 Contract.Ensures(Contract.Result<
Tactic>() != null);
2945 CheckContextMatch(t1);
2946 CheckContextMatch(t2);
2947 CheckContextMatch(ts);
2949 IntPtr last = IntPtr.Zero;
2950 if (ts != null && ts.Length > 0)
2952 last = ts[ts.Length - 1].NativeObject;
2953 for (
int i = ts.Length - 2; i >= 0; i--)
2956 if (last != IntPtr.Zero)
2974 Contract.Requires(t1 != null);
2975 Contract.Requires(t2 != null);
2976 Contract.Requires(ts == null || Contract.ForAll(0, ts.Length, j => ts[j] != null));
2977 Contract.Ensures(Contract.Result<
Tactic>() != null);
2988 Contract.Requires(t1 != null);
2989 Contract.Requires(t2 != null);
2990 Contract.Ensures(Contract.Result<
Tactic>() != null);
2992 CheckContextMatch(t1);
2993 CheckContextMatch(t2);
3005 Contract.Requires(t != null);
3006 Contract.Ensures(Contract.Result<
Tactic>() != null);
3008 CheckContextMatch(t);
3021 Contract.Requires(p != null);
3022 Contract.Requires(t != null);
3023 Contract.Ensures(Contract.Result<
Tactic>() != null);
3025 CheckContextMatch(t);
3026 CheckContextMatch(p);
3036 Contract.Requires(p != null);
3037 Contract.Requires(t1 != null);
3038 Contract.Requires(t2 != null);
3039 Contract.Ensures(Contract.Result<
Tactic>() != null);
3041 CheckContextMatch(p);
3042 CheckContextMatch(t1);
3043 CheckContextMatch(t2);
3053 Contract.Requires(t != null);
3054 Contract.Ensures(Contract.Result<
Tactic>() != null);
3056 CheckContextMatch(t);
3065 Contract.Ensures(Contract.Result<
Tactic>() != null);
3075 Contract.Ensures(Contract.Result<
Tactic>() != null);
3085 Contract.Requires(p != null);
3086 Contract.Ensures(Contract.Result<
Tactic>() != null);
3088 CheckContextMatch(p);
3098 Contract.Ensures(Contract.Result<
Tactic>() != null);
3108 Contract.Requires(t != null);
3109 Contract.Requires(p != null);
3110 Contract.Ensures(Contract.Result<
Tactic>() != null);
3112 CheckContextMatch(t);
3113 CheckContextMatch(p);
3123 Contract.Requires(t != null);
3124 Contract.Requires(p != null);
3125 Contract.Ensures(Contract.Result<
Tactic>() != null);
3127 return UsingParams(t, p);
3135 Contract.Requires(t == null || Contract.ForAll(t, tactic => tactic != null));
3136 Contract.Ensures(Contract.Result<
Tactic>() != null);
3138 CheckContextMatch(t);
3148 Contract.Requires(t1 != null);
3149 Contract.Requires(t2 != null);
3150 Contract.Ensures(Contract.Result<
Tactic>() != null);
3152 CheckContextMatch(t1);
3153 CheckContextMatch(t2);
3161 public void Interrupt()
3171 public uint NumProbes
3179 public string[] ProbeNames
3183 Contract.Ensures(Contract.Result<
string[]>() != null);
3186 string[] res =
new string[n];
3187 for (uint i = 0; i < n; i++)
3196 public string ProbeDescription(
string name)
3198 Contract.Ensures(Contract.Result<
string>() != null);
3208 Contract.Ensures(Contract.Result<
Probe>() != null);
3210 return new Probe(
this, name);
3218 Contract.Ensures(Contract.Result<
Probe>() != null);
3229 Contract.Requires(p1 != null);
3230 Contract.Requires(p2 != null);
3231 Contract.Ensures(Contract.Result<
Probe>() != null);
3233 CheckContextMatch(p1);
3234 CheckContextMatch(p2);
3244 Contract.Requires(p1 != null);
3245 Contract.Requires(p2 != null);
3246 Contract.Ensures(Contract.Result<
Probe>() != null);
3248 CheckContextMatch(p1);
3249 CheckContextMatch(p2);
3259 Contract.Requires(p1 != null);
3260 Contract.Requires(p2 != null);
3261 Contract.Ensures(Contract.Result<
Probe>() != null);
3263 CheckContextMatch(p1);
3264 CheckContextMatch(p2);
3274 Contract.Requires(p1 != null);
3275 Contract.Requires(p2 != null);
3276 Contract.Ensures(Contract.Result<
Probe>() != null);
3278 CheckContextMatch(p1);
3279 CheckContextMatch(p2);
3289 Contract.Requires(p1 != null);
3290 Contract.Requires(p2 != null);
3291 Contract.Ensures(Contract.Result<
Probe>() != null);
3293 CheckContextMatch(p1);
3294 CheckContextMatch(p2);
3304 Contract.Requires(p1 != null);
3305 Contract.Requires(p2 != null);
3306 Contract.Ensures(Contract.Result<
Probe>() != null);
3308 CheckContextMatch(p1);
3309 CheckContextMatch(p2);
3319 Contract.Requires(p1 != null);
3320 Contract.Requires(p2 != null);
3321 Contract.Ensures(Contract.Result<
Probe>() != null);
3323 CheckContextMatch(p1);
3324 CheckContextMatch(p2);
3334 Contract.Requires(p != null);
3335 Contract.Ensures(Contract.Result<
Probe>() != null);
3337 CheckContextMatch(p);
3353 Contract.Ensures(Contract.Result<
Solver>() != null);
3367 Contract.Ensures(Contract.Result<
Solver>() != null);
3369 return MkSolver(MkSymbol(logic));
3377 Contract.Ensures(Contract.Result<
Solver>() != null);
3391 Contract.Requires(t != null);
3392 Contract.Ensures(Contract.Result<
Solver>() != null);
3402 public Fixedpoint MkFixedpoint()
3404 Contract.Ensures(Contract.Result<Fixedpoint>() != null);
3406 return new Fixedpoint(
this);
3411 #region Miscellaneous
3422 public AST WrapAST(IntPtr nativeObject)
3424 Contract.Ensures(Contract.Result<
AST>() != null);
3425 return AST.Create(
this, nativeObject);
3439 public IntPtr UnwrapAST(
AST a)
3441 return a.NativeObject;
3447 public string SimplifyHelp()
3449 Contract.Ensures(Contract.Result<
string>() != null);
3457 public ParamDescrs SimplifyParameterDescriptions
3467 public static void ToggleWarningMessages(
bool enabled)
3473 #region Error Handling
3500 public void UpdateParamValue(
string id,
string value)
3512 public string GetParamValue(
string id)
3514 IntPtr res = IntPtr.Zero;
3519 return Marshal.PtrToStringAnsi(res);
3525 internal IntPtr m_ctx = IntPtr.Zero;
3527 internal IntPtr nCtx {
get {
return m_ctx; } }
3529 internal void NativeErrorHandler(IntPtr ctx,
Z3_error_code errorCode)
3534 internal void InitContext()
3537 m_n_err_handler =
new Native.Z3_error_handler(NativeErrorHandler);
3538 Native.Z3_set_error_handler(m_ctx, m_n_err_handler);
3539 GC.SuppressFinalize(
this);
3543 internal void CheckContextMatch(Z3Object other)
3545 Contract.Requires(other != null);
3547 if (!ReferenceEquals(
this, other.Context))
3548 throw new Z3Exception(
"Context mismatch");
3552 internal void CheckContextMatch(Z3Object[] arr)
3554 Contract.Requires(arr == null || Contract.ForAll(arr, a => a != null));
3558 foreach (Z3Object a
in arr)
3560 Contract.Assert(a != null);
3561 CheckContextMatch(a);
3566 [ContractInvariantMethod]
3567 private void ObjectInvariant()
3569 Contract.Invariant(m_AST_DRQ != null);
3570 Contract.Invariant(m_ASTMap_DRQ != null);
3571 Contract.Invariant(m_ASTVector_DRQ != null);
3572 Contract.Invariant(m_ApplyResult_DRQ != null);
3573 Contract.Invariant(m_FuncEntry_DRQ != null);
3574 Contract.Invariant(m_FuncInterp_DRQ != null);
3575 Contract.Invariant(m_Goal_DRQ != null);
3576 Contract.Invariant(m_Model_DRQ != null);
3577 Contract.Invariant(m_Params_DRQ != null);
3578 Contract.Invariant(m_ParamDescrs_DRQ != null);
3579 Contract.Invariant(m_Probe_DRQ != null);
3580 Contract.Invariant(m_Solver_DRQ != null);
3581 Contract.Invariant(m_Statistics_DRQ != null);
3582 Contract.Invariant(m_Tactic_DRQ != null);
3583 Contract.Invariant(m_Fixedpoint_DRQ != null);
3586 readonly
private AST.DecRefQueue m_AST_DRQ =
new AST.DecRefQueue();
3587 readonly
private ASTMap.DecRefQueue m_ASTMap_DRQ =
new ASTMap.DecRefQueue();
3588 readonly
private ASTVector.DecRefQueue m_ASTVector_DRQ =
new ASTVector.DecRefQueue();
3589 readonly
private ApplyResult.DecRefQueue m_ApplyResult_DRQ =
new ApplyResult.DecRefQueue();
3590 readonly
private FuncInterp.Entry.DecRefQueue m_FuncEntry_DRQ =
new FuncInterp.Entry.DecRefQueue();
3591 readonly
private FuncInterp.DecRefQueue m_FuncInterp_DRQ =
new FuncInterp.DecRefQueue();
3592 readonly
private Goal.DecRefQueue m_Goal_DRQ =
new Goal.DecRefQueue();
3593 readonly
private Model.DecRefQueue m_Model_DRQ =
new Model.DecRefQueue();
3594 readonly
private Params.DecRefQueue m_Params_DRQ =
new Params.DecRefQueue();
3595 readonly
private ParamDescrs.DecRefQueue m_ParamDescrs_DRQ =
new ParamDescrs.DecRefQueue();
3596 readonly
private Probe.DecRefQueue m_Probe_DRQ =
new Probe.DecRefQueue();
3597 readonly
private Solver.DecRefQueue m_Solver_DRQ =
new Solver.DecRefQueue();
3598 readonly
private Statistics.DecRefQueue m_Statistics_DRQ =
new Statistics.DecRefQueue();
3599 readonly
private Tactic.DecRefQueue m_Tactic_DRQ =
new Tactic.DecRefQueue();
3600 readonly
private Fixedpoint.DecRefQueue m_Fixedpoint_DRQ =
new Fixedpoint.DecRefQueue();
3602 internal AST.DecRefQueue AST_DRQ {
get { Contract.Ensures(Contract.Result<AST.DecRefQueue>() != null);
return m_AST_DRQ; } }
3603 internal ASTMap.DecRefQueue ASTMap_DRQ {
get { Contract.Ensures(Contract.Result<ASTMap.DecRefQueue>() != null);
return m_ASTMap_DRQ; } }
3604 internal ASTVector.DecRefQueue ASTVector_DRQ {
get { Contract.Ensures(Contract.Result<ASTVector.DecRefQueue>() != null);
return m_ASTVector_DRQ; } }
3605 internal ApplyResult.DecRefQueue ApplyResult_DRQ {
get { Contract.Ensures(Contract.Result<ApplyResult.DecRefQueue>() != null);
return m_ApplyResult_DRQ; } }
3606 internal FuncInterp.Entry.DecRefQueue FuncEntry_DRQ {
get { Contract.Ensures(Contract.Result<FuncInterp.Entry.DecRefQueue>() != null);
return m_FuncEntry_DRQ; } }
3607 internal FuncInterp.DecRefQueue FuncInterp_DRQ {
get { Contract.Ensures(Contract.Result<FuncInterp.DecRefQueue>() != null);
return m_FuncInterp_DRQ; } }
3608 internal Goal.DecRefQueue Goal_DRQ {
get { Contract.Ensures(Contract.Result<Goal.DecRefQueue>() != null);
return m_Goal_DRQ; } }
3609 internal Model.DecRefQueue Model_DRQ {
get { Contract.Ensures(Contract.Result<Model.DecRefQueue>() != null);
return m_Model_DRQ; } }
3610 internal Params.DecRefQueue Params_DRQ {
get { Contract.Ensures(Contract.Result<Params.DecRefQueue>() != null);
return m_Params_DRQ; } }
3611 internal ParamDescrs.DecRefQueue ParamDescrs_DRQ {
get { Contract.Ensures(Contract.Result<ParamDescrs.DecRefQueue>() != null);
return m_ParamDescrs_DRQ; } }
3612 internal Probe.DecRefQueue Probe_DRQ {
get { Contract.Ensures(Contract.Result<Probe.DecRefQueue>() != null);
return m_Probe_DRQ; } }
3613 internal Solver.DecRefQueue Solver_DRQ {
get { Contract.Ensures(Contract.Result<Solver.DecRefQueue>() != null);
return m_Solver_DRQ; } }
3614 internal Statistics.DecRefQueue Statistics_DRQ {
get { Contract.Ensures(Contract.Result<Statistics.DecRefQueue>() != null);
return m_Statistics_DRQ; } }
3615 internal Tactic.DecRefQueue Tactic_DRQ {
get { Contract.Ensures(Contract.Result<Tactic.DecRefQueue>() != null);
return m_Tactic_DRQ; } }
3616 internal Fixedpoint.DecRefQueue Fixedpoint_DRQ {
get { Contract.Ensures(Contract.Result<Fixedpoint.DecRefQueue>() != null);
return m_Fixedpoint_DRQ; } }
3619 internal uint refCount = 0;
3631 m_n_err_handler = null;
3632 Native.Z3_del_context(m_ctx);
3633 m_ctx = IntPtr.Zero;
3636 GC.ReRegisterForFinalize(
this);
3642 public void Dispose()
3645 AST_DRQ.Clear(
this);
3646 ASTMap_DRQ.Clear(
this);
3647 ASTVector_DRQ.Clear(
this);
3648 ApplyResult_DRQ.Clear(
this);
3649 FuncEntry_DRQ.Clear(
this);
3650 FuncInterp_DRQ.Clear(
this);
3651 Goal_DRQ.Clear(
this);
3652 Model_DRQ.Clear(
this);
3653 Params_DRQ.Clear(
this);
3654 Probe_DRQ.Clear(
this);
3655 Solver_DRQ.Clear(
this);
3656 Statistics_DRQ.Clear(
this);
3657 Tactic_DRQ.Clear(
this);
3658 Fixedpoint_DRQ.Clear(
this);