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 ComplexSort m_complexSort = null;
124 private SeqSort<CharSort> m_stringSort = null;
125
130 {
131 if (m_boolSort == null) {
132 m_boolSort = new BoolSort(this);
133 }
134 return m_boolSort;
135 }
136
141 {
142 if (m_intSort == null) {
143 m_intSort = new IntSort(this);
144 }
145 return m_intSort;
146 }
147
152 {
153 if (m_realSort == null) {
154 m_realSort = new RealSort(this);
155 }
156 return m_realSort;
157 }
158
161 {
162 if (m_complexSort == null) {
163 m_complexSort = new ComplexSort(this);
164 }
165 return m_complexSort;
166 }
167
170 {
171 return new ComplexSort(this);
172 }
173
178 {
179 return new BoolSort(this);
180 }
181
187 {
188 return new CharSort(this);
189 }
190
195 {
196 if (m_stringSort == null) {
197 m_stringSort = mkStringSort();
198 }
199 return m_stringSort;
200 }
201
206 {
207 checkContextMatch(s);
208 return new UninterpretedSort(this, s);
209 }
210
215 {
216 return mkUninterpretedSort(mkSymbol(str));
217 }
218
223 {
224 return new IntSort(this);
225 }
226
231 {
232 return new RealSort(this);
233 }
234
238 public BitVecSort mkBitVecSort(int size)
239 {
240 return new BitVecSort(this, Native.mkBvSort(nCtx(), size));
241 }
242
246 public final <D extends Sort, R extends Sort> ArraySort<D, R> mkArraySort(D domain, R range)
247 {
248 checkContextMatch(domain);
249 checkContextMatch(range);
250 return new ArraySort<>(this, domain, range);
251 }
252
253
257 public final <R extends Sort> ArraySort<Sort, R> mkArraySort(Sort[] domains, R range)
258 {
259 checkContextMatch(domains);
260 checkContextMatch(range);
261 return new ArraySort<>(this, domains, range);
262 }
263
268 {
269 return new SeqSort<>(this, Native.mkStringSort(nCtx()));
270 }
271
275 public final <R extends Sort> SeqSort<R> mkSeqSort(R s)
276 {
277 return new SeqSort<>(this, Native.mkSeqSort(nCtx(), s.getNativeObject()));
278 }
279
283 public final <R extends Sort> ReSort<R> mkReSort(R s)
284 {
285 return new ReSort<>(this, Native.mkReSort(nCtx(), s.getNativeObject()));
286 }
287
288
292 public TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames,
293 Sort[] fieldSorts)
294 {
295 checkContextMatch(name);
296 checkContextMatch(fieldNames);
297 checkContextMatch(fieldSorts);
298 return new TupleSort(this, name, fieldNames.length, fieldNames,
299 fieldSorts);
300 }
301
305 public final <R> EnumSort<R> mkEnumSort(Symbol name, Symbol... enumNames)
306
307 {
308 checkContextMatch(name);
309 checkContextMatch(enumNames);
310 return new EnumSort<>(this, name, enumNames);
311 }
312
316 public final <R> EnumSort<R> mkEnumSort(String name, String... enumNames)
317
318 {
319 return new EnumSort<>(this, mkSymbol(name), mkSymbols(enumNames));
320 }
321
325 public final <R extends Sort> ListSort<R> mkListSort(Symbol name, R elemSort)
326 {
327 checkContextMatch(name);
328 checkContextMatch(elemSort);
329 return new ListSort<>(this, name, elemSort);
330 }
331
335 public final <R extends Sort> ListSort<R> mkListSort(String name, R elemSort)
336 {
337 checkContextMatch(elemSort);
338 return new ListSort<>(this, mkSymbol(name), elemSort);
339 }
340
344 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(Symbol name, long size)
345
346 {
347 checkContextMatch(name);
348 return new FiniteDomainSort<>(this, name, size);
349 }
350
354 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(String name, long size)
355
356 {
357 return new FiniteDomainSort<>(this, mkSymbol(name), size);
358 }
359
371 public final <R> Constructor<R> mkConstructor(Symbol name, Symbol recognizer,
372 Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
373
374 {
375 return of(this, name, recognizer, fieldNames, sorts, sortRefs);
376 }
377
381 public final <R> Constructor<R> mkConstructor(String name, String recognizer,
382 String[] fieldNames, Sort[] sorts, int[] sortRefs)
383 {
384 return of(this, mkSymbol(name), mkSymbol(recognizer), mkSymbols(fieldNames), sorts, sortRefs);
385 }
386
390 public final <R> DatatypeSort<R> mkDatatypeSort(Symbol name, Constructor<R>[] constructors)
391 {
392 checkContextMatch(name);
393 checkContextMatch(constructors);
394 return new DatatypeSort<>(this, name, constructors);
395 }
396
400 public final <R> DatatypeSort<R> mkDatatypeSort(String name, Constructor<R>[] constructors)
401
402 {
403 checkContextMatch(constructors);
404 return new DatatypeSort<>(this, mkSymbol(name), constructors);
405 }
406
413 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name, Sort[] params)
414 {
415 checkContextMatch(name);
416 if (params != null)
417 checkContextMatch(params);
418
419 int numParams = (params == null) ? 0 : params.length;
420 long[] paramsNative = (params == null) ? new long[0] : AST.arrayToNative(params);
421 return new DatatypeSort<>(this, Native.mkDatatypeSort(nCtx(), name.getNativeObject(), numParams, paramsNative));
422 }
423
429 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name)
430 {
431 return mkDatatypeSortRef(name, null);
432 }
433
440 public <R> DatatypeSort<R> mkDatatypeSortRef(String name, Sort[] params)
441 {
442 return mkDatatypeSortRef(mkSymbol(name), params);
443 }
444
450 public <R> DatatypeSort<R> mkDatatypeSortRef(String name)
451 {
452 return mkDatatypeSortRef(name, null);
453 }
454
461 {
462 checkContextMatch(names);
463 int n = names.length;
465 long[] n_constr = new long[n];
466 for (int i = 0; i < n; i++)
467 {
468 Constructor<Object>[] constructor = c[i];
469
470 checkContextMatch(constructor);
471 cla[i] = new ConstructorList<>(this, constructor);
472 n_constr[i] = cla[i].getNativeObject();
473 }
474 long[] n_res = new long[n];
475 Native.mkDatatypes(nCtx(), n, Symbol.arrayToNative(names), n_res,
476 n_constr);
477 DatatypeSort<Object>[] res = new DatatypeSort[n];
478 for (int i = 0; i < n; i++)
479 res[i] = new DatatypeSort<>(this, n_res[i]);
480 return res;
481 }
482
487
488 {
489 return mkDatatypeSorts(mkSymbols(names), c);
490 }
491
499 {
500 checkContextMatch(name);
501 return new TypeVarSort(this, name);
502 }
503
510 public TypeVarSort mkTypeVariable(String name)
511 {
512 return mkTypeVariable(mkSymbol(name));
513 }
514
538 public <R> DatatypeSort<R> mkPolymorphicDatatypeSort(Symbol name, Sort[] parameters, Constructor<R>[] constructors)
539 {
540 checkContextMatch(name);
541 checkContextMatch(parameters);
542 checkContextMatch(constructors);
543
544 int numParams = parameters.length;
545 long[] paramsNative = AST.arrayToNative(parameters);
546
547 int numConstructors = constructors.length;
548 long[] constructorsNative = new long[numConstructors];
549 for (int i = 0; i < numConstructors; i++) {
550 constructorsNative[i] = constructors[i].getNativeObject();
551 }
552
553 long nativeSort = Native.mkPolymorphicDatatype(nCtx(), name.getNativeObject(),
554 numParams, paramsNative, numConstructors, constructorsNative);
555
556 return new DatatypeSort<>(this, nativeSort);
557 }
558
569 public <R> DatatypeSort<R> mkPolymorphicDatatypeSort(String name, Sort[] parameters, Constructor<R>[] constructors)
570 {
571 return mkPolymorphicDatatypeSort(mkSymbol(name), parameters, constructors);
572 }
573
580 public final <F extends Sort, R extends Sort> Expr<R> mkUpdateField(FuncDecl<F> field, Expr<R> t, Expr<F> v)
581 throws Z3Exception
582 {
583 return (Expr<R>) Expr.create(this,
584 Native.datatypeUpdateField
585 (nCtx(), field.getNativeObject(),
586 t.getNativeObject(), v.getNativeObject()));
587 }
588
589
593 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort[] domain, R range)
594 {
595 checkContextMatch(name);
596 checkContextMatch(domain);
597 checkContextMatch(range);
598 return new FuncDecl<>(this, name, domain, range);
599 }
600
601 public final <R extends Sort> FuncDecl<R> mkPropagateFunction(Symbol name, Sort[] domain, R range)
602 {
603 checkContextMatch(name);
604 checkContextMatch(domain);
605 checkContextMatch(range);
606 long f = Native.solverPropagateDeclare(
607 this.nCtx(),
608 name.getNativeObject(),
609 AST.arrayLength(domain),
610 AST.arrayToNative(domain),
611 range.getNativeObject());
612 return new FuncDecl<>(this, f);
613 }
614
615
619 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort domain, R range)
620
621 {
622 checkContextMatch(name);
623 checkContextMatch(domain);
624 checkContextMatch(range);
625 Sort[] q = new Sort[] { domain };
626 return new FuncDecl<>(this, name, q, range);
627 }
628
632 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort[] domain, R range)
633
634 {
635 checkContextMatch(domain);
636 checkContextMatch(range);
637 return new FuncDecl<>(this, mkSymbol(name), domain, range);
638 }
639
643 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort domain, R range)
644
645 {
646 checkContextMatch(domain);
647 checkContextMatch(range);
648 Sort[] q = new Sort[] { domain };
649 return new FuncDecl<>(this, mkSymbol(name), q, range);
650 }
651
655 public final <R extends Sort> FuncDecl<R> mkRecFuncDecl(Symbol name, Sort[] domain, R range)
656 {
657 checkContextMatch(name);
658 checkContextMatch(domain);
659 checkContextMatch(range);
660 return new FuncDecl<>(this, name, domain, range, true);
661 }
662
663
670 public final <R extends Sort> void AddRecDef(FuncDecl<R> f, Expr<?>[] args, Expr<R> body)
671 {
672 checkContextMatch(f);
673 checkContextMatch(args);
674 checkContextMatch(body);
675 long[] argsNative = AST.arrayToNative(args);
676 Native.addRecDef(nCtx(), f.getNativeObject(), args.length, argsNative, body.getNativeObject());
677 }
678
684 public final <R extends Sort> FuncDecl<R> mkFreshFuncDecl(String prefix, Sort[] domain, R range)
685
686 {
687 checkContextMatch(domain);
688 checkContextMatch(range);
689 return new FuncDecl<>(this, prefix, domain, range);
690 }
691
695 public final <R extends Sort> FuncDecl<R> mkConstDecl(Symbol name, R range)
696 {
697 checkContextMatch(name);
698 checkContextMatch(range);
699 return new FuncDecl<>(this, name, null, range);
700 }
701
705 public final <R extends Sort> FuncDecl<R> mkConstDecl(String name, R range)
706 {
707 checkContextMatch(range);
708 return new FuncDecl<>(this, mkSymbol(name), null, range);
709 }
710
716 public final <R extends Sort> FuncDecl<R> mkFreshConstDecl(String prefix, R range)
717
718 {
719 checkContextMatch(range);
720 return new FuncDecl<>(this, prefix, null, range);
721 }
722
728 public final <R extends Sort> Expr<R> mkBound(int index, R ty)
729 {
730 return (Expr<R>) Expr.create(this,
731 Native.mkBound(nCtx(), index, ty.getNativeObject()));
732 }
733
737 @SafeVarargs
738 public final Pattern mkPattern(Expr<?>... terms)
739 {
740 if (terms.length == 0)
741 throw new Z3Exception("Cannot create a pattern from zero terms");
742
743 long[] termsNative = AST.arrayToNative(terms);
744 return new Pattern(this, Native.mkPattern(nCtx(), terms.length,
745 termsNative));
746 }
747
752 public final <R extends Sort> Expr<R> mkConst(Symbol name, R range)
753 {
754 checkContextMatch(name);
755 checkContextMatch(range);
756
757 return (Expr<R>) Expr.create(
758 this,
759 Native.mkConst(nCtx(), name.getNativeObject(),
760 range.getNativeObject()));
761 }
762
767 public final <R extends Sort> Expr<R> mkConst(String name, R range)
768 {
769 return mkConst(mkSymbol(name), range);
770 }
771
776 public final <R extends Sort> Expr<R> mkFreshConst(String prefix, R range)
777 {
778 checkContextMatch(range);
779 return (Expr<R>) Expr.create(this,
780 Native.mkFreshConst(nCtx(), prefix, range.getNativeObject()));
781 }
782
787 public final <R extends Sort> Expr<R> mkConst(FuncDecl<R> f)
788 {
789 return mkApp(f, (Expr<?>[]) null);
790 }
791
796 {
797 return (BoolExpr) mkConst(name, getBoolSort());
798 }
799
803 public BoolExpr mkBoolConst(String name)
804 {
805 return (BoolExpr) mkConst(mkSymbol(name), getBoolSort());
806 }
807
812 {
813 return (IntExpr) mkConst(name, getIntSort());
814 }
815
819 public IntExpr mkIntConst(String name)
820 {
821 return (IntExpr) mkConst(name, getIntSort());
822 }
823
828 {
829 return (RealExpr) mkConst(name, getRealSort());
830 }
831
835 public RealExpr mkRealConst(String name)
836 {
837 return (RealExpr) mkConst(name, getRealSort());
838 }
839
842 {
843 return (ComplexExpr) mkConst(name, getComplexSort());
844 }
845
847 public ComplexExpr mkComplexConst(String name)
848 {
849 return (ComplexExpr) mkConst(name, getComplexSort());
850 }
851
854 {
855 checkContextMatch(real);
856 checkContextMatch(imag);
857 return new ComplexExpr(this, Native.mkComplex(nCtx(), real.getNativeObject(), imag.getNativeObject()));
858 }
859
862 {
863 checkContextMatch(value);
864 return new RealExpr(this, Native.mkRealPart(nCtx(), value.getNativeObject()));
865 }
866
869 {
870 checkContextMatch(value);
871 return new RealExpr(this, Native.mkImagPart(nCtx(), value.getNativeObject()));
872 }
873
877 public BitVecExpr mkBVConst(Symbol name, int size)
878 {
879 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
880 }
881
885 public BitVecExpr mkBVConst(String name, int size)
886 {
887 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
888 }
889
893 @SafeVarargs
894 public final <R extends Sort> Expr<R> mkApp(FuncDecl<R> f, Expr<?>... args)
895 {
896 checkContextMatch(f);
897 checkContextMatch(args);
898 return Expr.create(this, f, args);
899 }
900
905 {
906 return new BoolExpr(this, Native.mkTrue(nCtx()));
907 }
908
913 {
914 return new BoolExpr(this, Native.mkFalse(nCtx()));
915 }
916
920 public BoolExpr mkBool(boolean value)
921 {
922 return value ? mkTrue() : mkFalse();
923 }
924
929 {
930 checkContextMatch(x);
931 checkContextMatch(y);
932 return new BoolExpr(this, Native.mkEq(nCtx(), x.getNativeObject(),
933 y.getNativeObject()));
934 }
935
939 @SafeVarargs
940 public final BoolExpr mkDistinct(Expr<?>... args)
941 {
942 checkContextMatch(args);
943 return new BoolExpr(this, Native.mkDistinct(nCtx(), args.length,
944 AST.arrayToNative(args)));
945 }
946
951 {
952 checkContextMatch(a);
953 return new BoolExpr(this, Native.mkNot(nCtx(), a.getNativeObject()));
954 }
955
963 public final <R extends Sort> Expr<R> mkITE(Expr<BoolSort> t1, Expr<? extends R> t2, Expr<? extends R> t3)
964 {
965 checkContextMatch(t1);
966 checkContextMatch(t2);
967 checkContextMatch(t3);
968 return (Expr<R>) Expr.create(this, Native.mkIte(nCtx(), t1.getNativeObject(),
969 t2.getNativeObject(), t3.getNativeObject()));
970 }
971
976 {
977 checkContextMatch(t1);
978 checkContextMatch(t2);
979 return new BoolExpr(this, Native.mkIff(nCtx(), t1.getNativeObject(),
980 t2.getNativeObject()));
981 }
982
987 {
988 checkContextMatch(t1);
989 checkContextMatch(t2);
990 return new BoolExpr(this, Native.mkImplies(nCtx(),
991 t1.getNativeObject(), t2.getNativeObject()));
992 }
993
998 {
999 checkContextMatch(t1);
1000 checkContextMatch(t2);
1001 return new BoolExpr(this, Native.mkXor(nCtx(), t1.getNativeObject(),
1002 t2.getNativeObject()));
1003 }
1004
1008 @SafeVarargs
1009 public final BoolExpr mkAnd(Expr<BoolSort>... t)
1010 {
1011 checkContextMatch(t);
1012 return new BoolExpr(this, Native.mkAnd(nCtx(), t.length,
1013 AST.arrayToNative(t)));
1014 }
1015
1019 @SafeVarargs
1020 public final BoolExpr mkOr(Expr<BoolSort>... t)
1021 {
1022 checkContextMatch(t);
1023 return new BoolExpr(this, Native.mkOr(nCtx(), t.length,
1024 AST.arrayToNative(t)));
1025 }
1026
1030 @SafeVarargs
1031 public final <R extends ArithSort> ArithExpr<R> mkAdd(Expr<? extends R>... t)
1032 {
1033 checkContextMatch(t);
1034 return (ArithExpr<R>) Expr.create(this,
1035 Native.mkAdd(nCtx(), t.length, AST.arrayToNative(t)));
1036 }
1037
1041 @SafeVarargs
1042 public final <R extends ArithSort> ArithExpr<R> mkMul(Expr<? extends R>... t)
1043 {
1044 checkContextMatch(t);
1045 return (ArithExpr<R>) Expr.create(this,
1046 Native.mkMul(nCtx(), t.length, AST.arrayToNative(t)));
1047 }
1048
1052 @SafeVarargs
1053 public final <R extends ArithSort> ArithExpr<R> mkSub(Expr<? extends R>... t)
1054 {
1055 checkContextMatch(t);
1056 return (ArithExpr<R>) Expr.create(this,
1057 Native.mkSub(nCtx(), t.length, AST.arrayToNative(t)));
1058 }
1059
1063 public final <R extends ArithSort> ArithExpr<R> mkUnaryMinus(Expr<R> t)
1064 {
1065 checkContextMatch(t);
1066 return (ArithExpr<R>) Expr.create(this,
1067 Native.mkUnaryMinus(nCtx(), t.getNativeObject()));
1068 }
1069
1073 public final <R extends ArithSort> ArithExpr<R> mkDiv(Expr<? extends R> t1, Expr<? extends R> t2)
1074 {
1075 checkContextMatch(t1);
1076 checkContextMatch(t2);
1077 return (ArithExpr<R>) Expr.create(this, Native.mkDiv(nCtx(),
1078 t1.getNativeObject(), t2.getNativeObject()));
1079 }
1080
1087 {
1088 checkContextMatch(t1);
1089 checkContextMatch(t2);
1090 return new IntExpr(this, Native.mkMod(nCtx(), t1.getNativeObject(),
1091 t2.getNativeObject()));
1092 }
1093
1100 {
1101 checkContextMatch(t1);
1102 checkContextMatch(t2);
1103 return new IntExpr(this, Native.mkRem(nCtx(), t1.getNativeObject(),
1104 t2.getNativeObject()));
1105 }
1106
1110 public final <R extends ArithSort> ArithExpr<R> mkPower(Expr<? extends R> t1,
1112 {
1113 checkContextMatch(t1);
1114 checkContextMatch(t2);
1115 return (ArithExpr<R>) Expr.create(
1116 this,
1117 Native.mkPower(nCtx(), t1.getNativeObject(),
1118 t2.getNativeObject()));
1119 }
1120
1125 {
1126 checkContextMatch(t1);
1127 checkContextMatch(t2);
1128 return new BoolExpr(this, Native.mkLt(nCtx(), t1.getNativeObject(),
1129 t2.getNativeObject()));
1130 }
1131
1136 {
1137 checkContextMatch(t1);
1138 checkContextMatch(t2);
1139 return new BoolExpr(this, Native.mkLe(nCtx(), t1.getNativeObject(),
1140 t2.getNativeObject()));
1141 }
1142
1147 {
1148 checkContextMatch(t1);
1149 checkContextMatch(t2);
1150 return new BoolExpr(this, Native.mkGt(nCtx(), t1.getNativeObject(),
1151 t2.getNativeObject()));
1152 }
1153
1158 {
1159 checkContextMatch(t1);
1160 checkContextMatch(t2);
1161 return new BoolExpr(this, Native.mkGe(nCtx(), t1.getNativeObject(),
1162 t2.getNativeObject()));
1163 }
1164
1176 {
1177 checkContextMatch(t);
1178 return new RealExpr(this,
1179 Native.mkInt2real(nCtx(), t.getNativeObject()));
1180 }
1181
1189 {
1190 checkContextMatch(t);
1191 return new IntExpr(this, Native.mkReal2int(nCtx(), t.getNativeObject()));
1192 }
1193
1198 {
1199 checkContextMatch(t);
1200 return new BoolExpr(this, Native.mkIsInt(nCtx(), t.getNativeObject()));
1201 }
1202
1207 public <R extends ArithSort> ArithExpr<R> mkAbs(Expr<? extends R> arg)
1208 {
1209 checkContextMatch(arg);
1210 return (ArithExpr<R>) Expr.create(this, Native.mkAbs(nCtx(), arg.getNativeObject()));
1211 }
1212
1218 {
1219 checkContextMatch(t1);
1220 checkContextMatch(t2);
1221 return new BoolExpr(this, Native.mkDivides(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
1222 }
1223
1230 {
1231 checkContextMatch(t);
1232 return new BitVecExpr(this, Native.mkBvnot(nCtx(), t.getNativeObject()));
1233 }
1234
1241 {
1242 checkContextMatch(t);
1243 return new BitVecExpr(this, Native.mkBvredand(nCtx(),
1244 t.getNativeObject()));
1245 }
1246
1253 {
1254 checkContextMatch(t);
1255 return new BitVecExpr(this, Native.mkBvredor(nCtx(),
1256 t.getNativeObject()));
1257 }
1258
1265 {
1266 checkContextMatch(t1);
1267 checkContextMatch(t2);
1268 return new BitVecExpr(this, Native.mkBvand(nCtx(),
1269 t1.getNativeObject(), t2.getNativeObject()));
1270 }
1271
1278 {
1279 checkContextMatch(t1);
1280 checkContextMatch(t2);
1281 return new BitVecExpr(this, Native.mkBvor(nCtx(), t1.getNativeObject(),
1282 t2.getNativeObject()));
1283 }
1284
1291 {
1292 checkContextMatch(t1);
1293 checkContextMatch(t2);
1294 return new BitVecExpr(this, Native.mkBvxor(nCtx(),
1295 t1.getNativeObject(), t2.getNativeObject()));
1296 }
1297
1304 {
1305 checkContextMatch(t1);
1306 checkContextMatch(t2);
1307 return new BitVecExpr(this, Native.mkBvnand(nCtx(),
1308 t1.getNativeObject(), t2.getNativeObject()));
1309 }
1310
1317 {
1318 checkContextMatch(t1);
1319 checkContextMatch(t2);
1320 return new BitVecExpr(this, Native.mkBvnor(nCtx(),
1321 t1.getNativeObject(), t2.getNativeObject()));
1322 }
1323
1330 {
1331 checkContextMatch(t1);
1332 checkContextMatch(t2);
1333 return new BitVecExpr(this, Native.mkBvxnor(nCtx(),
1334 t1.getNativeObject(), t2.getNativeObject()));
1335 }
1336
1343 {
1344 checkContextMatch(t);
1345 return new BitVecExpr(this, Native.mkBvneg(nCtx(), t.getNativeObject()));
1346 }
1347
1354 {
1355 checkContextMatch(t1);
1356 checkContextMatch(t2);
1357 return new BitVecExpr(this, Native.mkBvadd(nCtx(),
1358 t1.getNativeObject(), t2.getNativeObject()));
1359 }
1360
1367 {
1368 checkContextMatch(t1);
1369 checkContextMatch(t2);
1370 return new BitVecExpr(this, Native.mkBvsub(nCtx(),
1371 t1.getNativeObject(), t2.getNativeObject()));
1372 }
1373
1380 {
1381 checkContextMatch(t1);
1382 checkContextMatch(t2);
1383 return new BitVecExpr(this, Native.mkBvmul(nCtx(),
1384 t1.getNativeObject(), t2.getNativeObject()));
1385 }
1386
1395 {
1396 checkContextMatch(t1);
1397 checkContextMatch(t2);
1398 return new BitVecExpr(this, Native.mkBvudiv(nCtx(),
1399 t1.getNativeObject(), t2.getNativeObject()));
1400 }
1401
1416 {
1417 checkContextMatch(t1);
1418 checkContextMatch(t2);
1419 return new BitVecExpr(this, Native.mkBvsdiv(nCtx(),
1420 t1.getNativeObject(), t2.getNativeObject()));
1421 }
1422
1431 {
1432 checkContextMatch(t1);
1433 checkContextMatch(t2);
1434 return new BitVecExpr(this, Native.mkBvurem(nCtx(),
1435 t1.getNativeObject(), t2.getNativeObject()));
1436 }
1437
1449 {
1450 checkContextMatch(t1);
1451 checkContextMatch(t2);
1452 return new BitVecExpr(this, Native.mkBvsrem(nCtx(),
1453 t1.getNativeObject(), t2.getNativeObject()));
1454 }
1455
1463 {
1464 checkContextMatch(t1);
1465 checkContextMatch(t2);
1466 return new BitVecExpr(this, Native.mkBvsmod(nCtx(),
1467 t1.getNativeObject(), t2.getNativeObject()));
1468 }
1469
1476 {
1477 checkContextMatch(t1);
1478 checkContextMatch(t2);
1479 return new BoolExpr(this, Native.mkBvult(nCtx(), t1.getNativeObject(),
1480 t2.getNativeObject()));
1481 }
1482
1489 {
1490 checkContextMatch(t1);
1491 checkContextMatch(t2);
1492 return new BoolExpr(this, Native.mkBvslt(nCtx(), t1.getNativeObject(),
1493 t2.getNativeObject()));
1494 }
1495
1502 {
1503 checkContextMatch(t1);
1504 checkContextMatch(t2);
1505 return new BoolExpr(this, Native.mkBvule(nCtx(), t1.getNativeObject(),
1506 t2.getNativeObject()));
1507 }
1508
1515 {
1516 checkContextMatch(t1);
1517 checkContextMatch(t2);
1518 return new BoolExpr(this, Native.mkBvsle(nCtx(), t1.getNativeObject(),
1519 t2.getNativeObject()));
1520 }
1521
1528 {
1529 checkContextMatch(t1);
1530 checkContextMatch(t2);
1531 return new BoolExpr(this, Native.mkBvuge(nCtx(), t1.getNativeObject(),
1532 t2.getNativeObject()));
1533 }
1534
1541 {
1542 checkContextMatch(t1);
1543 checkContextMatch(t2);
1544 return new BoolExpr(this, Native.mkBvsge(nCtx(), t1.getNativeObject(),
1545 t2.getNativeObject()));
1546 }
1547
1554 {
1555 checkContextMatch(t1);
1556 checkContextMatch(t2);
1557 return new BoolExpr(this, Native.mkBvugt(nCtx(), t1.getNativeObject(),
1558 t2.getNativeObject()));
1559 }
1560
1567 {
1568 checkContextMatch(t1);
1569 checkContextMatch(t2);
1570 return new BoolExpr(this, Native.mkBvsgt(nCtx(), t1.getNativeObject(),
1571 t2.getNativeObject()));
1572 }
1573
1585 {
1586 checkContextMatch(t1);
1587 checkContextMatch(t2);
1588 return new BitVecExpr(this, Native.mkConcat(nCtx(),
1589 t1.getNativeObject(), t2.getNativeObject()));
1590 }
1591
1600 public BitVecExpr mkExtract(int high, int low, Expr<BitVecSort> t)
1601
1602 {
1603 checkContextMatch(t);
1604 return new BitVecExpr(this, Native.mkExtract(nCtx(), high, low,
1605 t.getNativeObject()));
1606 }
1607
1616 {
1617 checkContextMatch(t);
1618 return new BitVecExpr(this, Native.mkSignExt(nCtx(), i,
1619 t.getNativeObject()));
1620 }
1621
1630 {
1631 checkContextMatch(t);
1632 return new BitVecExpr(this, Native.mkZeroExt(nCtx(), i,
1633 t.getNativeObject()));
1634 }
1635
1642 {
1643 checkContextMatch(t);
1644 return new BitVecExpr(this, Native.mkRepeat(nCtx(), i,
1645 t.getNativeObject()));
1646 }
1647
1660 {
1661 checkContextMatch(t1);
1662 checkContextMatch(t2);
1663 return new BitVecExpr(this, Native.mkBvshl(nCtx(),
1664 t1.getNativeObject(), t2.getNativeObject()));
1665 }
1666
1679 {
1680 checkContextMatch(t1);
1681 checkContextMatch(t2);
1682 return new BitVecExpr(this, Native.mkBvlshr(nCtx(),
1683 t1.getNativeObject(), t2.getNativeObject()));
1684 }
1685
1699 {
1700 checkContextMatch(t1);
1701 checkContextMatch(t2);
1702 return new BitVecExpr(this, Native.mkBvashr(nCtx(),
1703 t1.getNativeObject(), t2.getNativeObject()));
1704 }
1705
1712 {
1713 checkContextMatch(t);
1714 return new BitVecExpr(this, Native.mkRotateLeft(nCtx(), i,
1715 t.getNativeObject()));
1716 }
1717
1724 {
1725 checkContextMatch(t);
1726 return new BitVecExpr(this, Native.mkRotateRight(nCtx(), i,
1727 t.getNativeObject()));
1728 }
1729
1737
1738 {
1739 checkContextMatch(t1);
1740 checkContextMatch(t2);
1741 return new BitVecExpr(this, Native.mkExtRotateLeft(nCtx(),
1742 t1.getNativeObject(), t2.getNativeObject()));
1743 }
1744
1752
1753 {
1754 checkContextMatch(t1);
1755 checkContextMatch(t2);
1756 return new BitVecExpr(this, Native.mkExtRotateRight(nCtx(),
1757 t1.getNativeObject(), t2.getNativeObject()));
1758 }
1759
1770 {
1771 checkContextMatch(t);
1772 return new BitVecExpr(this, Native.mkInt2bv(nCtx(), n,
1773 t.getNativeObject()));
1774 }
1775
1790 public IntExpr mkBV2Int(Expr<BitVecSort> t, boolean signed)
1791 {
1792 checkContextMatch(t);
1793 return new IntExpr(this, Native.mkBv2int(nCtx(), t.getNativeObject(),
1794 (signed)));
1795 }
1796
1803 boolean isSigned)
1804 {
1805 checkContextMatch(t1);
1806 checkContextMatch(t2);
1807 return new BoolExpr(this, Native.mkBvaddNoOverflow(nCtx(), t1
1808 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1809 }
1810
1817
1818 {
1819 checkContextMatch(t1);
1820 checkContextMatch(t2);
1821 return new BoolExpr(this, Native.mkBvaddNoUnderflow(nCtx(),
1822 t1.getNativeObject(), t2.getNativeObject()));
1823 }
1824
1831
1832 {
1833 checkContextMatch(t1);
1834 checkContextMatch(t2);
1835 return new BoolExpr(this, Native.mkBvsubNoOverflow(nCtx(),
1836 t1.getNativeObject(), t2.getNativeObject()));
1837 }
1838
1845 boolean isSigned)
1846 {
1847 checkContextMatch(t1);
1848 checkContextMatch(t2);
1849 return new BoolExpr(this, Native.mkBvsubNoUnderflow(nCtx(), t1
1850 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1851 }
1852
1859
1860 {
1861 checkContextMatch(t1);
1862 checkContextMatch(t2);
1863 return new BoolExpr(this, Native.mkBvsdivNoOverflow(nCtx(),
1864 t1.getNativeObject(), t2.getNativeObject()));
1865 }
1866
1873 {
1874 checkContextMatch(t);
1875 return new BoolExpr(this, Native.mkBvnegNoOverflow(nCtx(),
1876 t.getNativeObject()));
1877 }
1878
1885 boolean isSigned)
1886 {
1887 checkContextMatch(t1);
1888 checkContextMatch(t2);
1889 return new BoolExpr(this, Native.mkBvmulNoOverflow(nCtx(), t1
1890 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1891 }
1892
1899
1900 {
1901 checkContextMatch(t1);
1902 checkContextMatch(t2);
1903 return new BoolExpr(this, Native.mkBvmulNoUnderflow(nCtx(),
1904 t1.getNativeObject(), t2.getNativeObject()));
1905 }
1906
1910 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(Symbol name, D domain, R range)
1911
1912 {
1913 return (ArrayExpr<D, R>) mkConst(name, mkArraySort(domain, range));
1914 }
1915
1919 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(String name, D domain, R range)
1920
1921 {
1922 return (ArrayExpr<D, R>) mkConst(mkSymbol(name), mkArraySort(domain, range));
1923 }
1924
1937 public final <D extends Sort, R extends Sort> Expr<R> mkSelect(Expr<ArraySort<D, R>> a, Expr<D> i)
1938 {
1939 checkContextMatch(a);
1940 checkContextMatch(i);
1941 return (Expr<R>) Expr.create(
1942 this,
1943 Native.mkSelect(nCtx(), a.getNativeObject(),
1944 i.getNativeObject()));
1945 }
1946
1959 public final <R extends Sort> Expr<R> mkSelect(Expr<ArraySort<Sort, R>> a, Expr<?>[] args)
1960 {
1961 checkContextMatch(a);
1962 checkContextMatch(args);
1963 return (Expr<R>) Expr.create(
1964 this,
1965 Native.mkSelectN(nCtx(), a.getNativeObject(), args.length, AST.arrayToNative(args)));
1966 }
1967
1984 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkStore(Expr<ArraySort<D, R>> a, Expr<D> i, Expr<R> v)
1985 {
1986 checkContextMatch(a);
1987 checkContextMatch(i);
1988 checkContextMatch(v);
1989 return new ArrayExpr<>(this, Native.mkStore(nCtx(), a.getNativeObject(),
1990 i.getNativeObject(), v.getNativeObject()));
1991 }
1992
2009 public final <R extends Sort> ArrayExpr<Sort, R> mkStore(Expr<ArraySort<Sort, R>> a, Expr<?>[] args, Expr<R> v)
2010 {
2011 checkContextMatch(a);
2012 checkContextMatch(args);
2013 checkContextMatch(v);
2014 return new ArrayExpr<>(this, Native.mkStoreN(nCtx(), a.getNativeObject(),
2015 args.length, AST.arrayToNative(args), v.getNativeObject()));
2016 }
2017
2027 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkConstArray(D domain, Expr<R> v)
2028 {
2029 checkContextMatch(domain);
2030 checkContextMatch(v);
2031 return new ArrayExpr<>(this, Native.mkConstArray(nCtx(),
2032 domain.getNativeObject(), v.getNativeObject()));
2033 }
2034
2048 @SafeVarargs
2049 public final <D extends Sort, R1 extends Sort, R2 extends Sort> ArrayExpr<D, R2> mkMap(FuncDecl<R2> f, Expr<ArraySort<D, R1>>... args)
2050 {
2051 checkContextMatch(f);
2052 checkContextMatch(args);
2053 return (ArrayExpr<D, R2>) Expr.create(this, Native.mkMap(nCtx(),
2054 f.getNativeObject(), AST.arrayLength(args),
2055 AST.arrayToNative(args)));
2056 }
2057
2064 public final <D extends Sort, R extends Sort> Expr<R> mkTermArray(Expr<ArraySort<D, R>> array)
2065 {
2066 checkContextMatch(array);
2067 return (Expr<R>) Expr.create(this,
2068 Native.mkArrayDefault(nCtx(), array.getNativeObject()));
2069 }
2070
2078 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkAsArray(FuncDecl<R> f)
2079 {
2080 checkContextMatch(f);
2081 return (ArrayExpr<D, R>) Expr.create(this, Native.mkAsArray(nCtx(), f.getNativeObject()));
2082 }
2083
2087 public final <D extends Sort, R extends Sort> Expr<D> mkArrayExt(Expr<ArraySort<D, R>> arg1, Expr<ArraySort<D, R>> arg2)
2088 {
2089 checkContextMatch(arg1);
2090 checkContextMatch(arg2);
2091 return (Expr<D>) Expr.create(this, Native.mkArrayExt(nCtx(), arg1.getNativeObject(), arg2.getNativeObject()));
2092 }
2093
2094
2098 public final <D extends Sort> SetSort<D> mkSetSort(D ty)
2099 {
2100 checkContextMatch(ty);
2101 return new SetSort<>(this, ty);
2102 }
2103
2107 public final <D extends Sort> ArrayExpr<D, BoolSort> mkEmptySet(D domain)
2108 {
2109 checkContextMatch(domain);
2110 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2111 Native.mkEmptySet(nCtx(), domain.getNativeObject()));
2112 }
2113
2117 public final <D extends Sort> ArrayExpr<D, BoolSort> mkFullSet(D domain)
2118 {
2119 checkContextMatch(domain);
2120 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2121 Native.mkFullSet(nCtx(), domain.getNativeObject()));
2122 }
2123
2127 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetAdd(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2128 {
2129 checkContextMatch(set);
2130 checkContextMatch(element);
2131 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2132 Native.mkSetAdd(nCtx(), set.getNativeObject(),
2133 element.getNativeObject()));
2134 }
2135
2139 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetDel(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
2140 {
2141 checkContextMatch(set);
2142 checkContextMatch(element);
2143 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2144 Native.mkSetDel(nCtx(), set.getNativeObject(),
2145 element.getNativeObject()));
2146 }
2147
2151 @SafeVarargs
2152 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetUnion(Expr<ArraySort<D, BoolSort>>... args)
2153 {
2154 checkContextMatch(args);
2155 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2156 Native.mkSetUnion(nCtx(), args.length,
2157 AST.arrayToNative(args)));
2158 }
2159
2163 @SafeVarargs
2165 {
2166 checkContextMatch(args);
2167 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2168 Native.mkSetIntersect(nCtx(), args.length,
2169 AST.arrayToNative(args)));
2170 }
2171
2176 {
2177 checkContextMatch(arg1);
2178 checkContextMatch(arg2);
2179 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2180 Native.mkSetDifference(nCtx(), arg1.getNativeObject(),
2181 arg2.getNativeObject()));
2182 }
2183
2188 {
2189 checkContextMatch(arg);
2190 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2191 Native.mkSetComplement(nCtx(), arg.getNativeObject()));
2192 }
2193
2197 public final <D extends Sort> BoolExpr mkSetMembership(Expr<D> elem, Expr<ArraySort<D, BoolSort>> set)
2198 {
2199 checkContextMatch(elem);
2200 checkContextMatch(set);
2201 return (BoolExpr) Expr.create(this,
2202 Native.mkSetMember(nCtx(), elem.getNativeObject(),
2203 set.getNativeObject()));
2204 }
2205
2210 {
2211 checkContextMatch(arg1);
2212 checkContextMatch(arg2);
2213 return (BoolExpr) Expr.create(this,
2214 Native.mkSetSubset(nCtx(), arg1.getNativeObject(),
2215 arg2.getNativeObject()));
2216 }
2217
2218
2226 public final FiniteSetSort mkFiniteSetSort(Sort elemSort)
2227 {
2228 checkContextMatch(elemSort);
2229 return new FiniteSetSort(this, elemSort);
2230 }
2231
2235 public final boolean isFiniteSetSort(Sort s)
2236 {
2237 checkContextMatch(s);
2238 return Native.isFiniteSetSort(nCtx(), s.getNativeObject());
2239 }
2240
2245 {
2246 checkContextMatch(s);
2247 return Sort.create(this, Native.getFiniteSetSortBasis(nCtx(), s.getNativeObject()));
2248 }
2249
2253 public final Expr mkFiniteSetEmpty(Sort setSort)
2254 {
2255 checkContextMatch(setSort);
2256 return Expr.create(this, Native.mkFiniteSetEmpty(nCtx(), setSort.getNativeObject()));
2257 }
2258
2262 public final Expr mkFiniteSetSingleton(Expr elem)
2263 {
2264 checkContextMatch(elem);
2265 return Expr.create(this, Native.mkFiniteSetSingleton(nCtx(), elem.getNativeObject()));
2266 }
2267
2271 public final Expr mkFiniteSetUnion(Expr s1, Expr s2)
2272 {
2273 checkContextMatch(s1);
2274 checkContextMatch(s2);
2275 return Expr.create(this, Native.mkFiniteSetUnion(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2276 }
2277
2281 public final Expr mkFiniteSetIntersect(Expr s1, Expr s2)
2282 {
2283 checkContextMatch(s1);
2284 checkContextMatch(s2);
2285 return Expr.create(this, Native.mkFiniteSetIntersect(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2286 }
2287
2292 {
2293 checkContextMatch(s1);
2294 checkContextMatch(s2);
2295 return Expr.create(this, Native.mkFiniteSetDifference(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2296 }
2297
2301 public final BoolExpr mkFiniteSetMember(Expr elem, Expr set)
2302 {
2303 checkContextMatch(elem);
2304 checkContextMatch(set);
2305 return (BoolExpr) Expr.create(this, Native.mkFiniteSetMember(nCtx(), elem.getNativeObject(), set.getNativeObject()));
2306 }
2307
2311 public final Expr mkFiniteSetSize(Expr set)
2312 {
2313 checkContextMatch(set);
2314 return Expr.create(this, Native.mkFiniteSetSize(nCtx(), set.getNativeObject()));
2315 }
2316
2321 {
2322 checkContextMatch(s1);
2323 checkContextMatch(s2);
2324 return (BoolExpr) Expr.create(this, Native.mkFiniteSetSubset(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2325 }
2326
2330 public final Expr mkFiniteSetMap(Expr f, Expr set)
2331 {
2332 checkContextMatch(f);
2333 checkContextMatch(set);
2334 return Expr.create(this, Native.mkFiniteSetMap(nCtx(), f.getNativeObject(), set.getNativeObject()));
2335 }
2336
2340 public final Expr mkFiniteSetFilter(Expr f, Expr set)
2341 {
2342 checkContextMatch(f);
2343 checkContextMatch(set);
2344 return Expr.create(this, Native.mkFiniteSetFilter(nCtx(), f.getNativeObject(), set.getNativeObject()));
2345 }
2346
2350 public final Expr mkFiniteSetRange(Expr low, Expr high)
2351 {
2352 checkContextMatch(low);
2353 checkContextMatch(high);
2354 return Expr.create(this, Native.mkFiniteSetRange(nCtx(), low.getNativeObject(), high.getNativeObject()));
2355 }
2356
2357
2365 public final <R extends Sort> SeqExpr<R> mkEmptySeq(R s)
2366 {
2367 checkContextMatch(s);
2368 return (SeqExpr<R>) Expr.create(this, Native.mkSeqEmpty(nCtx(), s.getNativeObject()));
2369 }
2370
2374 public final <R extends Sort> SeqExpr<R> mkUnit(Expr<R> elem)
2375 {
2376 checkContextMatch(elem);
2377 return (SeqExpr<R>) Expr.create(this, Native.mkSeqUnit(nCtx(), elem.getNativeObject()));
2378 }
2379
2384 {
2385 StringBuilder buf = new StringBuilder();
2386 for (int i = 0; i < s.length(); i += Character.charCount(s.codePointAt(i))) {
2387 int code = s.codePointAt(i);
2388 if (code <= 32 || 127 < code)
2389 buf.append(String.format("\\u{%x}", code));
2390 else
2391 buf.append(s.charAt(i));
2392 }
2393 return (SeqExpr<CharSort>) Expr.create(this, Native.mkString(nCtx(), buf.toString()));
2394 }
2395
2400 {
2401 return (SeqExpr<CharSort>) Expr.create(this, Native.mkIntToStr(nCtx(), e.getNativeObject()));
2402 }
2403
2408 {
2409 return (SeqExpr<CharSort>) Expr.create(this, Native.mkUbvToStr(nCtx(), e.getNativeObject()));
2410 }
2411
2416 {
2417 return (SeqExpr<CharSort>) Expr.create(this, Native.mkSbvToStr(nCtx(), e.getNativeObject()));
2418 }
2419
2424 {
2425 return (IntExpr) Expr.create(this, Native.mkStrToInt(nCtx(), e.getNativeObject()));
2426 }
2427
2431 @SafeVarargs
2432 public final <R extends Sort> SeqExpr<R> mkConcat(Expr<SeqSort<R>>... t)
2433 {
2434 checkContextMatch(t);
2435 return (SeqExpr<R>) Expr.create(this, Native.mkSeqConcat(nCtx(), t.length, AST.arrayToNative(t)));
2436 }
2437
2438
2442 public final <R extends Sort> IntExpr mkLength(Expr<SeqSort<R>> s)
2443 {
2444 checkContextMatch(s);
2445 return (IntExpr) Expr.create(this, Native.mkSeqLength(nCtx(), s.getNativeObject()));
2446 }
2447
2451 public final <R extends Sort> SeqExpr<R> mkSeqPower(Expr<SeqSort<R>> s, Expr<IntSort> n)
2452 {
2453 checkContextMatch(s, n);
2454 return (SeqExpr<R>) Expr.create(this, Native.mkSeqPower(nCtx(), s.getNativeObject(), n.getNativeObject()));
2455 }
2456
2460 public final <R extends Sort> BoolExpr mkPrefixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2461 {
2462 checkContextMatch(s1, s2);
2463 return (BoolExpr) Expr.create(this, Native.mkSeqPrefix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2464 }
2465
2469 public final <R extends Sort> BoolExpr mkSuffixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2470 {
2471 checkContextMatch(s1, s2);
2472 return (BoolExpr)Expr.create(this, Native.mkSeqSuffix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2473 }
2474
2478 public final <R extends Sort> BoolExpr mkContains(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2479 {
2480 checkContextMatch(s1, s2);
2481 return (BoolExpr) Expr.create(this, Native.mkSeqContains(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2482 }
2483
2489 {
2490 checkContextMatch(s1, s2);
2491 return new BoolExpr(this, Native.mkStrLt(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2492 }
2493
2498 {
2499 checkContextMatch(s1, s2);
2500 return new BoolExpr(this, Native.mkStrLe(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2501 }
2502
2503
2507 public final <R extends Sort> SeqExpr<R> mkAt(Expr<SeqSort<R>> s, Expr<IntSort> index)
2508 {
2509 checkContextMatch(s, index);
2510 return (SeqExpr<R>) Expr.create(this, Native.mkSeqAt(nCtx(), s.getNativeObject(), index.getNativeObject()));
2511 }
2512
2516 public final <R extends Sort> Expr<R> mkNth(Expr<SeqSort<R>> s, Expr<IntSort> index)
2517 {
2518 checkContextMatch(s, index);
2519 return (Expr<R>) Expr.create(this, Native.mkSeqNth(nCtx(), s.getNativeObject(), index.getNativeObject()));
2520 }
2521
2522
2526 public final <R extends Sort> SeqExpr<R> mkExtract(Expr<SeqSort<R>> s, Expr<IntSort> offset, Expr<IntSort> length)
2527 {
2528 checkContextMatch(s, offset, length);
2529 return (SeqExpr<R>) Expr.create(this, Native.mkSeqExtract(nCtx(), s.getNativeObject(), offset.getNativeObject(), length.getNativeObject()));
2530 }
2531
2535 public final <R extends Sort> IntExpr mkIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr, Expr<IntSort> offset)
2536 {
2537 checkContextMatch(s, substr, offset);
2538 return (IntExpr)Expr.create(this, Native.mkSeqIndex(nCtx(), s.getNativeObject(), substr.getNativeObject(), offset.getNativeObject()));
2539 }
2540
2544 public final <R extends Sort> IntExpr mkLastIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr)
2545 {
2546 checkContextMatch(s, substr);
2547 return (IntExpr)Expr.create(this, Native.mkSeqLastIndex(nCtx(), s.getNativeObject(), substr.getNativeObject()));
2548 }
2549
2554 public final <R extends Sort> SeqExpr<R> mkSeqMap(Expr<?> f, Expr<SeqSort<R>> s)
2555 {
2556 checkContextMatch(f, s);
2557 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMap(nCtx(), f.getNativeObject(), s.getNativeObject()));
2558 }
2559
2564 public final <R extends Sort> SeqExpr<R> mkSeqMapi(Expr<?> f, Expr<IntSort> i, Expr<SeqSort<R>> s)
2565 {
2566 checkContextMatch(f, i, s);
2567 return (SeqExpr<R>) Expr.create(this, Native.mkSeqMapi(nCtx(), f.getNativeObject(), i.getNativeObject(), s.getNativeObject()));
2568 }
2569
2574 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldl(Expr<?> f, Expr<A> a, Expr<SeqSort<R>> s)
2575 {
2576 checkContextMatch(f, a, s);
2577 return (Expr<A>) Expr.create(this, Native.mkSeqFoldl(nCtx(), f.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2578 }
2579
2584 public final <R extends Sort, A extends Sort> Expr<A> mkSeqFoldli(Expr<?> f, Expr<IntSort> i, Expr<A> a, Expr<SeqSort<R>> s)
2585 {
2586 checkContextMatch(f, i, a, s);
2587 return (Expr<A>) Expr.create(this, Native.mkSeqFoldli(nCtx(), f.getNativeObject(), i.getNativeObject(), a.getNativeObject(), s.getNativeObject()));
2588 }
2589
2593 public final <R extends Sort> SeqExpr<R> mkReplace(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2594 {
2595 checkContextMatch(s, src, dst);
2596 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplace(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2597 }
2598
2602 public final <R extends Sort> SeqExpr<R> mkReplaceAll(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2603 {
2604 checkContextMatch(s, src, dst);
2605 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceAll(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2606 }
2607
2611 public final <R extends Sort> SeqExpr<R> mkReplaceRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2612 {
2613 checkContextMatch(s, re, dst);
2614 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceRe(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2615 }
2616
2620 public final <R extends Sort> SeqExpr<R> mkReplaceReAll(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2621 {
2622 checkContextMatch(s, re, dst);
2623 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceReAll(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2624 }
2625
2629 public final <R extends Sort> ReExpr<SeqSort<R>> mkToRe(Expr<SeqSort<R>> s)
2630 {
2631 checkContextMatch(s);
2632 return (ReExpr<SeqSort<R>>) Expr.create(this, Native.mkSeqToRe(nCtx(), s.getNativeObject()));
2633 }
2634
2635
2639 public final <R extends Sort> BoolExpr mkInRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re)
2640 {
2641 checkContextMatch(s, re);
2642 return (BoolExpr) Expr.create(this, Native.mkSeqInRe(nCtx(), s.getNativeObject(), re.getNativeObject()));
2643 }
2644
2648 public final <R extends Sort> ReExpr<R> mkStar(Expr<ReSort<R>> re)
2649 {
2650 checkContextMatch(re);
2651 return (ReExpr<R>) Expr.create(this, Native.mkReStar(nCtx(), re.getNativeObject()));
2652 }
2653
2657 public final <R extends Sort> ReExpr<R> mkPower(Expr<ReSort<R>> re, int n)
2658 {
2659 return (ReExpr<R>) Expr.create(this, Native.mkRePower(nCtx(), re.getNativeObject(), n));
2660 }
2661
2665 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo, int hi)
2666 {
2667 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, hi));
2668 }
2669
2673 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo)
2674 {
2675 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, 0));
2676 }
2677
2678
2682 public final <R extends Sort> ReExpr<R> mkPlus(Expr<ReSort<R>> re)
2683 {
2684 checkContextMatch(re);
2685 return (ReExpr<R>) Expr.create(this, Native.mkRePlus(nCtx(), re.getNativeObject()));
2686 }
2687
2691 public final <R extends Sort> ReExpr<R> mkOption(Expr<ReSort<R>> re)
2692 {
2693 checkContextMatch(re);
2694 return (ReExpr<R>) Expr.create(this, Native.mkReOption(nCtx(), re.getNativeObject()));
2695 }
2696
2700 public final <R extends Sort> ReExpr<R> mkComplement(Expr<ReSort<R>> re)
2701 {
2702 checkContextMatch(re);
2703 return (ReExpr<R>) Expr.create(this, Native.mkReComplement(nCtx(), re.getNativeObject()));
2704 }
2705
2709 @SafeVarargs
2710 public final <R extends Sort> ReExpr<R> mkConcat(ReExpr<R>... t)
2711 {
2712 checkContextMatch(t);
2713 return (ReExpr<R>) Expr.create(this, Native.mkReConcat(nCtx(), t.length, AST.arrayToNative(t)));
2714 }
2715
2719 @SafeVarargs
2720 public final <R extends Sort> ReExpr<R> mkUnion(Expr<ReSort<R>>... t)
2721 {
2722 checkContextMatch(t);
2723 return (ReExpr<R>) Expr.create(this, Native.mkReUnion(nCtx(), t.length, AST.arrayToNative(t)));
2724 }
2725
2729 @SafeVarargs
2730 public final <R extends Sort> ReExpr<R> mkIntersect(Expr<ReSort<R>>... t)
2731 {
2732 checkContextMatch(t);
2733 return (ReExpr<R>) Expr.create(this, Native.mkReIntersect(nCtx(), t.length, AST.arrayToNative(t)));
2734 }
2735
2739 public final <R extends Sort> ReExpr<R> mkDiff(Expr<ReSort<R>> a, Expr<ReSort<R>> b)
2740 {
2741 checkContextMatch(a, b);
2742 return (ReExpr<R>) Expr.create(this, Native.mkReDiff(nCtx(), a.getNativeObject(), b.getNativeObject()));
2743 }
2744
2745
2750 public final <R extends Sort> ReExpr<R> mkEmptyRe(ReSort<R> s)
2751 {
2752 return (ReExpr<R>) Expr.create(this, Native.mkReEmpty(nCtx(), s.getNativeObject()));
2753 }
2754
2759 public final <R extends Sort> ReExpr<R> mkFullRe(ReSort<R> s)
2760 {
2761 return (ReExpr<R>) Expr.create(this, Native.mkReFull(nCtx(), s.getNativeObject()));
2762 }
2763
2769 public final <R extends Sort> ReExpr<R> mkAllcharRe(ReSort<R> s)
2770 {
2771 return (ReExpr<R>) Expr.create(this, Native.mkReAllchar(nCtx(), s.getNativeObject()));
2772 }
2773
2778 {
2779 checkContextMatch(lo, hi);
2780 return (ReExpr<SeqSort<CharSort>>) Expr.create(this, Native.mkReRange(nCtx(), lo.getNativeObject(), hi.getNativeObject()));
2781 }
2782
2787 {
2788 checkContextMatch(ch1, ch2);
2789 return (BoolExpr) Expr.create(this, Native.mkCharLe(nCtx(), ch1.getNativeObject(), ch2.getNativeObject()));
2790 }
2791
2796 {
2797 checkContextMatch(ch);
2798 return (IntExpr) Expr.create(this, Native.mkCharToInt(nCtx(), ch.getNativeObject()));
2799 }
2800
2805 {
2806 checkContextMatch(ch);
2807 return (BitVecExpr) Expr.create(this, Native.mkCharToBv(nCtx(), ch.getNativeObject()));
2808 }
2809
2814 {
2815 checkContextMatch(bv);
2816 return (Expr<CharSort>) Expr.create(this, Native.mkCharFromBv(nCtx(), bv.getNativeObject()));
2817 }
2818
2823 {
2824 checkContextMatch(ch);
2825 return (BoolExpr) Expr.create(this, Native.mkCharIsDigit(nCtx(), ch.getNativeObject()));
2826 }
2827
2831 public BoolExpr mkAtMost(Expr<BoolSort>[] args, int k)
2832 {
2833 checkContextMatch(args);
2834 return (BoolExpr) Expr.create(this, Native.mkAtmost(nCtx(), args.length, AST.arrayToNative(args), k));
2835 }
2836
2840 public BoolExpr mkAtLeast(Expr<BoolSort>[] args, int k)
2841 {
2842 checkContextMatch(args);
2843 return (BoolExpr) Expr.create(this, Native.mkAtleast(nCtx(), args.length, AST.arrayToNative(args), k));
2844 }
2845
2849 public BoolExpr mkPBLe(int[] coeffs, Expr<BoolSort>[] args, int k)
2850 {
2851 checkContextMatch(args);
2852 return (BoolExpr) Expr.create(this, Native.mkPble(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2853 }
2854
2858 public BoolExpr mkPBGe(int[] coeffs, Expr<BoolSort>[] args, int k)
2859 {
2860 checkContextMatch(args);
2861 return (BoolExpr) Expr.create(this, Native.mkPbge(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2862 }
2863
2867 public BoolExpr mkPBEq(int[] coeffs, Expr<BoolSort>[] args, int k)
2868 {
2869 checkContextMatch(args);
2870 return (BoolExpr) Expr.create(this, Native.mkPbeq(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2871 }
2872
2884 public final <R extends Sort> Expr<R> mkNumeral(String v, R ty)
2885 {
2886 checkContextMatch(ty);
2887 return (Expr<R>) Expr.create(this,
2888 Native.mkNumeral(nCtx(), v, ty.getNativeObject()));
2889 }
2890
2901 public final <R extends Sort> Expr<R> mkNumeral(int v, R ty)
2902 {
2903 checkContextMatch(ty);
2904 return (Expr<R>) Expr.create(this, Native.mkInt(nCtx(), v, ty.getNativeObject()));
2905 }
2906
2917 public final <R extends Sort> Expr<R> mkNumeral(long v, R ty)
2918 {
2919 checkContextMatch(ty);
2920 return (Expr<R>) Expr.create(this,
2921 Native.mkInt64(nCtx(), v, ty.getNativeObject()));
2922 }
2923
2933 public RatNum mkReal(int num, int den)
2934 {
2935 if (den == 0) {
2936 throw new Z3Exception("Denominator is zero");
2937 }
2938
2939 return new RatNum(this, Native.mkReal(nCtx(), num, den));
2940 }
2941
2948 public RatNum mkReal(String v)
2949 {
2950
2951 return new RatNum(this, Native.mkNumeral(nCtx(), v, getRealSort()
2952 .getNativeObject()));
2953 }
2954
2961 public RatNum mkReal(int v)
2962 {
2963
2964 return new RatNum(this, Native.mkInt(nCtx(), v, getRealSort()
2965 .getNativeObject()));
2966 }
2967
2974 public RatNum mkReal(long v)
2975 {
2976
2977 return new RatNum(this, Native.mkInt64(nCtx(), v, getRealSort()
2978 .getNativeObject()));
2979 }
2980
2985 public IntNum mkInt(String v)
2986 {
2987
2988 return new IntNum(this, Native.mkNumeral(nCtx(), v, getIntSort()
2989 .getNativeObject()));
2990 }
2991
2998 public IntNum mkInt(int v)
2999 {
3000
3001 return new IntNum(this, Native.mkInt(nCtx(), v, getIntSort()
3002 .getNativeObject()));
3003 }
3004
3011 public IntNum mkInt(long v)
3012 {
3013
3014 return new IntNum(this, Native.mkInt64(nCtx(), v, getIntSort()
3015 .getNativeObject()));
3016 }
3017
3023 public BitVecNum mkBV(String v, int size)
3024 {
3025 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
3026 }
3027
3033 public BitVecNum mkBV(int v, int size)
3034 {
3035 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
3036 }
3037
3043 public BitVecNum mkBV(long v, int size)
3044 {
3045 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
3046 }
3047
3074 public Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3075 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3076 Symbol quantifierID, Symbol skolemID)
3077 {
3078 return Quantifier.of(this, true, sorts, names, body, weight, patterns,
3079 noPatterns, quantifierID, skolemID);
3080 }
3081
3086 public Quantifier mkForall(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3087 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3088 Symbol skolemID)
3089 {
3090
3091 return Quantifier.of(this, true, boundConstants, body, weight,
3092 patterns, noPatterns, quantifierID, skolemID);
3093 }
3094
3099 public Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
3100 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3101 Symbol quantifierID, Symbol skolemID)
3102 {
3103
3104 return Quantifier.of(this, false, sorts, names, body, weight,
3105 patterns, noPatterns, quantifierID, skolemID);
3106 }
3107
3112 public Quantifier mkExists(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
3113 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
3114 Symbol skolemID)
3115 {
3116
3117 return Quantifier.of(this, false, boundConstants, body, weight,
3118 patterns, noPatterns, quantifierID, skolemID);
3119 }
3120
3125 public Quantifier mkQuantifier(boolean universal, Sort[] sorts,
3126 Symbol[] names, Expr<BoolSort> body, int weight, Pattern[] patterns,
3127 Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
3128
3129 {
3130
3131 if (universal)
3132 return mkForall(sorts, names, body, weight, patterns, noPatterns,
3133 quantifierID, skolemID);
3134 else
3135 return mkExists(sorts, names, body, weight, patterns, noPatterns,
3136 quantifierID, skolemID);
3137 }
3138
3143 public Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants,
3144 Expr<BoolSort> body, int weight, Pattern[] patterns, Expr<?>[] noPatterns,
3145 Symbol quantifierID, Symbol skolemID)
3146 {
3147
3148 if (universal)
3149 return mkForall(boundConstants, body, weight, patterns, noPatterns,
3150 quantifierID, skolemID);
3151 else
3152 return mkExists(boundConstants, body, weight, patterns, noPatterns,
3153 quantifierID, skolemID);
3154 }
3155
3174 public final <R extends Sort> Lambda<R> mkLambda(Sort[] sorts, Symbol[] names, Expr<R> body)
3175 {
3176 return Lambda.of(this, sorts, names, body);
3177 }
3178
3185 public final <R extends Sort> Lambda<R> mkLambda(Expr<?>[] boundConstants, Expr<R> body)
3186 {
3187 return Lambda.of(this, boundConstants, body);
3188 }
3189
3190
3206 {
3207 Native.setAstPrintMode(nCtx(), value.toInt());
3208 }
3209
3223 public String benchmarkToSMTString(String name, String logic,
3224 String status, String attributes, Expr<BoolSort>[] assumptions,
3225 Expr<BoolSort> formula)
3226 {
3227
3228 return Native.benchmarkToSmtlibString(nCtx(), name, logic, status,
3229 attributes, assumptions.length,
3230 AST.arrayToNative(assumptions), formula.getNativeObject());
3231 }
3232
3242 public BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames,
3243 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3244 {
3245 int csn = Symbol.arrayLength(sortNames);
3246 int cs = Sort.arrayLength(sorts);
3247 int cdn = Symbol.arrayLength(declNames);
3248 int cd = AST.arrayLength(decls);
3249 if (csn != cs || cdn != cd) {
3250 throw new Z3Exception("Argument size mismatch");
3251 }
3252 ASTVector v = new ASTVector(this, Native.parseSmtlib2String(nCtx(),
3253 str, AST.arrayLength(sorts), Symbol.arrayToNative(sortNames),
3254 AST.arrayToNative(sorts), AST.arrayLength(decls),
3255 Symbol.arrayToNative(declNames), AST.arrayToNative(decls)));
3256 return v.ToBoolExprArray();
3257 }
3258
3263 public BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames,
3264 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
3265 {
3266 int csn = Symbol.arrayLength(sortNames);
3267 int cs = Sort.arrayLength(sorts);
3268 int cdn = Symbol.arrayLength(declNames);
3269 int cd = AST.arrayLength(decls);
3270 if (csn != cs || cdn != cd)
3271 throw new Z3Exception("Argument size mismatch");
3272 ASTVector v = new ASTVector(this, Native.parseSmtlib2File(nCtx(),
3273 fileName, AST.arrayLength(sorts),
3274 Symbol.arrayToNative(sortNames), AST.arrayToNative(sorts),
3275 AST.arrayLength(decls), Symbol.arrayToNative(declNames),
3276 AST.arrayToNative(decls)));
3277 return v.ToBoolExprArray();
3278 }
3279
3290 public Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
3291 {
3292 return new Goal(this, models, unsatCores, proofs);
3293 }
3294
3299 {
3300 return new Params(this);
3301 }
3302
3306 public int getNumTactics()
3307 {
3308 return Native.getNumTactics(nCtx());
3309 }
3310
3314 public String[] getTacticNames()
3315 {
3316
3317 int n = getNumTactics();
3318 String[] res = new String[n];
3319 for (int i = 0; i < n; i++)
3320 res[i] = Native.getTacticName(nCtx(), i);
3321 return res;
3322 }
3323
3328 public String getTacticDescription(String name)
3329 {
3330 return Native.tacticGetDescr(nCtx(), name);
3331 }
3332
3336 public Tactic mkTactic(String name)
3337 {
3338 return new Tactic(this, name);
3339 }
3340
3345 public Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
3346
3347 {
3348 checkContextMatch(t1);
3349 checkContextMatch(t2);
3350 checkContextMatch(ts);
3351
3352 long last = 0;
3353 if (ts != null && ts.length > 0)
3354 {
3355 last = ts[ts.length - 1].getNativeObject();
3356 for (int i = ts.length - 2; i >= 0; i--) {
3357 last = Native.tacticAndThen(nCtx(), ts[i].getNativeObject(),
3358 last);
3359 }
3360 }
3361 if (last != 0)
3362 {
3363 last = Native.tacticAndThen(nCtx(), t2.getNativeObject(), last);
3364 return new Tactic(this, Native.tacticAndThen(nCtx(),
3365 t1.getNativeObject(), last));
3366 } else
3367 return new Tactic(this, Native.tacticAndThen(nCtx(),
3368 t1.getNativeObject(), t2.getNativeObject()));
3369 }
3370
3377 public Tactic then(Tactic t1, Tactic t2, Tactic... ts)
3378 {
3379 return andThen(t1, t2, ts);
3380 }
3381
3388 {
3389 checkContextMatch(t1);
3390 checkContextMatch(t2);
3391 return new Tactic(this, Native.tacticOrElse(nCtx(),
3392 t1.getNativeObject(), t2.getNativeObject()));
3393 }
3394
3401 public Tactic tryFor(Tactic t, int ms)
3402 {
3403 checkContextMatch(t);
3404 return new Tactic(this, Native.tacticTryFor(nCtx(),
3405 t.getNativeObject(), ms));
3406 }
3407
3415 {
3416 checkContextMatch(t);
3417 checkContextMatch(p);
3418 return new Tactic(this, Native.tacticWhen(nCtx(), p.getNativeObject(),
3419 t.getNativeObject()));
3420 }
3421
3427 public Tactic cond(Probe p, Tactic t1, Tactic t2)
3428 {
3429 checkContextMatch(p);
3430 checkContextMatch(t1);
3431 checkContextMatch(t2);
3432 return new Tactic(this, Native.tacticCond(nCtx(), p.getNativeObject(),
3433 t1.getNativeObject(), t2.getNativeObject()));
3434 }
3435
3440 public Tactic repeat(Tactic t, int max)
3441 {
3442 checkContextMatch(t);
3443 return new Tactic(this, Native.tacticRepeat(nCtx(),
3444 t.getNativeObject(), max));
3445 }
3446
3450 public Tactic skip()
3451 {
3452 return new Tactic(this, Native.tacticSkip(nCtx()));
3453 }
3454
3458 public Tactic fail()
3459 {
3460 return new Tactic(this, Native.tacticFail(nCtx()));
3461 }
3462
3468 {
3469 checkContextMatch(p);
3470 return new Tactic(this,
3471 Native.tacticFailIf(nCtx(), p.getNativeObject()));
3472 }
3473
3479 {
3480 return new Tactic(this, Native.tacticFailIfNotDecided(nCtx()));
3481 }
3482
3488 {
3489 checkContextMatch(t);
3490 checkContextMatch(p);
3491 return new Tactic(this, Native.tacticUsingParams(nCtx(),
3492 t.getNativeObject(), p.getNativeObject()));
3493 }
3494
3502 {
3503 return usingParams(t, p);
3504 }
3505
3509 public Tactic parOr(Tactic... t)
3510 {
3511 checkContextMatch(t);
3512 return new Tactic(this, Native.tacticParOr(nCtx(),
3514 }
3515
3521 {
3522 checkContextMatch(t1);
3523 checkContextMatch(t2);
3524 return new Tactic(this, Native.tacticParAndThen(nCtx(),
3525 t1.getNativeObject(), t2.getNativeObject()));
3526 }
3527
3533 public void interrupt()
3534 {
3535 Native.interrupt(nCtx());
3536 }
3537
3542 {
3543 return new ASTMap(this);
3544 }
3545
3550 public Expr<?> qeLite(ASTVector vars, Expr<?> body)
3551 {
3552 checkContextMatch(vars);
3553 checkContextMatch(body);
3554 return Expr.create(this, Native.qeLite(nCtx(), vars.getNativeObject(),
3555 body.getNativeObject()));
3556 }
3557
3561 public Expr<?> qeModelProject(Model model, Expr<?>[] bounds, Expr<?> body)
3562 {
3563 checkContextMatch(model);
3564 checkContextMatch(bounds);
3565 checkContextMatch(body);
3566 return Expr.create(this, Native.qeModelProject(nCtx(), model.getNativeObject(),
3567 bounds.length, AST.arrayToNative(bounds), body.getNativeObject()));
3568 }
3569
3573 public Expr<?> qeModelProjectSkolem(Model model, Expr<?>[] bounds, Expr<?> body,
3574 ASTMap map)
3575 {
3576 checkContextMatch(model);
3577 checkContextMatch(bounds);
3578 checkContextMatch(body);
3579 checkContextMatch(map);
3580 return Expr.create(this, Native.qeModelProjectSkolem(nCtx(),
3581 model.getNativeObject(), bounds.length, AST.arrayToNative(bounds),
3582 body.getNativeObject(), map.getNativeObject()));
3583 }
3584
3589 Expr<?> body, ASTMap map)
3590 {
3591 checkContextMatch(model);
3592 checkContextMatch(bounds);
3593 checkContextMatch(body);
3594 checkContextMatch(map);
3595 return Expr.create(this, Native.qeModelProjectWithWitness(nCtx(),
3596 model.getNativeObject(), bounds.length, AST.arrayToNative(bounds),
3597 body.getNativeObject(), map.getNativeObject()));
3598 }
3599
3604 {
3605 return Native.getNumSimplifiers(nCtx());
3606 }
3607
3611 public String[] getSimplifierNames()
3612 {
3613
3614 int n = getNumSimplifiers();
3615 String[] res = new String[n];
3616 for (int i = 0; i < n; i++)
3617 res[i] = Native.getSimplifierName(nCtx(), i);
3618 return res;
3619 }
3620
3625 public String getSimplifierDescription(String name)
3626 {
3627 return Native.simplifierGetDescr(nCtx(), name);
3628 }
3629
3633 public Simplifier mkSimplifier(String name)
3634 {
3635 return new Simplifier(this, name);
3636 }
3637
3642
3643 {
3644 checkContextMatch(t1);
3645 checkContextMatch(t2);
3646 checkContextMatch(ts);
3647
3648 long last = 0;
3649 if (ts != null && ts.length > 0)
3650 {
3651 last = ts[ts.length - 1].getNativeObject();
3652 for (int i = ts.length - 2; i >= 0; i--) {
3653 last = Native.simplifierAndThen(nCtx(), ts[i].getNativeObject(),
3654 last);
3655 }
3656 }
3657 if (last != 0)
3658 {
3659 last = Native.simplifierAndThen(nCtx(), t2.getNativeObject(), last);
3660 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3661 t1.getNativeObject(), last));
3662 } else
3663 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3664 t1.getNativeObject(), t2.getNativeObject()));
3665 }
3666
3673 {
3674 return andThen(t1, t2, ts);
3675 }
3676
3682 {
3683 checkContextMatch(t);
3684 checkContextMatch(p);
3685 return new Simplifier(this, Native.simplifierUsingParams(nCtx(),
3686 t.getNativeObject(), p.getNativeObject()));
3687 }
3688
3696 {
3697 return usingParams(t, p);
3698 }
3699
3703 public int getNumProbes()
3704 {
3705 return Native.getNumProbes(nCtx());
3706 }
3707
3711 public String[] getProbeNames()
3712 {
3713
3714 int n = getNumProbes();
3715 String[] res = new String[n];
3716 for (int i = 0; i < n; i++)
3717 res[i] = Native.getProbeName(nCtx(), i);
3718 return res;
3719 }
3720
3725 public String getProbeDescription(String name)
3726 {
3727 return Native.probeGetDescr(nCtx(), name);
3728 }
3729
3733 public Probe mkProbe(String name)
3734 {
3735 return new Probe(this, name);
3736 }
3737
3741 public Probe constProbe(double val)
3742 {
3743 return new Probe(this, Native.probeConst(nCtx(), val));
3744 }
3745
3750 public Probe lt(Probe p1, Probe p2)
3751 {
3752 checkContextMatch(p1);
3753 checkContextMatch(p2);
3754 return new Probe(this, Native.probeLt(nCtx(), p1.getNativeObject(),
3755 p2.getNativeObject()));
3756 }
3757
3762 public Probe gt(Probe p1, Probe p2)
3763 {
3764 checkContextMatch(p1);
3765 checkContextMatch(p2);
3766 return new Probe(this, Native.probeGt(nCtx(), p1.getNativeObject(),
3767 p2.getNativeObject()));
3768 }
3769
3775 public Probe le(Probe p1, Probe p2)
3776 {
3777 checkContextMatch(p1);
3778 checkContextMatch(p2);
3779 return new Probe(this, Native.probeLe(nCtx(), p1.getNativeObject(),
3780 p2.getNativeObject()));
3781 }
3782
3788 public Probe ge(Probe p1, Probe p2)
3789 {
3790 checkContextMatch(p1);
3791 checkContextMatch(p2);
3792 return new Probe(this, Native.probeGe(nCtx(), p1.getNativeObject(),
3793 p2.getNativeObject()));
3794 }
3795
3800 public Probe eq(Probe p1, Probe p2)
3801 {
3802 checkContextMatch(p1);
3803 checkContextMatch(p2);
3804 return new Probe(this, Native.probeEq(nCtx(), p1.getNativeObject(),
3805 p2.getNativeObject()));
3806 }
3807
3811 public Probe and(Probe p1, Probe p2)
3812 {
3813 checkContextMatch(p1);
3814 checkContextMatch(p2);
3815 return new Probe(this, Native.probeAnd(nCtx(), p1.getNativeObject(),
3816 p2.getNativeObject()));
3817 }
3818
3822 public Probe or(Probe p1, Probe p2)
3823 {
3824 checkContextMatch(p1);
3825 checkContextMatch(p2);
3826 return new Probe(this, Native.probeOr(nCtx(), p1.getNativeObject(),
3827 p2.getNativeObject()));
3828 }
3829
3833 public Probe not(Probe p)
3834 {
3835 checkContextMatch(p);
3836 return new Probe(this, Native.probeNot(nCtx(), p.getNativeObject()));
3837 }
3838
3847 {
3848 return mkSolver((Symbol) null);
3849 }
3850
3858 public Solver mkSolver(Symbol logic)
3859 {
3860
3861 if (logic == null)
3862 return new Solver(this, Native.mkSolver(nCtx()));
3863 else
3864 return new Solver(this, Native.mkSolverForLogic(nCtx(),
3865 logic.getNativeObject()));
3866 }
3867
3872 public Solver mkSolver(String logic)
3873 {
3874 return mkSolver(mkSymbol(logic));
3875 }
3876
3881 {
3882 return new Solver(this, Native.mkSimpleSolver(nCtx()));
3883 }
3884
3892 {
3893
3894 return new Solver(this, Native.mkSolverFromTactic(nCtx(),
3895 t.getNativeObject()));
3896 }
3897
3902 {
3903 return new Solver(this, Native.solverAddSimplifier(nCtx(), s.getNativeObject(), simp.getNativeObject()));
3904 }
3905
3910 {
3911 return new Fixedpoint(this);
3912 }
3913
3918 {
3919 return new Optimize(this);
3920 }
3921
3922
3928 {
3929 return new FPRMSort(this);
3930 }
3931
3937 {
3938 return new FPRMExpr(this, Native.mkFpaRoundNearestTiesToEven(nCtx()));
3939 }
3940
3946 {
3947 return new FPRMNum(this, Native.mkFpaRne(nCtx()));
3948 }
3949
3955 {
3956 return new FPRMNum(this, Native.mkFpaRoundNearestTiesToAway(nCtx()));
3957 }
3958
3964 {
3965 return new FPRMNum(this, Native.mkFpaRna(nCtx()));
3966 }
3967
3973 {
3974 return new FPRMNum(this, Native.mkFpaRoundTowardPositive(nCtx()));
3975 }
3976
3982 {
3983 return new FPRMNum(this, Native.mkFpaRtp(nCtx()));
3984 }
3985
3991 {
3992 return new FPRMNum(this, Native.mkFpaRoundTowardNegative(nCtx()));
3993 }
3994
4000 {
4001 return new FPRMNum(this, Native.mkFpaRtn(nCtx()));
4002 }
4003
4009 {
4010 return new FPRMNum(this, Native.mkFpaRoundTowardZero(nCtx()));
4011 }
4012
4018 {
4019 return new FPRMNum(this, Native.mkFpaRtz(nCtx()));
4020 }
4021
4028 public FPSort mkFPSort(int ebits, int sbits)
4029 {
4030 return new FPSort(this, ebits, sbits);
4031 }
4032
4038 {
4039 return new FPSort(this, Native.mkFpaSortHalf(nCtx()));
4040 }
4041
4047 {
4048 return new FPSort(this, Native.mkFpaSort16(nCtx()));
4049 }
4050
4056 {
4057 return new FPSort(this, Native.mkFpaSortSingle(nCtx()));
4058 }
4059
4065 {
4066 return new FPSort(this, Native.mkFpaSort32(nCtx()));
4067 }
4068
4074 {
4075 return new FPSort(this, Native.mkFpaSortDouble(nCtx()));
4076 }
4077
4083 {
4084 return new FPSort(this, Native.mkFpaSort64(nCtx()));
4085 }
4086
4092 {
4093 return new FPSort(this, Native.mkFpaSortQuadruple(nCtx()));
4094 }
4095
4101 {
4102 return new FPSort(this, Native.mkFpaSort128(nCtx()));
4103 }
4104
4105
4112 {
4113 return new FPNum(this, Native.mkFpaNan(nCtx(), s.getNativeObject()));
4114 }
4115
4122 public FPNum mkFPInf(FPSort s, boolean negative)
4123 {
4124 return new FPNum(this, Native.mkFpaInf(nCtx(), s.getNativeObject(), negative));
4125 }
4126
4133 public FPNum mkFPZero(FPSort s, boolean negative)
4134 {
4135 return new FPNum(this, Native.mkFpaZero(nCtx(), s.getNativeObject(), negative));
4136 }
4137
4144 public FPNum mkFPNumeral(float v, FPSort s)
4145 {
4146 return new FPNum(this, Native.mkFpaNumeralFloat(nCtx(), v, s.getNativeObject()));
4147 }
4148
4155 public FPNum mkFPNumeral(double v, FPSort s)
4156 {
4157 return new FPNum(this, Native.mkFpaNumeralDouble(nCtx(), v, s.getNativeObject()));
4158 }
4159
4166 public FPNum mkFPNumeral(int v, FPSort s)
4167 {
4168 return new FPNum(this, Native.mkFpaNumeralInt(nCtx(), v, s.getNativeObject()));
4169 }
4170
4179 public FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
4180 {
4181 return new FPNum(this, Native.mkFpaNumeralIntUint(nCtx(), sgn, exp, sig, s.getNativeObject()));
4182 }
4183
4192 public FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
4193 {
4194 return new FPNum(this, Native.mkFpaNumeralInt64Uint64(nCtx(), sgn, exp, sig, s.getNativeObject()));
4195 }
4196
4203 public FPNum mkFP(float v, FPSort s)
4204 {
4205 return mkFPNumeral(v, s);
4206 }
4207
4214 public FPNum mkFP(double v, FPSort s)
4215 {
4216 return mkFPNumeral(v, s);
4217 }
4218
4226 public FPNum mkFP(int v, FPSort s)
4227 {
4228 return mkFPNumeral(v, s);
4229 }
4230
4239 public FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
4240 {
4241 return mkFPNumeral(sgn, exp, sig, s);
4242 }
4243
4252 public FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
4253 {
4254 return mkFPNumeral(sgn, exp, sig, s);
4255 }
4256
4257
4264 {
4265 return new FPExpr(this, Native.mkFpaAbs(nCtx(), t.getNativeObject()));
4266 }
4267
4274 {
4275 return new FPExpr(this, Native.mkFpaNeg(nCtx(), t.getNativeObject()));
4276 }
4277
4286 {
4287 return new FPExpr(this, Native.mkFpaAdd(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4288 }
4289
4298 {
4299 return new FPExpr(this, Native.mkFpaSub(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4300 }
4301
4310 {
4311 return new FPExpr(this, Native.mkFpaMul(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4312 }
4313
4322 {
4323 return new FPExpr(this, Native.mkFpaDiv(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
4324 }
4325
4337 {
4338 return new FPExpr(this, Native.mkFpaFma(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject(), t3.getNativeObject()));
4339 }
4340
4348 {
4349 return new FPExpr(this, Native.mkFpaSqrt(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4350 }
4351
4359 {
4360 return new FPExpr(this, Native.mkFpaRem(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4361 }
4362
4371 {
4372 return new FPExpr(this, Native.mkFpaRoundToIntegral(nCtx(), rm.getNativeObject(), t.getNativeObject()));
4373 }
4374
4382 {
4383 return new FPExpr(this, Native.mkFpaMin(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4384 }
4385
4393 {
4394 return new FPExpr(this, Native.mkFpaMax(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4395 }
4396
4404 {
4405 return new BoolExpr(this, Native.mkFpaLeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4406 }
4407
4415 {
4416 return new BoolExpr(this, Native.mkFpaLt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4417 }
4418
4426 {
4427 return new BoolExpr(this, Native.mkFpaGeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4428 }
4429
4437 {
4438 return new BoolExpr(this, Native.mkFpaGt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4439 }
4440
4450 {
4451 return new BoolExpr(this, Native.mkFpaEq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4452 }
4453
4460 {
4461 return new BoolExpr(this, Native.mkFpaIsNormal(nCtx(), t.getNativeObject()));
4462 }
4463
4470 {
4471 return new BoolExpr(this, Native.mkFpaIsSubnormal(nCtx(), t.getNativeObject()));
4472 }
4473
4480 {
4481 return new BoolExpr(this, Native.mkFpaIsZero(nCtx(), t.getNativeObject()));
4482 }
4483
4490 {
4491 return new BoolExpr(this, Native.mkFpaIsInfinite(nCtx(), t.getNativeObject()));
4492 }
4493
4500 {
4501 return new BoolExpr(this, Native.mkFpaIsNan(nCtx(), t.getNativeObject()));
4502 }
4503
4510 {
4511 return new BoolExpr(this, Native.mkFpaIsNegative(nCtx(), t.getNativeObject()));
4512 }
4513
4520 {
4521 return new BoolExpr(this, Native.mkFpaIsPositive(nCtx(), t.getNativeObject()));
4522 }
4523
4538 {
4539 return new FPExpr(this, Native.mkFpaFp(nCtx(), sgn.getNativeObject(), sig.getNativeObject(), exp.getNativeObject()));
4540 }
4541
4554 {
4555 return new FPExpr(this, Native.mkFpaToFpBv(nCtx(), bv.getNativeObject(), s.getNativeObject()));
4556 }
4557
4570 {
4571 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4572 }
4573
4586 {
4587 return new FPExpr(this, Native.mkFpaToFpReal(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4588 }
4589
4603 public FPExpr mkFPToFP(Expr<FPRMSort> rm, Expr<BitVecSort> t, FPSort s, boolean isSigned)
4604 {
4605 if (isSigned)
4606 return new FPExpr(this, Native.mkFpaToFpSigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4607 else
4608 return new FPExpr(this, Native.mkFpaToFpUnsigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4609 }
4610
4622 {
4623 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), s.getNativeObject(), rm.getNativeObject(), t.getNativeObject()));
4624 }
4625
4638 public BitVecExpr mkFPToBV(Expr<FPRMSort> rm, Expr<FPSort> t, int sz, boolean isSigned)
4639 {
4640 if (isSigned)
4641 return new BitVecExpr(this, Native.mkFpaToSbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4642 else
4643 return new BitVecExpr(this, Native.mkFpaToUbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4644 }
4645
4656 {
4657 return new RealExpr(this, Native.mkFpaToReal(nCtx(), t.getNativeObject()));
4658 }
4659
4671 {
4672 return new BitVecExpr(this, Native.mkFpaToIeeeBv(nCtx(), t.getNativeObject()));
4673 }
4674
4689 {
4690 return new BitVecExpr(this, Native.mkFpaToFpIntReal(nCtx(), rm.getNativeObject(), exp.getNativeObject(), sig.getNativeObject(), s.getNativeObject()));
4691 }
4692
4698 public final <R extends Sort> FuncDecl<BoolSort> mkLinearOrder(R sort, int index) {
4699 return (FuncDecl<BoolSort>) FuncDecl.create(
4700 this,
4701 Native.mkLinearOrder(
4702 nCtx(),
4703 sort.getNativeObject(),
4704 index
4705 )
4706 );
4707 }
4708
4714 public final <R extends Sort> FuncDecl<BoolSort> mkPartialOrder(R sort, int index) {
4715 return (FuncDecl<BoolSort>) FuncDecl.create(
4716 this,
4717 Native.mkPartialOrder(
4718 nCtx(),
4719 sort.getNativeObject(),
4720 index
4721 )
4722 );
4723 }
4724
4731 return (FuncDecl<BoolSort>) FuncDecl.create(
4732 this,
4733 Native.mkTransitiveClosure(
4734 nCtx(),
4735 f.getNativeObject()
4736 )
4737 );
4738 }
4739
4745 public final <R extends Sort> FuncDecl<BoolSort> mkPiecewiseLinearOrder(R sort, int index) {
4746 return (FuncDecl<BoolSort>) FuncDecl.create(
4747 this,
4748 Native.mkPiecewiseLinearOrder(
4749 nCtx(),
4750 sort.getNativeObject(),
4751 index
4752 )
4753 );
4754 }
4755
4761 public final <R extends Sort> FuncDecl<BoolSort> mkTreeOrder(R sort, int index) {
4762 return (FuncDecl<BoolSort>) FuncDecl.create(
4763 this,
4764 Native.mkTreeOrder(
4765 nCtx(),
4766 sort.getNativeObject(),
4767 index
4768 )
4769 );
4770 }
4771
4779 public final <R extends Sort> ASTVector polynomialSubresultants(Expr<R> p, Expr<R> q, Expr<R> x) {
4780 return new ASTVector(
4781 this,
4782 Native.polynomialSubresultants(
4783 nCtx(),
4784 p.getNativeObject(),
4785 q.getNativeObject(),
4786 x.getNativeObject()
4787 )
4788 );
4789 }
4790
4801 public AST wrapAST(long nativeObject)
4802 {
4803 return AST.create(this, nativeObject);
4804 }
4805
4818 public long unwrapAST(AST a)
4819 {
4820 return a.getNativeObject();
4821 }
4822
4827 public String SimplifyHelp()
4828 {
4829 return Native.simplifyGetHelp(nCtx());
4830 }
4831
4836 {
4837 return new ParamDescrs(this, Native.simplifyGetParamDescrs(nCtx()));
4838 }
4839
4848 public void updateParamValue(String id, String value)
4849 {
4850 Native.updateParamValue(nCtx(), id, value);
4851 }
4852
4853
4854 public long nCtx()
4855 {
4856 if (m_ctx == 0)
4857 throw new Z3Exception("Context closed");
4858 return m_ctx;
4859 }
4860
4861
4862 void checkContextMatch(Z3Object other)
4863 {
4864 if (this != other.getContext())
4865 throw new Z3Exception("Context mismatch");
4866 }
4867
4868 void checkContextMatch(Z3Object other1, Z3Object other2)
4869 {
4870 checkContextMatch(other1);
4871 checkContextMatch(other2);
4872 }
4873
4874 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3)
4875 {
4876 checkContextMatch(other1);
4877 checkContextMatch(other2);
4878 checkContextMatch(other3);
4879 }
4880
4881 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3, Z3Object other4)
4882 {
4883 checkContextMatch(other1);
4884 checkContextMatch(other2);
4885 checkContextMatch(other3);
4886 checkContextMatch(other4);
4887 }
4888
4889 void checkContextMatch(Z3Object[] arr)
4890 {
4891 if (arr != null)
4892 for (Z3Object a : arr)
4893 checkContextMatch(a);
4894 }
4895
4896 private Z3ReferenceQueue m_RefQueue = new Z3ReferenceQueue(this);
4897
4898 Z3ReferenceQueue getReferenceQueue() { return m_RefQueue; }
4899
4903 @Override
4904 public void close()
4905 {
4906 if (m_ctx == 0)
4907 return;
4908
4909 m_RefQueue.forceClear();
4910
4911 m_boolSort = null;
4912 m_intSort = null;
4913 m_realSort = null;
4914 m_complexSort = null;
4915 m_stringSort = null;
4916 m_RefQueue = null;
4917
4918 synchronized (creation_lock) {
4919 Native.delContext(m_ctx);
4920 }
4921 m_ctx = 0;
4922 }
4923}
final< R extends Sort > FuncDecl< R > mkFuncDecl(String name, Sort[] domain, R range)
Definition Context.java:632
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:325
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:940
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:580
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)
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:305
final< R extends Sort > Expr< R > mkFreshConst(String prefix, R range)
Definition Context.java:776
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)
FPExpr mkFPToFP(Expr< FPRMSort > rm, Expr< BitVecSort > t, FPSort s, boolean isSigned)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetComplement(Expr< ArraySort< D, BoolSort > > arg)
ComplexExpr mkComplexConst(Symbol name)
Definition Context.java:841
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:716
Expr<?> qeLite(ASTVector vars, Expr<?> body)
BoolExpr mkBVSDivNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
Probe le(Probe p1, Probe p2)
SeqExpr< CharSort > mkString(String s)
final< R extends Sort > BoolExpr mkPrefixOf(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
AST wrapAST(long nativeObject)
final< R extends Sort > SeqExpr< R > mkReplace(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
ComplexExpr mkComplex(Expr<? extends ArithSort > real, Expr<? extends ArithSort > imag)
Definition Context.java:853
UninterpretedSort mkUninterpretedSort(Symbol s)
Definition Context.java:205
BitVecExpr mkBVXNOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkImplies(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:986
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:963
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:877
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:510
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:885
final< R extends Sort > SeqSort< R > mkSeqSort(R s)
Definition Context.java:275
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:767
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)
ComplexSort getComplexSort()
Definition Context.java:160
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:684
final< R extends Sort > Expr< R > mkBound(int index, R ty)
Definition Context.java:728
final< R extends Sort > SeqExpr< R > mkReplaceAll(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
void updateParamValue(String id, String value)
BitVecExpr mkZeroExt(int i, Expr< BitVecSort > t)
final< R extends Sort > SeqExpr< R > mkSeqPower(Expr< SeqSort< R > > s, Expr< IntSort > n)
Simplifier andThen(Simplifier t1, Simplifier t2, Simplifier... ts)
SeqExpr< CharSort > ubvToString(Expr< BitVecSort > e)
final< R extends Sort > ASTVector polynomialSubresultants(Expr< R > p, Expr< R > q, Expr< R > x)
final< R extends Sort > Lambda< R > mkLambda(Sort[] sorts, Symbol[] names, Expr< R > body)
final< R extends Sort > ReExpr< R > mkConcat(ReExpr< R >... t)
Tactic failIf(Probe p)
BoolExpr mkFPLt(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkFullRe(ReSort< R > s)
BitVecExpr mkBVRedAND(Expr< BitVecSort > t)
BitVecNum mkBV(long v, int size)
BitVecExpr mkBVSRem(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkPiecewiseLinearOrder(R sort, int index)
FPNum mkFPNumeral(float v, FPSort s)
Expr<?> qeModelProjectWithWitness(Model model, Expr<?>[] bounds, Expr<?> body, ASTMap map)
Tactic when(Probe p, Tactic t)
final Expr mkFiniteSetRange(Expr low, Expr high)
final< R extends Sort > ReExpr< R > mkPlus(Expr< ReSort< R > > re)
IntNum mkInt(String v)
ComplexSort mkComplexSort()
Definition Context.java:169
Probe mkProbe(String name)
BoolExpr mkPBLe(int[] coeffs, Expr< BoolSort >[] args, int k)
RealExpr mkRealConst(String name)
Definition Context.java:835
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)
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)
RealExpr mkRealPart(Expr< ComplexSort > value)
Definition Context.java:861
Probe gt(Probe p1, Probe p2)
BoolExpr mkFPIsNaN(Expr< FPSort > t)
BoolExpr mkEq(Expr<?> x, Expr<?> y)
Definition Context.java:928
Tactic with(Tactic t, Params p)
final BoolExpr mkNot(Expr< BoolSort > a)
Definition Context.java:950
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:390
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:257
final Expr mkFiniteSetMap(Expr f, Expr set)
FPRMNum mkFPRoundNearestTiesToAway()
BoolExpr mkIsDigit(Expr< CharSort > ch)
BoolExpr mkBool(boolean value)
Definition Context.java:920
RealExpr mkImagPart(Expr< ComplexSort > value)
Definition Context.java:868
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:246
BitVecExpr mkBVMul(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > Expr< R > mkNumeral(int v, R ty)
Expr<?> qeModelProject(Model model, Expr<?>[] bounds, Expr<?> body)
BitVecExpr mkBVSub(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames, Sort[] fieldSorts)
Definition Context.java:292
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:738
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:381
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:997
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:643
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:194
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:819
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:894
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:400
final< R extends Sort > Expr< R > mkConst(FuncDecl< R > f)
Definition Context.java:787
BitVecExpr charToBv(Expr< CharSort > ch)
IntExpr mkIntConst(Symbol name)
Definition Context.java:811
final< R > FiniteDomainSort< R > mkFiniteDomainSort(Symbol name, long size)
Definition Context.java:344
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:705
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:335
Tactic parAndThen(Tactic t1, Tactic t2)
RatNum mkReal(long v)
Expr<?> qeModelProjectSkolem(Model model, Expr<?>[] bounds, Expr<?> body, ASTMap map)
BoolExpr mkGt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
final Sort getFiniteSetSortBasis(Sort s)
BitVecNum mkBV(int v, int size)
final< R extends ArithSort > ArithExpr< R > mkPower(Expr<? extends R > t1, Expr<? extends R > t2)
Context(Map< String, String > settings)
Definition Context.java:72
final< R extends Sort > ReExpr< R > mkIntersect(Expr< ReSort< R > >... t)
final< R extends Sort > FuncDecl< R > mkFuncDecl(Symbol name, Sort domain, R range)
Definition Context.java:619
final< R extends ArithSort > ArithExpr< R > mkMul(Expr<? extends R >... t)
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:827
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:238
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:975
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:803
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:267
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:371
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:486
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:214
void setPrintMode(Z3_ast_print_mode value)
DatatypeSort< Object >[] mkDatatypeSorts(Symbol[] names, Constructor< Object >[][] c)
Definition Context.java:460
BitVecExpr mkFPToBV(Expr< FPRMSort > rm, Expr< FPSort > t, int sz, boolean isSigned)
final BoolExpr mkAnd(Expr< BoolSort >... t)
final< R extends Sort > FuncDecl< R > mkConstDecl(Symbol name, R range)
Definition Context.java:695
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:670
final< R extends Sort > ReSort< R > mkReSort(R s)
Definition Context.java:283
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:593
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)
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:752
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:655
ComplexExpr mkComplexConst(String name)
Definition Context.java:847
final< R extends Sort > FuncDecl< R > mkPropagateFunction(Symbol name, Sort[] domain, R range)
Definition Context.java:601
TypeVarSort mkTypeVariable(Symbol name)
Definition Context.java:498
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:354
Simplifier usingParams(Simplifier t, Params p)
BoolExpr mkBoolConst(Symbol name)
Definition Context.java:795
final< R > EnumSort< R > mkEnumSort(String name, String... enumNames)
Definition Context.java:316
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:1386