Z3
 
Loading...
Searching...
No Matches
Context.java
Go to the documentation of this file.
1
18package com.microsoft.z3;
19
20import static com.microsoft.z3.Constructor.of;
21
22import com.microsoft.z3.enumerations.Z3_ast_print_mode;
23
24import java.util.Map;
25
35@SuppressWarnings("unchecked")
36public class Context implements AutoCloseable {
37 private long m_ctx;
38 static final Object creation_lock = new Object();
39
40 public Context () {
41 synchronized (creation_lock) {
42 m_ctx = Native.mkContextRc(0);
43 init();
44 }
45 }
46
47 protected Context (long m_ctx) {
48 synchronized (creation_lock) {
49 this.m_ctx = m_ctx;
50 init();
51 }
52 }
53
54
72 public Context(Map<String, String> settings) {
73 synchronized (creation_lock) {
74 long cfg = Native.mkConfig();
75 for (Map.Entry<String, String> kv : settings.entrySet()) {
76 Native.setParamValue(cfg, kv.getKey(), kv.getValue());
77 }
78 m_ctx = Native.mkContextRc(cfg);
79 Native.delConfig(cfg);
80 init();
81 }
82 }
83
84 private void init() {
85 setPrintMode(Z3_ast_print_mode.Z3_PRINT_SMTLIB2_COMPLIANT);
86 Native.setInternalErrorHandler(m_ctx);
87 }
88
94 public IntSymbol mkSymbol(int i)
95 {
96 return new IntSymbol(this, i);
97 }
98
102 public StringSymbol mkSymbol(String name)
103 {
104 return new StringSymbol(this, name);
105 }
106
110 Symbol[] mkSymbols(String[] names)
111 {
112 if (names == null)
113 return new Symbol[0];
114 Symbol[] result = new Symbol[names.length];
115 for (int i = 0; i < names.length; ++i)
116 result[i] = mkSymbol(names[i]);
117 return result;
118 }
119
120 private BoolSort m_boolSort = null;
121 private IntSort m_intSort = null;
122 private RealSort m_realSort = null;
123 private SeqSort<CharSort> m_stringSort = null;
124
129 {
130 if (m_boolSort == null) {
131 m_boolSort = new BoolSort(this);
132 }
133 return m_boolSort;
134 }
135
140 {
141 if (m_intSort == null) {
142 m_intSort = new IntSort(this);
143 }
144 return m_intSort;
145 }
146
151 {
152 if (m_realSort == null) {
153 m_realSort = new RealSort(this);
154 }
155 return m_realSort;
156 }
157
162 {
163 return new BoolSort(this);
164 }
165
171 {
172 return new CharSort(this);
173 }
174
179 {
180 if (m_stringSort == null) {
181 m_stringSort = mkStringSort();
182 }
183 return m_stringSort;
184 }
185
190 {
191 checkContextMatch(s);
192 return new UninterpretedSort(this, s);
193 }
194
199 {
200 return mkUninterpretedSort(mkSymbol(str));
201 }
202
207 {
208 return new IntSort(this);
209 }
210
215 {
216 return new RealSort(this);
217 }
218
222 public BitVecSort mkBitVecSort(int size)
223 {
224 return new BitVecSort(this, Native.mkBvSort(nCtx(), size));
225 }
226
230 public final <D extends Sort, R extends Sort> ArraySort<D, R> mkArraySort(D domain, R range)
231 {
232 checkContextMatch(domain);
233 checkContextMatch(range);
234 return new ArraySort<>(this, domain, range);
235 }
236
237
241 public final <R extends Sort> ArraySort<Sort, R> mkArraySort(Sort[] domains, R range)
242 {
243 checkContextMatch(domains);
244 checkContextMatch(range);
245 return new ArraySort<>(this, domains, range);
246 }
247
252 {
253 return new SeqSort<>(this, Native.mkStringSort(nCtx()));
254 }
255
259 public final <R extends Sort> SeqSort<R> mkSeqSort(R s)
260 {
261 return new SeqSort<>(this, Native.mkSeqSort(nCtx(), s.getNativeObject()));
262 }
263
267 public final <R extends Sort> ReSort<R> mkReSort(R s)
268 {
269 return new ReSort<>(this, Native.mkReSort(nCtx(), s.getNativeObject()));
270 }
271
272
276 public TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames,
277 Sort[] fieldSorts)
278 {
279 checkContextMatch(name);
280 checkContextMatch(fieldNames);
281 checkContextMatch(fieldSorts);
282 return new TupleSort(this, name, fieldNames.length, fieldNames,
283 fieldSorts);
284 }
285
289 public final <R> EnumSort<R> mkEnumSort(Symbol name, Symbol... enumNames)
290
291 {
292 checkContextMatch(name);
293 checkContextMatch(enumNames);
294 return new EnumSort<>(this, name, enumNames);
295 }
296
300 public final <R> EnumSort<R> mkEnumSort(String name, String... enumNames)
301
302 {
303 return new EnumSort<>(this, mkSymbol(name), mkSymbols(enumNames));
304 }
305
309 public final <R extends Sort> ListSort<R> mkListSort(Symbol name, R elemSort)
310 {
311 checkContextMatch(name);
312 checkContextMatch(elemSort);
313 return new ListSort<>(this, name, elemSort);
314 }
315
319 public final <R extends Sort> ListSort<R> mkListSort(String name, R elemSort)
320 {
321 checkContextMatch(elemSort);
322 return new ListSort<>(this, mkSymbol(name), elemSort);
323 }
324
328 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(Symbol name, long size)
329
330 {
331 checkContextMatch(name);
332 return new FiniteDomainSort<>(this, name, size);
333 }
334
338 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(String name, long size)
339
340 {
341 return new FiniteDomainSort<>(this, mkSymbol(name), size);
342 }
343
355 public final <R> Constructor<R> mkConstructor(Symbol name, Symbol recognizer,
356 Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
357
358 {
359 return of(this, name, recognizer, fieldNames, sorts, sortRefs);
360 }
361
365 public final <R> Constructor<R> mkConstructor(String name, String recognizer,
366 String[] fieldNames, Sort[] sorts, int[] sortRefs)
367 {
368 return of(this, mkSymbol(name), mkSymbol(recognizer), mkSymbols(fieldNames), sorts, sortRefs);
369 }
370
374 public final <R> DatatypeSort<R> mkDatatypeSort(Symbol name, Constructor<R>[] constructors)
375 {
376 checkContextMatch(name);
377 checkContextMatch(constructors);
378 return new DatatypeSort<>(this, name, constructors);
379 }
380
384 public final <R> DatatypeSort<R> mkDatatypeSort(String name, Constructor<R>[] constructors)
385
386 {
387 checkContextMatch(constructors);
388 return new DatatypeSort<>(this, mkSymbol(name), constructors);
389 }
390
397 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name, Sort[] params)
398 {
399 checkContextMatch(name);
400 if (params != null)
401 checkContextMatch(params);
402
403 int numParams = (params == null) ? 0 : params.length;
404 long[] paramsNative = (params == null) ? new long[0] : AST.arrayToNative(params);
405 return new DatatypeSort<>(this, Native.mkDatatypeSort(nCtx(), name.getNativeObject(), numParams, paramsNative));
406 }
407
413 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name)
414 {
415 return mkDatatypeSortRef(name, null);
416 }
417
424 public <R> DatatypeSort<R> mkDatatypeSortRef(String name, Sort[] params)
425 {
426 return mkDatatypeSortRef(mkSymbol(name), params);
427 }
428
434 public <R> DatatypeSort<R> mkDatatypeSortRef(String name)
435 {
436 return mkDatatypeSortRef(name, null);
437 }
438
445 {
446 checkContextMatch(names);
447 int n = names.length;
449 long[] n_constr = new long[n];
450 for (int i = 0; i < n; i++)
451 {
452 Constructor<Object>[] constructor = c[i];
453
454 checkContextMatch(constructor);
455 cla[i] = new ConstructorList<>(this, constructor);
456 n_constr[i] = cla[i].getNativeObject();
457 }
458 long[] n_res = new long[n];
459 Native.mkDatatypes(nCtx(), n, Symbol.arrayToNative(names), n_res,
460 n_constr);
461 DatatypeSort<Object>[] res = new DatatypeSort[n];
462 for (int i = 0; i < n; i++)
463 res[i] = new DatatypeSort<>(this, n_res[i]);
464 return res;
465 }
466
471
472 {
473 return mkDatatypeSorts(mkSymbols(names), c);
474 }
475
483 {
484 checkContextMatch(name);
485 return new TypeVarSort(this, name);
486 }
487
494 public TypeVarSort mkTypeVariable(String name)
495 {
496 return mkTypeVariable(mkSymbol(name));
497 }
498
522 public <R> DatatypeSort<R> mkPolymorphicDatatypeSort(Symbol name, Sort[] parameters, Constructor<R>[] constructors)
523 {
524 checkContextMatch(name);
525 checkContextMatch(parameters);
526 checkContextMatch(constructors);
527
528 int numParams = parameters.length;
529 long[] paramsNative = AST.arrayToNative(parameters);
530
531 int numConstructors = constructors.length;
532 long[] constructorsNative = new long[numConstructors];
533 for (int i = 0; i < numConstructors; i++) {
534 constructorsNative[i] = constructors[i].getNativeObject();
535 }
536
537 long nativeSort = Native.mkPolymorphicDatatype(nCtx(), name.getNativeObject(),
538 numParams, paramsNative, numConstructors, constructorsNative);
539
540 return new DatatypeSort<>(this, nativeSort);
541 }
542
553 public <R> DatatypeSort<R> mkPolymorphicDatatypeSort(String name, Sort[] parameters, Constructor<R>[] constructors)
554 {
555 return mkPolymorphicDatatypeSort(mkSymbol(name), parameters, constructors);
556 }
557
564 public final <F extends Sort, R extends Sort> Expr<R> mkUpdateField(FuncDecl<F> field, Expr<R> t, Expr<F> v)
565 throws Z3Exception
566 {
567 return (Expr<R>) Expr.create(this,
568 Native.datatypeUpdateField
569 (nCtx(), field.getNativeObject(),
570 t.getNativeObject(), v.getNativeObject()));
571 }
572
573
577 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort[] domain, R range)
578 {
579 checkContextMatch(name);
580 checkContextMatch(domain);
581 checkContextMatch(range);
582 return new FuncDecl<>(this, name, domain, range);
583 }
584
585 public final <R extends Sort> FuncDecl<R> mkPropagateFunction(Symbol name, Sort[] domain, R range)
586 {
587 checkContextMatch(name);
588 checkContextMatch(domain);
589 checkContextMatch(range);
590 long f = Native.solverPropagateDeclare(
591 this.nCtx(),
592 name.getNativeObject(),
593 AST.arrayLength(domain),
594 AST.arrayToNative(domain),
595 range.getNativeObject());
596 return new FuncDecl<>(this, f);
597 }
598
599
603 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort domain, R range)
604
605 {
606 checkContextMatch(name);
607 checkContextMatch(domain);
608 checkContextMatch(range);
609 Sort[] q = new Sort[] { domain };
610 return new FuncDecl<>(this, name, q, range);
611 }
612
616 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort[] domain, R range)
617
618 {
619 checkContextMatch(domain);
620 checkContextMatch(range);
621 return new FuncDecl<>(this, mkSymbol(name), domain, range);
622 }
623
627 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort domain, R range)
628
629 {
630 checkContextMatch(domain);
631 checkContextMatch(range);
632 Sort[] q = new Sort[] { domain };
633 return new FuncDecl<>(this, mkSymbol(name), q, range);
634 }
635
639 public final <R extends Sort> FuncDecl<R> mkRecFuncDecl(Symbol name, Sort[] domain, R range)
640 {
641 checkContextMatch(name);
642 checkContextMatch(domain);
643 checkContextMatch(range);
644 return new FuncDecl<>(this, name, domain, range, true);
645 }
646
647
654 public final <R extends Sort> void AddRecDef(FuncDecl<R> f, Expr<?>[] args, Expr<R> body)
655 {
656 checkContextMatch(f);
657 checkContextMatch(args);
658 checkContextMatch(body);
659 long[] argsNative = AST.arrayToNative(args);
660 Native.addRecDef(nCtx(), f.getNativeObject(), args.length, argsNative, body.getNativeObject());
661 }
662
669 public final <R extends Sort> FuncDecl<R> mkFreshFuncDecl(String prefix, Sort[] domain, R range)
670
671 {
672 checkContextMatch(domain);
673 checkContextMatch(range);
674 return new FuncDecl<>(this, prefix, domain, range);
675 }
676
680 public final <R extends Sort> FuncDecl<R> mkConstDecl(Symbol name, R range)
681 {
682 checkContextMatch(name);
683 checkContextMatch(range);
684 return new FuncDecl<>(this, name, null, range);
685 }
686
690 public final <R extends Sort> FuncDecl<R> mkConstDecl(String name, R range)
691 {
692 checkContextMatch(range);
693 return new FuncDecl<>(this, mkSymbol(name), null, range);
694 }
695
702 public final <R extends Sort> FuncDecl<R> mkFreshConstDecl(String prefix, R range)
703
704 {
705 checkContextMatch(range);
706 return new FuncDecl<>(this, prefix, null, range);
707 }
708
714 public final <R extends Sort> Expr<R> mkBound(int index, R ty)
715 {
716 return (Expr<R>) Expr.create(this,
717 Native.mkBound(nCtx(), index, ty.getNativeObject()));
718 }
719
723 @SafeVarargs
724 public final Pattern mkPattern(Expr<?>... terms)
725 {
726 if (terms.length == 0)
727 throw new Z3Exception("Cannot create a pattern from zero terms");
728
729 long[] termsNative = AST.arrayToNative(terms);
730 return new Pattern(this, Native.mkPattern(nCtx(), terms.length,
731 termsNative));
732 }
733
738 public final <R extends Sort> Expr<R> mkConst(Symbol name, R range)
739 {
740 checkContextMatch(name);
741 checkContextMatch(range);
742
743 return (Expr<R>) Expr.create(
744 this,
745 Native.mkConst(nCtx(), name.getNativeObject(),
746 range.getNativeObject()));
747 }
748
753 public final <R extends Sort> Expr<R> mkConst(String name, R range)
754 {
755 return mkConst(mkSymbol(name), range);
756 }
757
762 public final <R extends Sort> Expr<R> mkFreshConst(String prefix, R range)
763 {
764 checkContextMatch(range);
765 return (Expr<R>) Expr.create(this,
766 Native.mkFreshConst(nCtx(), prefix, range.getNativeObject()));
767 }
768
773 public final <R extends Sort> Expr<R> mkConst(FuncDecl<R> f)
774 {
775 return mkApp(f, (Expr<?>[]) null);
776 }
777
782 {
783 return (BoolExpr) mkConst(name, getBoolSort());
784 }
785
789 public BoolExpr mkBoolConst(String name)
790 {
791 return (BoolExpr) mkConst(mkSymbol(name), getBoolSort());
792 }
793
798 {
799 return (IntExpr) mkConst(name, getIntSort());
800 }
801
805 public IntExpr mkIntConst(String name)
806 {
807 return (IntExpr) mkConst(name, getIntSort());
808 }
809
814 {
815 return (RealExpr) mkConst(name, getRealSort());
816 }
817
821 public RealExpr mkRealConst(String name)
822 {
823 return (RealExpr) mkConst(name, getRealSort());
824 }
825
829 public BitVecExpr mkBVConst(Symbol name, int size)
830 {
831 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
832 }
833
837 public BitVecExpr mkBVConst(String name, int size)
838 {
839 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
840 }
841
845 @SafeVarargs
846 public final <R extends Sort> Expr<R> mkApp(FuncDecl<R> f, Expr<?>... args)
847 {
848 checkContextMatch(f);
849 checkContextMatch(args);
850 return Expr.create(this, f, args);
851 }
852
857 {
858 return new BoolExpr(this, Native.mkTrue(nCtx()));
859 }
860
865 {
866 return new BoolExpr(this, Native.mkFalse(nCtx()));
867 }
868
872 public BoolExpr mkBool(boolean value)
873 {
874 return value ? mkTrue() : mkFalse();
875 }
876
881 {
882 checkContextMatch(x);
883 checkContextMatch(y);
884 return new BoolExpr(this, Native.mkEq(nCtx(), x.getNativeObject(),
885 y.getNativeObject()));
886 }
887
891 @SafeVarargs
892 public final BoolExpr mkDistinct(Expr<?>... args)
893 {
894 checkContextMatch(args);
895 return new BoolExpr(this, Native.mkDistinct(nCtx(), args.length,
896 AST.arrayToNative(args)));
897 }
898
903 {
904 checkContextMatch(a);
905 return new BoolExpr(this, Native.mkNot(nCtx(), a.getNativeObject()));
906 }
907
915 public final <R extends Sort> Expr<R> mkITE(Expr<BoolSort> t1, Expr<? extends R> t2, Expr<? extends R> t3)
916 {
917 checkContextMatch(t1);
918 checkContextMatch(t2);
919 checkContextMatch(t3);
920 return (Expr<R>) Expr.create(this, Native.mkIte(nCtx(), t1.getNativeObject(),
921 t2.getNativeObject(), t3.getNativeObject()));
922 }
923
928 {
929 checkContextMatch(t1);
930 checkContextMatch(t2);
931 return new BoolExpr(this, Native.mkIff(nCtx(), t1.getNativeObject(),
932 t2.getNativeObject()));
933 }
934
939 {
940 checkContextMatch(t1);
941 checkContextMatch(t2);
942 return new BoolExpr(this, Native.mkImplies(nCtx(),
943 t1.getNativeObject(), t2.getNativeObject()));
944 }
945
950 {
951 checkContextMatch(t1);
952 checkContextMatch(t2);
953 return new BoolExpr(this, Native.mkXor(nCtx(), t1.getNativeObject(),
954 t2.getNativeObject()));
955 }
956
960 @SafeVarargs
961 public final BoolExpr mkAnd(Expr<BoolSort>... t)
962 {
963 checkContextMatch(t);
964 return new BoolExpr(this, Native.mkAnd(nCtx(), t.length,
965 AST.arrayToNative(t)));
966 }
967
971 @SafeVarargs
972 public final BoolExpr mkOr(Expr<BoolSort>... t)
973 {
974 checkContextMatch(t);
975 return new BoolExpr(this, Native.mkOr(nCtx(), t.length,
976 AST.arrayToNative(t)));
977 }
978
982 @SafeVarargs
983 public final <R extends ArithSort> ArithExpr<R> mkAdd(Expr<? extends R>... t)
984 {
985 checkContextMatch(t);
986 return (ArithExpr<R>) Expr.create(this,
987 Native.mkAdd(nCtx(), t.length, AST.arrayToNative(t)));
988 }
989
993 @SafeVarargs
994 public final <R extends ArithSort> ArithExpr<R> mkMul(Expr<? extends R>... t)
995 {
996 checkContextMatch(t);
997 return (ArithExpr<R>) Expr.create(this,
998 Native.mkMul(nCtx(), t.length, AST.arrayToNative(t)));
999 }
1000
1004 @SafeVarargs
1005 public final <R extends ArithSort> ArithExpr<R> mkSub(Expr<? extends R>... t)
1006 {
1007 checkContextMatch(t);
1008 return (ArithExpr<R>) Expr.create(this,
1009 Native.mkSub(nCtx(), t.length, AST.arrayToNative(t)));
1010 }
1011
1015 public final <R extends ArithSort> ArithExpr<R> mkUnaryMinus(Expr<R> t)
1016 {
1017 checkContextMatch(t);
1018 return (ArithExpr<R>) Expr.create(this,
1019 Native.mkUnaryMinus(nCtx(), t.getNativeObject()));
1020 }
1021
1025 public final <R extends ArithSort> ArithExpr<R> mkDiv(Expr<? extends R> t1, Expr<? extends R> t2)
1026 {
1027 checkContextMatch(t1);
1028 checkContextMatch(t2);
1029 return (ArithExpr<R>) Expr.create(this, Native.mkDiv(nCtx(),
1030 t1.getNativeObject(), t2.getNativeObject()));
1031 }
1032
1039 {
1040 checkContextMatch(t1);
1041 checkContextMatch(t2);
1042 return new IntExpr(this, Native.mkMod(nCtx(), t1.getNativeObject(),
1043 t2.getNativeObject()));
1044 }
1045
1052 {
1053 checkContextMatch(t1);
1054 checkContextMatch(t2);
1055 return new IntExpr(this, Native.mkRem(nCtx(), t1.getNativeObject(),
1056 t2.getNativeObject()));
1057 }
1058
1062 public final <R extends ArithSort> ArithExpr<R> mkPower(Expr<? extends R> t1,
1064 {
1065 checkContextMatch(t1);
1066 checkContextMatch(t2);
1067 return (ArithExpr<R>) Expr.create(
1068 this,
1069 Native.mkPower(nCtx(), t1.getNativeObject(),
1070 t2.getNativeObject()));
1071 }
1072
1077 {
1078 checkContextMatch(t1);
1079 checkContextMatch(t2);
1080 return new BoolExpr(this, Native.mkLt(nCtx(), t1.getNativeObject(),
1081 t2.getNativeObject()));
1082 }
1083
1088 {
1089 checkContextMatch(t1);
1090 checkContextMatch(t2);
1091 return new BoolExpr(this, Native.mkLe(nCtx(), t1.getNativeObject(),
1092 t2.getNativeObject()));
1093 }
1094
1099 {
1100 checkContextMatch(t1);
1101 checkContextMatch(t2);
1102 return new BoolExpr(this, Native.mkGt(nCtx(), t1.getNativeObject(),
1103 t2.getNativeObject()));
1104 }
1105
1110 {
1111 checkContextMatch(t1);
1112 checkContextMatch(t2);
1113 return new BoolExpr(this, Native.mkGe(nCtx(), t1.getNativeObject(),
1114 t2.getNativeObject()));
1115 }
1116
1128 {
1129 checkContextMatch(t);
1130 return new RealExpr(this,
1131 Native.mkInt2real(nCtx(), t.getNativeObject()));
1132 }
1133
1141 {
1142 checkContextMatch(t);
1143 return new IntExpr(this, Native.mkReal2int(nCtx(), t.getNativeObject()));
1144 }
1145
1150 {
1151 checkContextMatch(t);
1152 return new BoolExpr(this, Native.mkIsInt(nCtx(), t.getNativeObject()));
1153 }
1154
1159 public <R extends ArithSort> ArithExpr<R> mkAbs(Expr<? extends R> arg)
1160 {
1161 checkContextMatch(arg);
1162 return (ArithExpr<R>) Expr.create(this, Native.mkAbs(nCtx(), arg.getNativeObject()));
1163 }
1164
1170 {
1171 checkContextMatch(t1);
1172 checkContextMatch(t2);
1173 return new BoolExpr(this, Native.mkDivides(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
1174 }
1175
1182 {
1183 checkContextMatch(t);
1184 return new BitVecExpr(this, Native.mkBvnot(nCtx(), t.getNativeObject()));
1185 }
1186
1193 {
1194 checkContextMatch(t);
1195 return new BitVecExpr(this, Native.mkBvredand(nCtx(),
1196 t.getNativeObject()));
1197 }
1198
1205 {
1206 checkContextMatch(t);
1207 return new BitVecExpr(this, Native.mkBvredor(nCtx(),
1208 t.getNativeObject()));
1209 }
1210
1217 {
1218 checkContextMatch(t1);
1219 checkContextMatch(t2);
1220 return new BitVecExpr(this, Native.mkBvand(nCtx(),
1221 t1.getNativeObject(), t2.getNativeObject()));
1222 }
1223
1230 {
1231 checkContextMatch(t1);
1232 checkContextMatch(t2);
1233 return new BitVecExpr(this, Native.mkBvor(nCtx(), t1.getNativeObject(),
1234 t2.getNativeObject()));
1235 }
1236
1243 {
1244 checkContextMatch(t1);
1245 checkContextMatch(t2);
1246 return new BitVecExpr(this, Native.mkBvxor(nCtx(),
1247 t1.getNativeObject(), t2.getNativeObject()));
1248 }
1249
1256 {
1257 checkContextMatch(t1);
1258 checkContextMatch(t2);
1259 return new BitVecExpr(this, Native.mkBvnand(nCtx(),
1260 t1.getNativeObject(), t2.getNativeObject()));
1261 }
1262
1269 {
1270 checkContextMatch(t1);
1271 checkContextMatch(t2);
1272 return new BitVecExpr(this, Native.mkBvnor(nCtx(),
1273 t1.getNativeObject(), t2.getNativeObject()));
1274 }
1275
1282 {
1283 checkContextMatch(t1);
1284 checkContextMatch(t2);
1285 return new BitVecExpr(this, Native.mkBvxnor(nCtx(),
1286 t1.getNativeObject(), t2.getNativeObject()));
1287 }
1288
1295 {
1296 checkContextMatch(t);
1297 return new BitVecExpr(this, Native.mkBvneg(nCtx(), t.getNativeObject()));
1298 }
1299
1306 {
1307 checkContextMatch(t1);
1308 checkContextMatch(t2);
1309 return new BitVecExpr(this, Native.mkBvadd(nCtx(),
1310 t1.getNativeObject(), t2.getNativeObject()));
1311 }
1312
1319 {
1320 checkContextMatch(t1);
1321 checkContextMatch(t2);
1322 return new BitVecExpr(this, Native.mkBvsub(nCtx(),
1323 t1.getNativeObject(), t2.getNativeObject()));
1324 }
1325
1332 {
1333 checkContextMatch(t1);
1334 checkContextMatch(t2);
1335 return new BitVecExpr(this, Native.mkBvmul(nCtx(),
1336 t1.getNativeObject(), t2.getNativeObject()));
1337 }
1338
1347 {
1348 checkContextMatch(t1);
1349 checkContextMatch(t2);
1350 return new BitVecExpr(this, Native.mkBvudiv(nCtx(),
1351 t1.getNativeObject(), t2.getNativeObject()));
1352 }
1353
1368 {
1369 checkContextMatch(t1);
1370 checkContextMatch(t2);
1371 return new BitVecExpr(this, Native.mkBvsdiv(nCtx(),
1372 t1.getNativeObject(), t2.getNativeObject()));
1373 }
1374
1383 {
1384 checkContextMatch(t1);
1385 checkContextMatch(t2);
1386 return new BitVecExpr(this, Native.mkBvurem(nCtx(),
1387 t1.getNativeObject(), t2.getNativeObject()));
1388 }
1389
1401 {
1402 checkContextMatch(t1);
1403 checkContextMatch(t2);
1404 return new BitVecExpr(this, Native.mkBvsrem(nCtx(),
1405 t1.getNativeObject(), t2.getNativeObject()));
1406 }
1407
1415 {
1416 checkContextMatch(t1);
1417 checkContextMatch(t2);
1418 return new BitVecExpr(this, Native.mkBvsmod(nCtx(),
1419 t1.getNativeObject(), t2.getNativeObject()));
1420 }
1421
1428 {
1429 checkContextMatch(t1);
1430 checkContextMatch(t2);
1431 return new BoolExpr(this, Native.mkBvult(nCtx(), t1.getNativeObject(),
1432 t2.getNativeObject()));
1433 }
1434
1441 {
1442 checkContextMatch(t1);
1443 checkContextMatch(t2);
1444 return new BoolExpr(this, Native.mkBvslt(nCtx(), t1.getNativeObject(),
1445 t2.getNativeObject()));
1446 }
1447
1454 {
1455 checkContextMatch(t1);
1456 checkContextMatch(t2);
1457 return new BoolExpr(this, Native.mkBvule(nCtx(), t1.getNativeObject(),
1458 t2.getNativeObject()));
1459 }
1460
1467 {
1468 checkContextMatch(t1);
1469 checkContextMatch(t2);
1470 return new BoolExpr(this, Native.mkBvsle(nCtx(), t1.getNativeObject(),
1471 t2.getNativeObject()));
1472 }
1473
1480 {
1481 checkContextMatch(t1);
1482 checkContextMatch(t2);
1483 return new BoolExpr(this, Native.mkBvuge(nCtx(), t1.getNativeObject(),
1484 t2.getNativeObject()));
1485 }
1486
1493 {
1494 checkContextMatch(t1);
1495 checkContextMatch(t2);
1496 return new BoolExpr(this, Native.mkBvsge(nCtx(), t1.getNativeObject(),
1497 t2.getNativeObject()));
1498 }
1499
1506 {
1507 checkContextMatch(t1);
1508 checkContextMatch(t2);
1509 return new BoolExpr(this, Native.mkBvugt(nCtx(), t1.getNativeObject(),
1510 t2.getNativeObject()));
1511 }
1512
1519 {
1520 checkContextMatch(t1);
1521 checkContextMatch(t2);
1522 return new BoolExpr(this, Native.mkBvsgt(nCtx(), t1.getNativeObject(),
1523 t2.getNativeObject()));
1524 }
1525
1537 {
1538 checkContextMatch(t1);
1539 checkContextMatch(t2);
1540 return new BitVecExpr(this, Native.mkConcat(nCtx(),
1541 t1.getNativeObject(), t2.getNativeObject()));
1542 }
1543
1552 public BitVecExpr mkExtract(int high, int low, Expr<BitVecSort> t)
1553
1554 {
1555 checkContextMatch(t);
1556 return new BitVecExpr(this, Native.mkExtract(nCtx(), high, low,
1557 t.getNativeObject()));
1558 }
1559
1568 {
1569 checkContextMatch(t);
1570 return new BitVecExpr(this, Native.mkSignExt(nCtx(), i,
1571 t.getNativeObject()));
1572 }
1573
1582 {
1583 checkContextMatch(t);
1584 return new BitVecExpr(this, Native.mkZeroExt(nCtx(), i,
1585 t.getNativeObject()));
1586 }
1587
1594 {
1595 checkContextMatch(t);
1596 return new BitVecExpr(this, Native.mkRepeat(nCtx(), i,
1597 t.getNativeObject()));
1598 }
1599
1612 {
1613 checkContextMatch(t1);
1614 checkContextMatch(t2);
1615 return new BitVecExpr(this, Native.mkBvshl(nCtx(),
1616 t1.getNativeObject(), t2.getNativeObject()));
1617 }
1618
1631 {
1632 checkContextMatch(t1);
1633 checkContextMatch(t2);
1634 return new BitVecExpr(this, Native.mkBvlshr(nCtx(),
1635 t1.getNativeObject(), t2.getNativeObject()));
1636 }
1637
1651 {
1652 checkContextMatch(t1);
1653 checkContextMatch(t2);
1654 return new BitVecExpr(this, Native.mkBvashr(nCtx(),
1655 t1.getNativeObject(), t2.getNativeObject()));
1656 }
1657
1664 {
1665 checkContextMatch(t);
1666 return new BitVecExpr(this, Native.mkRotateLeft(nCtx(), i,
1667 t.getNativeObject()));
1668 }
1669
1676 {
1677 checkContextMatch(t);
1678 return new BitVecExpr(this, Native.mkRotateRight(nCtx(), i,
1679 t.getNativeObject()));
1680 }
1681
1689
1690 {
1691 checkContextMatch(t1);
1692 checkContextMatch(t2);
1693 return new BitVecExpr(this, Native.mkExtRotateLeft(nCtx(),
1694 t1.getNativeObject(), t2.getNativeObject()));
1695 }
1696
1704
1705 {
1706 checkContextMatch(t1);
1707 checkContextMatch(t2);
1708 return new BitVecExpr(this, Native.mkExtRotateRight(nCtx(),
1709 t1.getNativeObject(), t2.getNativeObject()));
1710 }
1711
1722 {
1723 checkContextMatch(t);
1724 return new BitVecExpr(this, Native.mkInt2bv(nCtx(), n,
1725 t.getNativeObject()));
1726 }
1727
1742 public IntExpr mkBV2Int(Expr<BitVecSort> t, boolean signed)
1743 {
1744 checkContextMatch(t);
1745 return new IntExpr(this, Native.mkBv2int(nCtx(), t.getNativeObject(),
1746 (signed)));
1747 }
1748
1755 boolean isSigned)
1756 {
1757 checkContextMatch(t1);
1758 checkContextMatch(t2);
1759 return new BoolExpr(this, Native.mkBvaddNoOverflow(nCtx(), t1
1760 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1761 }
1762
1769
1770 {
1771 checkContextMatch(t1);
1772 checkContextMatch(t2);
1773 return new BoolExpr(this, Native.mkBvaddNoUnderflow(nCtx(),
1774 t1.getNativeObject(), t2.getNativeObject()));
1775 }
1776
1783
1784 {
1785 checkContextMatch(t1);
1786 checkContextMatch(t2);
1787 return new BoolExpr(this, Native.mkBvsubNoOverflow(nCtx(),
1788 t1.getNativeObject(), t2.getNativeObject()));
1789 }
1790
1797 boolean isSigned)
1798 {
1799 checkContextMatch(t1);
1800 checkContextMatch(t2);
1801 return new BoolExpr(this, Native.mkBvsubNoUnderflow(nCtx(), t1
1802 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1803 }
1804
1811
1812 {
1813 checkContextMatch(t1);
1814 checkContextMatch(t2);
1815 return new BoolExpr(this, Native.mkBvsdivNoOverflow(nCtx(),
1816 t1.getNativeObject(), t2.getNativeObject()));
1817 }
1818
1825 {
1826 checkContextMatch(t);
1827 return new BoolExpr(this, Native.mkBvnegNoOverflow(nCtx(),
1828 t.getNativeObject()));
1829 }
1830
1837 boolean isSigned)
1838 {
1839 checkContextMatch(t1);
1840 checkContextMatch(t2);
1841 return new BoolExpr(this, Native.mkBvmulNoOverflow(nCtx(), t1
1842 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1843 }
1844
1851
1852 {
1853 checkContextMatch(t1);
1854 checkContextMatch(t2);
1855 return new BoolExpr(this, Native.mkBvmulNoUnderflow(nCtx(),
1856 t1.getNativeObject(), t2.getNativeObject()));
1857 }
1858
1862 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(Symbol name, D domain, R range)
1863
1864 {
1865 return (ArrayExpr<D, R>) mkConst(name, mkArraySort(domain, range));
1866 }
1867
1871 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(String name, D domain, R range)
1872
1873 {
1874 return (ArrayExpr<D, R>) mkConst(mkSymbol(name), mkArraySort(domain, range));
1875 }
1876
1889 public final <D extends Sort, R extends Sort> Expr<R> mkSelect(Expr<ArraySort<D, R>> a, Expr<D> i)
1890 {
1891 checkContextMatch(a);
1892 checkContextMatch(i);
1893 return (Expr<R>) Expr.create(
1894 this,
1895 Native.mkSelect(nCtx(), a.getNativeObject(),
1896 i.getNativeObject()));
1897 }
1898
1911 public final <R extends Sort> Expr<R> mkSelect(Expr<ArraySort<Sort, R>> a, Expr<?>[] args)
1912 {
1913 checkContextMatch(a);
1914 checkContextMatch(args);
1915 return (Expr<R>) Expr.create(
1916 this,
1917 Native.mkSelectN(nCtx(), a.getNativeObject(), args.length, AST.arrayToNative(args)));
1918 }
1919
1936 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkStore(Expr<ArraySort<D, R>> a, Expr<D> i, Expr<R> v)
1937 {
1938 checkContextMatch(a);
1939 checkContextMatch(i);
1940 checkContextMatch(v);
1941 return new ArrayExpr<>(this, Native.mkStore(nCtx(), a.getNativeObject(),
1942 i.getNativeObject(), v.getNativeObject()));
1943 }
1944
1961 public final <R extends Sort> ArrayExpr<Sort, R> mkStore(Expr<ArraySort<Sort, R>> a, Expr<?>[] args, Expr<R> v)
1962 {
1963 checkContextMatch(a);
1964 checkContextMatch(args);
1965 checkContextMatch(v);
1966 return new ArrayExpr<>(this, Native.mkStoreN(nCtx(), a.getNativeObject(),
1967 args.length, AST.arrayToNative(args), v.getNativeObject()));
1968 }
1969
1979 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkConstArray(D domain, Expr<R> v)
1980 {
1981 checkContextMatch(domain);
1982 checkContextMatch(v);
1983 return new ArrayExpr<>(this, Native.mkConstArray(nCtx(),
1984 domain.getNativeObject(), v.getNativeObject()));
1985 }
1986
2000 @SafeVarargs
2001 public final <D extends Sort, R1 extends Sort, R2 extends Sort> ArrayExpr<D, R2> mkMap(FuncDecl<R2> f, Expr<ArraySort<D, R1>>... args)
2002 {
2003 checkContextMatch(f);
2004 checkContextMatch(args);
2005 return (ArrayExpr<D, R2>) Expr.create(this, Native.mkMap(nCtx(),
2006 f.getNativeObject(), AST.arrayLength(args),
2007 AST.arrayToNative(args)));
2008 }
2009
2016 public final <D extends Sort, R extends Sort> Expr<R> mkTermArray(Expr<ArraySort<D, R>> array)
2017 {
2018 checkContextMatch(array);
2019 return (Expr<R>) Expr.create(this,
2020 Native.mkArrayDefault(nCtx(), array.getNativeObject()));
2021 }
2022
2030 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkAsArray(FuncDecl<R> f)
2031 {
2032 checkContextMatch(f);
2033 return (ArrayExpr<D, R>) Expr.create(this, Native.mkAsArray(nCtx(), f.getNativeObject()));
2034 }
2035
2039 public final <D extends Sort, R extends Sort> Expr<D> mkArrayExt(Expr<ArraySort<D, R>> arg1, Expr<ArraySort<D, R>> arg2)
2040 {
2041 checkContextMatch(arg1);
2042 checkContextMatch(arg2);
2043 return (Expr<D>) Expr.create(this, Native.mkArrayExt(nCtx(), arg1.getNativeObject(), arg2.getNativeObject()));
2044 }
2045
2046
2050 public final <D extends Sort> SetSort<D> mkSetSort(D ty)
2051 {
2052 checkContextMatch(ty);
2053 return new SetSort<>(this, ty);
2054 }
2055
2059 public final <D extends Sort> ArrayExpr<D, BoolSort> mkEmptySet(D domain)
2060 {
2061 checkContextMatch(domain);
2062 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2063 Native.mkEmptySet(nCtx(), domain.getNativeObject()));
2064 }
2065
2069 public final <D extends Sort> ArrayExpr<D, BoolSort> mkFullSet(D domain)
2070 {
2071 checkContextMatch(domain);
2072 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2073 Native.mkFullSet(nCtx(), domain.getNativeObject()));
2074 }
2075
2079 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetAdd(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2080 {
2081 checkContextMatch(set);
2082 checkContextMatch(element);
2083 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2084 Native.mkSetAdd(nCtx(), set.getNativeObject(),
2085 element.getNativeObject()));
2086 }
2087
2091 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetDel(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2092 {
2093 checkContextMatch(set);
2094 checkContextMatch(element);
2095 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2096 Native.mkSetDel(nCtx(), set.getNativeObject(),
2097 element.getNativeObject()));
2098 }
2099
2103 @SafeVarargs
2104 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetUnion(Expr<ArraySort<D, BoolSort>>... args)
2105 {
2106 checkContextMatch(args);
2107 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2108 Native.mkSetUnion(nCtx(), args.length,
2109 AST.arrayToNative(args)));
2110 }
2111
2115 @SafeVarargs
2117 {
2118 checkContextMatch(args);
2119 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2120 Native.mkSetIntersect(nCtx(), args.length,
2121 AST.arrayToNative(args)));
2122 }
2123
2128 {
2129 checkContextMatch(arg1);
2130 checkContextMatch(arg2);
2131 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2132 Native.mkSetDifference(nCtx(), arg1.getNativeObject(),
2133 arg2.getNativeObject()));
2134 }
2135
2140 {
2141 checkContextMatch(arg);
2142 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2143 Native.mkSetComplement(nCtx(), arg.getNativeObject()));
2144 }
2145
2149 public final <D extends Sort> BoolExpr mkSetMembership(Expr<D> elem, Expr<ArraySort<D, BoolSort>> set)
2150 {
2151 checkContextMatch(elem);
2152 checkContextMatch(set);
2153 return (BoolExpr) Expr.create(this,
2154 Native.mkSetMember(nCtx(), elem.getNativeObject(),
2155 set.getNativeObject()));
2156 }
2157
2162 {
2163 checkContextMatch(arg1);
2164 checkContextMatch(arg2);
2165 return (BoolExpr) Expr.create(this,
2166 Native.mkSetSubset(nCtx(), arg1.getNativeObject(),
2167 arg2.getNativeObject()));
2168 }
2169
2170
2178 public final FiniteSetSort mkFiniteSetSort(Sort elemSort)
2179 {
2180 checkContextMatch(elemSort);
2181 return new FiniteSetSort(this, elemSort);
2182 }
2183
2187 public final boolean isFiniteSetSort(Sort s)
2188 {
2189 checkContextMatch(s);
2190 return Native.isFiniteSetSort(nCtx(), s.getNativeObject());
2191 }
2192
2197 {
2198 checkContextMatch(s);
2199 return Sort.create(this, Native.getFiniteSetSortBasis(nCtx(), s.getNativeObject()));
2200 }
2201
2205 public final Expr mkFiniteSetEmpty(Sort setSort)
2206 {
2207 checkContextMatch(setSort);
2208 return Expr.create(this, Native.mkFiniteSetEmpty(nCtx(), setSort.getNativeObject()));
2209 }
2210
2214 public final Expr mkFiniteSetSingleton(Expr elem)
2215 {
2216 checkContextMatch(elem);
2217 return Expr.create(this, Native.mkFiniteSetSingleton(nCtx(), elem.getNativeObject()));
2218 }
2219
2223 public final Expr mkFiniteSetUnion(Expr s1, Expr s2)
2224 {
2225 checkContextMatch(s1);
2226 checkContextMatch(s2);
2227 return Expr.create(this, Native.mkFiniteSetUnion(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2228 }
2229
2233 public final Expr mkFiniteSetIntersect(Expr s1, Expr s2)
2234 {
2235 checkContextMatch(s1);
2236 checkContextMatch(s2);
2237 return Expr.create(this, Native.mkFiniteSetIntersect(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2238 }
2239
2244 {
2245 checkContextMatch(s1);
2246 checkContextMatch(s2);
2247 return Expr.create(this, Native.mkFiniteSetDifference(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2248 }
2249
2253 public final BoolExpr mkFiniteSetMember(Expr elem, Expr set)
2254 {
2255 checkContextMatch(elem);
2256 checkContextMatch(set);
2257 return (BoolExpr) Expr.create(this, Native.mkFiniteSetMember(nCtx(), elem.getNativeObject(), set.getNativeObject()));
2258 }
2259
2263 public final Expr mkFiniteSetSize(Expr set)
2264 {
2265 checkContextMatch(set);
2266 return Expr.create(this, Native.mkFiniteSetSize(nCtx(), set.getNativeObject()));
2267 }
2268
2273 {
2274 checkContextMatch(s1);
2275 checkContextMatch(s2);
2276 return (BoolExpr) Expr.create(this, Native.mkFiniteSetSubset(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2277 }
2278
2282 public final Expr mkFiniteSetMap(Expr f, Expr set)
2283 {
2284 checkContextMatch(f);
2285 checkContextMatch(set);
2286 return Expr.create(this, Native.mkFiniteSetMap(nCtx(), f.getNativeObject(), set.getNativeObject()));
2287 }
2288
2292 public final Expr mkFiniteSetFilter(Expr f, Expr set)
2293 {
2294 checkContextMatch(f);
2295 checkContextMatch(set);
2296 return Expr.create(this, Native.mkFiniteSetFilter(nCtx(), f.getNativeObject(), set.getNativeObject()));
2297 }
2298
2302 public final Expr mkFiniteSetRange(Expr low, Expr high)
2303 {
2304 checkContextMatch(low);
2305 checkContextMatch(high);
2306 return Expr.create(this, Native.mkFiniteSetRange(nCtx(), low.getNativeObject(), high.getNativeObject()));
2307 }
2308
2309
2317 public final <R extends Sort> SeqExpr<R> mkEmptySeq(R s)
2318 {
2319 checkContextMatch(s);
2320 return (SeqExpr<R>) Expr.create(this, Native.mkSeqEmpty(nCtx(), s.getNativeObject()));
2321 }
2322
2326 public final <R extends Sort> SeqExpr<R> mkUnit(Expr<R> elem)
2327 {
2328 checkContextMatch(elem);
2329 return (SeqExpr<R>) Expr.create(this, Native.mkSeqUnit(nCtx(), elem.getNativeObject()));
2330 }
2331
2336 {
2337 StringBuilder buf = new StringBuilder();
2338 for (int i = 0; i < s.length(); i += Character.charCount(s.codePointAt(i))) {
2339 int code = s.codePointAt(i);
2340 if (code <= 32 || 127 < code)
2341 buf.append(String.format("\\u{%x}", code));
2342 else
2343 buf.append(s.charAt(i));
2344 }
2345 return (SeqExpr<CharSort>) Expr.create(this, Native.mkString(nCtx(), buf.toString()));
2346 }
2347
2352 {
2353 return (SeqExpr<CharSort>) Expr.create(this, Native.mkIntToStr(nCtx(), e.getNativeObject()));
2354 }
2355
2360 {
2361 return (SeqExpr<CharSort>) Expr.create(this, Native.mkUbvToStr(nCtx(), e.getNativeObject()));
2362 }
2363
2368 {
2369 return (SeqExpr<CharSort>) Expr.create(this, Native.mkSbvToStr(nCtx(), e.getNativeObject()));
2370 }
2371
2376 {
2377 return (IntExpr) Expr.create(this, Native.mkStrToInt(nCtx(), e.getNativeObject()));
2378 }
2379
2383 @SafeVarargs
2384 public final <R extends Sort> SeqExpr<R> mkConcat(Expr<SeqSort<R>>... t)
2385 {
2386 checkContextMatch(t);
2387 return (SeqExpr<R>) Expr.create(this, Native.mkSeqConcat(nCtx(), t.length, AST.arrayToNative(t)));
2388 }
2389
2390
2394 public final <R extends Sort> IntExpr mkLength(Expr<SeqSort<R>> s)
2395 {
2396 checkContextMatch(s);
2397 return (IntExpr) Expr.create(this, Native.mkSeqLength(nCtx(), s.getNativeObject()));
2398 }
2399
2403 public final <R extends Sort> BoolExpr mkPrefixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2404 {
2405 checkContextMatch(s1, s2);
2406 return (BoolExpr) Expr.create(this, Native.mkSeqPrefix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2407 }
2408
2412 public final <R extends Sort> BoolExpr mkSuffixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2413 {
2414 checkContextMatch(s1, s2);
2415 return (BoolExpr)Expr.create(this, Native.mkSeqSuffix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2416 }
2417
2421 public final <R extends Sort> BoolExpr mkContains(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2422 {
2423 checkContextMatch(s1, s2);
2424 return (BoolExpr) Expr.create(this, Native.mkSeqContains(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2425 }
2426
2432 {
2433 checkContextMatch(s1, s2);
2434 return new BoolExpr(this, Native.mkStrLt(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2435 }
2436
2441 {
2442 checkContextMatch(s1, s2);
2443 return new BoolExpr(this, Native.mkStrLe(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2444 }
2445
2446
2450 public final <R extends Sort> SeqExpr<R> mkAt(Expr<SeqSort<R>> s, Expr<IntSort> index)
2451 {
2452 checkContextMatch(s, index);
2453 return (SeqExpr<R>) Expr.create(this, Native.mkSeqAt(nCtx(), s.getNativeObject(), index.getNativeObject()));
2454 }
2455
2459 public final <R extends Sort> Expr<R> mkNth(Expr<SeqSort<R>> s, Expr<IntSort> index)
2460 {
2461 checkContextMatch(s, index);
2462 return (Expr<R>) Expr.create(this, Native.mkSeqNth(nCtx(), s.getNativeObject(), index.getNativeObject()));
2463 }
2464
2465
2469 public final <R extends Sort> SeqExpr<R> mkExtract(Expr<SeqSort<R>> s, Expr<IntSort> offset, Expr<IntSort> length)
2470 {
2471 checkContextMatch(s, offset, length);
2472 return (SeqExpr<R>) Expr.create(this, Native.mkSeqExtract(nCtx(), s.getNativeObject(), offset.getNativeObject(), length.getNativeObject()));
2473 }
2474
2478 public final <R extends Sort> IntExpr mkIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr, Expr<IntSort> offset)
2479 {
2480 checkContextMatch(s, substr, offset);
2481 return (IntExpr)Expr.create(this, Native.mkSeqIndex(nCtx(), s.getNativeObject(), substr.getNativeObject(), offset.getNativeObject()));
2482 }
2483
2487 public final <R extends Sort> IntExpr mkLastIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr)
2488 {
2489 checkContextMatch(s, substr);
2490 return (IntExpr)Expr.create(this, Native.mkSeqLastIndex(nCtx(), s.getNativeObject(), substr.getNativeObject()));
2491 }
2492
2497 public final <R extends Sort> SeqExpr<R> mkSeqMap(Expr<?> f, Expr<SeqSort<R>> s)
2498 {
2499 checkContextMatch(f, s);
2500 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMap(nCtx(), f.getNativeObject(), s.getNativeObject()));
2501 }
2502
2507 public final <R extends Sort> SeqExpr<R> mkSeqMapi(Expr<?> f, Expr<IntSort> i, Expr<SeqSort<R>> s)
2508 {
2509 checkContextMatch(f, i, s);
2510 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMapi(nCtx(), f.getNativeObject(), i.getNativeObject(), s.getNativeObject()));
2511 }
2512
2517 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldl(Expr<?> f, Expr<A> a, Expr<SeqSort<R>> s)
2518 {
2519 checkContextMatch(f, a, s);
2520 return (Expr<A>) Expr.create(this, Native.mkSeqFoldl(nCtx(), f.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2521 }
2522
2527 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldli(Expr<?> f, Expr<IntSort> i, Expr<A> a, Expr<SeqSort<R>> s)
2528 {
2529 checkContextMatch(f, i, a, s);
2530 return (Expr<A>) Expr.create(this, Native.mkSeqFoldli(nCtx(), f.getNativeObject(), i.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2531 }
2532
2536 public final <R extends Sort> SeqExpr<R> mkReplace(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2537 {
2538 checkContextMatch(s, src, dst);
2539 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplace(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2540 }
2541
2545 public final <R extends Sort> SeqExpr<R> mkReplaceAll(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2546 {
2547 checkContextMatch(s, src, dst);
2548 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceAll(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2549 }
2550
2554 public final <R extends Sort> SeqExpr<R> mkReplaceRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2555 {
2556 checkContextMatch(s, re, dst);
2557 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceRe(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2558 }
2559
2563 public final <R extends Sort> SeqExpr<R> mkReplaceReAll(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2564 {
2565 checkContextMatch(s, re, dst);
2566 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceReAll(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2567 }
2568
2572 public final <R extends Sort> ReExpr<SeqSort<R>> mkToRe(Expr<SeqSort<R>> s)
2573 {
2574 checkContextMatch(s);
2575 return (ReExpr<SeqSort<R>>) Expr.create(this, Native.mkSeqToRe(nCtx(), s.getNativeObject()));
2576 }
2577
2578
2582 public final <R extends Sort> BoolExpr mkInRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re)
2583 {
2584 checkContextMatch(s, re);
2585 return (BoolExpr) Expr.create(this, Native.mkSeqInRe(nCtx(), s.getNativeObject(), re.getNativeObject()));
2586 }
2587
2591 public final <R extends Sort> ReExpr<R> mkStar(Expr<ReSort<R>> re)
2592 {
2593 checkContextMatch(re);
2594 return (ReExpr<R>) Expr.create(this, Native.mkReStar(nCtx(), re.getNativeObject()));
2595 }
2596
2600 public final <R extends Sort> ReExpr<R> mkPower(Expr<ReSort<R>> re, int n)
2601 {
2602 return (ReExpr<R>) Expr.create(this, Native.mkRePower(nCtx(), re.getNativeObject(), n));
2603 }
2604
2608 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo, int hi)
2609 {
2610 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, hi));
2611 }
2612
2616 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo)
2617 {
2618 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, 0));
2619 }
2620
2621
2625 public final <R extends Sort> ReExpr<R> mkPlus(Expr<ReSort<R>> re)
2626 {
2627 checkContextMatch(re);
2628 return (ReExpr<R>) Expr.create(this, Native.mkRePlus(nCtx(), re.getNativeObject()));
2629 }
2630
2634 public final <R extends Sort> ReExpr<R> mkOption(Expr<ReSort<R>> re)
2635 {
2636 checkContextMatch(re);
2637 return (ReExpr<R>) Expr.create(this, Native.mkReOption(nCtx(), re.getNativeObject()));
2638 }
2639
2643 public final <R extends Sort> ReExpr<R> mkComplement(Expr<ReSort<R>> re)
2644 {
2645 checkContextMatch(re);
2646 return (ReExpr<R>) Expr.create(this, Native.mkReComplement(nCtx(), re.getNativeObject()));
2647 }
2648
2652 @SafeVarargs
2653 public final <R extends Sort> ReExpr<R> mkConcat(ReExpr<R>... t)
2654 {
2655 checkContextMatch(t);
2656 return (ReExpr<R>) Expr.create(this, Native.mkReConcat(nCtx(), t.length, AST.arrayToNative(t)));
2657 }
2658
2662 @SafeVarargs
2663 public final <R extends Sort> ReExpr<R> mkUnion(Expr<ReSort<R>>... t)
2664 {
2665 checkContextMatch(t);
2666 return (ReExpr<R>) Expr.create(this, Native.mkReUnion(nCtx(), t.length, AST.arrayToNative(t)));
2667 }
2668
2672 @SafeVarargs
2673 public final <R extends Sort> ReExpr<R> mkIntersect(Expr<ReSort<R>>... t)
2674 {
2675 checkContextMatch(t);
2676 return (ReExpr<R>) Expr.create(this, Native.mkReIntersect(nCtx(), t.length, AST.arrayToNative(t)));
2677 }
2678
2682 public final <R extends Sort> ReExpr<R> mkDiff(Expr<ReSort<R>> a, Expr<ReSort<R>> b)
2683 {
2684 checkContextMatch(a, b);
2685 return (ReExpr<R>) Expr.create(this, Native.mkReDiff(nCtx(), a.getNativeObject(), b.getNativeObject()));
2686 }
2687
2688
2693 public final <R extends Sort> ReExpr<R> mkEmptyRe(ReSort<R> s)
2694 {
2695 return (ReExpr<R>) Expr.create(this, Native.mkReEmpty(nCtx(), s.getNativeObject()));
2696 }
2697
2702 public final <R extends Sort> ReExpr<R> mkFullRe(ReSort<R> s)
2703 {
2704 return (ReExpr<R>) Expr.create(this, Native.mkReFull(nCtx(), s.getNativeObject()));
2705 }
2706
2712 public final <R extends Sort> ReExpr<R> mkAllcharRe(ReSort<R> s)
2713 {
2714 return (ReExpr<R>) Expr.create(this, Native.mkReAllchar(nCtx(), s.getNativeObject()));
2715 }
2716
2721 {
2722 checkContextMatch(lo, hi);
2723 return (ReExpr<SeqSort<CharSort>>) Expr.create(this, Native.mkReRange(nCtx(), lo.getNativeObject(), hi.getNativeObject()));
2724 }
2725
2730 {
2731 checkContextMatch(ch1, ch2);
2732 return (BoolExpr) Expr.create(this, Native.mkCharLe(nCtx(), ch1.getNativeObject(), ch2.getNativeObject()));
2733 }
2734
2739 {
2740 checkContextMatch(ch);
2741 return (IntExpr) Expr.create(this, Native.mkCharToInt(nCtx(), ch.getNativeObject()));
2742 }
2743
2748 {
2749 checkContextMatch(ch);
2750 return (BitVecExpr) Expr.create(this, Native.mkCharToBv(nCtx(), ch.getNativeObject()));
2751 }
2752
2757 {
2758 checkContextMatch(bv);
2759 return (Expr<CharSort>) Expr.create(this, Native.mkCharFromBv(nCtx(), bv.getNativeObject()));
2760 }
2761
2766 {
2767 checkContextMatch(ch);
2768 return (BoolExpr) Expr.create(this, Native.mkCharIsDigit(nCtx(), ch.getNativeObject()));
2769 }
2770
2774 public BoolExpr mkAtMost(Expr<BoolSort>[] args, int k)
2775 {
2776 checkContextMatch(args);
2777 return (BoolExpr) Expr.create(this, Native.mkAtmost(nCtx(), args.length, AST.arrayToNative(args), k));
2778 }
2779
2783 public BoolExpr mkAtLeast(Expr<BoolSort>[] args, int k)
2784 {
2785 checkContextMatch(args);
2786 return (BoolExpr) Expr.create(this, Native.mkAtleast(nCtx(), args.length, AST.arrayToNative(args), k));
2787 }
2788
2792 public BoolExpr mkPBLe(int[] coeffs, Expr<BoolSort>[] args, int k)
2793 {
2794 checkContextMatch(args);
2795 return (BoolExpr) Expr.create(this, Native.mkPble(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2796 }
2797
2801 public BoolExpr mkPBGe(int[] coeffs, Expr<BoolSort>[] args, int k)
2802 {
2803 checkContextMatch(args);
2804 return (BoolExpr) Expr.create(this, Native.mkPbge(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2805 }
2806
2810 public BoolExpr mkPBEq(int[] coeffs, Expr<BoolSort>[] args, int k)
2811 {
2812 checkContextMatch(args);
2813 return (BoolExpr) Expr.create(this, Native.mkPbeq(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2814 }
2815
2827 public final <R extends Sort> Expr<R> mkNumeral(String v, R ty)
2828 {
2829 checkContextMatch(ty);
2830 return (Expr<R>) Expr.create(this,
2831 Native.mkNumeral(nCtx(), v, ty.getNativeObject()));
2832 }
2833
2844 public final <R extends Sort> Expr<R> mkNumeral(int v, R ty)
2845 {
2846 checkContextMatch(ty);
2847 return (Expr<R>) Expr.create(this, Native.mkInt(nCtx(), v, ty.getNativeObject()));
2848 }
2849
2860 public final <R extends Sort> Expr<R> mkNumeral(long v, R ty)
2861 {
2862 checkContextMatch(ty);
2863 return (Expr<R>) Expr.create(this,
2864 Native.mkInt64(nCtx(), v, ty.getNativeObject()));
2865 }
2866
2876 public RatNum mkReal(int num, int den)
2877 {
2878 if (den == 0) {
2879 throw new Z3Exception("Denominator is zero");
2880 }
2881
2882 return new RatNum(this, Native.mkReal(nCtx(), num, den));
2883 }
2884
2891 public RatNum mkReal(String v)
2892 {
2893
2894 return new RatNum(this, Native.mkNumeral(nCtx(), v, getRealSort()
2895 .getNativeObject()));
2896 }
2897
2904 public RatNum mkReal(int v)
2905 {
2906
2907 return new RatNum(this, Native.mkInt(nCtx(), v, getRealSort()
2908 .getNativeObject()));
2909 }
2910
2917 public RatNum mkReal(long v)
2918 {
2919
2920 return new RatNum(this, Native.mkInt64(nCtx(), v, getRealSort()
2921 .getNativeObject()));
2922 }
2923
2928 public IntNum mkInt(String v)
2929 {
2930
2931 return new IntNum(this, Native.mkNumeral(nCtx(), v, getIntSort()
2932 .getNativeObject()));
2933 }
2934
2941 public IntNum mkInt(int v)
2942 {
2943
2944 return new IntNum(this, Native.mkInt(nCtx(), v, getIntSort()
2945 .getNativeObject()));
2946 }
2947
2954 public IntNum mkInt(long v)
2955 {
2956
2957 return new IntNum(this, Native.mkInt64(nCtx(), v, getIntSort()
2958 .getNativeObject()));
2959 }
2960
2966 public BitVecNum mkBV(String v, int size)
2967 {
2968 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2969 }
2970
2976 public BitVecNum mkBV(int v, int size)
2977 {
2978 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2979 }
2980
2986 public BitVecNum mkBV(long v, int size)
2987 {
2988 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2989 }
2990
3016 public Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3017 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3018 Symbol quantifierID, Symbol skolemID)
3019 {
3020 return Quantifier.of(this, true, sorts, names, body, weight, patterns,
3021 noPatterns, quantifierID, skolemID);
3022 }
3023
3028 public Quantifier mkForall(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3029 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3030 Symbol skolemID)
3031 {
3032
3033 return Quantifier.of(this, true, boundConstants, body, weight,
3034 patterns, noPatterns, quantifierID, skolemID);
3035 }
3036
3041 public Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3042 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3043 Symbol quantifierID, Symbol skolemID)
3044 {
3045
3046 return Quantifier.of(this, false, sorts, names, body, weight,
3047 patterns, noPatterns, quantifierID, skolemID);
3048 }
3049
3054 public Quantifier mkExists(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3055 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3056 Symbol skolemID)
3057 {
3058
3059 return Quantifier.of(this, false, boundConstants, body, weight,
3060 patterns, noPatterns, quantifierID, skolemID);
3061 }
3062
3067 public Quantifier mkQuantifier(boolean universal, Sort[] sorts,
3068 Symbol[] names, Expr<BoolSort> body, int weight, Pattern[] patterns,
3069 Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
3070
3071 {
3072
3073 if (universal)
3074 return mkForall(sorts, names, body, weight, patterns, noPatterns,
3075 quantifierID, skolemID);
3076 else
3077 return mkExists(sorts, names, body, weight, patterns, noPatterns,
3078 quantifierID, skolemID);
3079 }
3080
3085 public Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants,
3086 Expr<BoolSort> body, int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3087 Symbol quantifierID, Symbol skolemID)
3088 {
3089
3090 if (universal)
3091 return mkForall(boundConstants, body, weight, patterns, noPatterns,
3092 quantifierID, skolemID);
3093 else
3094 return mkExists(boundConstants, body, weight, patterns, noPatterns,
3095 quantifierID, skolemID);
3096 }
3097
3115 public final <R extends Sort> Lambda<R> mkLambda(Sort[] sorts, Symbol[] names, Expr<R> body)
3116 {
3117 return Lambda.of(this, sorts, names, body);
3118 }
3119
3126 public final <R extends Sort> Lambda<R> mkLambda(Expr<?>[] boundConstants, Expr<R> body)
3127 {
3128 return Lambda.of(this, boundConstants, body);
3129 }
3130
3131
3147 {
3148 Native.setAstPrintMode(nCtx(), value.toInt());
3149 }
3150
3164 public String benchmarkToSMTString(String name, String logic,
3165 String status, String attributes, Expr<BoolSort>[] assumptions,
3166 Expr<BoolSort> formula)
3167 {
3168
3169 return Native.benchmarkToSmtlibString(nCtx(), name, logic, status,
3170 attributes, assumptions.length,
3171 AST.arrayToNative(assumptions), formula.getNativeObject());
3172 }
3173
3183 public BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames,
3184 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3185 {
3186 int csn = Symbol.arrayLength(sortNames);
3187 int cs = Sort.arrayLength(sorts);
3188 int cdn = Symbol.arrayLength(declNames);
3189 int cd = AST.arrayLength(decls);
3190 if (csn != cs || cdn != cd) {
3191 throw new Z3Exception("Argument size mismatch");
3192 }
3193 ASTVector v = new ASTVector(this, Native.parseSmtlib2String(nCtx(),
3194 str, AST.arrayLength(sorts), Symbol.arrayToNative(sortNames),
3195 AST.arrayToNative(sorts), AST.arrayLength(decls),
3196 Symbol.arrayToNative(declNames), AST.arrayToNative(decls)));
3197 return v.ToBoolExprArray();
3198 }
3199
3204 public BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames,
3205 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3206 {
3207 int csn = Symbol.arrayLength(sortNames);
3208 int cs = Sort.arrayLength(sorts);
3209 int cdn = Symbol.arrayLength(declNames);
3210 int cd = AST.arrayLength(decls);
3211 if (csn != cs || cdn != cd)
3212 throw new Z3Exception("Argument size mismatch");
3213 ASTVector v = new ASTVector(this, Native.parseSmtlib2File(nCtx(),
3214 fileName, AST.arrayLength(sorts),
3215 Symbol.arrayToNative(sortNames), AST.arrayToNative(sorts),
3216 AST.arrayLength(decls), Symbol.arrayToNative(declNames),
3217 AST.arrayToNative(decls)));
3218 return v.ToBoolExprArray();
3219 }
3220
3231 public Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
3232 {
3233 return new Goal(this, models, unsatCores, proofs);
3234 }
3235
3240 {
3241 return new Params(this);
3242 }
3243
3247 public int getNumTactics()
3248 {
3249 return Native.getNumTactics(nCtx());
3250 }
3251
3255 public String[] getTacticNames()
3256 {
3257
3258 int n = getNumTactics();
3259 String[] res = new String[n];
3260 for (int i = 0; i < n; i++)
3261 res[i] = Native.getTacticName(nCtx(), i);
3262 return res;
3263 }
3264
3269 public String getTacticDescription(String name)
3270 {
3271 return Native.tacticGetDescr(nCtx(), name);
3272 }
3273
3277 public Tactic mkTactic(String name)
3278 {
3279 return new Tactic(this, name);
3280 }
3281
3286 public Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
3287
3288 {
3289 checkContextMatch(t1);
3290 checkContextMatch(t2);
3291 checkContextMatch(ts);
3292
3293 long last = 0;
3294 if (ts != null && ts.length > 0)
3295 {
3296 last = ts[ts.length - 1].getNativeObject();
3297 for (int i = ts.length - 2; i >= 0; i--) {
3298 last = Native.tacticAndThen(nCtx(), ts[i].getNativeObject(),
3299 last);
3300 }
3301 }
3302 if (last != 0)
3303 {
3304 last = Native.tacticAndThen(nCtx(), t2.getNativeObject(), last);
3305 return new Tactic(this, Native.tacticAndThen(nCtx(),
3306 t1.getNativeObject(), last));
3307 } else
3308 return new Tactic(this, Native.tacticAndThen(nCtx(),
3309 t1.getNativeObject(), t2.getNativeObject()));
3310 }
3311
3318 public Tactic then(Tactic t1, Tactic t2, Tactic... ts)
3319 {
3320 return andThen(t1, t2, ts);
3321 }
3322
3329 {
3330 checkContextMatch(t1);
3331 checkContextMatch(t2);
3332 return new Tactic(this, Native.tacticOrElse(nCtx(),
3333 t1.getNativeObject(), t2.getNativeObject()));
3334 }
3335
3342 public Tactic tryFor(Tactic t, int ms)
3343 {
3344 checkContextMatch(t);
3345 return new Tactic(this, Native.tacticTryFor(nCtx(),
3346 t.getNativeObject(), ms));
3347 }
3348
3356 {
3357 checkContextMatch(t);
3358 checkContextMatch(p);
3359 return new Tactic(this, Native.tacticWhen(nCtx(), p.getNativeObject(),
3360 t.getNativeObject()));
3361 }
3362
3368 public Tactic cond(Probe p, Tactic t1, Tactic t2)
3369 {
3370 checkContextMatch(p);
3371 checkContextMatch(t1);
3372 checkContextMatch(t2);
3373 return new Tactic(this, Native.tacticCond(nCtx(), p.getNativeObject(),
3374 t1.getNativeObject(), t2.getNativeObject()));
3375 }
3376
3381 public Tactic repeat(Tactic t, int max)
3382 {
3383 checkContextMatch(t);
3384 return new Tactic(this, Native.tacticRepeat(nCtx(),
3385 t.getNativeObject(), max));
3386 }
3387
3391 public Tactic skip()
3392 {
3393 return new Tactic(this, Native.tacticSkip(nCtx()));
3394 }
3395
3399 public Tactic fail()
3400 {
3401 return new Tactic(this, Native.tacticFail(nCtx()));
3402 }
3403
3409 {
3410 checkContextMatch(p);
3411 return new Tactic(this,
3412 Native.tacticFailIf(nCtx(), p.getNativeObject()));
3413 }
3414
3420 {
3421 return new Tactic(this, Native.tacticFailIfNotDecided(nCtx()));
3422 }
3423
3429 {
3430 checkContextMatch(t);
3431 checkContextMatch(p);
3432 return new Tactic(this, Native.tacticUsingParams(nCtx(),
3433 t.getNativeObject(), p.getNativeObject()));
3434 }
3435
3443 {
3444 return usingParams(t, p);
3445 }
3446
3450 public Tactic parOr(Tactic... t)
3451 {
3452 checkContextMatch(t);
3453 return new Tactic(this, Native.tacticParOr(nCtx(),
3455 }
3456
3462 {
3463 checkContextMatch(t1);
3464 checkContextMatch(t2);
3465 return new Tactic(this, Native.tacticParAndThen(nCtx(),
3466 t1.getNativeObject(), t2.getNativeObject()));
3467 }
3468
3474 public void interrupt()
3475 {
3476 Native.interrupt(nCtx());
3477 }
3478
3483 {
3484 return Native.getNumSimplifiers(nCtx());
3485 }
3486
3490 public String[] getSimplifierNames()
3491 {
3492
3493 int n = getNumSimplifiers();
3494 String[] res = new String[n];
3495 for (int i = 0; i < n; i++)
3496 res[i] = Native.getSimplifierName(nCtx(), i);
3497 return res;
3498 }
3499
3504 public String getSimplifierDescription(String name)
3505 {
3506 return Native.simplifierGetDescr(nCtx(), name);
3507 }
3508
3512 public Simplifier mkSimplifier(String name)
3513 {
3514 return new Simplifier(this, name);
3515 }
3516
3521
3522 {
3523 checkContextMatch(t1);
3524 checkContextMatch(t2);
3525 checkContextMatch(ts);
3526
3527 long last = 0;
3528 if (ts != null && ts.length > 0)
3529 {
3530 last = ts[ts.length - 1].getNativeObject();
3531 for (int i = ts.length - 2; i >= 0; i--) {
3532 last = Native.simplifierAndThen(nCtx(), ts[i].getNativeObject(),
3533 last);
3534 }
3535 }
3536 if (last != 0)
3537 {
3538 last = Native.simplifierAndThen(nCtx(), t2.getNativeObject(), last);
3539 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3540 t1.getNativeObject(), last));
3541 } else
3542 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3543 t1.getNativeObject(), t2.getNativeObject()));
3544 }
3545
3552 {
3553 return andThen(t1, t2, ts);
3554 }
3555
3561 {
3562 checkContextMatch(t);
3563 checkContextMatch(p);
3564 return new Simplifier(this, Native.simplifierUsingParams(nCtx(),
3565 t.getNativeObject(), p.getNativeObject()));
3566 }
3567
3575 {
3576 return usingParams(t, p);
3577 }
3578
3582 public int getNumProbes()
3583 {
3584 return Native.getNumProbes(nCtx());
3585 }
3586
3590 public String[] getProbeNames()
3591 {
3592
3593 int n = getNumProbes();
3594 String[] res = new String[n];
3595 for (int i = 0; i < n; i++)
3596 res[i] = Native.getProbeName(nCtx(), i);
3597 return res;
3598 }
3599
3604 public String getProbeDescription(String name)
3605 {
3606 return Native.probeGetDescr(nCtx(), name);
3607 }
3608
3612 public Probe mkProbe(String name)
3613 {
3614 return new Probe(this, name);
3615 }
3616
3620 public Probe constProbe(double val)
3621 {
3622 return new Probe(this, Native.probeConst(nCtx(), val));
3623 }
3624
3629 public Probe lt(Probe p1, Probe p2)
3630 {
3631 checkContextMatch(p1);
3632 checkContextMatch(p2);
3633 return new Probe(this, Native.probeLt(nCtx(), p1.getNativeObject(),
3634 p2.getNativeObject()));
3635 }
3636
3641 public Probe gt(Probe p1, Probe p2)
3642 {
3643 checkContextMatch(p1);
3644 checkContextMatch(p2);
3645 return new Probe(this, Native.probeGt(nCtx(), p1.getNativeObject(),
3646 p2.getNativeObject()));
3647 }
3648
3654 public Probe le(Probe p1, Probe p2)
3655 {
3656 checkContextMatch(p1);
3657 checkContextMatch(p2);
3658 return new Probe(this, Native.probeLe(nCtx(), p1.getNativeObject(),
3659 p2.getNativeObject()));
3660 }
3661
3667 public Probe ge(Probe p1, Probe p2)
3668 {
3669 checkContextMatch(p1);
3670 checkContextMatch(p2);
3671 return new Probe(this, Native.probeGe(nCtx(), p1.getNativeObject(),
3672 p2.getNativeObject()));
3673 }
3674
3679 public Probe eq(Probe p1, Probe p2)
3680 {
3681 checkContextMatch(p1);
3682 checkContextMatch(p2);
3683 return new Probe(this, Native.probeEq(nCtx(), p1.getNativeObject(),
3684 p2.getNativeObject()));
3685 }
3686
3690 public Probe and(Probe p1, Probe p2)
3691 {
3692 checkContextMatch(p1);
3693 checkContextMatch(p2);
3694 return new Probe(this, Native.probeAnd(nCtx(), p1.getNativeObject(),
3695 p2.getNativeObject()));
3696 }
3697
3701 public Probe or(Probe p1, Probe p2)
3702 {
3703 checkContextMatch(p1);
3704 checkContextMatch(p2);
3705 return new Probe(this, Native.probeOr(nCtx(), p1.getNativeObject(),
3706 p2.getNativeObject()));
3707 }
3708
3712 public Probe not(Probe p)
3713 {
3714 checkContextMatch(p);
3715 return new Probe(this, Native.probeNot(nCtx(), p.getNativeObject()));
3716 }
3717
3726 {
3727 return mkSolver((Symbol) null);
3728 }
3729
3737 public Solver mkSolver(Symbol logic)
3738 {
3739
3740 if (logic == null)
3741 return new Solver(this, Native.mkSolver(nCtx()));
3742 else
3743 return new Solver(this, Native.mkSolverForLogic(nCtx(),
3744 logic.getNativeObject()));
3745 }
3746
3751 public Solver mkSolver(String logic)
3752 {
3753 return mkSolver(mkSymbol(logic));
3754 }
3755
3760 {
3761 return new Solver(this, Native.mkSimpleSolver(nCtx()));
3762 }
3763
3771 {
3772
3773 return new Solver(this, Native.mkSolverFromTactic(nCtx(),
3774 t.getNativeObject()));
3775 }
3776
3781 {
3782 return new Solver(this, Native.solverAddSimplifier(nCtx(), s.getNativeObject(), simp.getNativeObject()));
3783 }
3784
3789 {
3790 return new Fixedpoint(this);
3791 }
3792
3797 {
3798 return new Optimize(this);
3799 }
3800
3801
3807 {
3808 return new FPRMSort(this);
3809 }
3810
3816 {
3817 return new FPRMExpr(this, Native.mkFpaRoundNearestTiesToEven(nCtx()));
3818 }
3819
3825 {
3826 return new FPRMNum(this, Native.mkFpaRne(nCtx()));
3827 }
3828
3834 {
3835 return new FPRMNum(this, Native.mkFpaRoundNearestTiesToAway(nCtx()));
3836 }
3837
3843 {
3844 return new FPRMNum(this, Native.mkFpaRna(nCtx()));
3845 }
3846
3852 {
3853 return new FPRMNum(this, Native.mkFpaRoundTowardPositive(nCtx()));
3854 }
3855
3861 {
3862 return new FPRMNum(this, Native.mkFpaRtp(nCtx()));
3863 }
3864
3870 {
3871 return new FPRMNum(this, Native.mkFpaRoundTowardNegative(nCtx()));
3872 }
3873
3879 {
3880 return new FPRMNum(this, Native.mkFpaRtn(nCtx()));
3881 }
3882
3888 {
3889 return new FPRMNum(this, Native.mkFpaRoundTowardZero(nCtx()));
3890 }
3891
3897 {
3898 return new FPRMNum(this, Native.mkFpaRtz(nCtx()));
3899 }
3900
3907 public FPSort mkFPSort(int ebits, int sbits)
3908 {
3909 return new FPSort(this, ebits, sbits);
3910 }
3911
3917 {
3918 return new FPSort(this, Native.mkFpaSortHalf(nCtx()));
3919 }
3920
3926 {
3927 return new FPSort(this, Native.mkFpaSort16(nCtx()));
3928 }
3929
3935 {
3936 return new FPSort(this, Native.mkFpaSortSingle(nCtx()));
3937 }
3938
3944 {
3945 return new FPSort(this, Native.mkFpaSort32(nCtx()));
3946 }
3947
3953 {
3954 return new FPSort(this, Native.mkFpaSortDouble(nCtx()));
3955 }
3956
3962 {
3963 return new FPSort(this, Native.mkFpaSort64(nCtx()));
3964 }
3965
3971 {
3972 return new FPSort(this, Native.mkFpaSortQuadruple(nCtx()));
3973 }
3974
3980 {
3981 return new FPSort(this, Native.mkFpaSort128(nCtx()));
3982 }
3983
3984
3991 {
3992 return new FPNum(this, Native.mkFpaNan(nCtx(), s.getNativeObject()));
3993 }
3994
4001 public FPNum mkFPInf(FPSort s, boolean negative)
4002 {
4003 return new FPNum(this, Native.mkFpaInf(nCtx(), s.getNativeObject(), negative));
4004 }
4005
4012 public FPNum mkFPZero(FPSort s, boolean negative)
4013 {
4014 return new FPNum(this, Native.mkFpaZero(nCtx(), s.getNativeObject(), negative));
4015 }
4016
4023 public FPNum mkFPNumeral(float v, FPSort s)
4024 {
4025 return new FPNum(this, Native.mkFpaNumeralFloat(nCtx(), v, s.getNativeObject()));
4026 }
4027
4034 public FPNum mkFPNumeral(double v, FPSort s)
4035 {
4036 return new FPNum(this, Native.mkFpaNumeralDouble(nCtx(), v, s.getNativeObject()));
4037 }
4038
4045 public FPNum mkFPNumeral(int v, FPSort s)
4046 {
4047 return new FPNum(this, Native.mkFpaNumeralInt(nCtx(), v, s.getNativeObject()));
4048 }
4049
4058 public FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
4059 {
4060 return new FPNum(this, Native.mkFpaNumeralIntUint(nCtx(), sgn, exp, sig, s.getNativeObject()));
4061 }
4062
4071 public FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
4072 {
4073 return new FPNum(this, Native.mkFpaNumeralInt64Uint64(nCtx(), sgn, exp, sig, s.getNativeObject()));
4074 }
4075
4082 public FPNum mkFP(float v, FPSort s)
4083 {
4084 return mkFPNumeral(v, s);
4085 }
4086
4093 public FPNum mkFP(double v, FPSort s)
4094 {
4095 return mkFPNumeral(v, s);
4096 }
4097
4105 public FPNum mkFP(int v, FPSort s)
4106 {
4107 return mkFPNumeral(v, s);
4108 }
4109
4118 public FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
4119 {
4120 return mkFPNumeral(sgn, exp, sig, s);
4121 }
4122
4131 public FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
4132 {
4133 return mkFPNumeral(sgn, exp, sig, s);
4134 }
4135
4136
4143 {
4144 return new FPExpr(this, Native.mkFpaAbs(nCtx(), t.getNativeObject()));
4145 }
4146
4153 {
4154 return new FPExpr(this, Native.mkFpaNeg(nCtx(), t.getNativeObject()));
4155 }
4156
4165 {
4166 return new FPExpr(this, Native.mkFpaAdd(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4167 }
4168
4177 {
4178 return new FPExpr(this, Native.mkFpaSub(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4179 }
4180
4189 {
4190 return new FPExpr(this, Native.mkFpaMul(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4191 }
4192
4201 {
4202 return new FPExpr(this, Native.mkFpaDiv(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4203 }
4204
4216 {
4217 return new FPExpr(this, Native.mkFpaFma(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject(), t3.getNativeObject()));
4218 }
4219
4227 {
4228 return new FPExpr(this, Native.mkFpaSqrt(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4229 }
4230
4238 {
4239 return new FPExpr(this, Native.mkFpaRem(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4240 }
4241
4250 {
4251 return new FPExpr(this, Native.mkFpaRoundToIntegral(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4252 }
4253
4261 {
4262 return new FPExpr(this, Native.mkFpaMin(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4263 }
4264
4272 {
4273 return new FPExpr(this, Native.mkFpaMax(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4274 }
4275
4283 {
4284 return new BoolExpr(this, Native.mkFpaLeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4285 }
4286
4294 {
4295 return new BoolExpr(this, Native.mkFpaLt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4296 }
4297
4305 {
4306 return new BoolExpr(this, Native.mkFpaGeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4307 }
4308
4316 {
4317 return new BoolExpr(this, Native.mkFpaGt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4318 }
4319
4329 {
4330 return new BoolExpr(this, Native.mkFpaEq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4331 }
4332
4339 {
4340 return new BoolExpr(this, Native.mkFpaIsNormal(nCtx(), t.getNativeObject()));
4341 }
4342
4349 {
4350 return new BoolExpr(this, Native.mkFpaIsSubnormal(nCtx(), t.getNativeObject()));
4351 }
4352
4359 {
4360 return new BoolExpr(this, Native.mkFpaIsZero(nCtx(), t.getNativeObject()));
4361 }
4362
4369 {
4370 return new BoolExpr(this, Native.mkFpaIsInfinite(nCtx(), t.getNativeObject()));
4371 }
4372
4379 {
4380 return new BoolExpr(this, Native.mkFpaIsNan(nCtx(), t.getNativeObject()));
4381 }
4382
4389 {
4390 return new BoolExpr(this, Native.mkFpaIsNegative(nCtx(), t.getNativeObject()));
4391 }
4392
4399 {
4400 return new BoolExpr(this, Native.mkFpaIsPositive(nCtx(), t.getNativeObject()));
4401 }
4402
4417 {
4418 return new FPExpr(this, Native.mkFpaFp(nCtx(), sgn.getNativeObject(), sig.getNativeObject(), exp.getNativeObject()));
4419 }
4420
4433 {
4434 return new FPExpr(this, Native.mkFpaToFpBv(nCtx(), bv.getNativeObject(), s.getNativeObject()));
4435 }
4436
4449 {
4450 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4451 }
4452
4465 {
4466 return new FPExpr(this, Native.mkFpaToFpReal(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4467 }
4468
4482 public FPExpr mkFPToFP(Expr<FPRMSort> rm, Expr<BitVecSort> t, FPSort s, boolean signed)
4483 {
4484 if (signed)
4485 return new FPExpr(this, Native.mkFpaToFpSigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4486 else
4487 return new FPExpr(this, Native.mkFpaToFpUnsigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4488 }
4489
4501 {
4502 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), s.getNativeObject(), rm.getNativeObject(), t.getNativeObject()));
4503 }
4504
4517 public BitVecExpr mkFPToBV(Expr<FPRMSort> rm, Expr<FPSort> t, int sz, boolean signed)
4518 {
4519 if (signed)
4520 return new BitVecExpr(this, Native.mkFpaToSbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4521 else
4522 return new BitVecExpr(this, Native.mkFpaToUbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4523 }
4524
4535 {
4536 return new RealExpr(this, Native.mkFpaToReal(nCtx(), t.getNativeObject()));
4537 }
4538
4550 {
4551 return new BitVecExpr(this, Native.mkFpaToIeeeBv(nCtx(), t.getNativeObject()));
4552 }
4553
4568 {
4569 return new BitVecExpr(this, Native.mkFpaToFpIntReal(nCtx(), rm.getNativeObject(), exp.getNativeObject(), sig.getNativeObject(), s.getNativeObject()));
4570 }
4571
4577 public final <R extends Sort> FuncDecl<BoolSort> mkLinearOrder(R sort, int index) {
4578 return (FuncDecl<BoolSort>) FuncDecl.create(
4579 this,
4580 Native.mkLinearOrder(
4581 nCtx(),
4582 sort.getNativeObject(),
4583 index
4584 )
4585 );
4586 }
4587
4593 public final <R extends Sort> FuncDecl<BoolSort> mkPartialOrder(R sort, int index) {
4594 return (FuncDecl<BoolSort>) FuncDecl.create(
4595 this,
4596 Native.mkPartialOrder(
4597 nCtx(),
4598 sort.getNativeObject(),
4599 index
4600 )
4601 );
4602 }
4603
4610 return (FuncDecl<BoolSort>) FuncDecl.create(
4611 this,
4612 Native.mkTransitiveClosure(
4613 nCtx(),
4614 f.getNativeObject()
4615 )
4616 );
4617 }
4618
4624 public final <R extends Sort> FuncDecl<BoolSort> mkPiecewiseLinearOrder(R sort, int index) {
4625 return (FuncDecl<BoolSort>) FuncDecl.create(
4626 this,
4627 Native.mkPiecewiseLinearOrder(
4628 nCtx(),
4629 sort.getNativeObject(),
4630 index
4631 )
4632 );
4633 }
4634
4640 public final <R extends Sort> FuncDecl<BoolSort> mkTreeOrder(R sort, int index) {
4641 return (FuncDecl<BoolSort>) FuncDecl.create(
4642 this,
4643 Native.mkTreeOrder(
4644 nCtx(),
4645 sort.getNativeObject(),
4646 index
4647 )
4648 );
4649 }
4650
4658 public final <R extends Sort> ASTVector polynomialSubresultants(Expr<R> p, Expr<R> q, Expr<R> x) {
4659 return new ASTVector(
4660 this,
4661 Native.polynomialSubresultants(
4662 nCtx(),
4663 p.getNativeObject(),
4664 q.getNativeObject(),
4665 x.getNativeObject()
4666 )
4667 );
4668 }
4669
4680 public AST wrapAST(long nativeObject)
4681 {
4682 return AST.create(this, nativeObject);
4683 }
4684
4697 public long unwrapAST(AST a)
4698 {
4699 return a.getNativeObject();
4700 }
4701
4706 public String SimplifyHelp()
4707 {
4708 return Native.simplifyGetHelp(nCtx());
4709 }
4710
4715 {
4716 return new ParamDescrs(this, Native.simplifyGetParamDescrs(nCtx()));
4717 }
4718
4727 public void updateParamValue(String id, String value)
4728 {
4729 Native.updateParamValue(nCtx(), id, value);
4730 }
4731
4732
4733 public long nCtx()
4734 {
4735 if (m_ctx == 0)
4736 throw new Z3Exception("Context closed");
4737 return m_ctx;
4738 }
4739
4740
4741 void checkContextMatch(Z3Object other)
4742 {
4743 if (this != other.getContext())
4744 throw new Z3Exception("Context mismatch");
4745 }
4746
4747 void checkContextMatch(Z3Object other1, Z3Object other2)
4748 {
4749 checkContextMatch(other1);
4750 checkContextMatch(other2);
4751 }
4752
4753 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3)
4754 {
4755 checkContextMatch(other1);
4756 checkContextMatch(other2);
4757 checkContextMatch(other3);
4758 }
4759
4760 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3, Z3Object other4)
4761 {
4762 checkContextMatch(other1);
4763 checkContextMatch(other2);
4764 checkContextMatch(other3);
4765 checkContextMatch(other4);
4766 }
4767
4768 void checkContextMatch(Z3Object[] arr)
4769 {
4770 if (arr != null)
4771 for (Z3Object a : arr)
4772 checkContextMatch(a);
4773 }
4774
4775 private Z3ReferenceQueue m_RefQueue = new Z3ReferenceQueue(this);
4776
4777 Z3ReferenceQueue getReferenceQueue() { return m_RefQueue; }
4778
4782 @Override
4783 public void close()
4784 {
4785 if (m_ctx == 0)
4786 return;
4787
4788 m_RefQueue.forceClear();
4789
4790 m_boolSort = null;
4791 m_intSort = null;
4792 m_realSort = null;
4793 m_stringSort = null;
4794 m_RefQueue = null;
4795
4796 synchronized (creation_lock) {
4797 Native.delContext(m_ctx);
4798 }
4799 m_ctx = 0;
4800 }
4801}
final< R extends Sort > FuncDecl< R > mkFuncDecl(String name, Sort[] domain, R range)
Definition Context.java:616
final ReExpr< SeqSort< CharSort > > mkRange(Expr< SeqSort< CharSort > > lo, Expr< SeqSort< CharSort > > hi)
Probe ge(Probe p1, Probe p2)
final< R extends Sort > ListSort< R > mkListSort(Symbol name, R elemSort)
Definition Context.java:309
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetAdd(Expr< ArraySort< D, BoolSort > > set, Expr< D > element)
Solver mkSolver(String logic)
Tactic repeat(Tactic t, int max)
BitVecExpr mkBVXOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final BoolExpr mkDistinct(Expr<?>... args)
Definition Context.java:892
BoolExpr MkStringLe(Expr< SeqSort< CharSort > > s1, Expr< SeqSort< CharSort > > s2)
final< F extends Sort, R extends Sort > Expr< R > mkUpdateField(FuncDecl< F > field, Expr< R > t, Expr< F > v)
Definition Context.java:564
String[] getSimplifierNames()
final< R extends Sort > SeqExpr< R > mkAt(Expr< SeqSort< R > > s, Expr< IntSort > index)
BitVecExpr mkBVUDiv(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > Expr< R > mkNumeral(long v, R ty)
String getProbeDescription(String name)
FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetIntersection(Expr< ArraySort< D, BoolSort > >... args)
FPNum mkFPNaN(FPSort s)
BoolExpr mkFPIsPositive(Expr< FPSort > t)
BitVecExpr mkBVNOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPExpr mkFPToFP(Expr< FPRMSort > rm, Expr< BitVecSort > t, FPSort s, boolean signed)
FPRMExpr mkFPRoundNearestTiesToEven()
final Expr mkFiniteSetFilter(Expr f, Expr set)
Expr< CharSort > charFromBv(BitVecExpr bv)
IntExpr stringToInt(Expr< SeqSort< CharSort > > e)
final< R > EnumSort< R > mkEnumSort(Symbol name, Symbol... enumNames)
Definition Context.java:289
final< R extends Sort > Expr< R > mkFreshConst(String prefix, R range)
Definition Context.java:762
Fixedpoint mkFixedpoint()
Tactic usingParams(Tactic t, Params p)
Tactic parOr(Tactic... t)
BoolExpr mkBVULE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkBVSubNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > SeqExpr< R > mkReplaceReAll(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re, Expr< SeqSort< R > > dst)
final< R extends Sort, A extends Sort > Expr< A > mkSeqFoldl(Expr<?> f, Expr< A > a, Expr< SeqSort< R > > s)
BoolExpr mkBVNegNoOverflow(Expr< BitVecSort > t)
final< R extends Sort > ReExpr< SeqSort< R > > mkToRe(Expr< SeqSort< R > > s)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetComplement(Expr< ArraySort< D, BoolSort > > arg)
final< D extends Sort, R extends Sort > Expr< R > mkSelect(Expr< ArraySort< D, R > > a, Expr< D > i)
Tactic then(Tactic t1, Tactic t2, Tactic... ts)
FPExpr mkFPMax(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkPartialOrder(R sort, int index)
IntExpr mkBV2Int(Expr< BitVecSort > t, boolean signed)
final< R extends Sort > ReExpr< R > mkLoop(Expr< ReSort< R > > re, int lo)
final< R extends Sort > ReExpr< R > mkComplement(Expr< ReSort< R > > re)
FPSort mkFPSort(int ebits, int sbits)
final< R extends Sort > FuncDecl< R > mkFreshConstDecl(String prefix, R range)
Definition Context.java:702
BoolExpr mkBVSDivNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
Probe le(Probe p1, Probe p2)
SeqExpr< CharSort > mkString(String s)
final< R extends Sort > BoolExpr mkPrefixOf(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
AST wrapAST(long nativeObject)
final< R extends Sort > SeqExpr< R > mkReplace(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
UninterpretedSort mkUninterpretedSort(Symbol s)
Definition Context.java:189
BitVecExpr mkBVXNOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkImplies(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:938
BoolExpr mkBVAddNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2, boolean isSigned)
Simplifier mkSimplifier(String name)
BitVecExpr mkBVRotateRight(int i, Expr< BitVecSort > t)
RealExpr mkInt2Real(Expr< IntSort > t)
final< R extends Sort > Expr< R > mkITE(Expr< BoolSort > t1, Expr<? extends R > t2, Expr<? extends R > t3)
Definition Context.java:915
BitVecExpr mkBVLSHR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
FPNum mkFP(double v, FPSort s)
BoolExpr mkLe(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
IntExpr mkReal2Int(Expr< RealSort > t)
final< D extends Sort > BoolExpr mkSetSubset(Expr< ArraySort< D, BoolSort > > arg1, Expr< ArraySort< D, BoolSort > > arg2)
FPNum mkFPInf(FPSort s, boolean negative)
FPExpr mkFPRoundToIntegral(Expr< FPRMSort > rm, Expr< FPSort > t)
BoolExpr mkAtLeast(Expr< BoolSort >[] args, int k)
BitVecExpr mkBVSMod(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkInt2BV(int n, Expr< IntSort > t)
BoolExpr mkBVSGE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkBVConst(Symbol name, int size)
Definition Context.java:829
BitVecExpr mkExtract(int high, int low, Expr< BitVecSort > t)
BoolExpr mkFPGEq(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > SeqExpr< R > mkUnit(Expr< R > elem)
Probe or(Probe p1, Probe p2)
BitVecExpr mkBVURem(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< D extends Sort, R1 extends Sort, R2 extends Sort > ArrayExpr< D, R2 > mkMap(FuncDecl< R2 > f, Expr< ArraySort< D, R1 > >... args)
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkConstArray(D domain, Expr< R > v)
TypeVarSort mkTypeVariable(String name)
Definition Context.java:494
Tactic cond(Probe p, Tactic t1, Tactic t2)
BoolExpr mkBVSGT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkBVConst(String name, int size)
Definition Context.java:837
final< R extends Sort > SeqSort< R > mkSeqSort(R s)
Definition Context.java:259
BoolExpr mkAtMost(Expr< BoolSort >[] args, int k)
final< R extends Sort > Expr< R > mkSelect(Expr< ArraySort< Sort, R > > a, Expr<?>[] args)
BoolExpr mkFPIsSubnormal(Expr< FPSort > t)
IntExpr mkMod(Expr< IntSort > t1, Expr< IntSort > t2)
FPExpr mkFPToFP(Expr< FPRMSort > rm, RealExpr t, FPSort s)
FPExpr mkFPSub(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkAllcharRe(ReSort< R > s)
SeqExpr< CharSort > intToString(Expr< IntSort > e)
BoolExpr mkBVMulNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2, boolean isSigned)
FPExpr mkFPSqrt(Expr< FPRMSort > rm, Expr< FPSort > t)
FPNum mkFPNumeral(int v, FPSort s)
final< R extends Sort > SeqExpr< R > mkSeqMap(Expr<?> f, Expr< SeqSort< R > > s)
final< R extends Sort > Expr< R > mkConst(String name, R range)
Definition Context.java:753
FPExpr mkFPMul(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkStar(Expr< ReSort< R > > re)
BitVecExpr mkConcat(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkSignExt(int i, Expr< BitVecSort > t)
BitVecExpr mkBVAdd(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
final< R extends Sort > FuncDecl< R > mkFreshFuncDecl(String prefix, Sort[] domain, R range)
Definition Context.java:669
final< R extends Sort > Expr< R > mkBound(int index, R ty)
Definition Context.java:714
final< R extends Sort > SeqExpr< R > mkReplaceAll(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
void updateParamValue(String id, String value)
BitVecExpr mkZeroExt(int i, Expr< BitVecSort > t)
Simplifier andThen(Simplifier t1, Simplifier t2, Simplifier... ts)
SeqExpr< CharSort > ubvToString(Expr< BitVecSort > e)
final< R extends Sort > ASTVector polynomialSubresultants(Expr< R > p, Expr< R > q, Expr< R > x)
final< R extends Sort > Lambda< R > mkLambda(Sort[] sorts, Symbol[] names, Expr< R > body)
final< R extends Sort > ReExpr< R > mkConcat(ReExpr< R >... t)
Tactic failIf(Probe p)
BoolExpr mkFPLt(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkFullRe(ReSort< R > s)
BitVecExpr mkBVRedAND(Expr< BitVecSort > t)
BitVecNum mkBV(long v, int size)
BitVecExpr mkBVSRem(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkPiecewiseLinearOrder(R sort, int index)
FPNum mkFPNumeral(float v, FPSort s)
Tactic when(Probe p, Tactic t)
final Expr mkFiniteSetRange(Expr low, Expr high)
final< R extends Sort > ReExpr< R > mkPlus(Expr< ReSort< R > > re)
IntNum mkInt(String v)
Probe mkProbe(String name)
BoolExpr mkPBLe(int[] coeffs, Expr< BoolSort >[] args, int k)
RealExpr mkRealConst(String name)
Definition Context.java:821
final< R extends Sort > SeqExpr< R > mkSeqMapi(Expr<?> f, Expr< IntSort > i, Expr< SeqSort< R > > s)
final< R extends Sort > IntExpr mkLength(Expr< SeqSort< R > > s)
final< R extends Sort, A extends Sort > Expr< A > mkSeqFoldli(Expr<?> f, Expr< IntSort > i, Expr< A > a, Expr< SeqSort< R > > s)
final< R extends ArithSort > ArithExpr< R > mkAdd(Expr<? extends R >... t)
Definition Context.java:983
ParamDescrs getSimplifyParameterDescriptions()
final BoolExpr mkFiniteSetMember(Expr elem, Expr set)
BitVecExpr mkBVRotateRight(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< D extends Sort > ArrayExpr< D, BoolSort > mkFullSet(D domain)
SeqExpr< CharSort > sbvToString(Expr< BitVecSort > e)
Probe gt(Probe p1, Probe p2)
BoolExpr mkFPIsNaN(Expr< FPSort > t)
BoolExpr mkEq(Expr<?> x, Expr<?> y)
Definition Context.java:880
Tactic with(Tactic t, Params p)
final BoolExpr mkNot(Expr< BoolSort > a)
Definition Context.java:902
BitVecExpr mkBVASHR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
final< R > DatatypeSort< R > mkDatatypeSort(Symbol name, Constructor< R >[] constructors)
Definition Context.java:374
Solver mkSolver(Solver s, Simplifier simp)
String benchmarkToSMTString(String name, String logic, String status, String attributes, Expr< BoolSort >[] assumptions, Expr< BoolSort > formula)
final Expr mkFiniteSetDifference(Expr s1, Expr s2)
final< R extends Sort > ArraySort< Sort, R > mkArraySort(Sort[] domains, R range)
Definition Context.java:241
final Expr mkFiniteSetMap(Expr f, Expr set)
FPRMNum mkFPRoundNearestTiesToAway()
BoolExpr mkIsDigit(Expr< CharSort > ch)
BoolExpr mkBool(boolean value)
Definition Context.java:872
final< R extends Sort > BoolExpr mkInRe(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re)
final< D extends Sort, R extends Sort > ArraySort< D, R > mkArraySort(D domain, R range)
Definition Context.java:230
BitVecExpr mkBVMul(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > Expr< R > mkNumeral(int v, R ty)
BitVecExpr mkBVSub(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames, Sort[] fieldSorts)
Definition Context.java:276
BitVecExpr mkBVOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkLt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
final Pattern mkPattern(Expr<?>... terms)
Definition Context.java:724
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkArrayConst(Symbol name, D domain, R range)
final< R > Constructor< R > mkConstructor(String name, String recognizer, String[] fieldNames, Sort[] sorts, int[] sortRefs)
Definition Context.java:365
BitVecExpr mkRepeat(int i, Expr< BitVecSort > t)
final< R extends Sort > IntExpr mkLastIndexOf(Expr< SeqSort< R > > s, Expr< SeqSort< R > > substr)
final< R extends Sort > Expr< R > mkNumeral(String v, R ty)
BoolExpr mkXor(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:949
Simplifier then(Simplifier t1, Simplifier t2, Simplifier... ts)
FPRMNum mkFPRoundTowardNegative()
Probe eq(Probe p1, Probe p2)
Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
BitVecExpr mkBVRotateLeft(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkLinearOrder(R sort, int index)
final< R extends Sort > FuncDecl< R > mkFuncDecl(String name, Sort domain, R range)
Definition Context.java:627
final Expr mkFiniteSetEmpty(Sort setSort)
final< R extends Sort > Expr< R > mkNth(Expr< SeqSort< R > > s, Expr< IntSort > index)
final< R extends Sort > ReExpr< R > mkEmptyRe(ReSort< R > s)
Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
BitVecExpr mkBVRedOR(Expr< BitVecSort > t)
BoolExpr mkBVUGE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPExpr mkFPDiv(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > SeqExpr< R > mkExtract(Expr< SeqSort< R > > s, Expr< IntSort > offset, Expr< IntSort > length)
BitVecExpr mkBVNAND(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > SeqExpr< R > mkEmptySeq(R s)
final< R extends ArithSort > ArithExpr< R > mkDiv(Expr<? extends R > t1, Expr<? extends R > t2)
FPExpr mkFPRem(Expr< FPSort > t1, Expr< FPSort > t2)
SeqSort< CharSort > getStringSort()
Definition Context.java:178
final< D extends Sort, R extends Sort > Expr< D > mkArrayExt(Expr< ArraySort< D, R > > arg1, Expr< ArraySort< D, R > > arg2)
final< R extends Sort > ReExpr< R > mkLoop(Expr< ReSort< R > > re, int lo, int hi)
Quantifier mkQuantifier(boolean universal, Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
IntExpr mkIntConst(String name)
Definition Context.java:805
Solver mkSolver(Tactic t)
BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
final< R extends Sort > Expr< R > mkApp(FuncDecl< R > f, Expr<?>... args)
Definition Context.java:846
BoolExpr mkBVAddNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final Expr mkFiniteSetUnion(Expr s1, Expr s2)
BoolExpr mkBVSubNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2, boolean isSigned)
BoolExpr mkFPIsZero(Expr< FPSort > t)
final< R > DatatypeSort< R > mkDatatypeSort(String name, Constructor< R >[] constructors)
Definition Context.java:384
final< R extends Sort > Expr< R > mkConst(FuncDecl< R > f)
Definition Context.java:773
BitVecExpr charToBv(Expr< CharSort > ch)
IntExpr mkIntConst(Symbol name)
Definition Context.java:797
final< R > FiniteDomainSort< R > mkFiniteDomainSort(Symbol name, long size)
Definition Context.java:328
final< R extends Sort > ReExpr< R > mkPower(Expr< ReSort< R > > re, int n)
final< R extends Sort > FuncDecl< R > mkConstDecl(String name, R range)
Definition Context.java:690
Simplifier with(Simplifier t, Params p)
BitVecExpr mkBVNeg(Expr< BitVecSort > t)
Tactic mkTactic(String name)
BoolExpr mkBVSLE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFPNumeral(double v, FPSort s)
final< R extends Sort > ListSort< R > mkListSort(String name, R elemSort)
Definition Context.java:319
Tactic parAndThen(Tactic t1, Tactic t2)
RatNum mkReal(long v)
BoolExpr mkGt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
final Sort getFiniteSetSortBasis(Sort s)
BitVecNum mkBV(int v, int size)
final< R extends ArithSort > ArithExpr< R > mkPower(Expr<? extends R > t1, Expr<? extends R > t2)
Context(Map< String, String > settings)
Definition Context.java:72
final< R extends Sort > ReExpr< R > mkIntersect(Expr< ReSort< R > >... t)
final< R extends Sort > FuncDecl< R > mkFuncDecl(Symbol name, Sort domain, R range)
Definition Context.java:603
final< R extends ArithSort > ArithExpr< R > mkMul(Expr<? extends R >... t)
Definition Context.java:994
BoolExpr mkBVMulNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkBVSDiv(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPRMSort mkFPRoundingModeSort()
RealExpr mkRealConst(Symbol name)
Definition Context.java:813
String getTacticDescription(String name)
Solver mkSolver(Symbol logic)
final Expr mkFiniteSetSingleton(Expr elem)
BoolExpr mkFPEq(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > IntExpr mkIndexOf(Expr< SeqSort< R > > s, Expr< SeqSort< R > > substr, Expr< IntSort > offset)
BoolExpr mkFPLEq(Expr< FPSort > t1, Expr< FPSort > t2)
RatNum mkReal(int num, int den)
BitVecSort mkBitVecSort(int size)
Definition Context.java:222
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkStore(Expr< ArraySort< D, R > > a, Expr< D > i, Expr< R > v)
FPExpr mkFPToFP(Expr< BitVecSort > bv, FPSort s)
BoolExpr mkBVSLT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkFPGt(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkTreeOrder(R sort, int index)
BoolExpr mkIff(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:927
BoolExpr mkGe(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
BitVecExpr mkFPToFP(Expr< FPRMSort > rm, Expr< IntSort > exp, Expr< RealSort > sig, FPSort s)
BoolExpr mkIsInteger(Expr< RealSort > t)
FPExpr mkFPToFP(Expr< FPRMSort > rm, FPExpr t, FPSort s)
Probe constProbe(double val)
BoolExpr mkFPIsNegative(Expr< FPSort > t)
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkArrayConst(String name, D domain, R range)
BoolExpr mkBoolConst(String name)
Definition Context.java:789
RealExpr mkFPToReal(Expr< FPSort > t)
BoolExpr MkStringLt(Expr< SeqSort< CharSort > > s1, Expr< SeqSort< CharSort > > s2)
final Expr mkFiniteSetIntersect(Expr s1, Expr s2)
FPExpr mkFP(Expr< BitVecSort > sgn, Expr< BitVecSort > sig, Expr< BitVecSort > exp)
FPExpr mkFPToFP(FPSort s, Expr< FPRMSort > rm, Expr< FPSort > t)
FPExpr mkFPNeg(Expr< FPSort > t)
BoolExpr mkDivides(Expr< IntSort > t1, Expr< IntSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkTransitiveClosure(FuncDecl< BoolSort > f)
final< R extends Sort > SeqExpr< R > mkConcat(Expr< SeqSort< R > >... t)
BoolExpr mkCharLe(Expr< CharSort > ch1, Expr< CharSort > ch2)
FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
final< R extends Sort > BoolExpr mkSuffixOf(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
SeqSort< CharSort > mkStringSort()
Definition Context.java:251
final< R extends Sort > BoolExpr mkContains(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
FPRMNum mkFPRoundTowardPositive()
final< D extends Sort > SetSort< D > mkSetSort(D ty)
Quantifier mkExists(Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final boolean isFiniteSetSort(Sort s)
final< D extends Sort > BoolExpr mkSetMembership(Expr< D > elem, Expr< ArraySort< D, BoolSort > > set)
final< R > Constructor< R > mkConstructor(Symbol name, Symbol recognizer, Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
Definition Context.java:355
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetUnion(Expr< ArraySort< D, BoolSort > >... args)
BoolExpr mkBVULT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > ArrayExpr< Sort, R > mkStore(Expr< ArraySort< Sort, R > > a, Expr<?>[] args, Expr< R > v)
final< R extends Sort > ReExpr< R > mkOption(Expr< ReSort< R > > re)
BoolExpr mkFPIsNormal(Expr< FPSort > t)
DatatypeSort< Object >[] mkDatatypeSorts(String[] names, Constructor< Object >[][] c)
Definition Context.java:470
final< R extends Sort > SeqExpr< R > mkReplaceRe(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re, Expr< SeqSort< R > > dst)
Probe and(Probe p1, Probe p2)
IntExpr charToInt(Expr< CharSort > ch)
Tactic tryFor(Tactic t, int ms)
FPExpr mkFPFMA(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2, Expr< FPSort > t3)
UninterpretedSort mkUninterpretedSort(String str)
Definition Context.java:198
void setPrintMode(Z3_ast_print_mode value)
DatatypeSort< Object >[] mkDatatypeSorts(Symbol[] names, Constructor< Object >[][] c)
Definition Context.java:444
final BoolExpr mkAnd(Expr< BoolSort >... t)
Definition Context.java:961
final< R extends Sort > FuncDecl< R > mkConstDecl(Symbol name, R range)
Definition Context.java:680
BitVecNum mkBV(String v, int size)
BitVecExpr mkBVRotateLeft(int i, Expr< BitVecSort > t)
Probe lt(Probe p1, Probe p2)
final BoolExpr mkFiniteSetSubset(Expr s1, Expr s2)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetDel(Expr< ArraySort< D, BoolSort > > set, Expr< D > element)
Quantifier mkForall(Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final< R extends Sort > void AddRecDef(FuncDecl< R > f, Expr<?>[] args, Expr< R > body)
Definition Context.java:654
final< R extends Sort > ReSort< R > mkReSort(R s)
Definition Context.java:267
IntExpr mkRem(Expr< IntSort > t1, Expr< IntSort > t2)
BitVecExpr mkBVNot(Expr< BitVecSort > t)
final< R extends ArithSort > ArithExpr< R > mkSub(Expr<? extends R >... t)
BitVecExpr mkBVAND(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< R > mkFuncDecl(Symbol name, Sort[] domain, R range)
Definition Context.java:577
FPExpr mkFPAbs(Expr< FPSort > t)
BoolExpr mkPBEq(int[] coeffs, Expr< BoolSort >[] args, int k)
Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
final FiniteSetSort mkFiniteSetSort(Sort elemSort)
final< R extends ArithSort > ArithExpr< R > mkUnaryMinus(Expr< R > t)
final Expr mkFiniteSetSize(Expr set)
FPExpr mkFPAdd(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
BoolExpr mkBVUGT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFP(float v, FPSort s)
final BoolExpr mkOr(Expr< BoolSort >... t)
Definition Context.java:972
BitVecExpr mkBVSHL(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
String getSimplifierDescription(String name)
final< R extends Sort > Expr< R > mkConst(Symbol name, R range)
Definition Context.java:738
final< D extends Sort > ArrayExpr< D, BoolSort > mkEmptySet(D domain)
Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkAsArray(FuncDecl< R > f)
BitVecExpr mkFPToIEEEBV(Expr< FPSort > t)
final< R extends Sort > Lambda< R > mkLambda(Expr<?>[] boundConstants, Expr< R > body)
FPExpr mkFPMin(Expr< FPSort > t1, Expr< FPSort > t2)
Tactic orElse(Tactic t1, Tactic t2)
final< R extends Sort > FuncDecl< R > mkRecFuncDecl(Symbol name, Sort[] domain, R range)
Definition Context.java:639
final< R extends Sort > FuncDecl< R > mkPropagateFunction(Symbol name, Sort[] domain, R range)
Definition Context.java:585
TypeVarSort mkTypeVariable(Symbol name)
Definition Context.java:482
RatNum mkReal(String v)
FPNum mkFP(int v, FPSort s)
final< D extends Sort, R extends Sort > Expr< R > mkTermArray(Expr< ArraySort< D, R > > array)
final< R extends Sort > ReExpr< R > mkUnion(Expr< ReSort< R > >... t)
IntSymbol mkSymbol(int i)
Definition Context.java:94
final< R extends Sort > ReExpr< R > mkDiff(Expr< ReSort< R > > a, Expr< ReSort< R > > b)
StringSymbol mkSymbol(String name)
Definition Context.java:102
FPNum mkFPZero(FPSort s, boolean negative)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetDifference(Expr< ArraySort< D, BoolSort > > arg1, Expr< ArraySort< D, BoolSort > > arg2)
BoolExpr mkFPIsInfinite(Expr< FPSort > t)
final< R > FiniteDomainSort< R > mkFiniteDomainSort(String name, long size)
Definition Context.java:338
Simplifier usingParams(Simplifier t, Params p)
BoolExpr mkBoolConst(Symbol name)
Definition Context.java:781
final< R > EnumSort< R > mkEnumSort(String name, String... enumNames)
Definition Context.java:300
BitVecExpr mkFPToBV(Expr< FPRMSort > rm, Expr< FPSort > t, int sz, boolean signed)
BoolExpr mkPBGe(int[] coeffs, Expr< BoolSort >[] args, int k)
static< R extends Sort > Lambda< R > of(Context ctx, Sort[] sorts, Symbol[] names, Expr< R > body)
Definition Lambda.java:94
static Quantifier of(Context ctx, boolean isForall, Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
static long[] arrayToNative(Z3Object[] a)
Definition Z3Object.java:73
static int arrayLength(Z3Object[] a)
Definition Z3Object.java:83
Z3_ast_print_mode
Z3 pretty printing modes (See Z3_set_ast_print_mode).
Definition z3_api.h:1363