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
1161 {
1162 checkContextMatch(t);
1163 return new BitVecExpr(this, Native.mkBvnot(nCtx(), t.getNativeObject()));
1164 }
1165
1172 {
1173 checkContextMatch(t);
1174 return new BitVecExpr(this, Native.mkBvredand(nCtx(),
1175 t.getNativeObject()));
1176 }
1177
1184 {
1185 checkContextMatch(t);
1186 return new BitVecExpr(this, Native.mkBvredor(nCtx(),
1187 t.getNativeObject()));
1188 }
1189
1196 {
1197 checkContextMatch(t1);
1198 checkContextMatch(t2);
1199 return new BitVecExpr(this, Native.mkBvand(nCtx(),
1200 t1.getNativeObject(), t2.getNativeObject()));
1201 }
1202
1209 {
1210 checkContextMatch(t1);
1211 checkContextMatch(t2);
1212 return new BitVecExpr(this, Native.mkBvor(nCtx(), t1.getNativeObject(),
1213 t2.getNativeObject()));
1214 }
1215
1222 {
1223 checkContextMatch(t1);
1224 checkContextMatch(t2);
1225 return new BitVecExpr(this, Native.mkBvxor(nCtx(),
1226 t1.getNativeObject(), t2.getNativeObject()));
1227 }
1228
1235 {
1236 checkContextMatch(t1);
1237 checkContextMatch(t2);
1238 return new BitVecExpr(this, Native.mkBvnand(nCtx(),
1239 t1.getNativeObject(), t2.getNativeObject()));
1240 }
1241
1248 {
1249 checkContextMatch(t1);
1250 checkContextMatch(t2);
1251 return new BitVecExpr(this, Native.mkBvnor(nCtx(),
1252 t1.getNativeObject(), t2.getNativeObject()));
1253 }
1254
1261 {
1262 checkContextMatch(t1);
1263 checkContextMatch(t2);
1264 return new BitVecExpr(this, Native.mkBvxnor(nCtx(),
1265 t1.getNativeObject(), t2.getNativeObject()));
1266 }
1267
1274 {
1275 checkContextMatch(t);
1276 return new BitVecExpr(this, Native.mkBvneg(nCtx(), t.getNativeObject()));
1277 }
1278
1285 {
1286 checkContextMatch(t1);
1287 checkContextMatch(t2);
1288 return new BitVecExpr(this, Native.mkBvadd(nCtx(),
1289 t1.getNativeObject(), t2.getNativeObject()));
1290 }
1291
1298 {
1299 checkContextMatch(t1);
1300 checkContextMatch(t2);
1301 return new BitVecExpr(this, Native.mkBvsub(nCtx(),
1302 t1.getNativeObject(), t2.getNativeObject()));
1303 }
1304
1311 {
1312 checkContextMatch(t1);
1313 checkContextMatch(t2);
1314 return new BitVecExpr(this, Native.mkBvmul(nCtx(),
1315 t1.getNativeObject(), t2.getNativeObject()));
1316 }
1317
1326 {
1327 checkContextMatch(t1);
1328 checkContextMatch(t2);
1329 return new BitVecExpr(this, Native.mkBvudiv(nCtx(),
1330 t1.getNativeObject(), t2.getNativeObject()));
1331 }
1332
1347 {
1348 checkContextMatch(t1);
1349 checkContextMatch(t2);
1350 return new BitVecExpr(this, Native.mkBvsdiv(nCtx(),
1351 t1.getNativeObject(), t2.getNativeObject()));
1352 }
1353
1362 {
1363 checkContextMatch(t1);
1364 checkContextMatch(t2);
1365 return new BitVecExpr(this, Native.mkBvurem(nCtx(),
1366 t1.getNativeObject(), t2.getNativeObject()));
1367 }
1368
1380 {
1381 checkContextMatch(t1);
1382 checkContextMatch(t2);
1383 return new BitVecExpr(this, Native.mkBvsrem(nCtx(),
1384 t1.getNativeObject(), t2.getNativeObject()));
1385 }
1386
1394 {
1395 checkContextMatch(t1);
1396 checkContextMatch(t2);
1397 return new BitVecExpr(this, Native.mkBvsmod(nCtx(),
1398 t1.getNativeObject(), t2.getNativeObject()));
1399 }
1400
1407 {
1408 checkContextMatch(t1);
1409 checkContextMatch(t2);
1410 return new BoolExpr(this, Native.mkBvult(nCtx(), t1.getNativeObject(),
1411 t2.getNativeObject()));
1412 }
1413
1420 {
1421 checkContextMatch(t1);
1422 checkContextMatch(t2);
1423 return new BoolExpr(this, Native.mkBvslt(nCtx(), t1.getNativeObject(),
1424 t2.getNativeObject()));
1425 }
1426
1433 {
1434 checkContextMatch(t1);
1435 checkContextMatch(t2);
1436 return new BoolExpr(this, Native.mkBvule(nCtx(), t1.getNativeObject(),
1437 t2.getNativeObject()));
1438 }
1439
1446 {
1447 checkContextMatch(t1);
1448 checkContextMatch(t2);
1449 return new BoolExpr(this, Native.mkBvsle(nCtx(), t1.getNativeObject(),
1450 t2.getNativeObject()));
1451 }
1452
1459 {
1460 checkContextMatch(t1);
1461 checkContextMatch(t2);
1462 return new BoolExpr(this, Native.mkBvuge(nCtx(), t1.getNativeObject(),
1463 t2.getNativeObject()));
1464 }
1465
1472 {
1473 checkContextMatch(t1);
1474 checkContextMatch(t2);
1475 return new BoolExpr(this, Native.mkBvsge(nCtx(), t1.getNativeObject(),
1476 t2.getNativeObject()));
1477 }
1478
1485 {
1486 checkContextMatch(t1);
1487 checkContextMatch(t2);
1488 return new BoolExpr(this, Native.mkBvugt(nCtx(), t1.getNativeObject(),
1489 t2.getNativeObject()));
1490 }
1491
1498 {
1499 checkContextMatch(t1);
1500 checkContextMatch(t2);
1501 return new BoolExpr(this, Native.mkBvsgt(nCtx(), t1.getNativeObject(),
1502 t2.getNativeObject()));
1503 }
1504
1516 {
1517 checkContextMatch(t1);
1518 checkContextMatch(t2);
1519 return new BitVecExpr(this, Native.mkConcat(nCtx(),
1520 t1.getNativeObject(), t2.getNativeObject()));
1521 }
1522
1531 public BitVecExpr mkExtract(int high, int low, Expr<BitVecSort> t)
1532
1533 {
1534 checkContextMatch(t);
1535 return new BitVecExpr(this, Native.mkExtract(nCtx(), high, low,
1536 t.getNativeObject()));
1537 }
1538
1547 {
1548 checkContextMatch(t);
1549 return new BitVecExpr(this, Native.mkSignExt(nCtx(), i,
1550 t.getNativeObject()));
1551 }
1552
1561 {
1562 checkContextMatch(t);
1563 return new BitVecExpr(this, Native.mkZeroExt(nCtx(), i,
1564 t.getNativeObject()));
1565 }
1566
1573 {
1574 checkContextMatch(t);
1575 return new BitVecExpr(this, Native.mkRepeat(nCtx(), i,
1576 t.getNativeObject()));
1577 }
1578
1591 {
1592 checkContextMatch(t1);
1593 checkContextMatch(t2);
1594 return new BitVecExpr(this, Native.mkBvshl(nCtx(),
1595 t1.getNativeObject(), t2.getNativeObject()));
1596 }
1597
1610 {
1611 checkContextMatch(t1);
1612 checkContextMatch(t2);
1613 return new BitVecExpr(this, Native.mkBvlshr(nCtx(),
1614 t1.getNativeObject(), t2.getNativeObject()));
1615 }
1616
1630 {
1631 checkContextMatch(t1);
1632 checkContextMatch(t2);
1633 return new BitVecExpr(this, Native.mkBvashr(nCtx(),
1634 t1.getNativeObject(), t2.getNativeObject()));
1635 }
1636
1643 {
1644 checkContextMatch(t);
1645 return new BitVecExpr(this, Native.mkRotateLeft(nCtx(), i,
1646 t.getNativeObject()));
1647 }
1648
1655 {
1656 checkContextMatch(t);
1657 return new BitVecExpr(this, Native.mkRotateRight(nCtx(), i,
1658 t.getNativeObject()));
1659 }
1660
1668
1669 {
1670 checkContextMatch(t1);
1671 checkContextMatch(t2);
1672 return new BitVecExpr(this, Native.mkExtRotateLeft(nCtx(),
1673 t1.getNativeObject(), t2.getNativeObject()));
1674 }
1675
1683
1684 {
1685 checkContextMatch(t1);
1686 checkContextMatch(t2);
1687 return new BitVecExpr(this, Native.mkExtRotateRight(nCtx(),
1688 t1.getNativeObject(), t2.getNativeObject()));
1689 }
1690
1701 {
1702 checkContextMatch(t);
1703 return new BitVecExpr(this, Native.mkInt2bv(nCtx(), n,
1704 t.getNativeObject()));
1705 }
1706
1721 public IntExpr mkBV2Int(Expr<BitVecSort> t, boolean signed)
1722 {
1723 checkContextMatch(t);
1724 return new IntExpr(this, Native.mkBv2int(nCtx(), t.getNativeObject(),
1725 (signed)));
1726 }
1727
1734 boolean isSigned)
1735 {
1736 checkContextMatch(t1);
1737 checkContextMatch(t2);
1738 return new BoolExpr(this, Native.mkBvaddNoOverflow(nCtx(), t1
1739 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1740 }
1741
1748
1749 {
1750 checkContextMatch(t1);
1751 checkContextMatch(t2);
1752 return new BoolExpr(this, Native.mkBvaddNoUnderflow(nCtx(),
1753 t1.getNativeObject(), t2.getNativeObject()));
1754 }
1755
1762
1763 {
1764 checkContextMatch(t1);
1765 checkContextMatch(t2);
1766 return new BoolExpr(this, Native.mkBvsubNoOverflow(nCtx(),
1767 t1.getNativeObject(), t2.getNativeObject()));
1768 }
1769
1776 boolean isSigned)
1777 {
1778 checkContextMatch(t1);
1779 checkContextMatch(t2);
1780 return new BoolExpr(this, Native.mkBvsubNoUnderflow(nCtx(), t1
1781 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1782 }
1783
1790
1791 {
1792 checkContextMatch(t1);
1793 checkContextMatch(t2);
1794 return new BoolExpr(this, Native.mkBvsdivNoOverflow(nCtx(),
1795 t1.getNativeObject(), t2.getNativeObject()));
1796 }
1797
1804 {
1805 checkContextMatch(t);
1806 return new BoolExpr(this, Native.mkBvnegNoOverflow(nCtx(),
1807 t.getNativeObject()));
1808 }
1809
1816 boolean isSigned)
1817 {
1818 checkContextMatch(t1);
1819 checkContextMatch(t2);
1820 return new BoolExpr(this, Native.mkBvmulNoOverflow(nCtx(), t1
1821 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1822 }
1823
1830
1831 {
1832 checkContextMatch(t1);
1833 checkContextMatch(t2);
1834 return new BoolExpr(this, Native.mkBvmulNoUnderflow(nCtx(),
1835 t1.getNativeObject(), t2.getNativeObject()));
1836 }
1837
1841 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(Symbol name, D domain, R range)
1842
1843 {
1844 return (ArrayExpr<D, R>) mkConst(name, mkArraySort(domain, range));
1845 }
1846
1850 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(String name, D domain, R range)
1851
1852 {
1853 return (ArrayExpr<D, R>) mkConst(mkSymbol(name), mkArraySort(domain, range));
1854 }
1855
1868 public final <D extends Sort, R extends Sort> Expr<R> mkSelect(Expr<ArraySort<D, R>> a, Expr<D> i)
1869 {
1870 checkContextMatch(a);
1871 checkContextMatch(i);
1872 return (Expr<R>) Expr.create(
1873 this,
1874 Native.mkSelect(nCtx(), a.getNativeObject(),
1875 i.getNativeObject()));
1876 }
1877
1890 public final <R extends Sort> Expr<R> mkSelect(Expr<ArraySort<Sort, R>> a, Expr<?>[] args)
1891 {
1892 checkContextMatch(a);
1893 checkContextMatch(args);
1894 return (Expr<R>) Expr.create(
1895 this,
1896 Native.mkSelectN(nCtx(), a.getNativeObject(), args.length, AST.arrayToNative(args)));
1897 }
1898
1915 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkStore(Expr<ArraySort<D, R>> a, Expr<D> i, Expr<R> v)
1916 {
1917 checkContextMatch(a);
1918 checkContextMatch(i);
1919 checkContextMatch(v);
1920 return new ArrayExpr<>(this, Native.mkStore(nCtx(), a.getNativeObject(),
1921 i.getNativeObject(), v.getNativeObject()));
1922 }
1923
1940 public final <R extends Sort> ArrayExpr<Sort, R> mkStore(Expr<ArraySort<Sort, R>> a, Expr<?>[] args, Expr<R> v)
1941 {
1942 checkContextMatch(a);
1943 checkContextMatch(args);
1944 checkContextMatch(v);
1945 return new ArrayExpr<>(this, Native.mkStoreN(nCtx(), a.getNativeObject(),
1946 args.length, AST.arrayToNative(args), v.getNativeObject()));
1947 }
1948
1958 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkConstArray(D domain, Expr<R> v)
1959 {
1960 checkContextMatch(domain);
1961 checkContextMatch(v);
1962 return new ArrayExpr<>(this, Native.mkConstArray(nCtx(),
1963 domain.getNativeObject(), v.getNativeObject()));
1964 }
1965
1979 @SafeVarargs
1980 public final <D extends Sort, R1 extends Sort, R2 extends Sort> ArrayExpr<D, R2> mkMap(FuncDecl<R2> f, Expr<ArraySort<D, R1>>... args)
1981 {
1982 checkContextMatch(f);
1983 checkContextMatch(args);
1984 return (ArrayExpr<D, R2>) Expr.create(this, Native.mkMap(nCtx(),
1985 f.getNativeObject(), AST.arrayLength(args),
1986 AST.arrayToNative(args)));
1987 }
1988
1995 public final <D extends Sort, R extends Sort> Expr<R> mkTermArray(Expr<ArraySort<D, R>> array)
1996 {
1997 checkContextMatch(array);
1998 return (Expr<R>) Expr.create(this,
1999 Native.mkArrayDefault(nCtx(), array.getNativeObject()));
2000 }
2001
2005 public final <D extends Sort, R extends Sort> Expr<D> mkArrayExt(Expr<ArraySort<D, R>> arg1, Expr<ArraySort<D, R>> arg2)
2006 {
2007 checkContextMatch(arg1);
2008 checkContextMatch(arg2);
2009 return (Expr<D>) Expr.create(this, Native.mkArrayExt(nCtx(), arg1.getNativeObject(), arg2.getNativeObject()));
2010 }
2011
2012
2016 public final <D extends Sort> SetSort<D> mkSetSort(D ty)
2017 {
2018 checkContextMatch(ty);
2019 return new SetSort<>(this, ty);
2020 }
2021
2025 public final <D extends Sort> ArrayExpr<D, BoolSort> mkEmptySet(D domain)
2026 {
2027 checkContextMatch(domain);
2028 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2029 Native.mkEmptySet(nCtx(), domain.getNativeObject()));
2030 }
2031
2035 public final <D extends Sort> ArrayExpr<D, BoolSort> mkFullSet(D domain)
2036 {
2037 checkContextMatch(domain);
2038 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2039 Native.mkFullSet(nCtx(), domain.getNativeObject()));
2040 }
2041
2045 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetAdd(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2046 {
2047 checkContextMatch(set);
2048 checkContextMatch(element);
2049 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2050 Native.mkSetAdd(nCtx(), set.getNativeObject(),
2051 element.getNativeObject()));
2052 }
2053
2057 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetDel(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2058 {
2059 checkContextMatch(set);
2060 checkContextMatch(element);
2061 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2062 Native.mkSetDel(nCtx(), set.getNativeObject(),
2063 element.getNativeObject()));
2064 }
2065
2069 @SafeVarargs
2070 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetUnion(Expr<ArraySort<D, BoolSort>>... args)
2071 {
2072 checkContextMatch(args);
2073 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2074 Native.mkSetUnion(nCtx(), args.length,
2075 AST.arrayToNative(args)));
2076 }
2077
2081 @SafeVarargs
2083 {
2084 checkContextMatch(args);
2085 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2086 Native.mkSetIntersect(nCtx(), args.length,
2087 AST.arrayToNative(args)));
2088 }
2089
2094 {
2095 checkContextMatch(arg1);
2096 checkContextMatch(arg2);
2097 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2098 Native.mkSetDifference(nCtx(), arg1.getNativeObject(),
2099 arg2.getNativeObject()));
2100 }
2101
2106 {
2107 checkContextMatch(arg);
2108 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2109 Native.mkSetComplement(nCtx(), arg.getNativeObject()));
2110 }
2111
2115 public final <D extends Sort> BoolExpr mkSetMembership(Expr<D> elem, Expr<ArraySort<D, BoolSort>> set)
2116 {
2117 checkContextMatch(elem);
2118 checkContextMatch(set);
2119 return (BoolExpr) Expr.create(this,
2120 Native.mkSetMember(nCtx(), elem.getNativeObject(),
2121 set.getNativeObject()));
2122 }
2123
2128 {
2129 checkContextMatch(arg1);
2130 checkContextMatch(arg2);
2131 return (BoolExpr) Expr.create(this,
2132 Native.mkSetSubset(nCtx(), arg1.getNativeObject(),
2133 arg2.getNativeObject()));
2134 }
2135
2136
2144 public final <R extends Sort> SeqExpr<R> mkEmptySeq(R s)
2145 {
2146 checkContextMatch(s);
2147 return (SeqExpr<R>) Expr.create(this, Native.mkSeqEmpty(nCtx(), s.getNativeObject()));
2148 }
2149
2153 public final <R extends Sort> SeqExpr<R> mkUnit(Expr<R> elem)
2154 {
2155 checkContextMatch(elem);
2156 return (SeqExpr<R>) Expr.create(this, Native.mkSeqUnit(nCtx(), elem.getNativeObject()));
2157 }
2158
2163 {
2164 StringBuilder buf = new StringBuilder();
2165 for (int i = 0; i < s.length(); i += Character.charCount(s.codePointAt(i))) {
2166 int code = s.codePointAt(i);
2167 if (code <= 32 || 127 < code)
2168 buf.append(String.format("\\u{%x}", code));
2169 else
2170 buf.append(s.charAt(i));
2171 }
2172 return (SeqExpr<CharSort>) Expr.create(this, Native.mkString(nCtx(), buf.toString()));
2173 }
2174
2179 {
2180 return (SeqExpr<CharSort>) Expr.create(this, Native.mkIntToStr(nCtx(), e.getNativeObject()));
2181 }
2182
2187 {
2188 return (SeqExpr<CharSort>) Expr.create(this, Native.mkUbvToStr(nCtx(), e.getNativeObject()));
2189 }
2190
2195 {
2196 return (SeqExpr<CharSort>) Expr.create(this, Native.mkSbvToStr(nCtx(), e.getNativeObject()));
2197 }
2198
2203 {
2204 return (IntExpr) Expr.create(this, Native.mkStrToInt(nCtx(), e.getNativeObject()));
2205 }
2206
2210 @SafeVarargs
2211 public final <R extends Sort> SeqExpr<R> mkConcat(Expr<SeqSort<R>>... t)
2212 {
2213 checkContextMatch(t);
2214 return (SeqExpr<R>) Expr.create(this, Native.mkSeqConcat(nCtx(), t.length, AST.arrayToNative(t)));
2215 }
2216
2217
2221 public final <R extends Sort> IntExpr mkLength(Expr<SeqSort<R>> s)
2222 {
2223 checkContextMatch(s);
2224 return (IntExpr) Expr.create(this, Native.mkSeqLength(nCtx(), s.getNativeObject()));
2225 }
2226
2230 public final <R extends Sort> BoolExpr mkPrefixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2231 {
2232 checkContextMatch(s1, s2);
2233 return (BoolExpr) Expr.create(this, Native.mkSeqPrefix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2234 }
2235
2239 public final <R extends Sort> BoolExpr mkSuffixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2240 {
2241 checkContextMatch(s1, s2);
2242 return (BoolExpr)Expr.create(this, Native.mkSeqSuffix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2243 }
2244
2248 public final <R extends Sort> BoolExpr mkContains(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2249 {
2250 checkContextMatch(s1, s2);
2251 return (BoolExpr) Expr.create(this, Native.mkSeqContains(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2252 }
2253
2259 {
2260 checkContextMatch(s1, s2);
2261 return new BoolExpr(this, Native.mkStrLt(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2262 }
2263
2268 {
2269 checkContextMatch(s1, s2);
2270 return new BoolExpr(this, Native.mkStrLe(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2271 }
2272
2273
2277 public final <R extends Sort> SeqExpr<R> mkAt(Expr<SeqSort<R>> s, Expr<IntSort> index)
2278 {
2279 checkContextMatch(s, index);
2280 return (SeqExpr<R>) Expr.create(this, Native.mkSeqAt(nCtx(), s.getNativeObject(), index.getNativeObject()));
2281 }
2282
2286 public final <R extends Sort> Expr<R> mkNth(Expr<SeqSort<R>> s, Expr<IntSort> index)
2287 {
2288 checkContextMatch(s, index);
2289 return (Expr<R>) Expr.create(this, Native.mkSeqNth(nCtx(), s.getNativeObject(), index.getNativeObject()));
2290 }
2291
2292
2296 public final <R extends Sort> SeqExpr<R> mkExtract(Expr<SeqSort<R>> s, Expr<IntSort> offset, Expr<IntSort> length)
2297 {
2298 checkContextMatch(s, offset, length);
2299 return (SeqExpr<R>) Expr.create(this, Native.mkSeqExtract(nCtx(), s.getNativeObject(), offset.getNativeObject(), length.getNativeObject()));
2300 }
2301
2305 public final <R extends Sort> IntExpr mkIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr, Expr<IntSort> offset)
2306 {
2307 checkContextMatch(s, substr, offset);
2308 return (IntExpr)Expr.create(this, Native.mkSeqIndex(nCtx(), s.getNativeObject(), substr.getNativeObject(), offset.getNativeObject()));
2309 }
2310
2314 public final <R extends Sort> IntExpr mkLastIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr)
2315 {
2316 checkContextMatch(s, substr);
2317 return (IntExpr)Expr.create(this, Native.mkSeqLastIndex(nCtx(), s.getNativeObject(), substr.getNativeObject()));
2318 }
2319
2324 public final <R extends Sort> SeqExpr<R> mkSeqMap(Expr<?> f, Expr<SeqSort<R>> s)
2325 {
2326 checkContextMatch(f, s);
2327 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMap(nCtx(), f.getNativeObject(), s.getNativeObject()));
2328 }
2329
2334 public final <R extends Sort> SeqExpr<R> mkSeqMapi(Expr<?> f, Expr<IntSort> i, Expr<SeqSort<R>> s)
2335 {
2336 checkContextMatch(f, i, s);
2337 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMapi(nCtx(), f.getNativeObject(), i.getNativeObject(), s.getNativeObject()));
2338 }
2339
2344 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldl(Expr<?> f, Expr<A> a, Expr<SeqSort<R>> s)
2345 {
2346 checkContextMatch(f, a, s);
2347 return (Expr<A>) Expr.create(this, Native.mkSeqFoldl(nCtx(), f.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2348 }
2349
2354 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldli(Expr<?> f, Expr<IntSort> i, Expr<A> a, Expr<SeqSort<R>> s)
2355 {
2356 checkContextMatch(f, i, a, s);
2357 return (Expr<A>) Expr.create(this, Native.mkSeqFoldli(nCtx(), f.getNativeObject(), i.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2358 }
2359
2363 public final <R extends Sort> SeqExpr<R> mkReplace(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2364 {
2365 checkContextMatch(s, src, dst);
2366 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplace(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2367 }
2368
2372 public final <R extends Sort> SeqExpr<R> mkReplaceAll(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2373 {
2374 checkContextMatch(s, src, dst);
2375 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceAll(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2376 }
2377
2381 public final <R extends Sort> SeqExpr<R> mkReplaceRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2382 {
2383 checkContextMatch(s, re, dst);
2384 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceRe(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2385 }
2386
2390 public final <R extends Sort> SeqExpr<R> mkReplaceReAll(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2391 {
2392 checkContextMatch(s, re, dst);
2393 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceReAll(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2394 }
2395
2399 public final <R extends Sort> ReExpr<SeqSort<R>> mkToRe(Expr<SeqSort<R>> s)
2400 {
2401 checkContextMatch(s);
2402 return (ReExpr<SeqSort<R>>) Expr.create(this, Native.mkSeqToRe(nCtx(), s.getNativeObject()));
2403 }
2404
2405
2409 public final <R extends Sort> BoolExpr mkInRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re)
2410 {
2411 checkContextMatch(s, re);
2412 return (BoolExpr) Expr.create(this, Native.mkSeqInRe(nCtx(), s.getNativeObject(), re.getNativeObject()));
2413 }
2414
2418 public final <R extends Sort> ReExpr<R> mkStar(Expr<ReSort<R>> re)
2419 {
2420 checkContextMatch(re);
2421 return (ReExpr<R>) Expr.create(this, Native.mkReStar(nCtx(), re.getNativeObject()));
2422 }
2423
2427 public final <R extends Sort> ReExpr<R> mkPower(Expr<ReSort<R>> re, int n)
2428 {
2429 return (ReExpr<R>) Expr.create(this, Native.mkRePower(nCtx(), re.getNativeObject(), n));
2430 }
2431
2435 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo, int hi)
2436 {
2437 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, hi));
2438 }
2439
2443 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo)
2444 {
2445 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, 0));
2446 }
2447
2448
2452 public final <R extends Sort> ReExpr<R> mkPlus(Expr<ReSort<R>> re)
2453 {
2454 checkContextMatch(re);
2455 return (ReExpr<R>) Expr.create(this, Native.mkRePlus(nCtx(), re.getNativeObject()));
2456 }
2457
2461 public final <R extends Sort> ReExpr<R> mkOption(Expr<ReSort<R>> re)
2462 {
2463 checkContextMatch(re);
2464 return (ReExpr<R>) Expr.create(this, Native.mkReOption(nCtx(), re.getNativeObject()));
2465 }
2466
2470 public final <R extends Sort> ReExpr<R> mkComplement(Expr<ReSort<R>> re)
2471 {
2472 checkContextMatch(re);
2473 return (ReExpr<R>) Expr.create(this, Native.mkReComplement(nCtx(), re.getNativeObject()));
2474 }
2475
2479 @SafeVarargs
2480 public final <R extends Sort> ReExpr<R> mkConcat(ReExpr<R>... t)
2481 {
2482 checkContextMatch(t);
2483 return (ReExpr<R>) Expr.create(this, Native.mkReConcat(nCtx(), t.length, AST.arrayToNative(t)));
2484 }
2485
2489 @SafeVarargs
2490 public final <R extends Sort> ReExpr<R> mkUnion(Expr<ReSort<R>>... t)
2491 {
2492 checkContextMatch(t);
2493 return (ReExpr<R>) Expr.create(this, Native.mkReUnion(nCtx(), t.length, AST.arrayToNative(t)));
2494 }
2495
2499 @SafeVarargs
2500 public final <R extends Sort> ReExpr<R> mkIntersect(Expr<ReSort<R>>... t)
2501 {
2502 checkContextMatch(t);
2503 return (ReExpr<R>) Expr.create(this, Native.mkReIntersect(nCtx(), t.length, AST.arrayToNative(t)));
2504 }
2505
2509 public final <R extends Sort> ReExpr<R> mkDiff(Expr<ReSort<R>> a, Expr<ReSort<R>> b)
2510 {
2511 checkContextMatch(a, b);
2512 return (ReExpr<R>) Expr.create(this, Native.mkReDiff(nCtx(), a.getNativeObject(), b.getNativeObject()));
2513 }
2514
2515
2520 public final <R extends Sort> ReExpr<R> mkEmptyRe(ReSort<R> s)
2521 {
2522 return (ReExpr<R>) Expr.create(this, Native.mkReEmpty(nCtx(), s.getNativeObject()));
2523 }
2524
2529 public final <R extends Sort> ReExpr<R> mkFullRe(ReSort<R> s)
2530 {
2531 return (ReExpr<R>) Expr.create(this, Native.mkReFull(nCtx(), s.getNativeObject()));
2532 }
2533
2539 public final <R extends Sort> ReExpr<R> mkAllcharRe(ReSort<R> s)
2540 {
2541 return (ReExpr<R>) Expr.create(this, Native.mkReAllchar(nCtx(), s.getNativeObject()));
2542 }
2543
2548 {
2549 checkContextMatch(lo, hi);
2550 return (ReExpr<SeqSort<CharSort>>) Expr.create(this, Native.mkReRange(nCtx(), lo.getNativeObject(), hi.getNativeObject()));
2551 }
2552
2557 {
2558 checkContextMatch(ch1, ch2);
2559 return (BoolExpr) Expr.create(this, Native.mkCharLe(nCtx(), ch1.getNativeObject(), ch2.getNativeObject()));
2560 }
2561
2566 {
2567 checkContextMatch(ch);
2568 return (IntExpr) Expr.create(this, Native.mkCharToInt(nCtx(), ch.getNativeObject()));
2569 }
2570
2575 {
2576 checkContextMatch(ch);
2577 return (BitVecExpr) Expr.create(this, Native.mkCharToBv(nCtx(), ch.getNativeObject()));
2578 }
2579
2584 {
2585 checkContextMatch(bv);
2586 return (Expr<CharSort>) Expr.create(this, Native.mkCharFromBv(nCtx(), bv.getNativeObject()));
2587 }
2588
2593 {
2594 checkContextMatch(ch);
2595 return (BoolExpr) Expr.create(this, Native.mkCharIsDigit(nCtx(), ch.getNativeObject()));
2596 }
2597
2601 public BoolExpr mkAtMost(Expr<BoolSort>[] args, int k)
2602 {
2603 checkContextMatch(args);
2604 return (BoolExpr) Expr.create(this, Native.mkAtmost(nCtx(), args.length, AST.arrayToNative(args), k));
2605 }
2606
2610 public BoolExpr mkAtLeast(Expr<BoolSort>[] args, int k)
2611 {
2612 checkContextMatch(args);
2613 return (BoolExpr) Expr.create(this, Native.mkAtleast(nCtx(), args.length, AST.arrayToNative(args), k));
2614 }
2615
2619 public BoolExpr mkPBLe(int[] coeffs, Expr<BoolSort>[] args, int k)
2620 {
2621 checkContextMatch(args);
2622 return (BoolExpr) Expr.create(this, Native.mkPble(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2623 }
2624
2628 public BoolExpr mkPBGe(int[] coeffs, Expr<BoolSort>[] args, int k)
2629 {
2630 checkContextMatch(args);
2631 return (BoolExpr) Expr.create(this, Native.mkPbge(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2632 }
2633
2637 public BoolExpr mkPBEq(int[] coeffs, Expr<BoolSort>[] args, int k)
2638 {
2639 checkContextMatch(args);
2640 return (BoolExpr) Expr.create(this, Native.mkPbeq(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2641 }
2642
2654 public final <R extends Sort> Expr<R> mkNumeral(String v, R ty)
2655 {
2656 checkContextMatch(ty);
2657 return (Expr<R>) Expr.create(this,
2658 Native.mkNumeral(nCtx(), v, ty.getNativeObject()));
2659 }
2660
2671 public final <R extends Sort> Expr<R> mkNumeral(int v, R ty)
2672 {
2673 checkContextMatch(ty);
2674 return (Expr<R>) Expr.create(this, Native.mkInt(nCtx(), v, ty.getNativeObject()));
2675 }
2676
2687 public final <R extends Sort> Expr<R> mkNumeral(long v, R ty)
2688 {
2689 checkContextMatch(ty);
2690 return (Expr<R>) Expr.create(this,
2691 Native.mkInt64(nCtx(), v, ty.getNativeObject()));
2692 }
2693
2703 public RatNum mkReal(int num, int den)
2704 {
2705 if (den == 0) {
2706 throw new Z3Exception("Denominator is zero");
2707 }
2708
2709 return new RatNum(this, Native.mkReal(nCtx(), num, den));
2710 }
2711
2718 public RatNum mkReal(String v)
2719 {
2720
2721 return new RatNum(this, Native.mkNumeral(nCtx(), v, getRealSort()
2722 .getNativeObject()));
2723 }
2724
2731 public RatNum mkReal(int v)
2732 {
2733
2734 return new RatNum(this, Native.mkInt(nCtx(), v, getRealSort()
2735 .getNativeObject()));
2736 }
2737
2744 public RatNum mkReal(long v)
2745 {
2746
2747 return new RatNum(this, Native.mkInt64(nCtx(), v, getRealSort()
2748 .getNativeObject()));
2749 }
2750
2755 public IntNum mkInt(String v)
2756 {
2757
2758 return new IntNum(this, Native.mkNumeral(nCtx(), v, getIntSort()
2759 .getNativeObject()));
2760 }
2761
2768 public IntNum mkInt(int v)
2769 {
2770
2771 return new IntNum(this, Native.mkInt(nCtx(), v, getIntSort()
2772 .getNativeObject()));
2773 }
2774
2781 public IntNum mkInt(long v)
2782 {
2783
2784 return new IntNum(this, Native.mkInt64(nCtx(), v, getIntSort()
2785 .getNativeObject()));
2786 }
2787
2793 public BitVecNum mkBV(String v, int size)
2794 {
2795 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2796 }
2797
2803 public BitVecNum mkBV(int v, int size)
2804 {
2805 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2806 }
2807
2813 public BitVecNum mkBV(long v, int size)
2814 {
2815 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2816 }
2817
2843 public Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
2844 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
2845 Symbol quantifierID, Symbol skolemID)
2846 {
2847 return Quantifier.of(this, true, sorts, names, body, weight, patterns,
2848 noPatterns, quantifierID, skolemID);
2849 }
2850
2855 public Quantifier mkForall(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
2856 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
2857 Symbol skolemID)
2858 {
2859
2860 return Quantifier.of(this, true, boundConstants, body, weight,
2861 patterns, noPatterns, quantifierID, skolemID);
2862 }
2863
2868 public Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
2869 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
2870 Symbol quantifierID, Symbol skolemID)
2871 {
2872
2873 return Quantifier.of(this, false, sorts, names, body, weight,
2874 patterns, noPatterns, quantifierID, skolemID);
2875 }
2876
2881 public Quantifier mkExists(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
2882 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
2883 Symbol skolemID)
2884 {
2885
2886 return Quantifier.of(this, false, boundConstants, body, weight,
2887 patterns, noPatterns, quantifierID, skolemID);
2888 }
2889
2894 public Quantifier mkQuantifier(boolean universal, Sort[] sorts,
2895 Symbol[] names, Expr<BoolSort> body, int weight, Pattern[] patterns,
2896 Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
2897
2898 {
2899
2900 if (universal)
2901 return mkForall(sorts, names, body, weight, patterns, noPatterns,
2902 quantifierID, skolemID);
2903 else
2904 return mkExists(sorts, names, body, weight, patterns, noPatterns,
2905 quantifierID, skolemID);
2906 }
2907
2912 public Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants,
2913 Expr<BoolSort> body, int weight, Pattern[] patterns, Expr<?>[] noPatterns,
2914 Symbol quantifierID, Symbol skolemID)
2915 {
2916
2917 if (universal)
2918 return mkForall(boundConstants, body, weight, patterns, noPatterns,
2919 quantifierID, skolemID);
2920 else
2921 return mkExists(boundConstants, body, weight, patterns, noPatterns,
2922 quantifierID, skolemID);
2923 }
2924
2942 public final <R extends Sort> Lambda<R> mkLambda(Sort[] sorts, Symbol[] names, Expr<R> body)
2943 {
2944 return Lambda.of(this, sorts, names, body);
2945 }
2946
2953 public final <R extends Sort> Lambda<R> mkLambda(Expr<?>[] boundConstants, Expr<R> body)
2954 {
2955 return Lambda.of(this, boundConstants, body);
2956 }
2957
2958
2974 {
2975 Native.setAstPrintMode(nCtx(), value.toInt());
2976 }
2977
2991 public String benchmarkToSMTString(String name, String logic,
2992 String status, String attributes, Expr<BoolSort>[] assumptions,
2993 Expr<BoolSort> formula)
2994 {
2995
2996 return Native.benchmarkToSmtlibString(nCtx(), name, logic, status,
2997 attributes, assumptions.length,
2998 AST.arrayToNative(assumptions), formula.getNativeObject());
2999 }
3000
3010 public BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames,
3011 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3012 {
3013 int csn = Symbol.arrayLength(sortNames);
3014 int cs = Sort.arrayLength(sorts);
3015 int cdn = Symbol.arrayLength(declNames);
3016 int cd = AST.arrayLength(decls);
3017 if (csn != cs || cdn != cd) {
3018 throw new Z3Exception("Argument size mismatch");
3019 }
3020 ASTVector v = new ASTVector(this, Native.parseSmtlib2String(nCtx(),
3021 str, AST.arrayLength(sorts), Symbol.arrayToNative(sortNames),
3022 AST.arrayToNative(sorts), AST.arrayLength(decls),
3023 Symbol.arrayToNative(declNames), AST.arrayToNative(decls)));
3024 return v.ToBoolExprArray();
3025 }
3026
3031 public BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames,
3032 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3033 {
3034 int csn = Symbol.arrayLength(sortNames);
3035 int cs = Sort.arrayLength(sorts);
3036 int cdn = Symbol.arrayLength(declNames);
3037 int cd = AST.arrayLength(decls);
3038 if (csn != cs || cdn != cd)
3039 throw new Z3Exception("Argument size mismatch");
3040 ASTVector v = new ASTVector(this, Native.parseSmtlib2File(nCtx(),
3041 fileName, AST.arrayLength(sorts),
3042 Symbol.arrayToNative(sortNames), AST.arrayToNative(sorts),
3043 AST.arrayLength(decls), Symbol.arrayToNative(declNames),
3044 AST.arrayToNative(decls)));
3045 return v.ToBoolExprArray();
3046 }
3047
3058 public Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
3059 {
3060 return new Goal(this, models, unsatCores, proofs);
3061 }
3062
3067 {
3068 return new Params(this);
3069 }
3070
3074 public int getNumTactics()
3075 {
3076 return Native.getNumTactics(nCtx());
3077 }
3078
3082 public String[] getTacticNames()
3083 {
3084
3085 int n = getNumTactics();
3086 String[] res = new String[n];
3087 for (int i = 0; i < n; i++)
3088 res[i] = Native.getTacticName(nCtx(), i);
3089 return res;
3090 }
3091
3096 public String getTacticDescription(String name)
3097 {
3098 return Native.tacticGetDescr(nCtx(), name);
3099 }
3100
3104 public Tactic mkTactic(String name)
3105 {
3106 return new Tactic(this, name);
3107 }
3108
3113 public Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
3114
3115 {
3116 checkContextMatch(t1);
3117 checkContextMatch(t2);
3118 checkContextMatch(ts);
3119
3120 long last = 0;
3121 if (ts != null && ts.length > 0)
3122 {
3123 last = ts[ts.length - 1].getNativeObject();
3124 for (int i = ts.length - 2; i >= 0; i--) {
3125 last = Native.tacticAndThen(nCtx(), ts[i].getNativeObject(),
3126 last);
3127 }
3128 }
3129 if (last != 0)
3130 {
3131 last = Native.tacticAndThen(nCtx(), t2.getNativeObject(), last);
3132 return new Tactic(this, Native.tacticAndThen(nCtx(),
3133 t1.getNativeObject(), last));
3134 } else
3135 return new Tactic(this, Native.tacticAndThen(nCtx(),
3136 t1.getNativeObject(), t2.getNativeObject()));
3137 }
3138
3145 public Tactic then(Tactic t1, Tactic t2, Tactic... ts)
3146 {
3147 return andThen(t1, t2, ts);
3148 }
3149
3156 {
3157 checkContextMatch(t1);
3158 checkContextMatch(t2);
3159 return new Tactic(this, Native.tacticOrElse(nCtx(),
3160 t1.getNativeObject(), t2.getNativeObject()));
3161 }
3162
3169 public Tactic tryFor(Tactic t, int ms)
3170 {
3171 checkContextMatch(t);
3172 return new Tactic(this, Native.tacticTryFor(nCtx(),
3173 t.getNativeObject(), ms));
3174 }
3175
3183 {
3184 checkContextMatch(t);
3185 checkContextMatch(p);
3186 return new Tactic(this, Native.tacticWhen(nCtx(), p.getNativeObject(),
3187 t.getNativeObject()));
3188 }
3189
3195 public Tactic cond(Probe p, Tactic t1, Tactic t2)
3196 {
3197 checkContextMatch(p);
3198 checkContextMatch(t1);
3199 checkContextMatch(t2);
3200 return new Tactic(this, Native.tacticCond(nCtx(), p.getNativeObject(),
3201 t1.getNativeObject(), t2.getNativeObject()));
3202 }
3203
3208 public Tactic repeat(Tactic t, int max)
3209 {
3210 checkContextMatch(t);
3211 return new Tactic(this, Native.tacticRepeat(nCtx(),
3212 t.getNativeObject(), max));
3213 }
3214
3218 public Tactic skip()
3219 {
3220 return new Tactic(this, Native.tacticSkip(nCtx()));
3221 }
3222
3226 public Tactic fail()
3227 {
3228 return new Tactic(this, Native.tacticFail(nCtx()));
3229 }
3230
3236 {
3237 checkContextMatch(p);
3238 return new Tactic(this,
3239 Native.tacticFailIf(nCtx(), p.getNativeObject()));
3240 }
3241
3247 {
3248 return new Tactic(this, Native.tacticFailIfNotDecided(nCtx()));
3249 }
3250
3256 {
3257 checkContextMatch(t);
3258 checkContextMatch(p);
3259 return new Tactic(this, Native.tacticUsingParams(nCtx(),
3260 t.getNativeObject(), p.getNativeObject()));
3261 }
3262
3270 {
3271 return usingParams(t, p);
3272 }
3273
3277 public Tactic parOr(Tactic... t)
3278 {
3279 checkContextMatch(t);
3280 return new Tactic(this, Native.tacticParOr(nCtx(),
3282 }
3283
3289 {
3290 checkContextMatch(t1);
3291 checkContextMatch(t2);
3292 return new Tactic(this, Native.tacticParAndThen(nCtx(),
3293 t1.getNativeObject(), t2.getNativeObject()));
3294 }
3295
3301 public void interrupt()
3302 {
3303 Native.interrupt(nCtx());
3304 }
3305
3310 {
3311 return Native.getNumSimplifiers(nCtx());
3312 }
3313
3317 public String[] getSimplifierNames()
3318 {
3319
3320 int n = getNumSimplifiers();
3321 String[] res = new String[n];
3322 for (int i = 0; i < n; i++)
3323 res[i] = Native.getSimplifierName(nCtx(), i);
3324 return res;
3325 }
3326
3331 public String getSimplifierDescription(String name)
3332 {
3333 return Native.simplifierGetDescr(nCtx(), name);
3334 }
3335
3339 public Simplifier mkSimplifier(String name)
3340 {
3341 return new Simplifier(this, name);
3342 }
3343
3348
3349 {
3350 checkContextMatch(t1);
3351 checkContextMatch(t2);
3352 checkContextMatch(ts);
3353
3354 long last = 0;
3355 if (ts != null && ts.length > 0)
3356 {
3357 last = ts[ts.length - 1].getNativeObject();
3358 for (int i = ts.length - 2; i >= 0; i--) {
3359 last = Native.simplifierAndThen(nCtx(), ts[i].getNativeObject(),
3360 last);
3361 }
3362 }
3363 if (last != 0)
3364 {
3365 last = Native.simplifierAndThen(nCtx(), t2.getNativeObject(), last);
3366 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3367 t1.getNativeObject(), last));
3368 } else
3369 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3370 t1.getNativeObject(), t2.getNativeObject()));
3371 }
3372
3379 {
3380 return andThen(t1, t2, ts);
3381 }
3382
3388 {
3389 checkContextMatch(t);
3390 checkContextMatch(p);
3391 return new Simplifier(this, Native.simplifierUsingParams(nCtx(),
3392 t.getNativeObject(), p.getNativeObject()));
3393 }
3394
3402 {
3403 return usingParams(t, p);
3404 }
3405
3409 public int getNumProbes()
3410 {
3411 return Native.getNumProbes(nCtx());
3412 }
3413
3417 public String[] getProbeNames()
3418 {
3419
3420 int n = getNumProbes();
3421 String[] res = new String[n];
3422 for (int i = 0; i < n; i++)
3423 res[i] = Native.getProbeName(nCtx(), i);
3424 return res;
3425 }
3426
3431 public String getProbeDescription(String name)
3432 {
3433 return Native.probeGetDescr(nCtx(), name);
3434 }
3435
3439 public Probe mkProbe(String name)
3440 {
3441 return new Probe(this, name);
3442 }
3443
3447 public Probe constProbe(double val)
3448 {
3449 return new Probe(this, Native.probeConst(nCtx(), val));
3450 }
3451
3456 public Probe lt(Probe p1, Probe p2)
3457 {
3458 checkContextMatch(p1);
3459 checkContextMatch(p2);
3460 return new Probe(this, Native.probeLt(nCtx(), p1.getNativeObject(),
3461 p2.getNativeObject()));
3462 }
3463
3468 public Probe gt(Probe p1, Probe p2)
3469 {
3470 checkContextMatch(p1);
3471 checkContextMatch(p2);
3472 return new Probe(this, Native.probeGt(nCtx(), p1.getNativeObject(),
3473 p2.getNativeObject()));
3474 }
3475
3481 public Probe le(Probe p1, Probe p2)
3482 {
3483 checkContextMatch(p1);
3484 checkContextMatch(p2);
3485 return new Probe(this, Native.probeLe(nCtx(), p1.getNativeObject(),
3486 p2.getNativeObject()));
3487 }
3488
3494 public Probe ge(Probe p1, Probe p2)
3495 {
3496 checkContextMatch(p1);
3497 checkContextMatch(p2);
3498 return new Probe(this, Native.probeGe(nCtx(), p1.getNativeObject(),
3499 p2.getNativeObject()));
3500 }
3501
3506 public Probe eq(Probe p1, Probe p2)
3507 {
3508 checkContextMatch(p1);
3509 checkContextMatch(p2);
3510 return new Probe(this, Native.probeEq(nCtx(), p1.getNativeObject(),
3511 p2.getNativeObject()));
3512 }
3513
3517 public Probe and(Probe p1, Probe p2)
3518 {
3519 checkContextMatch(p1);
3520 checkContextMatch(p2);
3521 return new Probe(this, Native.probeAnd(nCtx(), p1.getNativeObject(),
3522 p2.getNativeObject()));
3523 }
3524
3528 public Probe or(Probe p1, Probe p2)
3529 {
3530 checkContextMatch(p1);
3531 checkContextMatch(p2);
3532 return new Probe(this, Native.probeOr(nCtx(), p1.getNativeObject(),
3533 p2.getNativeObject()));
3534 }
3535
3539 public Probe not(Probe p)
3540 {
3541 checkContextMatch(p);
3542 return new Probe(this, Native.probeNot(nCtx(), p.getNativeObject()));
3543 }
3544
3553 {
3554 return mkSolver((Symbol) null);
3555 }
3556
3564 public Solver mkSolver(Symbol logic)
3565 {
3566
3567 if (logic == null)
3568 return new Solver(this, Native.mkSolver(nCtx()));
3569 else
3570 return new Solver(this, Native.mkSolverForLogic(nCtx(),
3571 logic.getNativeObject()));
3572 }
3573
3578 public Solver mkSolver(String logic)
3579 {
3580 return mkSolver(mkSymbol(logic));
3581 }
3582
3587 {
3588 return new Solver(this, Native.mkSimpleSolver(nCtx()));
3589 }
3590
3598 {
3599
3600 return new Solver(this, Native.mkSolverFromTactic(nCtx(),
3601 t.getNativeObject()));
3602 }
3603
3608 {
3609 return new Solver(this, Native.solverAddSimplifier(nCtx(), s.getNativeObject(), simp.getNativeObject()));
3610 }
3611
3616 {
3617 return new Fixedpoint(this);
3618 }
3619
3624 {
3625 return new Optimize(this);
3626 }
3627
3628
3634 {
3635 return new FPRMSort(this);
3636 }
3637
3643 {
3644 return new FPRMExpr(this, Native.mkFpaRoundNearestTiesToEven(nCtx()));
3645 }
3646
3652 {
3653 return new FPRMNum(this, Native.mkFpaRne(nCtx()));
3654 }
3655
3661 {
3662 return new FPRMNum(this, Native.mkFpaRoundNearestTiesToAway(nCtx()));
3663 }
3664
3670 {
3671 return new FPRMNum(this, Native.mkFpaRna(nCtx()));
3672 }
3673
3679 {
3680 return new FPRMNum(this, Native.mkFpaRoundTowardPositive(nCtx()));
3681 }
3682
3688 {
3689 return new FPRMNum(this, Native.mkFpaRtp(nCtx()));
3690 }
3691
3697 {
3698 return new FPRMNum(this, Native.mkFpaRoundTowardNegative(nCtx()));
3699 }
3700
3706 {
3707 return new FPRMNum(this, Native.mkFpaRtn(nCtx()));
3708 }
3709
3715 {
3716 return new FPRMNum(this, Native.mkFpaRoundTowardZero(nCtx()));
3717 }
3718
3724 {
3725 return new FPRMNum(this, Native.mkFpaRtz(nCtx()));
3726 }
3727
3734 public FPSort mkFPSort(int ebits, int sbits)
3735 {
3736 return new FPSort(this, ebits, sbits);
3737 }
3738
3744 {
3745 return new FPSort(this, Native.mkFpaSortHalf(nCtx()));
3746 }
3747
3753 {
3754 return new FPSort(this, Native.mkFpaSort16(nCtx()));
3755 }
3756
3762 {
3763 return new FPSort(this, Native.mkFpaSortSingle(nCtx()));
3764 }
3765
3771 {
3772 return new FPSort(this, Native.mkFpaSort32(nCtx()));
3773 }
3774
3780 {
3781 return new FPSort(this, Native.mkFpaSortDouble(nCtx()));
3782 }
3783
3789 {
3790 return new FPSort(this, Native.mkFpaSort64(nCtx()));
3791 }
3792
3798 {
3799 return new FPSort(this, Native.mkFpaSortQuadruple(nCtx()));
3800 }
3801
3807 {
3808 return new FPSort(this, Native.mkFpaSort128(nCtx()));
3809 }
3810
3811
3818 {
3819 return new FPNum(this, Native.mkFpaNan(nCtx(), s.getNativeObject()));
3820 }
3821
3828 public FPNum mkFPInf(FPSort s, boolean negative)
3829 {
3830 return new FPNum(this, Native.mkFpaInf(nCtx(), s.getNativeObject(), negative));
3831 }
3832
3839 public FPNum mkFPZero(FPSort s, boolean negative)
3840 {
3841 return new FPNum(this, Native.mkFpaZero(nCtx(), s.getNativeObject(), negative));
3842 }
3843
3850 public FPNum mkFPNumeral(float v, FPSort s)
3851 {
3852 return new FPNum(this, Native.mkFpaNumeralFloat(nCtx(), v, s.getNativeObject()));
3853 }
3854
3861 public FPNum mkFPNumeral(double v, FPSort s)
3862 {
3863 return new FPNum(this, Native.mkFpaNumeralDouble(nCtx(), v, s.getNativeObject()));
3864 }
3865
3872 public FPNum mkFPNumeral(int v, FPSort s)
3873 {
3874 return new FPNum(this, Native.mkFpaNumeralInt(nCtx(), v, s.getNativeObject()));
3875 }
3876
3885 public FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
3886 {
3887 return new FPNum(this, Native.mkFpaNumeralIntUint(nCtx(), sgn, exp, sig, s.getNativeObject()));
3888 }
3889
3898 public FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
3899 {
3900 return new FPNum(this, Native.mkFpaNumeralInt64Uint64(nCtx(), sgn, exp, sig, s.getNativeObject()));
3901 }
3902
3909 public FPNum mkFP(float v, FPSort s)
3910 {
3911 return mkFPNumeral(v, s);
3912 }
3913
3920 public FPNum mkFP(double v, FPSort s)
3921 {
3922 return mkFPNumeral(v, s);
3923 }
3924
3932 public FPNum mkFP(int v, FPSort s)
3933 {
3934 return mkFPNumeral(v, s);
3935 }
3936
3945 public FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
3946 {
3947 return mkFPNumeral(sgn, exp, sig, s);
3948 }
3949
3958 public FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
3959 {
3960 return mkFPNumeral(sgn, exp, sig, s);
3961 }
3962
3963
3970 {
3971 return new FPExpr(this, Native.mkFpaAbs(nCtx(), t.getNativeObject()));
3972 }
3973
3980 {
3981 return new FPExpr(this, Native.mkFpaNeg(nCtx(), t.getNativeObject()));
3982 }
3983
3992 {
3993 return new FPExpr(this, Native.mkFpaAdd(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
3994 }
3995
4004 {
4005 return new FPExpr(this, Native.mkFpaSub(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4006 }
4007
4016 {
4017 return new FPExpr(this, Native.mkFpaMul(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4018 }
4019
4028 {
4029 return new FPExpr(this, Native.mkFpaDiv(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4030 }
4031
4043 {
4044 return new FPExpr(this, Native.mkFpaFma(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject(), t3.getNativeObject()));
4045 }
4046
4054 {
4055 return new FPExpr(this, Native.mkFpaSqrt(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4056 }
4057
4065 {
4066 return new FPExpr(this, Native.mkFpaRem(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4067 }
4068
4077 {
4078 return new FPExpr(this, Native.mkFpaRoundToIntegral(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4079 }
4080
4088 {
4089 return new FPExpr(this, Native.mkFpaMin(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4090 }
4091
4099 {
4100 return new FPExpr(this, Native.mkFpaMax(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4101 }
4102
4110 {
4111 return new BoolExpr(this, Native.mkFpaLeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4112 }
4113
4121 {
4122 return new BoolExpr(this, Native.mkFpaLt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4123 }
4124
4132 {
4133 return new BoolExpr(this, Native.mkFpaGeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4134 }
4135
4143 {
4144 return new BoolExpr(this, Native.mkFpaGt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4145 }
4146
4156 {
4157 return new BoolExpr(this, Native.mkFpaEq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4158 }
4159
4166 {
4167 return new BoolExpr(this, Native.mkFpaIsNormal(nCtx(), t.getNativeObject()));
4168 }
4169
4176 {
4177 return new BoolExpr(this, Native.mkFpaIsSubnormal(nCtx(), t.getNativeObject()));
4178 }
4179
4186 {
4187 return new BoolExpr(this, Native.mkFpaIsZero(nCtx(), t.getNativeObject()));
4188 }
4189
4196 {
4197 return new BoolExpr(this, Native.mkFpaIsInfinite(nCtx(), t.getNativeObject()));
4198 }
4199
4206 {
4207 return new BoolExpr(this, Native.mkFpaIsNan(nCtx(), t.getNativeObject()));
4208 }
4209
4216 {
4217 return new BoolExpr(this, Native.mkFpaIsNegative(nCtx(), t.getNativeObject()));
4218 }
4219
4226 {
4227 return new BoolExpr(this, Native.mkFpaIsPositive(nCtx(), t.getNativeObject()));
4228 }
4229
4244 {
4245 return new FPExpr(this, Native.mkFpaFp(nCtx(), sgn.getNativeObject(), sig.getNativeObject(), exp.getNativeObject()));
4246 }
4247
4260 {
4261 return new FPExpr(this, Native.mkFpaToFpBv(nCtx(), bv.getNativeObject(), s.getNativeObject()));
4262 }
4263
4276 {
4277 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4278 }
4279
4292 {
4293 return new FPExpr(this, Native.mkFpaToFpReal(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4294 }
4295
4309 public FPExpr mkFPToFP(Expr<FPRMSort> rm, Expr<BitVecSort> t, FPSort s, boolean signed)
4310 {
4311 if (signed)
4312 return new FPExpr(this, Native.mkFpaToFpSigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4313 else
4314 return new FPExpr(this, Native.mkFpaToFpUnsigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4315 }
4316
4328 {
4329 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), s.getNativeObject(), rm.getNativeObject(), t.getNativeObject()));
4330 }
4331
4344 public BitVecExpr mkFPToBV(Expr<FPRMSort> rm, Expr<FPSort> t, int sz, boolean signed)
4345 {
4346 if (signed)
4347 return new BitVecExpr(this, Native.mkFpaToSbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4348 else
4349 return new BitVecExpr(this, Native.mkFpaToUbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4350 }
4351
4362 {
4363 return new RealExpr(this, Native.mkFpaToReal(nCtx(), t.getNativeObject()));
4364 }
4365
4377 {
4378 return new BitVecExpr(this, Native.mkFpaToIeeeBv(nCtx(), t.getNativeObject()));
4379 }
4380
4395 {
4396 return new BitVecExpr(this, Native.mkFpaToFpIntReal(nCtx(), rm.getNativeObject(), exp.getNativeObject(), sig.getNativeObject(), s.getNativeObject()));
4397 }
4398
4404 public final <R extends Sort> FuncDecl<BoolSort> mkLinearOrder(R sort, int index) {
4405 return (FuncDecl<BoolSort>) FuncDecl.create(
4406 this,
4407 Native.mkLinearOrder(
4408 nCtx(),
4409 sort.getNativeObject(),
4410 index
4411 )
4412 );
4413 }
4414
4420 public final <R extends Sort> FuncDecl<BoolSort> mkPartialOrder(R sort, int index) {
4421 return (FuncDecl<BoolSort>) FuncDecl.create(
4422 this,
4423 Native.mkPartialOrder(
4424 nCtx(),
4425 sort.getNativeObject(),
4426 index
4427 )
4428 );
4429 }
4430
4437 return (FuncDecl<BoolSort>) FuncDecl.create(
4438 this,
4439 Native.mkTransitiveClosure(
4440 nCtx(),
4441 f.getNativeObject()
4442 )
4443 );
4444 }
4445
4453 public final <R extends Sort> ASTVector polynomialSubresultants(Expr<R> p, Expr<R> q, Expr<R> x) {
4454 return new ASTVector(
4455 this,
4456 Native.polynomialSubresultants(
4457 nCtx(),
4458 p.getNativeObject(),
4459 q.getNativeObject(),
4460 x.getNativeObject()
4461 )
4462 );
4463 }
4464
4475 public AST wrapAST(long nativeObject)
4476 {
4477 return AST.create(this, nativeObject);
4478 }
4479
4492 public long unwrapAST(AST a)
4493 {
4494 return a.getNativeObject();
4495 }
4496
4501 public String SimplifyHelp()
4502 {
4503 return Native.simplifyGetHelp(nCtx());
4504 }
4505
4510 {
4511 return new ParamDescrs(this, Native.simplifyGetParamDescrs(nCtx()));
4512 }
4513
4522 public void updateParamValue(String id, String value)
4523 {
4524 Native.updateParamValue(nCtx(), id, value);
4525 }
4526
4527
4528 public long nCtx()
4529 {
4530 if (m_ctx == 0)
4531 throw new Z3Exception("Context closed");
4532 return m_ctx;
4533 }
4534
4535
4536 void checkContextMatch(Z3Object other)
4537 {
4538 if (this != other.getContext())
4539 throw new Z3Exception("Context mismatch");
4540 }
4541
4542 void checkContextMatch(Z3Object other1, Z3Object other2)
4543 {
4544 checkContextMatch(other1);
4545 checkContextMatch(other2);
4546 }
4547
4548 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3)
4549 {
4550 checkContextMatch(other1);
4551 checkContextMatch(other2);
4552 checkContextMatch(other3);
4553 }
4554
4555 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3, Z3Object other4)
4556 {
4557 checkContextMatch(other1);
4558 checkContextMatch(other2);
4559 checkContextMatch(other3);
4560 checkContextMatch(other4);
4561 }
4562
4563 void checkContextMatch(Z3Object[] arr)
4564 {
4565 if (arr != null)
4566 for (Z3Object a : arr)
4567 checkContextMatch(a);
4568 }
4569
4570 private Z3ReferenceQueue m_RefQueue = new Z3ReferenceQueue(this);
4571
4572 Z3ReferenceQueue getReferenceQueue() { return m_RefQueue; }
4573
4577 @Override
4578 public void close()
4579 {
4580 if (m_ctx == 0)
4581 return;
4582
4583 m_RefQueue.forceClear();
4584
4585 m_boolSort = null;
4586 m_intSort = null;
4587 m_realSort = null;
4588 m_stringSort = null;
4589 m_RefQueue = null;
4590
4591 synchronized (creation_lock) {
4592 Native.delContext(m_ctx);
4593 }
4594 m_ctx = 0;
4595 }
4596}
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()
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
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)
FPNum mkFPNumeral(float v, FPSort s)
Tactic when(Probe p, Tactic t)
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()
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< R extends Sort > ArraySort< Sort, R > mkArraySort(Sort[] domains, R range)
Definition Context.java:241
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)
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< 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)
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)
BoolExpr mkGt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
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)
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)
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)
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)
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< 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< 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< R extends ArithSort > ArithExpr< R > mkUnaryMinus(Expr< R > t)
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)
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:1322