Z3
 
Loading...
Searching...
No Matches
Context.java
Go to the documentation of this file.
1
18package com.microsoft.z3;
19
20import static com.microsoft.z3.Constructor.of;
21
22import com.microsoft.z3.enumerations.Z3_ast_print_mode;
23
24import java.util.Map;
25
35@SuppressWarnings("unchecked")
36public class Context implements AutoCloseable {
37 private long m_ctx;
38 static final Object creation_lock = new Object();
39
40 public Context () {
41 synchronized (creation_lock) {
42 m_ctx = Native.mkContextRc(0);
43 init();
44 }
45 }
46
47 protected Context (long m_ctx) {
48 synchronized (creation_lock) {
49 this.m_ctx = m_ctx;
50 init();
51 }
52 }
53
54
72 public Context(Map<String, String> settings) {
73 synchronized (creation_lock) {
74 long cfg = Native.mkConfig();
75 for (Map.Entry<String, String> kv : settings.entrySet()) {
76 Native.setParamValue(cfg, kv.getKey(), kv.getValue());
77 }
78 m_ctx = Native.mkContextRc(cfg);
79 Native.delConfig(cfg);
80 init();
81 }
82 }
83
84 private void init() {
85 setPrintMode(Z3_ast_print_mode.Z3_PRINT_SMTLIB2_COMPLIANT);
86 Native.setInternalErrorHandler(m_ctx);
87 }
88
94 public IntSymbol mkSymbol(int i)
95 {
96 return new IntSymbol(this, i);
97 }
98
102 public StringSymbol mkSymbol(String name)
103 {
104 return new StringSymbol(this, name);
105 }
106
110 Symbol[] mkSymbols(String[] names)
111 {
112 if (names == null)
113 return new Symbol[0];
114 Symbol[] result = new Symbol[names.length];
115 for (int i = 0; i < names.length; ++i)
116 result[i] = mkSymbol(names[i]);
117 return result;
118 }
119
120 private BoolSort m_boolSort = null;
121 private IntSort m_intSort = null;
122 private RealSort m_realSort = null;
123 private SeqSort<CharSort> m_stringSort = null;
124
129 {
130 if (m_boolSort == null) {
131 m_boolSort = new BoolSort(this);
132 }
133 return m_boolSort;
134 }
135
140 {
141 if (m_intSort == null) {
142 m_intSort = new IntSort(this);
143 }
144 return m_intSort;
145 }
146
151 {
152 if (m_realSort == null) {
153 m_realSort = new RealSort(this);
154 }
155 return m_realSort;
156 }
157
162 {
163 return new BoolSort(this);
164 }
165
171 {
172 return new CharSort(this);
173 }
174
179 {
180 if (m_stringSort == null) {
181 m_stringSort = mkStringSort();
182 }
183 return m_stringSort;
184 }
185
190 {
191 checkContextMatch(s);
192 return new UninterpretedSort(this, s);
193 }
194
199 {
200 return mkUninterpretedSort(mkSymbol(str));
201 }
202
207 {
208 return new IntSort(this);
209 }
210
215 {
216 return new RealSort(this);
217 }
218
222 public BitVecSort mkBitVecSort(int size)
223 {
224 return new BitVecSort(this, Native.mkBvSort(nCtx(), size));
225 }
226
230 public final <D extends Sort, R extends Sort> ArraySort<D, R> mkArraySort(D domain, R range)
231 {
232 checkContextMatch(domain);
233 checkContextMatch(range);
234 return new ArraySort<>(this, domain, range);
235 }
236
237
241 public final <R extends Sort> ArraySort<Sort, R> mkArraySort(Sort[] domains, R range)
242 {
243 checkContextMatch(domains);
244 checkContextMatch(range);
245 return new ArraySort<>(this, domains, range);
246 }
247
252 {
253 return new SeqSort<>(this, Native.mkStringSort(nCtx()));
254 }
255
259 public final <R extends Sort> SeqSort<R> mkSeqSort(R s)
260 {
261 return new SeqSort<>(this, Native.mkSeqSort(nCtx(), s.getNativeObject()));
262 }
263
267 public final <R extends Sort> ReSort<R> mkReSort(R s)
268 {
269 return new ReSort<>(this, Native.mkReSort(nCtx(), s.getNativeObject()));
270 }
271
272
276 public TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames,
277 Sort[] fieldSorts)
278 {
279 checkContextMatch(name);
280 checkContextMatch(fieldNames);
281 checkContextMatch(fieldSorts);
282 return new TupleSort(this, name, fieldNames.length, fieldNames,
283 fieldSorts);
284 }
285
289 public final <R> EnumSort<R> mkEnumSort(Symbol name, Symbol... enumNames)
290
291 {
292 checkContextMatch(name);
293 checkContextMatch(enumNames);
294 return new EnumSort<>(this, name, enumNames);
295 }
296
300 public final <R> EnumSort<R> mkEnumSort(String name, String... enumNames)
301
302 {
303 return new EnumSort<>(this, mkSymbol(name), mkSymbols(enumNames));
304 }
305
309 public final <R extends Sort> ListSort<R> mkListSort(Symbol name, R elemSort)
310 {
311 checkContextMatch(name);
312 checkContextMatch(elemSort);
313 return new ListSort<>(this, name, elemSort);
314 }
315
319 public final <R extends Sort> ListSort<R> mkListSort(String name, R elemSort)
320 {
321 checkContextMatch(elemSort);
322 return new ListSort<>(this, mkSymbol(name), elemSort);
323 }
324
328 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(Symbol name, long size)
329
330 {
331 checkContextMatch(name);
332 return new FiniteDomainSort<>(this, name, size);
333 }
334
338 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(String name, long size)
339
340 {
341 return new FiniteDomainSort<>(this, mkSymbol(name), size);
342 }
343
355 public final <R> Constructor<R> mkConstructor(Symbol name, Symbol recognizer,
356 Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
357
358 {
359 return of(this, name, recognizer, fieldNames, sorts, sortRefs);
360 }
361
365 public final <R> Constructor<R> mkConstructor(String name, String recognizer,
366 String[] fieldNames, Sort[] sorts, int[] sortRefs)
367 {
368 return of(this, mkSymbol(name), mkSymbol(recognizer), mkSymbols(fieldNames), sorts, sortRefs);
369 }
370
374 public final <R> DatatypeSort<R> mkDatatypeSort(Symbol name, Constructor<R>[] constructors)
375 {
376 checkContextMatch(name);
377 checkContextMatch(constructors);
378 return new DatatypeSort<>(this, name, constructors);
379 }
380
384 public final <R> DatatypeSort<R> mkDatatypeSort(String name, Constructor<R>[] constructors)
385
386 {
387 checkContextMatch(constructors);
388 return new DatatypeSort<>(this, mkSymbol(name), constructors);
389 }
390
397 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name, Sort[] params)
398 {
399 checkContextMatch(name);
400 if (params != null)
401 checkContextMatch(params);
402
403 int numParams = (params == null) ? 0 : params.length;
404 long[] paramsNative = (params == null) ? new long[0] : AST.arrayToNative(params);
405 return new DatatypeSort<>(this, Native.mkDatatypeSort(nCtx(), name.getNativeObject(), numParams, paramsNative));
406 }
407
413 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name)
414 {
415 return mkDatatypeSortRef(name, null);
416 }
417
424 public <R> DatatypeSort<R> mkDatatypeSortRef(String name, Sort[] params)
425 {
426 return mkDatatypeSortRef(mkSymbol(name), params);
427 }
428
434 public <R> DatatypeSort<R> mkDatatypeSortRef(String name)
435 {
436 return mkDatatypeSortRef(name, null);
437 }
438
445 {
446 checkContextMatch(names);
447 int n = names.length;
449 long[] n_constr = new long[n];
450 for (int i = 0; i < n; i++)
451 {
452 Constructor<Object>[] constructor = c[i];
453
454 checkContextMatch(constructor);
455 cla[i] = new ConstructorList<>(this, constructor);
456 n_constr[i] = cla[i].getNativeObject();
457 }
458 long[] n_res = new long[n];
459 Native.mkDatatypes(nCtx(), n, Symbol.arrayToNative(names), n_res,
460 n_constr);
461 DatatypeSort<Object>[] res = new DatatypeSort[n];
462 for (int i = 0; i < n; i++)
463 res[i] = new DatatypeSort<>(this, n_res[i]);
464 return res;
465 }
466
471
472 {
473 return mkDatatypeSorts(mkSymbols(names), c);
474 }
475
483 {
484 checkContextMatch(name);
485 return new TypeVarSort(this, name);
486 }
487
494 public TypeVarSort mkTypeVariable(String name)
495 {
496 return mkTypeVariable(mkSymbol(name));
497 }
498
522 public <R> DatatypeSort<R> mkPolymorphicDatatypeSort(Symbol name, Sort[] parameters, Constructor<R>[] constructors)
523 {
524 checkContextMatch(name);
525 checkContextMatch(parameters);
526 checkContextMatch(constructors);
527
528 int numParams = parameters.length;
529 long[] paramsNative = AST.arrayToNative(parameters);
530
531 int numConstructors = constructors.length;
532 long[] constructorsNative = new long[numConstructors];
533 for (int i = 0; i < numConstructors; i++) {
534 constructorsNative[i] = constructors[i].getNativeObject();
535 }
536
537 long nativeSort = Native.mkPolymorphicDatatype(nCtx(), name.getNativeObject(),
538 numParams, paramsNative, numConstructors, constructorsNative);
539
540 return new DatatypeSort<>(this, nativeSort);
541 }
542
553 public <R> DatatypeSort<R> mkPolymorphicDatatypeSort(String name, Sort[] parameters, Constructor<R>[] constructors)
554 {
555 return mkPolymorphicDatatypeSort(mkSymbol(name), parameters, constructors);
556 }
557
564 public final <F extends Sort, R extends Sort> Expr<R> mkUpdateField(FuncDecl<F> field, Expr<R> t, Expr<F> v)
565 throws Z3Exception
566 {
567 return (Expr<R>) Expr.create(this,
568 Native.datatypeUpdateField
569 (nCtx(), field.getNativeObject(),
570 t.getNativeObject(), v.getNativeObject()));
571 }
572
573
577 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort[] domain, R range)
578 {
579 checkContextMatch(name);
580 checkContextMatch(domain);
581 checkContextMatch(range);
582 return new FuncDecl<>(this, name, domain, range);
583 }
584
585 public final <R extends Sort> FuncDecl<R> mkPropagateFunction(Symbol name, Sort[] domain, R range)
586 {
587 checkContextMatch(name);
588 checkContextMatch(domain);
589 checkContextMatch(range);
590 long f = Native.solverPropagateDeclare(
591 this.nCtx(),
592 name.getNativeObject(),
593 AST.arrayLength(domain),
594 AST.arrayToNative(domain),
595 range.getNativeObject());
596 return new FuncDecl<>(this, f);
597 }
598
599
603 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort domain, R range)
604
605 {
606 checkContextMatch(name);
607 checkContextMatch(domain);
608 checkContextMatch(range);
609 Sort[] q = new Sort[] { domain };
610 return new FuncDecl<>(this, name, q, range);
611 }
612
616 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort[] domain, R range)
617
618 {
619 checkContextMatch(domain);
620 checkContextMatch(range);
621 return new FuncDecl<>(this, mkSymbol(name), domain, range);
622 }
623
627 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort domain, R range)
628
629 {
630 checkContextMatch(domain);
631 checkContextMatch(range);
632 Sort[] q = new Sort[] { domain };
633 return new FuncDecl<>(this, mkSymbol(name), q, range);
634 }
635
639 public final <R extends Sort> FuncDecl<R> mkRecFuncDecl(Symbol name, Sort[] domain, R range)
640 {
641 checkContextMatch(name);
642 checkContextMatch(domain);
643 checkContextMatch(range);
644 return new FuncDecl<>(this, name, domain, range, true);
645 }
646
647
654 public final <R extends Sort> void AddRecDef(FuncDecl<R> f, Expr<?>[] args, Expr<R> body)
655 {
656 checkContextMatch(f);
657 checkContextMatch(args);
658 checkContextMatch(body);
659 long[] argsNative = AST.arrayToNative(args);
660 Native.addRecDef(nCtx(), f.getNativeObject(), args.length, argsNative, body.getNativeObject());
661 }
662
669 public final <R extends Sort> FuncDecl<R> mkFreshFuncDecl(String prefix, Sort[] domain, R range)
670
671 {
672 checkContextMatch(domain);
673 checkContextMatch(range);
674 return new FuncDecl<>(this, prefix, domain, range);
675 }
676
680 public final <R extends Sort> FuncDecl<R> mkConstDecl(Symbol name, R range)
681 {
682 checkContextMatch(name);
683 checkContextMatch(range);
684 return new FuncDecl<>(this, name, null, range);
685 }
686
690 public final <R extends Sort> FuncDecl<R> mkConstDecl(String name, R range)
691 {
692 checkContextMatch(range);
693 return new FuncDecl<>(this, mkSymbol(name), null, range);
694 }
695
702 public final <R extends Sort> FuncDecl<R> mkFreshConstDecl(String prefix, R range)
703
704 {
705 checkContextMatch(range);
706 return new FuncDecl<>(this, prefix, null, range);
707 }
708
714 public final <R extends Sort> Expr<R> mkBound(int index, R ty)
715 {
716 return (Expr<R>) Expr.create(this,
717 Native.mkBound(nCtx(), index, ty.getNativeObject()));
718 }
719
723 @SafeVarargs
724 public final Pattern mkPattern(Expr<?>... terms)
725 {
726 if (terms.length == 0)
727 throw new Z3Exception("Cannot create a pattern from zero terms");
728
729 long[] termsNative = AST.arrayToNative(terms);
730 return new Pattern(this, Native.mkPattern(nCtx(), terms.length,
731 termsNative));
732 }
733
738 public final <R extends Sort> Expr<R> mkConst(Symbol name, R range)
739 {
740 checkContextMatch(name);
741 checkContextMatch(range);
742
743 return (Expr<R>) Expr.create(
744 this,
745 Native.mkConst(nCtx(), name.getNativeObject(),
746 range.getNativeObject()));
747 }
748
753 public final <R extends Sort> Expr<R> mkConst(String name, R range)
754 {
755 return mkConst(mkSymbol(name), range);
756 }
757
762 public final <R extends Sort> Expr<R> mkFreshConst(String prefix, R range)
763 {
764 checkContextMatch(range);
765 return (Expr<R>) Expr.create(this,
766 Native.mkFreshConst(nCtx(), prefix, range.getNativeObject()));
767 }
768
773 public final <R extends Sort> Expr<R> mkConst(FuncDecl<R> f)
774 {
775 return mkApp(f, (Expr<?>[]) null);
776 }
777
782 {
783 return (BoolExpr) mkConst(name, getBoolSort());
784 }
785
789 public BoolExpr mkBoolConst(String name)
790 {
791 return (BoolExpr) mkConst(mkSymbol(name), getBoolSort());
792 }
793
798 {
799 return (IntExpr) mkConst(name, getIntSort());
800 }
801
805 public IntExpr mkIntConst(String name)
806 {
807 return (IntExpr) mkConst(name, getIntSort());
808 }
809
814 {
815 return (RealExpr) mkConst(name, getRealSort());
816 }
817
821 public RealExpr mkRealConst(String name)
822 {
823 return (RealExpr) mkConst(name, getRealSort());
824 }
825
829 public BitVecExpr mkBVConst(Symbol name, int size)
830 {
831 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
832 }
833
837 public BitVecExpr mkBVConst(String name, int size)
838 {
839 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
840 }
841
845 @SafeVarargs
846 public final <R extends Sort> Expr<R> mkApp(FuncDecl<R> f, Expr<?>... args)
847 {
848 checkContextMatch(f);
849 checkContextMatch(args);
850 return Expr.create(this, f, args);
851 }
852
857 {
858 return new BoolExpr(this, Native.mkTrue(nCtx()));
859 }
860
865 {
866 return new BoolExpr(this, Native.mkFalse(nCtx()));
867 }
868
872 public BoolExpr mkBool(boolean value)
873 {
874 return value ? mkTrue() : mkFalse();
875 }
876
881 {
882 checkContextMatch(x);
883 checkContextMatch(y);
884 return new BoolExpr(this, Native.mkEq(nCtx(), x.getNativeObject(),
885 y.getNativeObject()));
886 }
887
891 @SafeVarargs
892 public final BoolExpr mkDistinct(Expr<?>... args)
893 {
894 checkContextMatch(args);
895 return new BoolExpr(this, Native.mkDistinct(nCtx(), args.length,
896 AST.arrayToNative(args)));
897 }
898
903 {
904 checkContextMatch(a);
905 return new BoolExpr(this, Native.mkNot(nCtx(), a.getNativeObject()));
906 }
907
915 public final <R extends Sort> Expr<R> mkITE(Expr<BoolSort> t1, Expr<? extends R> t2, Expr<? extends R> t3)
916 {
917 checkContextMatch(t1);
918 checkContextMatch(t2);
919 checkContextMatch(t3);
920 return (Expr<R>) Expr.create(this, Native.mkIte(nCtx(), t1.getNativeObject(),
921 t2.getNativeObject(), t3.getNativeObject()));
922 }
923
928 {
929 checkContextMatch(t1);
930 checkContextMatch(t2);
931 return new BoolExpr(this, Native.mkIff(nCtx(), t1.getNativeObject(),
932 t2.getNativeObject()));
933 }
934
939 {
940 checkContextMatch(t1);
941 checkContextMatch(t2);
942 return new BoolExpr(this, Native.mkImplies(nCtx(),
943 t1.getNativeObject(), t2.getNativeObject()));
944 }
945
950 {
951 checkContextMatch(t1);
952 checkContextMatch(t2);
953 return new BoolExpr(this, Native.mkXor(nCtx(), t1.getNativeObject(),
954 t2.getNativeObject()));
955 }
956
960 @SafeVarargs
961 public final BoolExpr mkAnd(Expr<BoolSort>... t)
962 {
963 checkContextMatch(t);
964 return new BoolExpr(this, Native.mkAnd(nCtx(), t.length,
965 AST.arrayToNative(t)));
966 }
967
971 @SafeVarargs
972 public final BoolExpr mkOr(Expr<BoolSort>... t)
973 {
974 checkContextMatch(t);
975 return new BoolExpr(this, Native.mkOr(nCtx(), t.length,
976 AST.arrayToNative(t)));
977 }
978
982 @SafeVarargs
983 public final <R extends ArithSort> ArithExpr<R> mkAdd(Expr<? extends R>... t)
984 {
985 checkContextMatch(t);
986 return (ArithExpr<R>) Expr.create(this,
987 Native.mkAdd(nCtx(), t.length, AST.arrayToNative(t)));
988 }
989
993 @SafeVarargs
994 public final <R extends ArithSort> ArithExpr<R> mkMul(Expr<? extends R>... t)
995 {
996 checkContextMatch(t);
997 return (ArithExpr<R>) Expr.create(this,
998 Native.mkMul(nCtx(), t.length, AST.arrayToNative(t)));
999 }
1000
1004 @SafeVarargs
1005 public final <R extends ArithSort> ArithExpr<R> mkSub(Expr<? extends R>... t)
1006 {
1007 checkContextMatch(t);
1008 return (ArithExpr<R>) Expr.create(this,
1009 Native.mkSub(nCtx(), t.length, AST.arrayToNative(t)));
1010 }
1011
1015 public final <R extends ArithSort> ArithExpr<R> mkUnaryMinus(Expr<R> t)
1016 {
1017 checkContextMatch(t);
1018 return (ArithExpr<R>) Expr.create(this,
1019 Native.mkUnaryMinus(nCtx(), t.getNativeObject()));
1020 }
1021
1025 public final <R extends ArithSort> ArithExpr<R> mkDiv(Expr<? extends R> t1, Expr<? extends R> t2)
1026 {
1027 checkContextMatch(t1);
1028 checkContextMatch(t2);
1029 return (ArithExpr<R>) Expr.create(this, Native.mkDiv(nCtx(),
1030 t1.getNativeObject(), t2.getNativeObject()));
1031 }
1032
1039 {
1040 checkContextMatch(t1);
1041 checkContextMatch(t2);
1042 return new IntExpr(this, Native.mkMod(nCtx(), t1.getNativeObject(),
1043 t2.getNativeObject()));
1044 }
1045
1052 {
1053 checkContextMatch(t1);
1054 checkContextMatch(t2);
1055 return new IntExpr(this, Native.mkRem(nCtx(), t1.getNativeObject(),
1056 t2.getNativeObject()));
1057 }
1058
1062 public final <R extends ArithSort> ArithExpr<R> mkPower(Expr<? extends R> t1,
1064 {
1065 checkContextMatch(t1);
1066 checkContextMatch(t2);
1067 return (ArithExpr<R>) Expr.create(
1068 this,
1069 Native.mkPower(nCtx(), t1.getNativeObject(),
1070 t2.getNativeObject()));
1071 }
1072
1077 {
1078 checkContextMatch(t1);
1079 checkContextMatch(t2);
1080 return new BoolExpr(this, Native.mkLt(nCtx(), t1.getNativeObject(),
1081 t2.getNativeObject()));
1082 }
1083
1088 {
1089 checkContextMatch(t1);
1090 checkContextMatch(t2);
1091 return new BoolExpr(this, Native.mkLe(nCtx(), t1.getNativeObject(),
1092 t2.getNativeObject()));
1093 }
1094
1099 {
1100 checkContextMatch(t1);
1101 checkContextMatch(t2);
1102 return new BoolExpr(this, Native.mkGt(nCtx(), t1.getNativeObject(),
1103 t2.getNativeObject()));
1104 }
1105
1110 {
1111 checkContextMatch(t1);
1112 checkContextMatch(t2);
1113 return new BoolExpr(this, Native.mkGe(nCtx(), t1.getNativeObject(),
1114 t2.getNativeObject()));
1115 }
1116
1128 {
1129 checkContextMatch(t);
1130 return new RealExpr(this,
1131 Native.mkInt2real(nCtx(), t.getNativeObject()));
1132 }
1133
1141 {
1142 checkContextMatch(t);
1143 return new IntExpr(this, Native.mkReal2int(nCtx(), t.getNativeObject()));
1144 }
1145
1150 {
1151 checkContextMatch(t);
1152 return new BoolExpr(this, Native.mkIsInt(nCtx(), t.getNativeObject()));
1153 }
1154
1159 public <R extends ArithSort> ArithExpr<R> mkAbs(Expr<? extends R> arg)
1160 {
1161 checkContextMatch(arg);
1162 return (ArithExpr<R>) Expr.create(this, Native.mkAbs(nCtx(), arg.getNativeObject()));
1163 }
1164
1170 {
1171 checkContextMatch(t1);
1172 checkContextMatch(t2);
1173 return new BoolExpr(this, Native.mkDivides(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
1174 }
1175
1182 {
1183 checkContextMatch(t);
1184 return new BitVecExpr(this, Native.mkBvnot(nCtx(), t.getNativeObject()));
1185 }
1186
1193 {
1194 checkContextMatch(t);
1195 return new BitVecExpr(this, Native.mkBvredand(nCtx(),
1196 t.getNativeObject()));
1197 }
1198
1205 {
1206 checkContextMatch(t);
1207 return new BitVecExpr(this, Native.mkBvredor(nCtx(),
1208 t.getNativeObject()));
1209 }
1210
1217 {
1218 checkContextMatch(t1);
1219 checkContextMatch(t2);
1220 return new BitVecExpr(this, Native.mkBvand(nCtx(),
1221 t1.getNativeObject(), t2.getNativeObject()));
1222 }
1223
1230 {
1231 checkContextMatch(t1);
1232 checkContextMatch(t2);
1233 return new BitVecExpr(this, Native.mkBvor(nCtx(), t1.getNativeObject(),
1234 t2.getNativeObject()));
1235 }
1236
1243 {
1244 checkContextMatch(t1);
1245 checkContextMatch(t2);
1246 return new BitVecExpr(this, Native.mkBvxor(nCtx(),
1247 t1.getNativeObject(), t2.getNativeObject()));
1248 }
1249
1256 {
1257 checkContextMatch(t1);
1258 checkContextMatch(t2);
1259 return new BitVecExpr(this, Native.mkBvnand(nCtx(),
1260 t1.getNativeObject(), t2.getNativeObject()));
1261 }
1262
1269 {
1270 checkContextMatch(t1);
1271 checkContextMatch(t2);
1272 return new BitVecExpr(this, Native.mkBvnor(nCtx(),
1273 t1.getNativeObject(), t2.getNativeObject()));
1274 }
1275
1282 {
1283 checkContextMatch(t1);
1284 checkContextMatch(t2);
1285 return new BitVecExpr(this, Native.mkBvxnor(nCtx(),
1286 t1.getNativeObject(), t2.getNativeObject()));
1287 }
1288
1295 {
1296 checkContextMatch(t);
1297 return new BitVecExpr(this, Native.mkBvneg(nCtx(), t.getNativeObject()));
1298 }
1299
1306 {
1307 checkContextMatch(t1);
1308 checkContextMatch(t2);
1309 return new BitVecExpr(this, Native.mkBvadd(nCtx(),
1310 t1.getNativeObject(), t2.getNativeObject()));
1311 }
1312
1319 {
1320 checkContextMatch(t1);
1321 checkContextMatch(t2);
1322 return new BitVecExpr(this, Native.mkBvsub(nCtx(),
1323 t1.getNativeObject(), t2.getNativeObject()));
1324 }
1325
1332 {
1333 checkContextMatch(t1);
1334 checkContextMatch(t2);
1335 return new BitVecExpr(this, Native.mkBvmul(nCtx(),
1336 t1.getNativeObject(), t2.getNativeObject()));
1337 }
1338
1347 {
1348 checkContextMatch(t1);
1349 checkContextMatch(t2);
1350 return new BitVecExpr(this, Native.mkBvudiv(nCtx(),
1351 t1.getNativeObject(), t2.getNativeObject()));
1352 }
1353
1368 {
1369 checkContextMatch(t1);
1370 checkContextMatch(t2);
1371 return new BitVecExpr(this, Native.mkBvsdiv(nCtx(),
1372 t1.getNativeObject(), t2.getNativeObject()));
1373 }
1374
1383 {
1384 checkContextMatch(t1);
1385 checkContextMatch(t2);
1386 return new BitVecExpr(this, Native.mkBvurem(nCtx(),
1387 t1.getNativeObject(), t2.getNativeObject()));
1388 }
1389
1401 {
1402 checkContextMatch(t1);
1403 checkContextMatch(t2);
1404 return new BitVecExpr(this, Native.mkBvsrem(nCtx(),
1405 t1.getNativeObject(), t2.getNativeObject()));
1406 }
1407
1415 {
1416 checkContextMatch(t1);
1417 checkContextMatch(t2);
1418 return new BitVecExpr(this, Native.mkBvsmod(nCtx(),
1419 t1.getNativeObject(), t2.getNativeObject()));
1420 }
1421
1428 {
1429 checkContextMatch(t1);
1430 checkContextMatch(t2);
1431 return new BoolExpr(this, Native.mkBvult(nCtx(), t1.getNativeObject(),
1432 t2.getNativeObject()));
1433 }
1434
1441 {
1442 checkContextMatch(t1);
1443 checkContextMatch(t2);
1444 return new BoolExpr(this, Native.mkBvslt(nCtx(), t1.getNativeObject(),
1445 t2.getNativeObject()));
1446 }
1447
1454 {
1455 checkContextMatch(t1);
1456 checkContextMatch(t2);
1457 return new BoolExpr(this, Native.mkBvule(nCtx(), t1.getNativeObject(),
1458 t2.getNativeObject()));
1459 }
1460
1467 {
1468 checkContextMatch(t1);
1469 checkContextMatch(t2);
1470 return new BoolExpr(this, Native.mkBvsle(nCtx(), t1.getNativeObject(),
1471 t2.getNativeObject()));
1472 }
1473
1480 {
1481 checkContextMatch(t1);
1482 checkContextMatch(t2);
1483 return new BoolExpr(this, Native.mkBvuge(nCtx(), t1.getNativeObject(),
1484 t2.getNativeObject()));
1485 }
1486
1493 {
1494 checkContextMatch(t1);
1495 checkContextMatch(t2);
1496 return new BoolExpr(this, Native.mkBvsge(nCtx(), t1.getNativeObject(),
1497 t2.getNativeObject()));
1498 }
1499
1506 {
1507 checkContextMatch(t1);
1508 checkContextMatch(t2);
1509 return new BoolExpr(this, Native.mkBvugt(nCtx(), t1.getNativeObject(),
1510 t2.getNativeObject()));
1511 }
1512
1519 {
1520 checkContextMatch(t1);
1521 checkContextMatch(t2);
1522 return new BoolExpr(this, Native.mkBvsgt(nCtx(), t1.getNativeObject(),
1523 t2.getNativeObject()));
1524 }
1525
1537 {
1538 checkContextMatch(t1);
1539 checkContextMatch(t2);
1540 return new BitVecExpr(this, Native.mkConcat(nCtx(),
1541 t1.getNativeObject(), t2.getNativeObject()));
1542 }
1543
1552 public BitVecExpr mkExtract(int high, int low, Expr<BitVecSort> t)
1553
1554 {
1555 checkContextMatch(t);
1556 return new BitVecExpr(this, Native.mkExtract(nCtx(), high, low,
1557 t.getNativeObject()));
1558 }
1559
1568 {
1569 checkContextMatch(t);
1570 return new BitVecExpr(this, Native.mkSignExt(nCtx(), i,
1571 t.getNativeObject()));
1572 }
1573
1582 {
1583 checkContextMatch(t);
1584 return new BitVecExpr(this, Native.mkZeroExt(nCtx(), i,
1585 t.getNativeObject()));
1586 }
1587
1594 {
1595 checkContextMatch(t);
1596 return new BitVecExpr(this, Native.mkRepeat(nCtx(), i,
1597 t.getNativeObject()));
1598 }
1599
1612 {
1613 checkContextMatch(t1);
1614 checkContextMatch(t2);
1615 return new BitVecExpr(this, Native.mkBvshl(nCtx(),
1616 t1.getNativeObject(), t2.getNativeObject()));
1617 }
1618
1631 {
1632 checkContextMatch(t1);
1633 checkContextMatch(t2);
1634 return new BitVecExpr(this, Native.mkBvlshr(nCtx(),
1635 t1.getNativeObject(), t2.getNativeObject()));
1636 }
1637
1651 {
1652 checkContextMatch(t1);
1653 checkContextMatch(t2);
1654 return new BitVecExpr(this, Native.mkBvashr(nCtx(),
1655 t1.getNativeObject(), t2.getNativeObject()));
1656 }
1657
1664 {
1665 checkContextMatch(t);
1666 return new BitVecExpr(this, Native.mkRotateLeft(nCtx(), i,
1667 t.getNativeObject()));
1668 }
1669
1676 {
1677 checkContextMatch(t);
1678 return new BitVecExpr(this, Native.mkRotateRight(nCtx(), i,
1679 t.getNativeObject()));
1680 }
1681
1689
1690 {
1691 checkContextMatch(t1);
1692 checkContextMatch(t2);
1693 return new BitVecExpr(this, Native.mkExtRotateLeft(nCtx(),
1694 t1.getNativeObject(), t2.getNativeObject()));
1695 }
1696
1704
1705 {
1706 checkContextMatch(t1);
1707 checkContextMatch(t2);
1708 return new BitVecExpr(this, Native.mkExtRotateRight(nCtx(),
1709 t1.getNativeObject(), t2.getNativeObject()));
1710 }
1711
1722 {
1723 checkContextMatch(t);
1724 return new BitVecExpr(this, Native.mkInt2bv(nCtx(), n,
1725 t.getNativeObject()));
1726 }
1727
1742 public IntExpr mkBV2Int(Expr<BitVecSort> t, boolean signed)
1743 {
1744 checkContextMatch(t);
1745 return new IntExpr(this, Native.mkBv2int(nCtx(), t.getNativeObject(),
1746 (signed)));
1747 }
1748
1755 boolean isSigned)
1756 {
1757 checkContextMatch(t1);
1758 checkContextMatch(t2);
1759 return new BoolExpr(this, Native.mkBvaddNoOverflow(nCtx(), t1
1760 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1761 }
1762
1769
1770 {
1771 checkContextMatch(t1);
1772 checkContextMatch(t2);
1773 return new BoolExpr(this, Native.mkBvaddNoUnderflow(nCtx(),
1774 t1.getNativeObject(), t2.getNativeObject()));
1775 }
1776
1783
1784 {
1785 checkContextMatch(t1);
1786 checkContextMatch(t2);
1787 return new BoolExpr(this, Native.mkBvsubNoOverflow(nCtx(),
1788 t1.getNativeObject(), t2.getNativeObject()));
1789 }
1790
1797 boolean isSigned)
1798 {
1799 checkContextMatch(t1);
1800 checkContextMatch(t2);
1801 return new BoolExpr(this, Native.mkBvsubNoUnderflow(nCtx(), t1
1802 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1803 }
1804
1811
1812 {
1813 checkContextMatch(t1);
1814 checkContextMatch(t2);
1815 return new BoolExpr(this, Native.mkBvsdivNoOverflow(nCtx(),
1816 t1.getNativeObject(), t2.getNativeObject()));
1817 }
1818
1825 {
1826 checkContextMatch(t);
1827 return new BoolExpr(this, Native.mkBvnegNoOverflow(nCtx(),
1828 t.getNativeObject()));
1829 }
1830
1837 boolean isSigned)
1838 {
1839 checkContextMatch(t1);
1840 checkContextMatch(t2);
1841 return new BoolExpr(this, Native.mkBvmulNoOverflow(nCtx(), t1
1842 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1843 }
1844
1851
1852 {
1853 checkContextMatch(t1);
1854 checkContextMatch(t2);
1855 return new BoolExpr(this, Native.mkBvmulNoUnderflow(nCtx(),
1856 t1.getNativeObject(), t2.getNativeObject()));
1857 }
1858
1862 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(Symbol name, D domain, R range)
1863
1864 {
1865 return (ArrayExpr<D, R>) mkConst(name, mkArraySort(domain, range));
1866 }
1867
1871 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(String name, D domain, R range)
1872
1873 {
1874 return (ArrayExpr<D, R>) mkConst(mkSymbol(name), mkArraySort(domain, range));
1875 }
1876
1889 public final <D extends Sort, R extends Sort> Expr<R> mkSelect(Expr<ArraySort<D, R>> a, Expr<D> i)
1890 {
1891 checkContextMatch(a);
1892 checkContextMatch(i);
1893 return (Expr<R>) Expr.create(
1894 this,
1895 Native.mkSelect(nCtx(), a.getNativeObject(),
1896 i.getNativeObject()));
1897 }
1898
1911 public final <R extends Sort> Expr<R> mkSelect(Expr<ArraySort<Sort, R>> a, Expr<?>[] args)
1912 {
1913 checkContextMatch(a);
1914 checkContextMatch(args);
1915 return (Expr<R>) Expr.create(
1916 this,
1917 Native.mkSelectN(nCtx(), a.getNativeObject(), args.length, AST.arrayToNative(args)));
1918 }
1919
1936 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkStore(Expr<ArraySort<D, R>> a, Expr<D> i, Expr<R> v)
1937 {
1938 checkContextMatch(a);
1939 checkContextMatch(i);
1940 checkContextMatch(v);
1941 return new ArrayExpr<>(this, Native.mkStore(nCtx(), a.getNativeObject(),
1942 i.getNativeObject(), v.getNativeObject()));
1943 }
1944
1961 public final <R extends Sort> ArrayExpr<Sort, R> mkStore(Expr<ArraySort<Sort, R>> a, Expr<?>[] args, Expr<R> v)
1962 {
1963 checkContextMatch(a);
1964 checkContextMatch(args);
1965 checkContextMatch(v);
1966 return new ArrayExpr<>(this, Native.mkStoreN(nCtx(), a.getNativeObject(),
1967 args.length, AST.arrayToNative(args), v.getNativeObject()));
1968 }
1969
1979 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkConstArray(D domain, Expr<R> v)
1980 {
1981 checkContextMatch(domain);
1982 checkContextMatch(v);
1983 return new ArrayExpr<>(this, Native.mkConstArray(nCtx(),
1984 domain.getNativeObject(), v.getNativeObject()));
1985 }
1986
2000 @SafeVarargs
2001 public final <D extends Sort, R1 extends Sort, R2 extends Sort> ArrayExpr<D, R2> mkMap(FuncDecl<R2> f, Expr<ArraySort<D, R1>>... args)
2002 {
2003 checkContextMatch(f);
2004 checkContextMatch(args);
2005 return (ArrayExpr<D, R2>) Expr.create(this, Native.mkMap(nCtx(),
2006 f.getNativeObject(), AST.arrayLength(args),
2007 AST.arrayToNative(args)));
2008 }
2009
2016 public final <D extends Sort, R extends Sort> Expr<R> mkTermArray(Expr<ArraySort<D, R>> array)
2017 {
2018 checkContextMatch(array);
2019 return (Expr<R>) Expr.create(this,
2020 Native.mkArrayDefault(nCtx(), array.getNativeObject()));
2021 }
2022
2030 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkAsArray(FuncDecl<R> f)
2031 {
2032 checkContextMatch(f);
2033 return (ArrayExpr<D, R>) Expr.create(this, Native.mkAsArray(nCtx(), f.getNativeObject()));
2034 }
2035
2039 public final <D extends Sort, R extends Sort> Expr<D> mkArrayExt(Expr<ArraySort<D, R>> arg1, Expr<ArraySort<D, R>> arg2)
2040 {
2041 checkContextMatch(arg1);
2042 checkContextMatch(arg2);
2043 return (Expr<D>) Expr.create(this, Native.mkArrayExt(nCtx(), arg1.getNativeObject(), arg2.getNativeObject()));
2044 }
2045
2046
2050 public final <D extends Sort> SetSort<D> mkSetSort(D ty)
2051 {
2052 checkContextMatch(ty);
2053 return new SetSort<>(this, ty);
2054 }
2055
2059 public final <D extends Sort> ArrayExpr<D, BoolSort> mkEmptySet(D domain)
2060 {
2061 checkContextMatch(domain);
2062 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2063 Native.mkEmptySet(nCtx(), domain.getNativeObject()));
2064 }
2065
2069 public final <D extends Sort> ArrayExpr<D, BoolSort> mkFullSet(D domain)
2070 {
2071 checkContextMatch(domain);
2072 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2073 Native.mkFullSet(nCtx(), domain.getNativeObject()));
2074 }
2075
2079 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetAdd(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2080 {
2081 checkContextMatch(set);
2082 checkContextMatch(element);
2083 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2084 Native.mkSetAdd(nCtx(), set.getNativeObject(),
2085 element.getNativeObject()));
2086 }
2087
2091 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetDel(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2092 {
2093 checkContextMatch(set);
2094 checkContextMatch(element);
2095 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2096 Native.mkSetDel(nCtx(), set.getNativeObject(),
2097 element.getNativeObject()));
2098 }
2099
2103 @SafeVarargs
2104 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetUnion(Expr<ArraySort<D, BoolSort>>... args)
2105 {
2106 checkContextMatch(args);
2107 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2108 Native.mkSetUnion(nCtx(), args.length,
2109 AST.arrayToNative(args)));
2110 }
2111
2115 @SafeVarargs
2117 {
2118 checkContextMatch(args);
2119 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2120 Native.mkSetIntersect(nCtx(), args.length,
2121 AST.arrayToNative(args)));
2122 }
2123
2128 {
2129 checkContextMatch(arg1);
2130 checkContextMatch(arg2);
2131 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2132 Native.mkSetDifference(nCtx(), arg1.getNativeObject(),
2133 arg2.getNativeObject()));
2134 }
2135
2140 {
2141 checkContextMatch(arg);
2142 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2143 Native.mkSetComplement(nCtx(), arg.getNativeObject()));
2144 }
2145
2149 public final <D extends Sort> BoolExpr mkSetMembership(Expr<D> elem, Expr<ArraySort<D, BoolSort>> set)
2150 {
2151 checkContextMatch(elem);
2152 checkContextMatch(set);
2153 return (BoolExpr) Expr.create(this,
2154 Native.mkSetMember(nCtx(), elem.getNativeObject(),
2155 set.getNativeObject()));
2156 }
2157
2162 {
2163 checkContextMatch(arg1);
2164 checkContextMatch(arg2);
2165 return (BoolExpr) Expr.create(this,
2166 Native.mkSetSubset(nCtx(), arg1.getNativeObject(),
2167 arg2.getNativeObject()));
2168 }
2169
2170
2178 public final FiniteSetSort mkFiniteSetSort(Sort elemSort)
2179 {
2180 checkContextMatch(elemSort);
2181 return new FiniteSetSort(this, elemSort);
2182 }
2183
2187 public final boolean isFiniteSetSort(Sort s)
2188 {
2189 checkContextMatch(s);
2190 return Native.isFiniteSetSort(nCtx(), s.getNativeObject());
2191 }
2192
2197 {
2198 checkContextMatch(s);
2199 return Sort.create(this, Native.getFiniteSetSortBasis(nCtx(), s.getNativeObject()));
2200 }
2201
2205 public final Expr mkFiniteSetEmpty(Sort setSort)
2206 {
2207 checkContextMatch(setSort);
2208 return Expr.create(this, Native.mkFiniteSetEmpty(nCtx(), setSort.getNativeObject()));
2209 }
2210
2214 public final Expr mkFiniteSetSingleton(Expr elem)
2215 {
2216 checkContextMatch(elem);
2217 return Expr.create(this, Native.mkFiniteSetSingleton(nCtx(), elem.getNativeObject()));
2218 }
2219
2223 public final Expr mkFiniteSetUnion(Expr s1, Expr s2)
2224 {
2225 checkContextMatch(s1);
2226 checkContextMatch(s2);
2227 return Expr.create(this, Native.mkFiniteSetUnion(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2228 }
2229
2233 public final Expr mkFiniteSetIntersect(Expr s1, Expr s2)
2234 {
2235 checkContextMatch(s1);
2236 checkContextMatch(s2);
2237 return Expr.create(this, Native.mkFiniteSetIntersect(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2238 }
2239
2244 {
2245 checkContextMatch(s1);
2246 checkContextMatch(s2);
2247 return Expr.create(this, Native.mkFiniteSetDifference(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2248 }
2249
2253 public final BoolExpr mkFiniteSetMember(Expr elem, Expr set)
2254 {
2255 checkContextMatch(elem);
2256 checkContextMatch(set);
2257 return (BoolExpr) Expr.create(this, Native.mkFiniteSetMember(nCtx(), elem.getNativeObject(), set.getNativeObject()));
2258 }
2259
2263 public final Expr mkFiniteSetSize(Expr set)
2264 {
2265 checkContextMatch(set);
2266 return Expr.create(this, Native.mkFiniteSetSize(nCtx(), set.getNativeObject()));
2267 }
2268
2273 {
2274 checkContextMatch(s1);
2275 checkContextMatch(s2);
2276 return (BoolExpr) Expr.create(this, Native.mkFiniteSetSubset(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2277 }
2278
2282 public final Expr mkFiniteSetMap(Expr f, Expr set)
2283 {
2284 checkContextMatch(f);
2285 checkContextMatch(set);
2286 return Expr.create(this, Native.mkFiniteSetMap(nCtx(), f.getNativeObject(), set.getNativeObject()));
2287 }
2288
2292 public final Expr mkFiniteSetFilter(Expr f, Expr set)
2293 {
2294 checkContextMatch(f);
2295 checkContextMatch(set);
2296 return Expr.create(this, Native.mkFiniteSetFilter(nCtx(), f.getNativeObject(), set.getNativeObject()));
2297 }
2298
2302 public final Expr mkFiniteSetRange(Expr low, Expr high)
2303 {
2304 checkContextMatch(low);
2305 checkContextMatch(high);
2306 return Expr.create(this, Native.mkFiniteSetRange(nCtx(), low.getNativeObject(), high.getNativeObject()));
2307 }
2308
2309
2317 public final <R extends Sort> SeqExpr<R> mkEmptySeq(R s)
2318 {
2319 checkContextMatch(s);
2320 return (SeqExpr<R>) Expr.create(this, Native.mkSeqEmpty(nCtx(), s.getNativeObject()));
2321 }
2322
2326 public final <R extends Sort> SeqExpr<R> mkUnit(Expr<R> elem)
2327 {
2328 checkContextMatch(elem);
2329 return (SeqExpr<R>) Expr.create(this, Native.mkSeqUnit(nCtx(), elem.getNativeObject()));
2330 }
2331
2336 {
2337 StringBuilder buf = new StringBuilder();
2338 for (int i = 0; i < s.length(); i += Character.charCount(s.codePointAt(i))) {
2339 int code = s.codePointAt(i);
2340 if (code <= 32 || 127 < code)
2341 buf.append(String.format("\\u{%x}", code));
2342 else
2343 buf.append(s.charAt(i));
2344 }
2345 return (SeqExpr<CharSort>) Expr.create(this, Native.mkString(nCtx(), buf.toString()));
2346 }
2347
2352 {
2353 return (SeqExpr<CharSort>) Expr.create(this, Native.mkIntToStr(nCtx(), e.getNativeObject()));
2354 }
2355
2360 {
2361 return (SeqExpr<CharSort>) Expr.create(this, Native.mkUbvToStr(nCtx(), e.getNativeObject()));
2362 }
2363
2368 {
2369 return (SeqExpr<CharSort>) Expr.create(this, Native.mkSbvToStr(nCtx(), e.getNativeObject()));
2370 }
2371
2376 {
2377 return (IntExpr) Expr.create(this, Native.mkStrToInt(nCtx(), e.getNativeObject()));
2378 }
2379
2383 @SafeVarargs
2384 public final <R extends Sort> SeqExpr<R> mkConcat(Expr<SeqSort<R>>... t)
2385 {
2386 checkContextMatch(t);
2387 return (SeqExpr<R>) Expr.create(this, Native.mkSeqConcat(nCtx(), t.length, AST.arrayToNative(t)));
2388 }
2389
2390
2394 public final <R extends Sort> IntExpr mkLength(Expr<SeqSort<R>> s)
2395 {
2396 checkContextMatch(s);
2397 return (IntExpr) Expr.create(this, Native.mkSeqLength(nCtx(), s.getNativeObject()));
2398 }
2399
2403 public final <R extends Sort> SeqExpr<R> mkSeqPower(Expr<SeqSort<R>> s, Expr<IntSort> n)
2404 {
2405 checkContextMatch(s, n);
2406 return (SeqExpr<R>) Expr.create(this, Native.mkSeqPower(nCtx(), s.getNativeObject(), n.getNativeObject()));
2407 }
2408
2412 public final <R extends Sort> BoolExpr mkPrefixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2413 {
2414 checkContextMatch(s1, s2);
2415 return (BoolExpr) Expr.create(this, Native.mkSeqPrefix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2416 }
2417
2421 public final <R extends Sort> BoolExpr mkSuffixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2422 {
2423 checkContextMatch(s1, s2);
2424 return (BoolExpr)Expr.create(this, Native.mkSeqSuffix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2425 }
2426
2430 public final <R extends Sort> BoolExpr mkContains(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2431 {
2432 checkContextMatch(s1, s2);
2433 return (BoolExpr) Expr.create(this, Native.mkSeqContains(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2434 }
2435
2441 {
2442 checkContextMatch(s1, s2);
2443 return new BoolExpr(this, Native.mkStrLt(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2444 }
2445
2450 {
2451 checkContextMatch(s1, s2);
2452 return new BoolExpr(this, Native.mkStrLe(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2453 }
2454
2455
2459 public final <R extends Sort> SeqExpr<R> mkAt(Expr<SeqSort<R>> s, Expr<IntSort> index)
2460 {
2461 checkContextMatch(s, index);
2462 return (SeqExpr<R>) Expr.create(this, Native.mkSeqAt(nCtx(), s.getNativeObject(), index.getNativeObject()));
2463 }
2464
2468 public final <R extends Sort> Expr<R> mkNth(Expr<SeqSort<R>> s, Expr<IntSort> index)
2469 {
2470 checkContextMatch(s, index);
2471 return (Expr<R>) Expr.create(this, Native.mkSeqNth(nCtx(), s.getNativeObject(), index.getNativeObject()));
2472 }
2473
2474
2478 public final <R extends Sort> SeqExpr<R> mkExtract(Expr<SeqSort<R>> s, Expr<IntSort> offset, Expr<IntSort> length)
2479 {
2480 checkContextMatch(s, offset, length);
2481 return (SeqExpr<R>) Expr.create(this, Native.mkSeqExtract(nCtx(), s.getNativeObject(), offset.getNativeObject(), length.getNativeObject()));
2482 }
2483
2487 public final <R extends Sort> IntExpr mkIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr, Expr<IntSort> offset)
2488 {
2489 checkContextMatch(s, substr, offset);
2490 return (IntExpr)Expr.create(this, Native.mkSeqIndex(nCtx(), s.getNativeObject(), substr.getNativeObject(), offset.getNativeObject()));
2491 }
2492
2496 public final <R extends Sort> IntExpr mkLastIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr)
2497 {
2498 checkContextMatch(s, substr);
2499 return (IntExpr)Expr.create(this, Native.mkSeqLastIndex(nCtx(), s.getNativeObject(), substr.getNativeObject()));
2500 }
2501
2506 public final <R extends Sort> SeqExpr<R> mkSeqMap(Expr<?> f, Expr<SeqSort<R>> s)
2507 {
2508 checkContextMatch(f, s);
2509 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMap(nCtx(), f.getNativeObject(), s.getNativeObject()));
2510 }
2511
2516 public final <R extends Sort> SeqExpr<R> mkSeqMapi(Expr<?> f, Expr<IntSort> i, Expr<SeqSort<R>> s)
2517 {
2518 checkContextMatch(f, i, s);
2519 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMapi(nCtx(), f.getNativeObject(), i.getNativeObject(), s.getNativeObject()));
2520 }
2521
2526 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldl(Expr<?> f, Expr<A> a, Expr<SeqSort<R>> s)
2527 {
2528 checkContextMatch(f, a, s);
2529 return (Expr<A>) Expr.create(this, Native.mkSeqFoldl(nCtx(), f.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2530 }
2531
2536 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldli(Expr<?> f, Expr<IntSort> i, Expr<A> a, Expr<SeqSort<R>> s)
2537 {
2538 checkContextMatch(f, i, a, s);
2539 return (Expr<A>) Expr.create(this, Native.mkSeqFoldli(nCtx(), f.getNativeObject(), i.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2540 }
2541
2545 public final <R extends Sort> SeqExpr<R> mkReplace(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2546 {
2547 checkContextMatch(s, src, dst);
2548 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplace(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2549 }
2550
2554 public final <R extends Sort> SeqExpr<R> mkReplaceAll(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2555 {
2556 checkContextMatch(s, src, dst);
2557 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceAll(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2558 }
2559
2563 public final <R extends Sort> SeqExpr<R> mkReplaceRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2564 {
2565 checkContextMatch(s, re, dst);
2566 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceRe(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2567 }
2568
2572 public final <R extends Sort> SeqExpr<R> mkReplaceReAll(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2573 {
2574 checkContextMatch(s, re, dst);
2575 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceReAll(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2576 }
2577
2581 public final <R extends Sort> ReExpr<SeqSort<R>> mkToRe(Expr<SeqSort<R>> s)
2582 {
2583 checkContextMatch(s);
2584 return (ReExpr<SeqSort<R>>) Expr.create(this, Native.mkSeqToRe(nCtx(), s.getNativeObject()));
2585 }
2586
2587
2591 public final <R extends Sort> BoolExpr mkInRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re)
2592 {
2593 checkContextMatch(s, re);
2594 return (BoolExpr) Expr.create(this, Native.mkSeqInRe(nCtx(), s.getNativeObject(), re.getNativeObject()));
2595 }
2596
2600 public final <R extends Sort> ReExpr<R> mkStar(Expr<ReSort<R>> re)
2601 {
2602 checkContextMatch(re);
2603 return (ReExpr<R>) Expr.create(this, Native.mkReStar(nCtx(), re.getNativeObject()));
2604 }
2605
2609 public final <R extends Sort> ReExpr<R> mkPower(Expr<ReSort<R>> re, int n)
2610 {
2611 return (ReExpr<R>) Expr.create(this, Native.mkRePower(nCtx(), re.getNativeObject(), n));
2612 }
2613
2617 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo, int hi)
2618 {
2619 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, hi));
2620 }
2621
2625 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo)
2626 {
2627 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, 0));
2628 }
2629
2630
2634 public final <R extends Sort> ReExpr<R> mkPlus(Expr<ReSort<R>> re)
2635 {
2636 checkContextMatch(re);
2637 return (ReExpr<R>) Expr.create(this, Native.mkRePlus(nCtx(), re.getNativeObject()));
2638 }
2639
2643 public final <R extends Sort> ReExpr<R> mkOption(Expr<ReSort<R>> re)
2644 {
2645 checkContextMatch(re);
2646 return (ReExpr<R>) Expr.create(this, Native.mkReOption(nCtx(), re.getNativeObject()));
2647 }
2648
2652 public final <R extends Sort> ReExpr<R> mkComplement(Expr<ReSort<R>> re)
2653 {
2654 checkContextMatch(re);
2655 return (ReExpr<R>) Expr.create(this, Native.mkReComplement(nCtx(), re.getNativeObject()));
2656 }
2657
2661 @SafeVarargs
2662 public final <R extends Sort> ReExpr<R> mkConcat(ReExpr<R>... t)
2663 {
2664 checkContextMatch(t);
2665 return (ReExpr<R>) Expr.create(this, Native.mkReConcat(nCtx(), t.length, AST.arrayToNative(t)));
2666 }
2667
2671 @SafeVarargs
2672 public final <R extends Sort> ReExpr<R> mkUnion(Expr<ReSort<R>>... t)
2673 {
2674 checkContextMatch(t);
2675 return (ReExpr<R>) Expr.create(this, Native.mkReUnion(nCtx(), t.length, AST.arrayToNative(t)));
2676 }
2677
2681 @SafeVarargs
2682 public final <R extends Sort> ReExpr<R> mkIntersect(Expr<ReSort<R>>... t)
2683 {
2684 checkContextMatch(t);
2685 return (ReExpr<R>) Expr.create(this, Native.mkReIntersect(nCtx(), t.length, AST.arrayToNative(t)));
2686 }
2687
2691 public final <R extends Sort> ReExpr<R> mkDiff(Expr<ReSort<R>> a, Expr<ReSort<R>> b)
2692 {
2693 checkContextMatch(a, b);
2694 return (ReExpr<R>) Expr.create(this, Native.mkReDiff(nCtx(), a.getNativeObject(), b.getNativeObject()));
2695 }
2696
2697
2702 public final <R extends Sort> ReExpr<R> mkEmptyRe(ReSort<R> s)
2703 {
2704 return (ReExpr<R>) Expr.create(this, Native.mkReEmpty(nCtx(), s.getNativeObject()));
2705 }
2706
2711 public final <R extends Sort> ReExpr<R> mkFullRe(ReSort<R> s)
2712 {
2713 return (ReExpr<R>) Expr.create(this, Native.mkReFull(nCtx(), s.getNativeObject()));
2714 }
2715
2721 public final <R extends Sort> ReExpr<R> mkAllcharRe(ReSort<R> s)
2722 {
2723 return (ReExpr<R>) Expr.create(this, Native.mkReAllchar(nCtx(), s.getNativeObject()));
2724 }
2725
2730 {
2731 checkContextMatch(lo, hi);
2732 return (ReExpr<SeqSort<CharSort>>) Expr.create(this, Native.mkReRange(nCtx(), lo.getNativeObject(), hi.getNativeObject()));
2733 }
2734
2739 {
2740 checkContextMatch(ch1, ch2);
2741 return (BoolExpr) Expr.create(this, Native.mkCharLe(nCtx(), ch1.getNativeObject(), ch2.getNativeObject()));
2742 }
2743
2748 {
2749 checkContextMatch(ch);
2750 return (IntExpr) Expr.create(this, Native.mkCharToInt(nCtx(), ch.getNativeObject()));
2751 }
2752
2757 {
2758 checkContextMatch(ch);
2759 return (BitVecExpr) Expr.create(this, Native.mkCharToBv(nCtx(), ch.getNativeObject()));
2760 }
2761
2766 {
2767 checkContextMatch(bv);
2768 return (Expr<CharSort>) Expr.create(this, Native.mkCharFromBv(nCtx(), bv.getNativeObject()));
2769 }
2770
2775 {
2776 checkContextMatch(ch);
2777 return (BoolExpr) Expr.create(this, Native.mkCharIsDigit(nCtx(), ch.getNativeObject()));
2778 }
2779
2783 public BoolExpr mkAtMost(Expr<BoolSort>[] args, int k)
2784 {
2785 checkContextMatch(args);
2786 return (BoolExpr) Expr.create(this, Native.mkAtmost(nCtx(), args.length, AST.arrayToNative(args), k));
2787 }
2788
2792 public BoolExpr mkAtLeast(Expr<BoolSort>[] args, int k)
2793 {
2794 checkContextMatch(args);
2795 return (BoolExpr) Expr.create(this, Native.mkAtleast(nCtx(), args.length, AST.arrayToNative(args), k));
2796 }
2797
2801 public BoolExpr mkPBLe(int[] coeffs, Expr<BoolSort>[] args, int k)
2802 {
2803 checkContextMatch(args);
2804 return (BoolExpr) Expr.create(this, Native.mkPble(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2805 }
2806
2810 public BoolExpr mkPBGe(int[] coeffs, Expr<BoolSort>[] args, int k)
2811 {
2812 checkContextMatch(args);
2813 return (BoolExpr) Expr.create(this, Native.mkPbge(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2814 }
2815
2819 public BoolExpr mkPBEq(int[] coeffs, Expr<BoolSort>[] args, int k)
2820 {
2821 checkContextMatch(args);
2822 return (BoolExpr) Expr.create(this, Native.mkPbeq(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2823 }
2824
2836 public final <R extends Sort> Expr<R> mkNumeral(String v, R ty)
2837 {
2838 checkContextMatch(ty);
2839 return (Expr<R>) Expr.create(this,
2840 Native.mkNumeral(nCtx(), v, ty.getNativeObject()));
2841 }
2842
2853 public final <R extends Sort> Expr<R> mkNumeral(int v, R ty)
2854 {
2855 checkContextMatch(ty);
2856 return (Expr<R>) Expr.create(this, Native.mkInt(nCtx(), v, ty.getNativeObject()));
2857 }
2858
2869 public final <R extends Sort> Expr<R> mkNumeral(long v, R ty)
2870 {
2871 checkContextMatch(ty);
2872 return (Expr<R>) Expr.create(this,
2873 Native.mkInt64(nCtx(), v, ty.getNativeObject()));
2874 }
2875
2885 public RatNum mkReal(int num, int den)
2886 {
2887 if (den == 0) {
2888 throw new Z3Exception("Denominator is zero");
2889 }
2890
2891 return new RatNum(this, Native.mkReal(nCtx(), num, den));
2892 }
2893
2900 public RatNum mkReal(String v)
2901 {
2902
2903 return new RatNum(this, Native.mkNumeral(nCtx(), v, getRealSort()
2904 .getNativeObject()));
2905 }
2906
2913 public RatNum mkReal(int v)
2914 {
2915
2916 return new RatNum(this, Native.mkInt(nCtx(), v, getRealSort()
2917 .getNativeObject()));
2918 }
2919
2926 public RatNum mkReal(long v)
2927 {
2928
2929 return new RatNum(this, Native.mkInt64(nCtx(), v, getRealSort()
2930 .getNativeObject()));
2931 }
2932
2937 public IntNum mkInt(String v)
2938 {
2939
2940 return new IntNum(this, Native.mkNumeral(nCtx(), v, getIntSort()
2941 .getNativeObject()));
2942 }
2943
2950 public IntNum mkInt(int v)
2951 {
2952
2953 return new IntNum(this, Native.mkInt(nCtx(), v, getIntSort()
2954 .getNativeObject()));
2955 }
2956
2963 public IntNum mkInt(long v)
2964 {
2965
2966 return new IntNum(this, Native.mkInt64(nCtx(), v, getIntSort()
2967 .getNativeObject()));
2968 }
2969
2975 public BitVecNum mkBV(String v, int size)
2976 {
2977 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2978 }
2979
2985 public BitVecNum mkBV(int v, int size)
2986 {
2987 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2988 }
2989
2995 public BitVecNum mkBV(long v, int size)
2996 {
2997 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2998 }
2999
3025 public Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3026 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3027 Symbol quantifierID, Symbol skolemID)
3028 {
3029 return Quantifier.of(this, true, sorts, names, body, weight, patterns,
3030 noPatterns, quantifierID, skolemID);
3031 }
3032
3037 public Quantifier mkForall(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3038 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3039 Symbol skolemID)
3040 {
3041
3042 return Quantifier.of(this, true, boundConstants, body, weight,
3043 patterns, noPatterns, quantifierID, skolemID);
3044 }
3045
3050 public Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3051 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3052 Symbol quantifierID, Symbol skolemID)
3053 {
3054
3055 return Quantifier.of(this, false, sorts, names, body, weight,
3056 patterns, noPatterns, quantifierID, skolemID);
3057 }
3058
3063 public Quantifier mkExists(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3064 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3065 Symbol skolemID)
3066 {
3067
3068 return Quantifier.of(this, false, boundConstants, body, weight,
3069 patterns, noPatterns, quantifierID, skolemID);
3070 }
3071
3076 public Quantifier mkQuantifier(boolean universal, Sort[] sorts,
3077 Symbol[] names, Expr<BoolSort> body, int weight, Pattern[] patterns,
3078 Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
3079
3080 {
3081
3082 if (universal)
3083 return mkForall(sorts, names, body, weight, patterns, noPatterns,
3084 quantifierID, skolemID);
3085 else
3086 return mkExists(sorts, names, body, weight, patterns, noPatterns,
3087 quantifierID, skolemID);
3088 }
3089
3094 public Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants,
3095 Expr<BoolSort> body, int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3096 Symbol quantifierID, Symbol skolemID)
3097 {
3098
3099 if (universal)
3100 return mkForall(boundConstants, body, weight, patterns, noPatterns,
3101 quantifierID, skolemID);
3102 else
3103 return mkExists(boundConstants, body, weight, patterns, noPatterns,
3104 quantifierID, skolemID);
3105 }
3106
3124 public final <R extends Sort> Lambda<R> mkLambda(Sort[] sorts, Symbol[] names, Expr<R> body)
3125 {
3126 return Lambda.of(this, sorts, names, body);
3127 }
3128
3135 public final <R extends Sort> Lambda<R> mkLambda(Expr<?>[] boundConstants, Expr<R> body)
3136 {
3137 return Lambda.of(this, boundConstants, body);
3138 }
3139
3140
3156 {
3157 Native.setAstPrintMode(nCtx(), value.toInt());
3158 }
3159
3173 public String benchmarkToSMTString(String name, String logic,
3174 String status, String attributes, Expr<BoolSort>[] assumptions,
3175 Expr<BoolSort> formula)
3176 {
3177
3178 return Native.benchmarkToSmtlibString(nCtx(), name, logic, status,
3179 attributes, assumptions.length,
3180 AST.arrayToNative(assumptions), formula.getNativeObject());
3181 }
3182
3192 public BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames,
3193 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3194 {
3195 int csn = Symbol.arrayLength(sortNames);
3196 int cs = Sort.arrayLength(sorts);
3197 int cdn = Symbol.arrayLength(declNames);
3198 int cd = AST.arrayLength(decls);
3199 if (csn != cs || cdn != cd) {
3200 throw new Z3Exception("Argument size mismatch");
3201 }
3202 ASTVector v = new ASTVector(this, Native.parseSmtlib2String(nCtx(),
3203 str, AST.arrayLength(sorts), Symbol.arrayToNative(sortNames),
3204 AST.arrayToNative(sorts), AST.arrayLength(decls),
3205 Symbol.arrayToNative(declNames), AST.arrayToNative(decls)));
3206 return v.ToBoolExprArray();
3207 }
3208
3213 public BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames,
3214 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3215 {
3216 int csn = Symbol.arrayLength(sortNames);
3217 int cs = Sort.arrayLength(sorts);
3218 int cdn = Symbol.arrayLength(declNames);
3219 int cd = AST.arrayLength(decls);
3220 if (csn != cs || cdn != cd)
3221 throw new Z3Exception("Argument size mismatch");
3222 ASTVector v = new ASTVector(this, Native.parseSmtlib2File(nCtx(),
3223 fileName, AST.arrayLength(sorts),
3224 Symbol.arrayToNative(sortNames), AST.arrayToNative(sorts),
3225 AST.arrayLength(decls), Symbol.arrayToNative(declNames),
3226 AST.arrayToNative(decls)));
3227 return v.ToBoolExprArray();
3228 }
3229
3240 public Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
3241 {
3242 return new Goal(this, models, unsatCores, proofs);
3243 }
3244
3249 {
3250 return new Params(this);
3251 }
3252
3256 public int getNumTactics()
3257 {
3258 return Native.getNumTactics(nCtx());
3259 }
3260
3264 public String[] getTacticNames()
3265 {
3266
3267 int n = getNumTactics();
3268 String[] res = new String[n];
3269 for (int i = 0; i < n; i++)
3270 res[i] = Native.getTacticName(nCtx(), i);
3271 return res;
3272 }
3273
3278 public String getTacticDescription(String name)
3279 {
3280 return Native.tacticGetDescr(nCtx(), name);
3281 }
3282
3286 public Tactic mkTactic(String name)
3287 {
3288 return new Tactic(this, name);
3289 }
3290
3295 public Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
3296
3297 {
3298 checkContextMatch(t1);
3299 checkContextMatch(t2);
3300 checkContextMatch(ts);
3301
3302 long last = 0;
3303 if (ts != null && ts.length > 0)
3304 {
3305 last = ts[ts.length - 1].getNativeObject();
3306 for (int i = ts.length - 2; i >= 0; i--) {
3307 last = Native.tacticAndThen(nCtx(), ts[i].getNativeObject(),
3308 last);
3309 }
3310 }
3311 if (last != 0)
3312 {
3313 last = Native.tacticAndThen(nCtx(), t2.getNativeObject(), last);
3314 return new Tactic(this, Native.tacticAndThen(nCtx(),
3315 t1.getNativeObject(), last));
3316 } else
3317 return new Tactic(this, Native.tacticAndThen(nCtx(),
3318 t1.getNativeObject(), t2.getNativeObject()));
3319 }
3320
3327 public Tactic then(Tactic t1, Tactic t2, Tactic... ts)
3328 {
3329 return andThen(t1, t2, ts);
3330 }
3331
3338 {
3339 checkContextMatch(t1);
3340 checkContextMatch(t2);
3341 return new Tactic(this, Native.tacticOrElse(nCtx(),
3342 t1.getNativeObject(), t2.getNativeObject()));
3343 }
3344
3351 public Tactic tryFor(Tactic t, int ms)
3352 {
3353 checkContextMatch(t);
3354 return new Tactic(this, Native.tacticTryFor(nCtx(),
3355 t.getNativeObject(), ms));
3356 }
3357
3365 {
3366 checkContextMatch(t);
3367 checkContextMatch(p);
3368 return new Tactic(this, Native.tacticWhen(nCtx(), p.getNativeObject(),
3369 t.getNativeObject()));
3370 }
3371
3377 public Tactic cond(Probe p, Tactic t1, Tactic t2)
3378 {
3379 checkContextMatch(p);
3380 checkContextMatch(t1);
3381 checkContextMatch(t2);
3382 return new Tactic(this, Native.tacticCond(nCtx(), p.getNativeObject(),
3383 t1.getNativeObject(), t2.getNativeObject()));
3384 }
3385
3390 public Tactic repeat(Tactic t, int max)
3391 {
3392 checkContextMatch(t);
3393 return new Tactic(this, Native.tacticRepeat(nCtx(),
3394 t.getNativeObject(), max));
3395 }
3396
3400 public Tactic skip()
3401 {
3402 return new Tactic(this, Native.tacticSkip(nCtx()));
3403 }
3404
3408 public Tactic fail()
3409 {
3410 return new Tactic(this, Native.tacticFail(nCtx()));
3411 }
3412
3418 {
3419 checkContextMatch(p);
3420 return new Tactic(this,
3421 Native.tacticFailIf(nCtx(), p.getNativeObject()));
3422 }
3423
3429 {
3430 return new Tactic(this, Native.tacticFailIfNotDecided(nCtx()));
3431 }
3432
3438 {
3439 checkContextMatch(t);
3440 checkContextMatch(p);
3441 return new Tactic(this, Native.tacticUsingParams(nCtx(),
3442 t.getNativeObject(), p.getNativeObject()));
3443 }
3444
3452 {
3453 return usingParams(t, p);
3454 }
3455
3459 public Tactic parOr(Tactic... t)
3460 {
3461 checkContextMatch(t);
3462 return new Tactic(this, Native.tacticParOr(nCtx(),
3464 }
3465
3471 {
3472 checkContextMatch(t1);
3473 checkContextMatch(t2);
3474 return new Tactic(this, Native.tacticParAndThen(nCtx(),
3475 t1.getNativeObject(), t2.getNativeObject()));
3476 }
3477
3483 public void interrupt()
3484 {
3485 Native.interrupt(nCtx());
3486 }
3487
3492 {
3493 return new ASTMap(this);
3494 }
3495
3500 public Expr<?> qeLite(ASTVector vars, Expr<?> body)
3501 {
3502 checkContextMatch(vars);
3503 checkContextMatch(body);
3504 return Expr.create(this, Native.qeLite(nCtx(), vars.getNativeObject(),
3505 body.getNativeObject()));
3506 }
3507
3511 public Expr<?> qeModelProject(Model model, Expr<?>[] bounds, Expr<?> body)
3512 {
3513 checkContextMatch(model);
3514 checkContextMatch(bounds);
3515 checkContextMatch(body);
3516 return Expr.create(this, Native.qeModelProject(nCtx(), model.getNativeObject(),
3517 bounds.length, AST.arrayToNative(bounds), body.getNativeObject()));
3518 }
3519
3523 public Expr<?> qeModelProjectSkolem(Model model, Expr<?>[] bounds, Expr<?> body,
3524 ASTMap map)
3525 {
3526 checkContextMatch(model);
3527 checkContextMatch(bounds);
3528 checkContextMatch(body);
3529 checkContextMatch(map);
3530 return Expr.create(this, Native.qeModelProjectSkolem(nCtx(),
3531 model.getNativeObject(), bounds.length, AST.arrayToNative(bounds),
3532 body.getNativeObject(), map.getNativeObject()));
3533 }
3534
3539 Expr<?> body, ASTMap map)
3540 {
3541 checkContextMatch(model);
3542 checkContextMatch(bounds);
3543 checkContextMatch(body);
3544 checkContextMatch(map);
3545 return Expr.create(this, Native.qeModelProjectWithWitness(nCtx(),
3546 model.getNativeObject(), bounds.length, AST.arrayToNative(bounds),
3547 body.getNativeObject(), map.getNativeObject()));
3548 }
3549
3554 {
3555 return Native.getNumSimplifiers(nCtx());
3556 }
3557
3561 public String[] getSimplifierNames()
3562 {
3563
3564 int n = getNumSimplifiers();
3565 String[] res = new String[n];
3566 for (int i = 0; i < n; i++)
3567 res[i] = Native.getSimplifierName(nCtx(), i);
3568 return res;
3569 }
3570
3575 public String getSimplifierDescription(String name)
3576 {
3577 return Native.simplifierGetDescr(nCtx(), name);
3578 }
3579
3583 public Simplifier mkSimplifier(String name)
3584 {
3585 return new Simplifier(this, name);
3586 }
3587
3592
3593 {
3594 checkContextMatch(t1);
3595 checkContextMatch(t2);
3596 checkContextMatch(ts);
3597
3598 long last = 0;
3599 if (ts != null && ts.length > 0)
3600 {
3601 last = ts[ts.length - 1].getNativeObject();
3602 for (int i = ts.length - 2; i >= 0; i--) {
3603 last = Native.simplifierAndThen(nCtx(), ts[i].getNativeObject(),
3604 last);
3605 }
3606 }
3607 if (last != 0)
3608 {
3609 last = Native.simplifierAndThen(nCtx(), t2.getNativeObject(), last);
3610 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3611 t1.getNativeObject(), last));
3612 } else
3613 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3614 t1.getNativeObject(), t2.getNativeObject()));
3615 }
3616
3623 {
3624 return andThen(t1, t2, ts);
3625 }
3626
3632 {
3633 checkContextMatch(t);
3634 checkContextMatch(p);
3635 return new Simplifier(this, Native.simplifierUsingParams(nCtx(),
3636 t.getNativeObject(), p.getNativeObject()));
3637 }
3638
3646 {
3647 return usingParams(t, p);
3648 }
3649
3653 public int getNumProbes()
3654 {
3655 return Native.getNumProbes(nCtx());
3656 }
3657
3661 public String[] getProbeNames()
3662 {
3663
3664 int n = getNumProbes();
3665 String[] res = new String[n];
3666 for (int i = 0; i < n; i++)
3667 res[i] = Native.getProbeName(nCtx(), i);
3668 return res;
3669 }
3670
3675 public String getProbeDescription(String name)
3676 {
3677 return Native.probeGetDescr(nCtx(), name);
3678 }
3679
3683 public Probe mkProbe(String name)
3684 {
3685 return new Probe(this, name);
3686 }
3687
3691 public Probe constProbe(double val)
3692 {
3693 return new Probe(this, Native.probeConst(nCtx(), val));
3694 }
3695
3700 public Probe lt(Probe p1, Probe p2)
3701 {
3702 checkContextMatch(p1);
3703 checkContextMatch(p2);
3704 return new Probe(this, Native.probeLt(nCtx(), p1.getNativeObject(),
3705 p2.getNativeObject()));
3706 }
3707
3712 public Probe gt(Probe p1, Probe p2)
3713 {
3714 checkContextMatch(p1);
3715 checkContextMatch(p2);
3716 return new Probe(this, Native.probeGt(nCtx(), p1.getNativeObject(),
3717 p2.getNativeObject()));
3718 }
3719
3725 public Probe le(Probe p1, Probe p2)
3726 {
3727 checkContextMatch(p1);
3728 checkContextMatch(p2);
3729 return new Probe(this, Native.probeLe(nCtx(), p1.getNativeObject(),
3730 p2.getNativeObject()));
3731 }
3732
3738 public Probe ge(Probe p1, Probe p2)
3739 {
3740 checkContextMatch(p1);
3741 checkContextMatch(p2);
3742 return new Probe(this, Native.probeGe(nCtx(), p1.getNativeObject(),
3743 p2.getNativeObject()));
3744 }
3745
3750 public Probe eq(Probe p1, Probe p2)
3751 {
3752 checkContextMatch(p1);
3753 checkContextMatch(p2);
3754 return new Probe(this, Native.probeEq(nCtx(), p1.getNativeObject(),
3755 p2.getNativeObject()));
3756 }
3757
3761 public Probe and(Probe p1, Probe p2)
3762 {
3763 checkContextMatch(p1);
3764 checkContextMatch(p2);
3765 return new Probe(this, Native.probeAnd(nCtx(), p1.getNativeObject(),
3766 p2.getNativeObject()));
3767 }
3768
3772 public Probe or(Probe p1, Probe p2)
3773 {
3774 checkContextMatch(p1);
3775 checkContextMatch(p2);
3776 return new Probe(this, Native.probeOr(nCtx(), p1.getNativeObject(),
3777 p2.getNativeObject()));
3778 }
3779
3783 public Probe not(Probe p)
3784 {
3785 checkContextMatch(p);
3786 return new Probe(this, Native.probeNot(nCtx(), p.getNativeObject()));
3787 }
3788
3797 {
3798 return mkSolver((Symbol) null);
3799 }
3800
3808 public Solver mkSolver(Symbol logic)
3809 {
3810
3811 if (logic == null)
3812 return new Solver(this, Native.mkSolver(nCtx()));
3813 else
3814 return new Solver(this, Native.mkSolverForLogic(nCtx(),
3815 logic.getNativeObject()));
3816 }
3817
3822 public Solver mkSolver(String logic)
3823 {
3824 return mkSolver(mkSymbol(logic));
3825 }
3826
3831 {
3832 return new Solver(this, Native.mkSimpleSolver(nCtx()));
3833 }
3834
3842 {
3843
3844 return new Solver(this, Native.mkSolverFromTactic(nCtx(),
3845 t.getNativeObject()));
3846 }
3847
3852 {
3853 return new Solver(this, Native.solverAddSimplifier(nCtx(), s.getNativeObject(), simp.getNativeObject()));
3854 }
3855
3860 {
3861 return new Fixedpoint(this);
3862 }
3863
3868 {
3869 return new Optimize(this);
3870 }
3871
3872
3878 {
3879 return new FPRMSort(this);
3880 }
3881
3887 {
3888 return new FPRMExpr(this, Native.mkFpaRoundNearestTiesToEven(nCtx()));
3889 }
3890
3896 {
3897 return new FPRMNum(this, Native.mkFpaRne(nCtx()));
3898 }
3899
3905 {
3906 return new FPRMNum(this, Native.mkFpaRoundNearestTiesToAway(nCtx()));
3907 }
3908
3914 {
3915 return new FPRMNum(this, Native.mkFpaRna(nCtx()));
3916 }
3917
3923 {
3924 return new FPRMNum(this, Native.mkFpaRoundTowardPositive(nCtx()));
3925 }
3926
3932 {
3933 return new FPRMNum(this, Native.mkFpaRtp(nCtx()));
3934 }
3935
3941 {
3942 return new FPRMNum(this, Native.mkFpaRoundTowardNegative(nCtx()));
3943 }
3944
3950 {
3951 return new FPRMNum(this, Native.mkFpaRtn(nCtx()));
3952 }
3953
3959 {
3960 return new FPRMNum(this, Native.mkFpaRoundTowardZero(nCtx()));
3961 }
3962
3968 {
3969 return new FPRMNum(this, Native.mkFpaRtz(nCtx()));
3970 }
3971
3978 public FPSort mkFPSort(int ebits, int sbits)
3979 {
3980 return new FPSort(this, ebits, sbits);
3981 }
3982
3988 {
3989 return new FPSort(this, Native.mkFpaSortHalf(nCtx()));
3990 }
3991
3997 {
3998 return new FPSort(this, Native.mkFpaSort16(nCtx()));
3999 }
4000
4006 {
4007 return new FPSort(this, Native.mkFpaSortSingle(nCtx()));
4008 }
4009
4015 {
4016 return new FPSort(this, Native.mkFpaSort32(nCtx()));
4017 }
4018
4024 {
4025 return new FPSort(this, Native.mkFpaSortDouble(nCtx()));
4026 }
4027
4033 {
4034 return new FPSort(this, Native.mkFpaSort64(nCtx()));
4035 }
4036
4042 {
4043 return new FPSort(this, Native.mkFpaSortQuadruple(nCtx()));
4044 }
4045
4051 {
4052 return new FPSort(this, Native.mkFpaSort128(nCtx()));
4053 }
4054
4055
4062 {
4063 return new FPNum(this, Native.mkFpaNan(nCtx(), s.getNativeObject()));
4064 }
4065
4072 public FPNum mkFPInf(FPSort s, boolean negative)
4073 {
4074 return new FPNum(this, Native.mkFpaInf(nCtx(), s.getNativeObject(), negative));
4075 }
4076
4083 public FPNum mkFPZero(FPSort s, boolean negative)
4084 {
4085 return new FPNum(this, Native.mkFpaZero(nCtx(), s.getNativeObject(), negative));
4086 }
4087
4094 public FPNum mkFPNumeral(float v, FPSort s)
4095 {
4096 return new FPNum(this, Native.mkFpaNumeralFloat(nCtx(), v, s.getNativeObject()));
4097 }
4098
4105 public FPNum mkFPNumeral(double v, FPSort s)
4106 {
4107 return new FPNum(this, Native.mkFpaNumeralDouble(nCtx(), v, s.getNativeObject()));
4108 }
4109
4116 public FPNum mkFPNumeral(int v, FPSort s)
4117 {
4118 return new FPNum(this, Native.mkFpaNumeralInt(nCtx(), v, s.getNativeObject()));
4119 }
4120
4129 public FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
4130 {
4131 return new FPNum(this, Native.mkFpaNumeralIntUint(nCtx(), sgn, exp, sig, s.getNativeObject()));
4132 }
4133
4142 public FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
4143 {
4144 return new FPNum(this, Native.mkFpaNumeralInt64Uint64(nCtx(), sgn, exp, sig, s.getNativeObject()));
4145 }
4146
4153 public FPNum mkFP(float v, FPSort s)
4154 {
4155 return mkFPNumeral(v, s);
4156 }
4157
4164 public FPNum mkFP(double v, FPSort s)
4165 {
4166 return mkFPNumeral(v, s);
4167 }
4168
4176 public FPNum mkFP(int v, FPSort s)
4177 {
4178 return mkFPNumeral(v, s);
4179 }
4180
4189 public FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
4190 {
4191 return mkFPNumeral(sgn, exp, sig, s);
4192 }
4193
4202 public FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
4203 {
4204 return mkFPNumeral(sgn, exp, sig, s);
4205 }
4206
4207
4214 {
4215 return new FPExpr(this, Native.mkFpaAbs(nCtx(), t.getNativeObject()));
4216 }
4217
4224 {
4225 return new FPExpr(this, Native.mkFpaNeg(nCtx(), t.getNativeObject()));
4226 }
4227
4236 {
4237 return new FPExpr(this, Native.mkFpaAdd(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4238 }
4239
4248 {
4249 return new FPExpr(this, Native.mkFpaSub(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4250 }
4251
4260 {
4261 return new FPExpr(this, Native.mkFpaMul(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4262 }
4263
4272 {
4273 return new FPExpr(this, Native.mkFpaDiv(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4274 }
4275
4287 {
4288 return new FPExpr(this, Native.mkFpaFma(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject(), t3.getNativeObject()));
4289 }
4290
4298 {
4299 return new FPExpr(this, Native.mkFpaSqrt(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4300 }
4301
4309 {
4310 return new FPExpr(this, Native.mkFpaRem(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4311 }
4312
4321 {
4322 return new FPExpr(this, Native.mkFpaRoundToIntegral(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4323 }
4324
4332 {
4333 return new FPExpr(this, Native.mkFpaMin(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4334 }
4335
4343 {
4344 return new FPExpr(this, Native.mkFpaMax(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4345 }
4346
4354 {
4355 return new BoolExpr(this, Native.mkFpaLeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4356 }
4357
4365 {
4366 return new BoolExpr(this, Native.mkFpaLt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4367 }
4368
4376 {
4377 return new BoolExpr(this, Native.mkFpaGeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4378 }
4379
4387 {
4388 return new BoolExpr(this, Native.mkFpaGt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4389 }
4390
4400 {
4401 return new BoolExpr(this, Native.mkFpaEq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4402 }
4403
4410 {
4411 return new BoolExpr(this, Native.mkFpaIsNormal(nCtx(), t.getNativeObject()));
4412 }
4413
4420 {
4421 return new BoolExpr(this, Native.mkFpaIsSubnormal(nCtx(), t.getNativeObject()));
4422 }
4423
4430 {
4431 return new BoolExpr(this, Native.mkFpaIsZero(nCtx(), t.getNativeObject()));
4432 }
4433
4440 {
4441 return new BoolExpr(this, Native.mkFpaIsInfinite(nCtx(), t.getNativeObject()));
4442 }
4443
4450 {
4451 return new BoolExpr(this, Native.mkFpaIsNan(nCtx(), t.getNativeObject()));
4452 }
4453
4460 {
4461 return new BoolExpr(this, Native.mkFpaIsNegative(nCtx(), t.getNativeObject()));
4462 }
4463
4470 {
4471 return new BoolExpr(this, Native.mkFpaIsPositive(nCtx(), t.getNativeObject()));
4472 }
4473
4488 {
4489 return new FPExpr(this, Native.mkFpaFp(nCtx(), sgn.getNativeObject(), sig.getNativeObject(), exp.getNativeObject()));
4490 }
4491
4504 {
4505 return new FPExpr(this, Native.mkFpaToFpBv(nCtx(), bv.getNativeObject(), s.getNativeObject()));
4506 }
4507
4520 {
4521 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4522 }
4523
4536 {
4537 return new FPExpr(this, Native.mkFpaToFpReal(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4538 }
4539
4553 public FPExpr mkFPToFP(Expr<FPRMSort> rm, Expr<BitVecSort> t, FPSort s, boolean signed)
4554 {
4555 if (signed)
4556 return new FPExpr(this, Native.mkFpaToFpSigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4557 else
4558 return new FPExpr(this, Native.mkFpaToFpUnsigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4559 }
4560
4572 {
4573 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), s.getNativeObject(), rm.getNativeObject(), t.getNativeObject()));
4574 }
4575
4588 public BitVecExpr mkFPToBV(Expr<FPRMSort> rm, Expr<FPSort> t, int sz, boolean signed)
4589 {
4590 if (signed)
4591 return new BitVecExpr(this, Native.mkFpaToSbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4592 else
4593 return new BitVecExpr(this, Native.mkFpaToUbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4594 }
4595
4606 {
4607 return new RealExpr(this, Native.mkFpaToReal(nCtx(), t.getNativeObject()));
4608 }
4609
4621 {
4622 return new BitVecExpr(this, Native.mkFpaToIeeeBv(nCtx(), t.getNativeObject()));
4623 }
4624
4639 {
4640 return new BitVecExpr(this, Native.mkFpaToFpIntReal(nCtx(), rm.getNativeObject(), exp.getNativeObject(), sig.getNativeObject(), s.getNativeObject()));
4641 }
4642
4648 public final <R extends Sort> FuncDecl<BoolSort> mkLinearOrder(R sort, int index) {
4649 return (FuncDecl<BoolSort>) FuncDecl.create(
4650 this,
4651 Native.mkLinearOrder(
4652 nCtx(),
4653 sort.getNativeObject(),
4654 index
4655 )
4656 );
4657 }
4658
4664 public final <R extends Sort> FuncDecl<BoolSort> mkPartialOrder(R sort, int index) {
4665 return (FuncDecl<BoolSort>) FuncDecl.create(
4666 this,
4667 Native.mkPartialOrder(
4668 nCtx(),
4669 sort.getNativeObject(),
4670 index
4671 )
4672 );
4673 }
4674
4681 return (FuncDecl<BoolSort>) FuncDecl.create(
4682 this,
4683 Native.mkTransitiveClosure(
4684 nCtx(),
4685 f.getNativeObject()
4686 )
4687 );
4688 }
4689
4695 public final <R extends Sort> FuncDecl<BoolSort> mkPiecewiseLinearOrder(R sort, int index) {
4696 return (FuncDecl<BoolSort>) FuncDecl.create(
4697 this,
4698 Native.mkPiecewiseLinearOrder(
4699 nCtx(),
4700 sort.getNativeObject(),
4701 index
4702 )
4703 );
4704 }
4705
4711 public final <R extends Sort> FuncDecl<BoolSort> mkTreeOrder(R sort, int index) {
4712 return (FuncDecl<BoolSort>) FuncDecl.create(
4713 this,
4714 Native.mkTreeOrder(
4715 nCtx(),
4716 sort.getNativeObject(),
4717 index
4718 )
4719 );
4720 }
4721
4729 public final <R extends Sort> ASTVector polynomialSubresultants(Expr<R> p, Expr<R> q, Expr<R> x) {
4730 return new ASTVector(
4731 this,
4732 Native.polynomialSubresultants(
4733 nCtx(),
4734 p.getNativeObject(),
4735 q.getNativeObject(),
4736 x.getNativeObject()
4737 )
4738 );
4739 }
4740
4751 public AST wrapAST(long nativeObject)
4752 {
4753 return AST.create(this, nativeObject);
4754 }
4755
4768 public long unwrapAST(AST a)
4769 {
4770 return a.getNativeObject();
4771 }
4772
4777 public String SimplifyHelp()
4778 {
4779 return Native.simplifyGetHelp(nCtx());
4780 }
4781
4786 {
4787 return new ParamDescrs(this, Native.simplifyGetParamDescrs(nCtx()));
4788 }
4789
4798 public void updateParamValue(String id, String value)
4799 {
4800 Native.updateParamValue(nCtx(), id, value);
4801 }
4802
4803
4804 public long nCtx()
4805 {
4806 if (m_ctx == 0)
4807 throw new Z3Exception("Context closed");
4808 return m_ctx;
4809 }
4810
4811
4812 void checkContextMatch(Z3Object other)
4813 {
4814 if (this != other.getContext())
4815 throw new Z3Exception("Context mismatch");
4816 }
4817
4818 void checkContextMatch(Z3Object other1, Z3Object other2)
4819 {
4820 checkContextMatch(other1);
4821 checkContextMatch(other2);
4822 }
4823
4824 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3)
4825 {
4826 checkContextMatch(other1);
4827 checkContextMatch(other2);
4828 checkContextMatch(other3);
4829 }
4830
4831 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3, Z3Object other4)
4832 {
4833 checkContextMatch(other1);
4834 checkContextMatch(other2);
4835 checkContextMatch(other3);
4836 checkContextMatch(other4);
4837 }
4838
4839 void checkContextMatch(Z3Object[] arr)
4840 {
4841 if (arr != null)
4842 for (Z3Object a : arr)
4843 checkContextMatch(a);
4844 }
4845
4846 private Z3ReferenceQueue m_RefQueue = new Z3ReferenceQueue(this);
4847
4848 Z3ReferenceQueue getReferenceQueue() { return m_RefQueue; }
4849
4853 @Override
4854 public void close()
4855 {
4856 if (m_ctx == 0)
4857 return;
4858
4859 m_RefQueue.forceClear();
4860
4861 m_boolSort = null;
4862 m_intSort = null;
4863 m_realSort = null;
4864 m_stringSort = null;
4865 m_RefQueue = null;
4866
4867 synchronized (creation_lock) {
4868 Native.delContext(m_ctx);
4869 }
4870 m_ctx = 0;
4871 }
4872}
final< R extends Sort > FuncDecl< R > mkFuncDecl(String name, Sort[] domain, R range)
Definition Context.java:616
final ReExpr< SeqSort< CharSort > > mkRange(Expr< SeqSort< CharSort > > lo, Expr< SeqSort< CharSort > > hi)
Probe ge(Probe p1, Probe p2)
final< R extends Sort > ListSort< R > mkListSort(Symbol name, R elemSort)
Definition Context.java:309
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetAdd(Expr< ArraySort< D, BoolSort > > set, Expr< D > element)
Solver mkSolver(String logic)
Tactic repeat(Tactic t, int max)
BitVecExpr mkBVXOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final BoolExpr mkDistinct(Expr<?>... args)
Definition Context.java:892
BoolExpr MkStringLe(Expr< SeqSort< CharSort > > s1, Expr< SeqSort< CharSort > > s2)
final< F extends Sort, R extends Sort > Expr< R > mkUpdateField(FuncDecl< F > field, Expr< R > t, Expr< F > v)
Definition Context.java:564
String[] getSimplifierNames()
final< R extends Sort > SeqExpr< R > mkAt(Expr< SeqSort< R > > s, Expr< IntSort > index)
BitVecExpr mkBVUDiv(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > Expr< R > mkNumeral(long v, R ty)
String getProbeDescription(String name)
FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetIntersection(Expr< ArraySort< D, BoolSort > >... args)
FPNum mkFPNaN(FPSort s)
BoolExpr mkFPIsPositive(Expr< FPSort > t)
BitVecExpr mkBVNOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPExpr mkFPToFP(Expr< FPRMSort > rm, Expr< BitVecSort > t, FPSort s, boolean signed)
FPRMExpr mkFPRoundNearestTiesToEven()
final Expr mkFiniteSetFilter(Expr f, Expr set)
Expr< CharSort > charFromBv(BitVecExpr bv)
IntExpr stringToInt(Expr< SeqSort< CharSort > > e)
final< R > EnumSort< R > mkEnumSort(Symbol name, Symbol... enumNames)
Definition Context.java:289
final< R extends Sort > Expr< R > mkFreshConst(String prefix, R range)
Definition Context.java:762
Fixedpoint mkFixedpoint()
Tactic usingParams(Tactic t, Params p)
Tactic parOr(Tactic... t)
BoolExpr mkBVULE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkBVSubNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > SeqExpr< R > mkReplaceReAll(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re, Expr< SeqSort< R > > dst)
final< R extends Sort, A extends Sort > Expr< A > mkSeqFoldl(Expr<?> f, Expr< A > a, Expr< SeqSort< R > > s)
BoolExpr mkBVNegNoOverflow(Expr< BitVecSort > t)
final< R extends Sort > ReExpr< SeqSort< R > > mkToRe(Expr< SeqSort< R > > s)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetComplement(Expr< ArraySort< D, BoolSort > > arg)
final< D extends Sort, R extends Sort > Expr< R > mkSelect(Expr< ArraySort< D, R > > a, Expr< D > i)
Tactic then(Tactic t1, Tactic t2, Tactic... ts)
FPExpr mkFPMax(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkPartialOrder(R sort, int index)
IntExpr mkBV2Int(Expr< BitVecSort > t, boolean signed)
final< R extends Sort > ReExpr< R > mkLoop(Expr< ReSort< R > > re, int lo)
final< R extends Sort > ReExpr< R > mkComplement(Expr< ReSort< R > > re)
FPSort mkFPSort(int ebits, int sbits)
final< R extends Sort > FuncDecl< R > mkFreshConstDecl(String prefix, R range)
Definition Context.java:702
Expr<?> qeLite(ASTVector vars, Expr<?> body)
BoolExpr mkBVSDivNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
Probe le(Probe p1, Probe p2)
SeqExpr< CharSort > mkString(String s)
final< R extends Sort > BoolExpr mkPrefixOf(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
AST wrapAST(long nativeObject)
final< R extends Sort > SeqExpr< R > mkReplace(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
UninterpretedSort mkUninterpretedSort(Symbol s)
Definition Context.java:189
BitVecExpr mkBVXNOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkImplies(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:938
BoolExpr mkBVAddNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2, boolean isSigned)
Simplifier mkSimplifier(String name)
BitVecExpr mkBVRotateRight(int i, Expr< BitVecSort > t)
RealExpr mkInt2Real(Expr< IntSort > t)
final< R extends Sort > Expr< R > mkITE(Expr< BoolSort > t1, Expr<? extends R > t2, Expr<? extends R > t3)
Definition Context.java:915
BitVecExpr mkBVLSHR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
FPNum mkFP(double v, FPSort s)
BoolExpr mkLe(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
IntExpr mkReal2Int(Expr< RealSort > t)
final< D extends Sort > BoolExpr mkSetSubset(Expr< ArraySort< D, BoolSort > > arg1, Expr< ArraySort< D, BoolSort > > arg2)
FPNum mkFPInf(FPSort s, boolean negative)
FPExpr mkFPRoundToIntegral(Expr< FPRMSort > rm, Expr< FPSort > t)
BoolExpr mkAtLeast(Expr< BoolSort >[] args, int k)
BitVecExpr mkBVSMod(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkInt2BV(int n, Expr< IntSort > t)
BoolExpr mkBVSGE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkBVConst(Symbol name, int size)
Definition Context.java:829
BitVecExpr mkExtract(int high, int low, Expr< BitVecSort > t)
BoolExpr mkFPGEq(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > SeqExpr< R > mkUnit(Expr< R > elem)
Probe or(Probe p1, Probe p2)
BitVecExpr mkBVURem(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< D extends Sort, R1 extends Sort, R2 extends Sort > ArrayExpr< D, R2 > mkMap(FuncDecl< R2 > f, Expr< ArraySort< D, R1 > >... args)
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkConstArray(D domain, Expr< R > v)
TypeVarSort mkTypeVariable(String name)
Definition Context.java:494
Tactic cond(Probe p, Tactic t1, Tactic t2)
BoolExpr mkBVSGT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkBVConst(String name, int size)
Definition Context.java:837
final< R extends Sort > SeqSort< R > mkSeqSort(R s)
Definition Context.java:259
BoolExpr mkAtMost(Expr< BoolSort >[] args, int k)
final< R extends Sort > Expr< R > mkSelect(Expr< ArraySort< Sort, R > > a, Expr<?>[] args)
BoolExpr mkFPIsSubnormal(Expr< FPSort > t)
IntExpr mkMod(Expr< IntSort > t1, Expr< IntSort > t2)
FPExpr mkFPToFP(Expr< FPRMSort > rm, RealExpr t, FPSort s)
FPExpr mkFPSub(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkAllcharRe(ReSort< R > s)
SeqExpr< CharSort > intToString(Expr< IntSort > e)
BoolExpr mkBVMulNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2, boolean isSigned)
FPExpr mkFPSqrt(Expr< FPRMSort > rm, Expr< FPSort > t)
FPNum mkFPNumeral(int v, FPSort s)
final< R extends Sort > SeqExpr< R > mkSeqMap(Expr<?> f, Expr< SeqSort< R > > s)
final< R extends Sort > Expr< R > mkConst(String name, R range)
Definition Context.java:753
FPExpr mkFPMul(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkStar(Expr< ReSort< R > > re)
BitVecExpr mkConcat(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkSignExt(int i, Expr< BitVecSort > t)
BitVecExpr mkBVAdd(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
final< R extends Sort > FuncDecl< R > mkFreshFuncDecl(String prefix, Sort[] domain, R range)
Definition Context.java:669
final< R extends Sort > Expr< R > mkBound(int index, R ty)
Definition Context.java:714
final< R extends Sort > SeqExpr< R > mkReplaceAll(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
void updateParamValue(String id, String value)
BitVecExpr mkZeroExt(int i, Expr< BitVecSort > t)
final< R extends Sort > SeqExpr< R > mkSeqPower(Expr< SeqSort< R > > s, Expr< IntSort > n)
Simplifier andThen(Simplifier t1, Simplifier t2, Simplifier... ts)
SeqExpr< CharSort > ubvToString(Expr< BitVecSort > e)
final< R extends Sort > ASTVector polynomialSubresultants(Expr< R > p, Expr< R > q, Expr< R > x)
final< R extends Sort > Lambda< R > mkLambda(Sort[] sorts, Symbol[] names, Expr< R > body)
final< R extends Sort > ReExpr< R > mkConcat(ReExpr< R >... t)
Tactic failIf(Probe p)
BoolExpr mkFPLt(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkFullRe(ReSort< R > s)
BitVecExpr mkBVRedAND(Expr< BitVecSort > t)
BitVecNum mkBV(long v, int size)
BitVecExpr mkBVSRem(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkPiecewiseLinearOrder(R sort, int index)
FPNum mkFPNumeral(float v, FPSort s)
Expr<?> qeModelProjectWithWitness(Model model, Expr<?>[] bounds, Expr<?> body, ASTMap map)
Tactic when(Probe p, Tactic t)
final Expr mkFiniteSetRange(Expr low, Expr high)
final< R extends Sort > ReExpr< R > mkPlus(Expr< ReSort< R > > re)
IntNum mkInt(String v)
Probe mkProbe(String name)
BoolExpr mkPBLe(int[] coeffs, Expr< BoolSort >[] args, int k)
RealExpr mkRealConst(String name)
Definition Context.java:821
final< R extends Sort > SeqExpr< R > mkSeqMapi(Expr<?> f, Expr< IntSort > i, Expr< SeqSort< R > > s)
final< R extends Sort > IntExpr mkLength(Expr< SeqSort< R > > s)
final< R extends Sort, A extends Sort > Expr< A > mkSeqFoldli(Expr<?> f, Expr< IntSort > i, Expr< A > a, Expr< SeqSort< R > > s)
final< R extends ArithSort > ArithExpr< R > mkAdd(Expr<? extends R >... t)
Definition Context.java:983
ParamDescrs getSimplifyParameterDescriptions()
final BoolExpr mkFiniteSetMember(Expr elem, Expr set)
BitVecExpr mkBVRotateRight(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< D extends Sort > ArrayExpr< D, BoolSort > mkFullSet(D domain)
SeqExpr< CharSort > sbvToString(Expr< BitVecSort > e)
Probe gt(Probe p1, Probe p2)
BoolExpr mkFPIsNaN(Expr< FPSort > t)
BoolExpr mkEq(Expr<?> x, Expr<?> y)
Definition Context.java:880
Tactic with(Tactic t, Params p)
final BoolExpr mkNot(Expr< BoolSort > a)
Definition Context.java:902
BitVecExpr mkBVASHR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
final< R > DatatypeSort< R > mkDatatypeSort(Symbol name, Constructor< R >[] constructors)
Definition Context.java:374
Solver mkSolver(Solver s, Simplifier simp)
String benchmarkToSMTString(String name, String logic, String status, String attributes, Expr< BoolSort >[] assumptions, Expr< BoolSort > formula)
final Expr mkFiniteSetDifference(Expr s1, Expr s2)
final< R extends Sort > ArraySort< Sort, R > mkArraySort(Sort[] domains, R range)
Definition Context.java:241
final Expr mkFiniteSetMap(Expr f, Expr set)
FPRMNum mkFPRoundNearestTiesToAway()
BoolExpr mkIsDigit(Expr< CharSort > ch)
BoolExpr mkBool(boolean value)
Definition Context.java:872
final< R extends Sort > BoolExpr mkInRe(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re)
final< D extends Sort, R extends Sort > ArraySort< D, R > mkArraySort(D domain, R range)
Definition Context.java:230
BitVecExpr mkBVMul(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > Expr< R > mkNumeral(int v, R ty)
Expr<?> qeModelProject(Model model, Expr<?>[] bounds, Expr<?> body)
BitVecExpr mkBVSub(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames, Sort[] fieldSorts)
Definition Context.java:276
BitVecExpr mkBVOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkLt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
final Pattern mkPattern(Expr<?>... terms)
Definition Context.java:724
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkArrayConst(Symbol name, D domain, R range)
final< R > Constructor< R > mkConstructor(String name, String recognizer, String[] fieldNames, Sort[] sorts, int[] sortRefs)
Definition Context.java:365
BitVecExpr mkRepeat(int i, Expr< BitVecSort > t)
final< R extends Sort > IntExpr mkLastIndexOf(Expr< SeqSort< R > > s, Expr< SeqSort< R > > substr)
final< R extends Sort > Expr< R > mkNumeral(String v, R ty)
BoolExpr mkXor(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:949
Simplifier then(Simplifier t1, Simplifier t2, Simplifier... ts)
FPRMNum mkFPRoundTowardNegative()
Probe eq(Probe p1, Probe p2)
Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
BitVecExpr mkBVRotateLeft(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkLinearOrder(R sort, int index)
final< R extends Sort > FuncDecl< R > mkFuncDecl(String name, Sort domain, R range)
Definition Context.java:627
final Expr mkFiniteSetEmpty(Sort setSort)
final< R extends Sort > Expr< R > mkNth(Expr< SeqSort< R > > s, Expr< IntSort > index)
final< R extends Sort > ReExpr< R > mkEmptyRe(ReSort< R > s)
Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
BitVecExpr mkBVRedOR(Expr< BitVecSort > t)
BoolExpr mkBVUGE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPExpr mkFPDiv(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > SeqExpr< R > mkExtract(Expr< SeqSort< R > > s, Expr< IntSort > offset, Expr< IntSort > length)
BitVecExpr mkBVNAND(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > SeqExpr< R > mkEmptySeq(R s)
final< R extends ArithSort > ArithExpr< R > mkDiv(Expr<? extends R > t1, Expr<? extends R > t2)
FPExpr mkFPRem(Expr< FPSort > t1, Expr< FPSort > t2)
SeqSort< CharSort > getStringSort()
Definition Context.java:178
final< D extends Sort, R extends Sort > Expr< D > mkArrayExt(Expr< ArraySort< D, R > > arg1, Expr< ArraySort< D, R > > arg2)
final< R extends Sort > ReExpr< R > mkLoop(Expr< ReSort< R > > re, int lo, int hi)
Quantifier mkQuantifier(boolean universal, Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
IntExpr mkIntConst(String name)
Definition Context.java:805
Solver mkSolver(Tactic t)
BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
final< R extends Sort > Expr< R > mkApp(FuncDecl< R > f, Expr<?>... args)
Definition Context.java:846
BoolExpr mkBVAddNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final Expr mkFiniteSetUnion(Expr s1, Expr s2)
BoolExpr mkBVSubNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2, boolean isSigned)
BoolExpr mkFPIsZero(Expr< FPSort > t)
final< R > DatatypeSort< R > mkDatatypeSort(String name, Constructor< R >[] constructors)
Definition Context.java:384
final< R extends Sort > Expr< R > mkConst(FuncDecl< R > f)
Definition Context.java:773
BitVecExpr charToBv(Expr< CharSort > ch)
IntExpr mkIntConst(Symbol name)
Definition Context.java:797
final< R > FiniteDomainSort< R > mkFiniteDomainSort(Symbol name, long size)
Definition Context.java:328
final< R extends Sort > ReExpr< R > mkPower(Expr< ReSort< R > > re, int n)
final< R extends Sort > FuncDecl< R > mkConstDecl(String name, R range)
Definition Context.java:690
Simplifier with(Simplifier t, Params p)
BitVecExpr mkBVNeg(Expr< BitVecSort > t)
Tactic mkTactic(String name)
BoolExpr mkBVSLE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFPNumeral(double v, FPSort s)
final< R extends Sort > ListSort< R > mkListSort(String name, R elemSort)
Definition Context.java:319
Tactic parAndThen(Tactic t1, Tactic t2)
RatNum mkReal(long v)
Expr<?> qeModelProjectSkolem(Model model, Expr<?>[] bounds, Expr<?> body, ASTMap map)
BoolExpr mkGt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
final Sort getFiniteSetSortBasis(Sort s)
BitVecNum mkBV(int v, int size)
final< R extends ArithSort > ArithExpr< R > mkPower(Expr<? extends R > t1, Expr<? extends R > t2)
Context(Map< String, String > settings)
Definition Context.java:72
final< R extends Sort > ReExpr< R > mkIntersect(Expr< ReSort< R > >... t)
final< R extends Sort > FuncDecl< R > mkFuncDecl(Symbol name, Sort domain, R range)
Definition Context.java:603
final< R extends ArithSort > ArithExpr< R > mkMul(Expr<? extends R >... t)
Definition Context.java:994
BoolExpr mkBVMulNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkBVSDiv(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPRMSort mkFPRoundingModeSort()
RealExpr mkRealConst(Symbol name)
Definition Context.java:813
String getTacticDescription(String name)
Solver mkSolver(Symbol logic)
final Expr mkFiniteSetSingleton(Expr elem)
BoolExpr mkFPEq(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > IntExpr mkIndexOf(Expr< SeqSort< R > > s, Expr< SeqSort< R > > substr, Expr< IntSort > offset)
BoolExpr mkFPLEq(Expr< FPSort > t1, Expr< FPSort > t2)
RatNum mkReal(int num, int den)
BitVecSort mkBitVecSort(int size)
Definition Context.java:222
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkStore(Expr< ArraySort< D, R > > a, Expr< D > i, Expr< R > v)
FPExpr mkFPToFP(Expr< BitVecSort > bv, FPSort s)
BoolExpr mkBVSLT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkFPGt(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkTreeOrder(R sort, int index)
BoolExpr mkIff(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:927
BoolExpr mkGe(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
BitVecExpr mkFPToFP(Expr< FPRMSort > rm, Expr< IntSort > exp, Expr< RealSort > sig, FPSort s)
BoolExpr mkIsInteger(Expr< RealSort > t)
FPExpr mkFPToFP(Expr< FPRMSort > rm, FPExpr t, FPSort s)
Probe constProbe(double val)
BoolExpr mkFPIsNegative(Expr< FPSort > t)
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkArrayConst(String name, D domain, R range)
BoolExpr mkBoolConst(String name)
Definition Context.java:789
RealExpr mkFPToReal(Expr< FPSort > t)
BoolExpr MkStringLt(Expr< SeqSort< CharSort > > s1, Expr< SeqSort< CharSort > > s2)
final Expr mkFiniteSetIntersect(Expr s1, Expr s2)
FPExpr mkFP(Expr< BitVecSort > sgn, Expr< BitVecSort > sig, Expr< BitVecSort > exp)
FPExpr mkFPToFP(FPSort s, Expr< FPRMSort > rm, Expr< FPSort > t)
FPExpr mkFPNeg(Expr< FPSort > t)
BoolExpr mkDivides(Expr< IntSort > t1, Expr< IntSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkTransitiveClosure(FuncDecl< BoolSort > f)
final< R extends Sort > SeqExpr< R > mkConcat(Expr< SeqSort< R > >... t)
BoolExpr mkCharLe(Expr< CharSort > ch1, Expr< CharSort > ch2)
FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
final< R extends Sort > BoolExpr mkSuffixOf(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
SeqSort< CharSort > mkStringSort()
Definition Context.java:251
final< R extends Sort > BoolExpr mkContains(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
FPRMNum mkFPRoundTowardPositive()
final< D extends Sort > SetSort< D > mkSetSort(D ty)
Quantifier mkExists(Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final boolean isFiniteSetSort(Sort s)
final< D extends Sort > BoolExpr mkSetMembership(Expr< D > elem, Expr< ArraySort< D, BoolSort > > set)
final< R > Constructor< R > mkConstructor(Symbol name, Symbol recognizer, Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
Definition Context.java:355
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetUnion(Expr< ArraySort< D, BoolSort > >... args)
BoolExpr mkBVULT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > ArrayExpr< Sort, R > mkStore(Expr< ArraySort< Sort, R > > a, Expr<?>[] args, Expr< R > v)
final< R extends Sort > ReExpr< R > mkOption(Expr< ReSort< R > > re)
BoolExpr mkFPIsNormal(Expr< FPSort > t)
DatatypeSort< Object >[] mkDatatypeSorts(String[] names, Constructor< Object >[][] c)
Definition Context.java:470
final< R extends Sort > SeqExpr< R > mkReplaceRe(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re, Expr< SeqSort< R > > dst)
Probe and(Probe p1, Probe p2)
IntExpr charToInt(Expr< CharSort > ch)
Tactic tryFor(Tactic t, int ms)
FPExpr mkFPFMA(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2, Expr< FPSort > t3)
UninterpretedSort mkUninterpretedSort(String str)
Definition Context.java:198
void setPrintMode(Z3_ast_print_mode value)
DatatypeSort< Object >[] mkDatatypeSorts(Symbol[] names, Constructor< Object >[][] c)
Definition Context.java:444
final BoolExpr mkAnd(Expr< BoolSort >... t)
Definition Context.java:961
final< R extends Sort > FuncDecl< R > mkConstDecl(Symbol name, R range)
Definition Context.java:680
BitVecNum mkBV(String v, int size)
BitVecExpr mkBVRotateLeft(int i, Expr< BitVecSort > t)
Probe lt(Probe p1, Probe p2)
final BoolExpr mkFiniteSetSubset(Expr s1, Expr s2)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetDel(Expr< ArraySort< D, BoolSort > > set, Expr< D > element)
Quantifier mkForall(Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final< R extends Sort > void AddRecDef(FuncDecl< R > f, Expr<?>[] args, Expr< R > body)
Definition Context.java:654
final< R extends Sort > ReSort< R > mkReSort(R s)
Definition Context.java:267
IntExpr mkRem(Expr< IntSort > t1, Expr< IntSort > t2)
BitVecExpr mkBVNot(Expr< BitVecSort > t)
final< R extends ArithSort > ArithExpr< R > mkSub(Expr<? extends R >... t)
BitVecExpr mkBVAND(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< R > mkFuncDecl(Symbol name, Sort[] domain, R range)
Definition Context.java:577
FPExpr mkFPAbs(Expr< FPSort > t)
BoolExpr mkPBEq(int[] coeffs, Expr< BoolSort >[] args, int k)
Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
final FiniteSetSort mkFiniteSetSort(Sort elemSort)
final< R extends ArithSort > ArithExpr< R > mkUnaryMinus(Expr< R > t)
final Expr mkFiniteSetSize(Expr set)
FPExpr mkFPAdd(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
BoolExpr mkBVUGT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFP(float v, FPSort s)
final BoolExpr mkOr(Expr< BoolSort >... t)
Definition Context.java:972
BitVecExpr mkBVSHL(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
String getSimplifierDescription(String name)
final< R extends Sort > Expr< R > mkConst(Symbol name, R range)
Definition Context.java:738
final< D extends Sort > ArrayExpr< D, BoolSort > mkEmptySet(D domain)
Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkAsArray(FuncDecl< R > f)
BitVecExpr mkFPToIEEEBV(Expr< FPSort > t)
final< R extends Sort > Lambda< R > mkLambda(Expr<?>[] boundConstants, Expr< R > body)
FPExpr mkFPMin(Expr< FPSort > t1, Expr< FPSort > t2)
Tactic orElse(Tactic t1, Tactic t2)
final< R extends Sort > FuncDecl< R > mkRecFuncDecl(Symbol name, Sort[] domain, R range)
Definition Context.java:639
final< R extends Sort > FuncDecl< R > mkPropagateFunction(Symbol name, Sort[] domain, R range)
Definition Context.java:585
TypeVarSort mkTypeVariable(Symbol name)
Definition Context.java:482
RatNum mkReal(String v)
FPNum mkFP(int v, FPSort s)
final< D extends Sort, R extends Sort > Expr< R > mkTermArray(Expr< ArraySort< D, R > > array)
final< R extends Sort > ReExpr< R > mkUnion(Expr< ReSort< R > >... t)
IntSymbol mkSymbol(int i)
Definition Context.java:94
final< R extends Sort > ReExpr< R > mkDiff(Expr< ReSort< R > > a, Expr< ReSort< R > > b)
StringSymbol mkSymbol(String name)
Definition Context.java:102
FPNum mkFPZero(FPSort s, boolean negative)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetDifference(Expr< ArraySort< D, BoolSort > > arg1, Expr< ArraySort< D, BoolSort > > arg2)
BoolExpr mkFPIsInfinite(Expr< FPSort > t)
final< R > FiniteDomainSort< R > mkFiniteDomainSort(String name, long size)
Definition Context.java:338
Simplifier usingParams(Simplifier t, Params p)
BoolExpr mkBoolConst(Symbol name)
Definition Context.java:781
final< R > EnumSort< R > mkEnumSort(String name, String... enumNames)
Definition Context.java:300
BitVecExpr mkFPToBV(Expr< FPRMSort > rm, Expr< FPSort > t, int sz, boolean signed)
BoolExpr mkPBGe(int[] coeffs, Expr< BoolSort >[] args, int k)
static< R extends Sort > Lambda< R > of(Context ctx, Sort[] sorts, Symbol[] names, Expr< R > body)
Definition Lambda.java:94
static Quantifier of(Context ctx, boolean isForall, Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
static long[] arrayToNative(Z3Object[] a)
Definition Z3Object.java:73
static int arrayLength(Z3Object[] a)
Definition Z3Object.java:83
Z3_ast_print_mode
Z3 pretty printing modes (See Z3_set_ast_print_mode).
Definition z3_api.h:1364