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> BoolExpr mkPrefixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2404 {
2405 checkContextMatch(s1, s2);
2406 return (BoolExpr) Expr.create(this, Native.mkSeqPrefix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2407 }
2408
2412 public final <R extends Sort> BoolExpr mkSuffixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2413 {
2414 checkContextMatch(s1, s2);
2415 return (BoolExpr)Expr.create(this, Native.mkSeqSuffix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2416 }
2417
2421 public final <R extends Sort> BoolExpr mkContains(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2422 {
2423 checkContextMatch(s1, s2);
2424 return (BoolExpr) Expr.create(this, Native.mkSeqContains(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2425 }
2426
2432 {
2433 checkContextMatch(s1, s2);
2434 return new BoolExpr(this, Native.mkStrLt(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2435 }
2436
2441 {
2442 checkContextMatch(s1, s2);
2443 return new BoolExpr(this, Native.mkStrLe(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2444 }
2445
2446
2450 public final <R extends Sort> SeqExpr<R> mkAt(Expr<SeqSort<R>> s, Expr<IntSort> index)
2451 {
2452 checkContextMatch(s, index);
2453 return (SeqExpr<R>) Expr.create(this, Native.mkSeqAt(nCtx(), s.getNativeObject(), index.getNativeObject()));
2454 }
2455
2459 public final <R extends Sort> Expr<R> mkNth(Expr<SeqSort<R>> s, Expr<IntSort> index)
2460 {
2461 checkContextMatch(s, index);
2462 return (Expr<R>) Expr.create(this, Native.mkSeqNth(nCtx(), s.getNativeObject(), index.getNativeObject()));
2463 }
2464
2465
2469 public final <R extends Sort> SeqExpr<R> mkExtract(Expr<SeqSort<R>> s, Expr<IntSort> offset, Expr<IntSort> length)
2470 {
2471 checkContextMatch(s, offset, length);
2472 return (SeqExpr<R>) Expr.create(this, Native.mkSeqExtract(nCtx(), s.getNativeObject(), offset.getNativeObject(), length.getNativeObject()));
2473 }
2474
2478 public final <R extends Sort> IntExpr mkIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr, Expr<IntSort> offset)
2479 {
2480 checkContextMatch(s, substr, offset);
2481 return (IntExpr)Expr.create(this, Native.mkSeqIndex(nCtx(), s.getNativeObject(), substr.getNativeObject(), offset.getNativeObject()));
2482 }
2483
2487 public final <R extends Sort> IntExpr mkLastIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr)
2488 {
2489 checkContextMatch(s, substr);
2490 return (IntExpr)Expr.create(this, Native.mkSeqLastIndex(nCtx(), s.getNativeObject(), substr.getNativeObject()));
2491 }
2492
2497 public final <R extends Sort> SeqExpr<R> mkSeqMap(Expr<?> f, Expr<SeqSort<R>> s)
2498 {
2499 checkContextMatch(f, s);
2500 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMap(nCtx(), f.getNativeObject(), s.getNativeObject()));
2501 }
2502
2507 public final <R extends Sort> SeqExpr<R> mkSeqMapi(Expr<?> f, Expr<IntSort> i, Expr<SeqSort<R>> s)
2508 {
2509 checkContextMatch(f, i, s);
2510 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMapi(nCtx(), f.getNativeObject(), i.getNativeObject(), s.getNativeObject()));
2511 }
2512
2517 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldl(Expr<?> f, Expr<A> a, Expr<SeqSort<R>> s)
2518 {
2519 checkContextMatch(f, a, s);
2520 return (Expr<A>) Expr.create(this, Native.mkSeqFoldl(nCtx(), f.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2521 }
2522
2527 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldli(Expr<?> f, Expr<IntSort> i, Expr<A> a, Expr<SeqSort<R>> s)
2528 {
2529 checkContextMatch(f, i, a, s);
2530 return (Expr<A>) Expr.create(this, Native.mkSeqFoldli(nCtx(), f.getNativeObject(), i.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2531 }
2532
2536 public final <R extends Sort> SeqExpr<R> mkReplace(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2537 {
2538 checkContextMatch(s, src, dst);
2539 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplace(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2540 }
2541
2545 public final <R extends Sort> SeqExpr<R> mkReplaceAll(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.mkSeqReplaceAll(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2549 }
2550
2554 public final <R extends Sort> SeqExpr<R> mkReplaceRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2555 {
2556 checkContextMatch(s, re, dst);
2557 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceRe(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2558 }
2559
2563 public final <R extends Sort> SeqExpr<R> mkReplaceReAll(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.mkSeqReplaceReAll(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2567 }
2568
2572 public final <R extends Sort> ReExpr<SeqSort<R>> mkToRe(Expr<SeqSort<R>> s)
2573 {
2574 checkContextMatch(s);
2575 return (ReExpr<SeqSort<R>>) Expr.create(this, Native.mkSeqToRe(nCtx(), s.getNativeObject()));
2576 }
2577
2578
2582 public final <R extends Sort> BoolExpr mkInRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re)
2583 {
2584 checkContextMatch(s, re);
2585 return (BoolExpr) Expr.create(this, Native.mkSeqInRe(nCtx(), s.getNativeObject(), re.getNativeObject()));
2586 }
2587
2591 public final <R extends Sort> ReExpr<R> mkStar(Expr<ReSort<R>> re)
2592 {
2593 checkContextMatch(re);
2594 return (ReExpr<R>) Expr.create(this, Native.mkReStar(nCtx(), re.getNativeObject()));
2595 }
2596
2600 public final <R extends Sort> ReExpr<R> mkPower(Expr<ReSort<R>> re, int n)
2601 {
2602 return (ReExpr<R>) Expr.create(this, Native.mkRePower(nCtx(), re.getNativeObject(), n));
2603 }
2604
2608 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo, int hi)
2609 {
2610 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, hi));
2611 }
2612
2616 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo)
2617 {
2618 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, 0));
2619 }
2620
2621
2625 public final <R extends Sort> ReExpr<R> mkPlus(Expr<ReSort<R>> re)
2626 {
2627 checkContextMatch(re);
2628 return (ReExpr<R>) Expr.create(this, Native.mkRePlus(nCtx(), re.getNativeObject()));
2629 }
2630
2634 public final <R extends Sort> ReExpr<R> mkOption(Expr<ReSort<R>> re)
2635 {
2636 checkContextMatch(re);
2637 return (ReExpr<R>) Expr.create(this, Native.mkReOption(nCtx(), re.getNativeObject()));
2638 }
2639
2643 public final <R extends Sort> ReExpr<R> mkComplement(Expr<ReSort<R>> re)
2644 {
2645 checkContextMatch(re);
2646 return (ReExpr<R>) Expr.create(this, Native.mkReComplement(nCtx(), re.getNativeObject()));
2647 }
2648
2652 @SafeVarargs
2653 public final <R extends Sort> ReExpr<R> mkConcat(ReExpr<R>... t)
2654 {
2655 checkContextMatch(t);
2656 return (ReExpr<R>) Expr.create(this, Native.mkReConcat(nCtx(), t.length, AST.arrayToNative(t)));
2657 }
2658
2662 @SafeVarargs
2663 public final <R extends Sort> ReExpr<R> mkUnion(Expr<ReSort<R>>... t)
2664 {
2665 checkContextMatch(t);
2666 return (ReExpr<R>) Expr.create(this, Native.mkReUnion(nCtx(), t.length, AST.arrayToNative(t)));
2667 }
2668
2672 @SafeVarargs
2673 public final <R extends Sort> ReExpr<R> mkIntersect(Expr<ReSort<R>>... t)
2674 {
2675 checkContextMatch(t);
2676 return (ReExpr<R>) Expr.create(this, Native.mkReIntersect(nCtx(), t.length, AST.arrayToNative(t)));
2677 }
2678
2682 public final <R extends Sort> ReExpr<R> mkDiff(Expr<ReSort<R>> a, Expr<ReSort<R>> b)
2683 {
2684 checkContextMatch(a, b);
2685 return (ReExpr<R>) Expr.create(this, Native.mkReDiff(nCtx(), a.getNativeObject(), b.getNativeObject()));
2686 }
2687
2688
2693 public final <R extends Sort> ReExpr<R> mkEmptyRe(ReSort<R> s)
2694 {
2695 return (ReExpr<R>) Expr.create(this, Native.mkReEmpty(nCtx(), s.getNativeObject()));
2696 }
2697
2702 public final <R extends Sort> ReExpr<R> mkFullRe(ReSort<R> s)
2703 {
2704 return (ReExpr<R>) Expr.create(this, Native.mkReFull(nCtx(), s.getNativeObject()));
2705 }
2706
2712 public final <R extends Sort> ReExpr<R> mkAllcharRe(ReSort<R> s)
2713 {
2714 return (ReExpr<R>) Expr.create(this, Native.mkReAllchar(nCtx(), s.getNativeObject()));
2715 }
2716
2721 {
2722 checkContextMatch(lo, hi);
2723 return (ReExpr<SeqSort<CharSort>>) Expr.create(this, Native.mkReRange(nCtx(), lo.getNativeObject(), hi.getNativeObject()));
2724 }
2725
2730 {
2731 checkContextMatch(ch1, ch2);
2732 return (BoolExpr) Expr.create(this, Native.mkCharLe(nCtx(), ch1.getNativeObject(), ch2.getNativeObject()));
2733 }
2734
2739 {
2740 checkContextMatch(ch);
2741 return (IntExpr) Expr.create(this, Native.mkCharToInt(nCtx(), ch.getNativeObject()));
2742 }
2743
2748 {
2749 checkContextMatch(ch);
2750 return (BitVecExpr) Expr.create(this, Native.mkCharToBv(nCtx(), ch.getNativeObject()));
2751 }
2752
2757 {
2758 checkContextMatch(bv);
2759 return (Expr<CharSort>) Expr.create(this, Native.mkCharFromBv(nCtx(), bv.getNativeObject()));
2760 }
2761
2766 {
2767 checkContextMatch(ch);
2768 return (BoolExpr) Expr.create(this, Native.mkCharIsDigit(nCtx(), ch.getNativeObject()));
2769 }
2770
2774 public BoolExpr mkAtMost(Expr<BoolSort>[] args, int k)
2775 {
2776 checkContextMatch(args);
2777 return (BoolExpr) Expr.create(this, Native.mkAtmost(nCtx(), args.length, AST.arrayToNative(args), k));
2778 }
2779
2783 public BoolExpr mkAtLeast(Expr<BoolSort>[] args, int k)
2784 {
2785 checkContextMatch(args);
2786 return (BoolExpr) Expr.create(this, Native.mkAtleast(nCtx(), args.length, AST.arrayToNative(args), k));
2787 }
2788
2792 public BoolExpr mkPBLe(int[] coeffs, Expr<BoolSort>[] args, int k)
2793 {
2794 checkContextMatch(args);
2795 return (BoolExpr) Expr.create(this, Native.mkPble(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2796 }
2797
2801 public BoolExpr mkPBGe(int[] coeffs, Expr<BoolSort>[] args, int k)
2802 {
2803 checkContextMatch(args);
2804 return (BoolExpr) Expr.create(this, Native.mkPbge(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2805 }
2806
2810 public BoolExpr mkPBEq(int[] coeffs, Expr<BoolSort>[] args, int k)
2811 {
2812 checkContextMatch(args);
2813 return (BoolExpr) Expr.create(this, Native.mkPbeq(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2814 }
2815
2827 public final <R extends Sort> Expr<R> mkNumeral(String v, R ty)
2828 {
2829 checkContextMatch(ty);
2830 return (Expr<R>) Expr.create(this,
2831 Native.mkNumeral(nCtx(), v, ty.getNativeObject()));
2832 }
2833
2844 public final <R extends Sort> Expr<R> mkNumeral(int v, R ty)
2845 {
2846 checkContextMatch(ty);
2847 return (Expr<R>) Expr.create(this, Native.mkInt(nCtx(), v, ty.getNativeObject()));
2848 }
2849
2860 public final <R extends Sort> Expr<R> mkNumeral(long v, R ty)
2861 {
2862 checkContextMatch(ty);
2863 return (Expr<R>) Expr.create(this,
2864 Native.mkInt64(nCtx(), v, ty.getNativeObject()));
2865 }
2866
2876 public RatNum mkReal(int num, int den)
2877 {
2878 if (den == 0) {
2879 throw new Z3Exception("Denominator is zero");
2880 }
2881
2882 return new RatNum(this, Native.mkReal(nCtx(), num, den));
2883 }
2884
2891 public RatNum mkReal(String v)
2892 {
2893
2894 return new RatNum(this, Native.mkNumeral(nCtx(), v, getRealSort()
2895 .getNativeObject()));
2896 }
2897
2904 public RatNum mkReal(int v)
2905 {
2906
2907 return new RatNum(this, Native.mkInt(nCtx(), v, getRealSort()
2908 .getNativeObject()));
2909 }
2910
2917 public RatNum mkReal(long v)
2918 {
2919
2920 return new RatNum(this, Native.mkInt64(nCtx(), v, getRealSort()
2921 .getNativeObject()));
2922 }
2923
2928 public IntNum mkInt(String v)
2929 {
2930
2931 return new IntNum(this, Native.mkNumeral(nCtx(), v, getIntSort()
2932 .getNativeObject()));
2933 }
2934
2941 public IntNum mkInt(int v)
2942 {
2943
2944 return new IntNum(this, Native.mkInt(nCtx(), v, getIntSort()
2945 .getNativeObject()));
2946 }
2947
2954 public IntNum mkInt(long v)
2955 {
2956
2957 return new IntNum(this, Native.mkInt64(nCtx(), v, getIntSort()
2958 .getNativeObject()));
2959 }
2960
2966 public BitVecNum mkBV(String v, int size)
2967 {
2968 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2969 }
2970
2976 public BitVecNum mkBV(int v, int size)
2977 {
2978 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2979 }
2980
2986 public BitVecNum mkBV(long v, int size)
2987 {
2988 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2989 }
2990
3016 public Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3017 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3018 Symbol quantifierID, Symbol skolemID)
3019 {
3020 return Quantifier.of(this, true, sorts, names, body, weight, patterns,
3021 noPatterns, quantifierID, skolemID);
3022 }
3023
3028 public Quantifier mkForall(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3029 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3030 Symbol skolemID)
3031 {
3032
3033 return Quantifier.of(this, true, boundConstants, body, weight,
3034 patterns, noPatterns, quantifierID, skolemID);
3035 }
3036
3041 public Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3042 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3043 Symbol quantifierID, Symbol skolemID)
3044 {
3045
3046 return Quantifier.of(this, false, sorts, names, body, weight,
3047 patterns, noPatterns, quantifierID, skolemID);
3048 }
3049
3054 public Quantifier mkExists(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3055 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3056 Symbol skolemID)
3057 {
3058
3059 return Quantifier.of(this, false, boundConstants, body, weight,
3060 patterns, noPatterns, quantifierID, skolemID);
3061 }
3062
3067 public Quantifier mkQuantifier(boolean universal, Sort[] sorts,
3068 Symbol[] names, Expr<BoolSort> body, int weight, Pattern[] patterns,
3069 Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
3070
3071 {
3072
3073 if (universal)
3074 return mkForall(sorts, names, body, weight, patterns, noPatterns,
3075 quantifierID, skolemID);
3076 else
3077 return mkExists(sorts, names, body, weight, patterns, noPatterns,
3078 quantifierID, skolemID);
3079 }
3080
3085 public Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants,
3086 Expr<BoolSort> body, int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3087 Symbol quantifierID, Symbol skolemID)
3088 {
3089
3090 if (universal)
3091 return mkForall(boundConstants, body, weight, patterns, noPatterns,
3092 quantifierID, skolemID);
3093 else
3094 return mkExists(boundConstants, body, weight, patterns, noPatterns,
3095 quantifierID, skolemID);
3096 }
3097
3115 public final <R extends Sort> Lambda<R> mkLambda(Sort[] sorts, Symbol[] names, Expr<R> body)
3116 {
3117 return Lambda.of(this, sorts, names, body);
3118 }
3119
3126 public final <R extends Sort> Lambda<R> mkLambda(Expr<?>[] boundConstants, Expr<R> body)
3127 {
3128 return Lambda.of(this, boundConstants, body);
3129 }
3130
3131
3147 {
3148 Native.setAstPrintMode(nCtx(), value.toInt());
3149 }
3150
3164 public String benchmarkToSMTString(String name, String logic,
3165 String status, String attributes, Expr<BoolSort>[] assumptions,
3166 Expr<BoolSort> formula)
3167 {
3168
3169 return Native.benchmarkToSmtlibString(nCtx(), name, logic, status,
3170 attributes, assumptions.length,
3171 AST.arrayToNative(assumptions), formula.getNativeObject());
3172 }
3173
3183 public BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames,
3184 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3185 {
3186 int csn = Symbol.arrayLength(sortNames);
3187 int cs = Sort.arrayLength(sorts);
3188 int cdn = Symbol.arrayLength(declNames);
3189 int cd = AST.arrayLength(decls);
3190 if (csn != cs || cdn != cd) {
3191 throw new Z3Exception("Argument size mismatch");
3192 }
3193 ASTVector v = new ASTVector(this, Native.parseSmtlib2String(nCtx(),
3194 str, AST.arrayLength(sorts), Symbol.arrayToNative(sortNames),
3195 AST.arrayToNative(sorts), AST.arrayLength(decls),
3196 Symbol.arrayToNative(declNames), AST.arrayToNative(decls)));
3197 return v.ToBoolExprArray();
3198 }
3199
3204 public BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames,
3205 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3206 {
3207 int csn = Symbol.arrayLength(sortNames);
3208 int cs = Sort.arrayLength(sorts);
3209 int cdn = Symbol.arrayLength(declNames);
3210 int cd = AST.arrayLength(decls);
3211 if (csn != cs || cdn != cd)
3212 throw new Z3Exception("Argument size mismatch");
3213 ASTVector v = new ASTVector(this, Native.parseSmtlib2File(nCtx(),
3214 fileName, AST.arrayLength(sorts),
3215 Symbol.arrayToNative(sortNames), AST.arrayToNative(sorts),
3216 AST.arrayLength(decls), Symbol.arrayToNative(declNames),
3217 AST.arrayToNative(decls)));
3218 return v.ToBoolExprArray();
3219 }
3220
3231 public Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
3232 {
3233 return new Goal(this, models, unsatCores, proofs);
3234 }
3235
3240 {
3241 return new Params(this);
3242 }
3243
3247 public int getNumTactics()
3248 {
3249 return Native.getNumTactics(nCtx());
3250 }
3251
3255 public String[] getTacticNames()
3256 {
3257
3258 int n = getNumTactics();
3259 String[] res = new String[n];
3260 for (int i = 0; i < n; i++)
3261 res[i] = Native.getTacticName(nCtx(), i);
3262 return res;
3263 }
3264
3269 public String getTacticDescription(String name)
3270 {
3271 return Native.tacticGetDescr(nCtx(), name);
3272 }
3273
3277 public Tactic mkTactic(String name)
3278 {
3279 return new Tactic(this, name);
3280 }
3281
3286 public Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
3287
3288 {
3289 checkContextMatch(t1);
3290 checkContextMatch(t2);
3291 checkContextMatch(ts);
3292
3293 long last = 0;
3294 if (ts != null && ts.length > 0)
3295 {
3296 last = ts[ts.length - 1].getNativeObject();
3297 for (int i = ts.length - 2; i >= 0; i--) {
3298 last = Native.tacticAndThen(nCtx(), ts[i].getNativeObject(),
3299 last);
3300 }
3301 }
3302 if (last != 0)
3303 {
3304 last = Native.tacticAndThen(nCtx(), t2.getNativeObject(), last);
3305 return new Tactic(this, Native.tacticAndThen(nCtx(),
3306 t1.getNativeObject(), last));
3307 } else
3308 return new Tactic(this, Native.tacticAndThen(nCtx(),
3309 t1.getNativeObject(), t2.getNativeObject()));
3310 }
3311
3318 public Tactic then(Tactic t1, Tactic t2, Tactic... ts)
3319 {
3320 return andThen(t1, t2, ts);
3321 }
3322
3329 {
3330 checkContextMatch(t1);
3331 checkContextMatch(t2);
3332 return new Tactic(this, Native.tacticOrElse(nCtx(),
3333 t1.getNativeObject(), t2.getNativeObject()));
3334 }
3335
3342 public Tactic tryFor(Tactic t, int ms)
3343 {
3344 checkContextMatch(t);
3345 return new Tactic(this, Native.tacticTryFor(nCtx(),
3346 t.getNativeObject(), ms));
3347 }
3348
3356 {
3357 checkContextMatch(t);
3358 checkContextMatch(p);
3359 return new Tactic(this, Native.tacticWhen(nCtx(), p.getNativeObject(),
3360 t.getNativeObject()));
3361 }
3362
3368 public Tactic cond(Probe p, Tactic t1, Tactic t2)
3369 {
3370 checkContextMatch(p);
3371 checkContextMatch(t1);
3372 checkContextMatch(t2);
3373 return new Tactic(this, Native.tacticCond(nCtx(), p.getNativeObject(),
3374 t1.getNativeObject(), t2.getNativeObject()));
3375 }
3376
3381 public Tactic repeat(Tactic t, int max)
3382 {
3383 checkContextMatch(t);
3384 return new Tactic(this, Native.tacticRepeat(nCtx(),
3385 t.getNativeObject(), max));
3386 }
3387
3391 public Tactic skip()
3392 {
3393 return new Tactic(this, Native.tacticSkip(nCtx()));
3394 }
3395
3399 public Tactic fail()
3400 {
3401 return new Tactic(this, Native.tacticFail(nCtx()));
3402 }
3403
3409 {
3410 checkContextMatch(p);
3411 return new Tactic(this,
3412 Native.tacticFailIf(nCtx(), p.getNativeObject()));
3413 }
3414
3420 {
3421 return new Tactic(this, Native.tacticFailIfNotDecided(nCtx()));
3422 }
3423
3429 {
3430 checkContextMatch(t);
3431 checkContextMatch(p);
3432 return new Tactic(this, Native.tacticUsingParams(nCtx(),
3433 t.getNativeObject(), p.getNativeObject()));
3434 }
3435
3443 {
3444 return usingParams(t, p);
3445 }
3446
3450 public Tactic parOr(Tactic... t)
3451 {
3452 checkContextMatch(t);
3453 return new Tactic(this, Native.tacticParOr(nCtx(),
3455 }
3456
3462 {
3463 checkContextMatch(t1);
3464 checkContextMatch(t2);
3465 return new Tactic(this, Native.tacticParAndThen(nCtx(),
3466 t1.getNativeObject(), t2.getNativeObject()));
3467 }
3468
3474 public void interrupt()
3475 {
3476 Native.interrupt(nCtx());
3477 }
3478
3483 {
3484 return new ASTMap(this);
3485 }
3486
3491 public Expr<?> qeLite(ASTVector vars, Expr<?> body)
3492 {
3493 checkContextMatch(vars);
3494 checkContextMatch(body);
3495 return Expr.create(this, Native.qeLite(nCtx(), vars.getNativeObject(),
3496 body.getNativeObject()));
3497 }
3498
3502 public Expr<?> qeModelProject(Model model, Expr<?>[] bounds, Expr<?> body)
3503 {
3504 checkContextMatch(model);
3505 checkContextMatch(bounds);
3506 checkContextMatch(body);
3507 return Expr.create(this, Native.qeModelProject(nCtx(), model.getNativeObject(),
3508 bounds.length, AST.arrayToNative(bounds), body.getNativeObject()));
3509 }
3510
3514 public Expr<?> qeModelProjectSkolem(Model model, Expr<?>[] bounds, Expr<?> body,
3515 ASTMap map)
3516 {
3517 checkContextMatch(model);
3518 checkContextMatch(bounds);
3519 checkContextMatch(body);
3520 checkContextMatch(map);
3521 return Expr.create(this, Native.qeModelProjectSkolem(nCtx(),
3522 model.getNativeObject(), bounds.length, AST.arrayToNative(bounds),
3523 body.getNativeObject(), map.getNativeObject()));
3524 }
3525
3530 Expr<?> body, ASTMap map)
3531 {
3532 checkContextMatch(model);
3533 checkContextMatch(bounds);
3534 checkContextMatch(body);
3535 checkContextMatch(map);
3536 return Expr.create(this, Native.qeModelProjectWithWitness(nCtx(),
3537 model.getNativeObject(), bounds.length, AST.arrayToNative(bounds),
3538 body.getNativeObject(), map.getNativeObject()));
3539 }
3540
3545 {
3546 return Native.getNumSimplifiers(nCtx());
3547 }
3548
3552 public String[] getSimplifierNames()
3553 {
3554
3555 int n = getNumSimplifiers();
3556 String[] res = new String[n];
3557 for (int i = 0; i < n; i++)
3558 res[i] = Native.getSimplifierName(nCtx(), i);
3559 return res;
3560 }
3561
3566 public String getSimplifierDescription(String name)
3567 {
3568 return Native.simplifierGetDescr(nCtx(), name);
3569 }
3570
3574 public Simplifier mkSimplifier(String name)
3575 {
3576 return new Simplifier(this, name);
3577 }
3578
3583
3584 {
3585 checkContextMatch(t1);
3586 checkContextMatch(t2);
3587 checkContextMatch(ts);
3588
3589 long last = 0;
3590 if (ts != null && ts.length > 0)
3591 {
3592 last = ts[ts.length - 1].getNativeObject();
3593 for (int i = ts.length - 2; i >= 0; i--) {
3594 last = Native.simplifierAndThen(nCtx(), ts[i].getNativeObject(),
3595 last);
3596 }
3597 }
3598 if (last != 0)
3599 {
3600 last = Native.simplifierAndThen(nCtx(), t2.getNativeObject(), last);
3601 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3602 t1.getNativeObject(), last));
3603 } else
3604 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3605 t1.getNativeObject(), t2.getNativeObject()));
3606 }
3607
3614 {
3615 return andThen(t1, t2, ts);
3616 }
3617
3623 {
3624 checkContextMatch(t);
3625 checkContextMatch(p);
3626 return new Simplifier(this, Native.simplifierUsingParams(nCtx(),
3627 t.getNativeObject(), p.getNativeObject()));
3628 }
3629
3637 {
3638 return usingParams(t, p);
3639 }
3640
3644 public int getNumProbes()
3645 {
3646 return Native.getNumProbes(nCtx());
3647 }
3648
3652 public String[] getProbeNames()
3653 {
3654
3655 int n = getNumProbes();
3656 String[] res = new String[n];
3657 for (int i = 0; i < n; i++)
3658 res[i] = Native.getProbeName(nCtx(), i);
3659 return res;
3660 }
3661
3666 public String getProbeDescription(String name)
3667 {
3668 return Native.probeGetDescr(nCtx(), name);
3669 }
3670
3674 public Probe mkProbe(String name)
3675 {
3676 return new Probe(this, name);
3677 }
3678
3682 public Probe constProbe(double val)
3683 {
3684 return new Probe(this, Native.probeConst(nCtx(), val));
3685 }
3686
3691 public Probe lt(Probe p1, Probe p2)
3692 {
3693 checkContextMatch(p1);
3694 checkContextMatch(p2);
3695 return new Probe(this, Native.probeLt(nCtx(), p1.getNativeObject(),
3696 p2.getNativeObject()));
3697 }
3698
3703 public Probe gt(Probe p1, Probe p2)
3704 {
3705 checkContextMatch(p1);
3706 checkContextMatch(p2);
3707 return new Probe(this, Native.probeGt(nCtx(), p1.getNativeObject(),
3708 p2.getNativeObject()));
3709 }
3710
3716 public Probe le(Probe p1, Probe p2)
3717 {
3718 checkContextMatch(p1);
3719 checkContextMatch(p2);
3720 return new Probe(this, Native.probeLe(nCtx(), p1.getNativeObject(),
3721 p2.getNativeObject()));
3722 }
3723
3729 public Probe ge(Probe p1, Probe p2)
3730 {
3731 checkContextMatch(p1);
3732 checkContextMatch(p2);
3733 return new Probe(this, Native.probeGe(nCtx(), p1.getNativeObject(),
3734 p2.getNativeObject()));
3735 }
3736
3741 public Probe eq(Probe p1, Probe p2)
3742 {
3743 checkContextMatch(p1);
3744 checkContextMatch(p2);
3745 return new Probe(this, Native.probeEq(nCtx(), p1.getNativeObject(),
3746 p2.getNativeObject()));
3747 }
3748
3752 public Probe and(Probe p1, Probe p2)
3753 {
3754 checkContextMatch(p1);
3755 checkContextMatch(p2);
3756 return new Probe(this, Native.probeAnd(nCtx(), p1.getNativeObject(),
3757 p2.getNativeObject()));
3758 }
3759
3763 public Probe or(Probe p1, Probe p2)
3764 {
3765 checkContextMatch(p1);
3766 checkContextMatch(p2);
3767 return new Probe(this, Native.probeOr(nCtx(), p1.getNativeObject(),
3768 p2.getNativeObject()));
3769 }
3770
3774 public Probe not(Probe p)
3775 {
3776 checkContextMatch(p);
3777 return new Probe(this, Native.probeNot(nCtx(), p.getNativeObject()));
3778 }
3779
3788 {
3789 return mkSolver((Symbol) null);
3790 }
3791
3799 public Solver mkSolver(Symbol logic)
3800 {
3801
3802 if (logic == null)
3803 return new Solver(this, Native.mkSolver(nCtx()));
3804 else
3805 return new Solver(this, Native.mkSolverForLogic(nCtx(),
3806 logic.getNativeObject()));
3807 }
3808
3813 public Solver mkSolver(String logic)
3814 {
3815 return mkSolver(mkSymbol(logic));
3816 }
3817
3822 {
3823 return new Solver(this, Native.mkSimpleSolver(nCtx()));
3824 }
3825
3833 {
3834
3835 return new Solver(this, Native.mkSolverFromTactic(nCtx(),
3836 t.getNativeObject()));
3837 }
3838
3843 {
3844 return new Solver(this, Native.solverAddSimplifier(nCtx(), s.getNativeObject(), simp.getNativeObject()));
3845 }
3846
3851 {
3852 return new Fixedpoint(this);
3853 }
3854
3859 {
3860 return new Optimize(this);
3861 }
3862
3863
3869 {
3870 return new FPRMSort(this);
3871 }
3872
3878 {
3879 return new FPRMExpr(this, Native.mkFpaRoundNearestTiesToEven(nCtx()));
3880 }
3881
3887 {
3888 return new FPRMNum(this, Native.mkFpaRne(nCtx()));
3889 }
3890
3896 {
3897 return new FPRMNum(this, Native.mkFpaRoundNearestTiesToAway(nCtx()));
3898 }
3899
3905 {
3906 return new FPRMNum(this, Native.mkFpaRna(nCtx()));
3907 }
3908
3914 {
3915 return new FPRMNum(this, Native.mkFpaRoundTowardPositive(nCtx()));
3916 }
3917
3923 {
3924 return new FPRMNum(this, Native.mkFpaRtp(nCtx()));
3925 }
3926
3932 {
3933 return new FPRMNum(this, Native.mkFpaRoundTowardNegative(nCtx()));
3934 }
3935
3941 {
3942 return new FPRMNum(this, Native.mkFpaRtn(nCtx()));
3943 }
3944
3950 {
3951 return new FPRMNum(this, Native.mkFpaRoundTowardZero(nCtx()));
3952 }
3953
3959 {
3960 return new FPRMNum(this, Native.mkFpaRtz(nCtx()));
3961 }
3962
3969 public FPSort mkFPSort(int ebits, int sbits)
3970 {
3971 return new FPSort(this, ebits, sbits);
3972 }
3973
3979 {
3980 return new FPSort(this, Native.mkFpaSortHalf(nCtx()));
3981 }
3982
3988 {
3989 return new FPSort(this, Native.mkFpaSort16(nCtx()));
3990 }
3991
3997 {
3998 return new FPSort(this, Native.mkFpaSortSingle(nCtx()));
3999 }
4000
4006 {
4007 return new FPSort(this, Native.mkFpaSort32(nCtx()));
4008 }
4009
4015 {
4016 return new FPSort(this, Native.mkFpaSortDouble(nCtx()));
4017 }
4018
4024 {
4025 return new FPSort(this, Native.mkFpaSort64(nCtx()));
4026 }
4027
4033 {
4034 return new FPSort(this, Native.mkFpaSortQuadruple(nCtx()));
4035 }
4036
4042 {
4043 return new FPSort(this, Native.mkFpaSort128(nCtx()));
4044 }
4045
4046
4053 {
4054 return new FPNum(this, Native.mkFpaNan(nCtx(), s.getNativeObject()));
4055 }
4056
4063 public FPNum mkFPInf(FPSort s, boolean negative)
4064 {
4065 return new FPNum(this, Native.mkFpaInf(nCtx(), s.getNativeObject(), negative));
4066 }
4067
4074 public FPNum mkFPZero(FPSort s, boolean negative)
4075 {
4076 return new FPNum(this, Native.mkFpaZero(nCtx(), s.getNativeObject(), negative));
4077 }
4078
4085 public FPNum mkFPNumeral(float v, FPSort s)
4086 {
4087 return new FPNum(this, Native.mkFpaNumeralFloat(nCtx(), v, s.getNativeObject()));
4088 }
4089
4096 public FPNum mkFPNumeral(double v, FPSort s)
4097 {
4098 return new FPNum(this, Native.mkFpaNumeralDouble(nCtx(), v, s.getNativeObject()));
4099 }
4100
4107 public FPNum mkFPNumeral(int v, FPSort s)
4108 {
4109 return new FPNum(this, Native.mkFpaNumeralInt(nCtx(), v, s.getNativeObject()));
4110 }
4111
4120 public FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
4121 {
4122 return new FPNum(this, Native.mkFpaNumeralIntUint(nCtx(), sgn, exp, sig, s.getNativeObject()));
4123 }
4124
4133 public FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
4134 {
4135 return new FPNum(this, Native.mkFpaNumeralInt64Uint64(nCtx(), sgn, exp, sig, s.getNativeObject()));
4136 }
4137
4144 public FPNum mkFP(float v, FPSort s)
4145 {
4146 return mkFPNumeral(v, s);
4147 }
4148
4155 public FPNum mkFP(double v, FPSort s)
4156 {
4157 return mkFPNumeral(v, s);
4158 }
4159
4167 public FPNum mkFP(int v, FPSort s)
4168 {
4169 return mkFPNumeral(v, s);
4170 }
4171
4180 public FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
4181 {
4182 return mkFPNumeral(sgn, exp, sig, s);
4183 }
4184
4193 public FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
4194 {
4195 return mkFPNumeral(sgn, exp, sig, s);
4196 }
4197
4198
4205 {
4206 return new FPExpr(this, Native.mkFpaAbs(nCtx(), t.getNativeObject()));
4207 }
4208
4215 {
4216 return new FPExpr(this, Native.mkFpaNeg(nCtx(), t.getNativeObject()));
4217 }
4218
4227 {
4228 return new FPExpr(this, Native.mkFpaAdd(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4229 }
4230
4239 {
4240 return new FPExpr(this, Native.mkFpaSub(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4241 }
4242
4251 {
4252 return new FPExpr(this, Native.mkFpaMul(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4253 }
4254
4263 {
4264 return new FPExpr(this, Native.mkFpaDiv(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4265 }
4266
4278 {
4279 return new FPExpr(this, Native.mkFpaFma(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject(), t3.getNativeObject()));
4280 }
4281
4289 {
4290 return new FPExpr(this, Native.mkFpaSqrt(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4291 }
4292
4300 {
4301 return new FPExpr(this, Native.mkFpaRem(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4302 }
4303
4312 {
4313 return new FPExpr(this, Native.mkFpaRoundToIntegral(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4314 }
4315
4323 {
4324 return new FPExpr(this, Native.mkFpaMin(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4325 }
4326
4334 {
4335 return new FPExpr(this, Native.mkFpaMax(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4336 }
4337
4345 {
4346 return new BoolExpr(this, Native.mkFpaLeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4347 }
4348
4356 {
4357 return new BoolExpr(this, Native.mkFpaLt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4358 }
4359
4367 {
4368 return new BoolExpr(this, Native.mkFpaGeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4369 }
4370
4378 {
4379 return new BoolExpr(this, Native.mkFpaGt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4380 }
4381
4391 {
4392 return new BoolExpr(this, Native.mkFpaEq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4393 }
4394
4401 {
4402 return new BoolExpr(this, Native.mkFpaIsNormal(nCtx(), t.getNativeObject()));
4403 }
4404
4411 {
4412 return new BoolExpr(this, Native.mkFpaIsSubnormal(nCtx(), t.getNativeObject()));
4413 }
4414
4421 {
4422 return new BoolExpr(this, Native.mkFpaIsZero(nCtx(), t.getNativeObject()));
4423 }
4424
4431 {
4432 return new BoolExpr(this, Native.mkFpaIsInfinite(nCtx(), t.getNativeObject()));
4433 }
4434
4441 {
4442 return new BoolExpr(this, Native.mkFpaIsNan(nCtx(), t.getNativeObject()));
4443 }
4444
4451 {
4452 return new BoolExpr(this, Native.mkFpaIsNegative(nCtx(), t.getNativeObject()));
4453 }
4454
4461 {
4462 return new BoolExpr(this, Native.mkFpaIsPositive(nCtx(), t.getNativeObject()));
4463 }
4464
4479 {
4480 return new FPExpr(this, Native.mkFpaFp(nCtx(), sgn.getNativeObject(), sig.getNativeObject(), exp.getNativeObject()));
4481 }
4482
4495 {
4496 return new FPExpr(this, Native.mkFpaToFpBv(nCtx(), bv.getNativeObject(), s.getNativeObject()));
4497 }
4498
4511 {
4512 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4513 }
4514
4527 {
4528 return new FPExpr(this, Native.mkFpaToFpReal(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4529 }
4530
4544 public FPExpr mkFPToFP(Expr<FPRMSort> rm, Expr<BitVecSort> t, FPSort s, boolean signed)
4545 {
4546 if (signed)
4547 return new FPExpr(this, Native.mkFpaToFpSigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4548 else
4549 return new FPExpr(this, Native.mkFpaToFpUnsigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4550 }
4551
4563 {
4564 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), s.getNativeObject(), rm.getNativeObject(), t.getNativeObject()));
4565 }
4566
4579 public BitVecExpr mkFPToBV(Expr<FPRMSort> rm, Expr<FPSort> t, int sz, boolean signed)
4580 {
4581 if (signed)
4582 return new BitVecExpr(this, Native.mkFpaToSbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4583 else
4584 return new BitVecExpr(this, Native.mkFpaToUbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4585 }
4586
4597 {
4598 return new RealExpr(this, Native.mkFpaToReal(nCtx(), t.getNativeObject()));
4599 }
4600
4612 {
4613 return new BitVecExpr(this, Native.mkFpaToIeeeBv(nCtx(), t.getNativeObject()));
4614 }
4615
4630 {
4631 return new BitVecExpr(this, Native.mkFpaToFpIntReal(nCtx(), rm.getNativeObject(), exp.getNativeObject(), sig.getNativeObject(), s.getNativeObject()));
4632 }
4633
4639 public final <R extends Sort> FuncDecl<BoolSort> mkLinearOrder(R sort, int index) {
4640 return (FuncDecl<BoolSort>) FuncDecl.create(
4641 this,
4642 Native.mkLinearOrder(
4643 nCtx(),
4644 sort.getNativeObject(),
4645 index
4646 )
4647 );
4648 }
4649
4655 public final <R extends Sort> FuncDecl<BoolSort> mkPartialOrder(R sort, int index) {
4656 return (FuncDecl<BoolSort>) FuncDecl.create(
4657 this,
4658 Native.mkPartialOrder(
4659 nCtx(),
4660 sort.getNativeObject(),
4661 index
4662 )
4663 );
4664 }
4665
4672 return (FuncDecl<BoolSort>) FuncDecl.create(
4673 this,
4674 Native.mkTransitiveClosure(
4675 nCtx(),
4676 f.getNativeObject()
4677 )
4678 );
4679 }
4680
4686 public final <R extends Sort> FuncDecl<BoolSort> mkPiecewiseLinearOrder(R sort, int index) {
4687 return (FuncDecl<BoolSort>) FuncDecl.create(
4688 this,
4689 Native.mkPiecewiseLinearOrder(
4690 nCtx(),
4691 sort.getNativeObject(),
4692 index
4693 )
4694 );
4695 }
4696
4702 public final <R extends Sort> FuncDecl<BoolSort> mkTreeOrder(R sort, int index) {
4703 return (FuncDecl<BoolSort>) FuncDecl.create(
4704 this,
4705 Native.mkTreeOrder(
4706 nCtx(),
4707 sort.getNativeObject(),
4708 index
4709 )
4710 );
4711 }
4712
4720 public final <R extends Sort> ASTVector polynomialSubresultants(Expr<R> p, Expr<R> q, Expr<R> x) {
4721 return new ASTVector(
4722 this,
4723 Native.polynomialSubresultants(
4724 nCtx(),
4725 p.getNativeObject(),
4726 q.getNativeObject(),
4727 x.getNativeObject()
4728 )
4729 );
4730 }
4731
4742 public AST wrapAST(long nativeObject)
4743 {
4744 return AST.create(this, nativeObject);
4745 }
4746
4759 public long unwrapAST(AST a)
4760 {
4761 return a.getNativeObject();
4762 }
4763
4768 public String SimplifyHelp()
4769 {
4770 return Native.simplifyGetHelp(nCtx());
4771 }
4772
4777 {
4778 return new ParamDescrs(this, Native.simplifyGetParamDescrs(nCtx()));
4779 }
4780
4789 public void updateParamValue(String id, String value)
4790 {
4791 Native.updateParamValue(nCtx(), id, value);
4792 }
4793
4794
4795 public long nCtx()
4796 {
4797 if (m_ctx == 0)
4798 throw new Z3Exception("Context closed");
4799 return m_ctx;
4800 }
4801
4802
4803 void checkContextMatch(Z3Object other)
4804 {
4805 if (this != other.getContext())
4806 throw new Z3Exception("Context mismatch");
4807 }
4808
4809 void checkContextMatch(Z3Object other1, Z3Object other2)
4810 {
4811 checkContextMatch(other1);
4812 checkContextMatch(other2);
4813 }
4814
4815 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3)
4816 {
4817 checkContextMatch(other1);
4818 checkContextMatch(other2);
4819 checkContextMatch(other3);
4820 }
4821
4822 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3, Z3Object other4)
4823 {
4824 checkContextMatch(other1);
4825 checkContextMatch(other2);
4826 checkContextMatch(other3);
4827 checkContextMatch(other4);
4828 }
4829
4830 void checkContextMatch(Z3Object[] arr)
4831 {
4832 if (arr != null)
4833 for (Z3Object a : arr)
4834 checkContextMatch(a);
4835 }
4836
4837 private Z3ReferenceQueue m_RefQueue = new Z3ReferenceQueue(this);
4838
4839 Z3ReferenceQueue getReferenceQueue() { return m_RefQueue; }
4840
4844 @Override
4845 public void close()
4846 {
4847 if (m_ctx == 0)
4848 return;
4849
4850 m_RefQueue.forceClear();
4851
4852 m_boolSort = null;
4853 m_intSort = null;
4854 m_realSort = null;
4855 m_stringSort = null;
4856 m_RefQueue = null;
4857
4858 synchronized (creation_lock) {
4859 Native.delContext(m_ctx);
4860 }
4861 m_ctx = 0;
4862 }
4863}
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)
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:1363