Z3
 
Loading...
Searching...
No Matches
Context.java
Go to the documentation of this file.
1
18package com.microsoft.z3;
19
20import static com.microsoft.z3.Constructor.of;
21
22import com.microsoft.z3.enumerations.Z3_ast_print_mode;
23
24import java.util.Map;
25
35@SuppressWarnings("unchecked")
36public class Context implements AutoCloseable {
37 private long m_ctx;
38 static final Object creation_lock = new Object();
39
40 public Context () {
41 synchronized (creation_lock) {
42 m_ctx = Native.mkContextRc(0);
43 init();
44 }
45 }
46
47 protected Context (long m_ctx) {
48 synchronized (creation_lock) {
49 this.m_ctx = m_ctx;
50 init();
51 }
52 }
53
54
72 public Context(Map<String, String> settings) {
73 synchronized (creation_lock) {
74 long cfg = Native.mkConfig();
75 for (Map.Entry<String, String> kv : settings.entrySet()) {
76 Native.setParamValue(cfg, kv.getKey(), kv.getValue());
77 }
78 m_ctx = Native.mkContextRc(cfg);
79 Native.delConfig(cfg);
80 init();
81 }
82 }
83
84 private void init() {
85 setPrintMode(Z3_ast_print_mode.Z3_PRINT_SMTLIB2_COMPLIANT);
86 Native.setInternalErrorHandler(m_ctx);
87 }
88
94 public IntSymbol mkSymbol(int i)
95 {
96 return new IntSymbol(this, i);
97 }
98
102 public StringSymbol mkSymbol(String name)
103 {
104 return new StringSymbol(this, name);
105 }
106
110 Symbol[] mkSymbols(String[] names)
111 {
112 if (names == null)
113 return new Symbol[0];
114 Symbol[] result = new Symbol[names.length];
115 for (int i = 0; i < names.length; ++i)
116 result[i] = mkSymbol(names[i]);
117 return result;
118 }
119
120 private BoolSort m_boolSort = null;
121 private IntSort m_intSort = null;
122 private RealSort m_realSort = null;
123 private SeqSort<CharSort> m_stringSort = null;
124
129 {
130 if (m_boolSort == null) {
131 m_boolSort = new BoolSort(this);
132 }
133 return m_boolSort;
134 }
135
140 {
141 if (m_intSort == null) {
142 m_intSort = new IntSort(this);
143 }
144 return m_intSort;
145 }
146
151 {
152 if (m_realSort == null) {
153 m_realSort = new RealSort(this);
154 }
155 return m_realSort;
156 }
157
162 {
163 return new BoolSort(this);
164 }
165
171 {
172 return new CharSort(this);
173 }
174
179 {
180 if (m_stringSort == null) {
181 m_stringSort = mkStringSort();
182 }
183 return m_stringSort;
184 }
185
190 {
191 checkContextMatch(s);
192 return new UninterpretedSort(this, s);
193 }
194
199 {
200 return mkUninterpretedSort(mkSymbol(str));
201 }
202
207 {
208 return new IntSort(this);
209 }
210
215 {
216 return new RealSort(this);
217 }
218
222 public BitVecSort mkBitVecSort(int size)
223 {
224 return new BitVecSort(this, Native.mkBvSort(nCtx(), size));
225 }
226
230 public final <D extends Sort, R extends Sort> ArraySort<D, R> mkArraySort(D domain, R range)
231 {
232 checkContextMatch(domain);
233 checkContextMatch(range);
234 return new ArraySort<>(this, domain, range);
235 }
236
237
241 public final <R extends Sort> ArraySort<Sort, R> mkArraySort(Sort[] domains, R range)
242 {
243 checkContextMatch(domains);
244 checkContextMatch(range);
245 return new ArraySort<>(this, domains, range);
246 }
247
252 {
253 return new SeqSort<>(this, Native.mkStringSort(nCtx()));
254 }
255
259 public final <R extends Sort> SeqSort<R> mkSeqSort(R s)
260 {
261 return new SeqSort<>(this, Native.mkSeqSort(nCtx(), s.getNativeObject()));
262 }
263
267 public final <R extends Sort> ReSort<R> mkReSort(R s)
268 {
269 return new ReSort<>(this, Native.mkReSort(nCtx(), s.getNativeObject()));
270 }
271
272
276 public TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames,
277 Sort[] fieldSorts)
278 {
279 checkContextMatch(name);
280 checkContextMatch(fieldNames);
281 checkContextMatch(fieldSorts);
282 return new TupleSort(this, name, fieldNames.length, fieldNames,
283 fieldSorts);
284 }
285
289 public final <R> EnumSort<R> mkEnumSort(Symbol name, Symbol... enumNames)
290
291 {
292 checkContextMatch(name);
293 checkContextMatch(enumNames);
294 return new EnumSort<>(this, name, enumNames);
295 }
296
300 public final <R> EnumSort<R> mkEnumSort(String name, String... enumNames)
301
302 {
303 return new EnumSort<>(this, mkSymbol(name), mkSymbols(enumNames));
304 }
305
309 public final <R extends Sort> ListSort<R> mkListSort(Symbol name, R elemSort)
310 {
311 checkContextMatch(name);
312 checkContextMatch(elemSort);
313 return new ListSort<>(this, name, elemSort);
314 }
315
319 public final <R extends Sort> ListSort<R> mkListSort(String name, R elemSort)
320 {
321 checkContextMatch(elemSort);
322 return new ListSort<>(this, mkSymbol(name), elemSort);
323 }
324
328 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(Symbol name, long size)
329
330 {
331 checkContextMatch(name);
332 return new FiniteDomainSort<>(this, name, size);
333 }
334
338 public final <R> FiniteDomainSort<R> mkFiniteDomainSort(String name, long size)
339
340 {
341 return new FiniteDomainSort<>(this, mkSymbol(name), size);
342 }
343
355 public final <R> Constructor<R> mkConstructor(Symbol name, Symbol recognizer,
356 Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
357
358 {
359 return of(this, name, recognizer, fieldNames, sorts, sortRefs);
360 }
361
365 public final <R> Constructor<R> mkConstructor(String name, String recognizer,
366 String[] fieldNames, Sort[] sorts, int[] sortRefs)
367 {
368 return of(this, mkSymbol(name), mkSymbol(recognizer), mkSymbols(fieldNames), sorts, sortRefs);
369 }
370
374 public final <R> DatatypeSort<R> mkDatatypeSort(Symbol name, Constructor<R>[] constructors)
375 {
376 checkContextMatch(name);
377 checkContextMatch(constructors);
378 return new DatatypeSort<>(this, name, constructors);
379 }
380
384 public final <R> DatatypeSort<R> mkDatatypeSort(String name, Constructor<R>[] constructors)
385
386 {
387 checkContextMatch(constructors);
388 return new DatatypeSort<>(this, mkSymbol(name), constructors);
389 }
390
397 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name, Sort[] params)
398 {
399 checkContextMatch(name);
400 if (params != null)
401 checkContextMatch(params);
402
403 int numParams = (params == null) ? 0 : params.length;
404 long[] paramsNative = (params == null) ? new long[0] : AST.arrayToNative(params);
405 return new DatatypeSort<>(this, Native.mkDatatypeSort(nCtx(), name.getNativeObject(), numParams, paramsNative));
406 }
407
413 public <R> DatatypeSort<R> mkDatatypeSortRef(Symbol name)
414 {
415 return mkDatatypeSortRef(name, null);
416 }
417
424 public <R> DatatypeSort<R> mkDatatypeSortRef(String name, Sort[] params)
425 {
426 return mkDatatypeSortRef(mkSymbol(name), params);
427 }
428
434 public <R> DatatypeSort<R> mkDatatypeSortRef(String name)
435 {
436 return mkDatatypeSortRef(name, null);
437 }
438
445 {
446 checkContextMatch(names);
447 int n = names.length;
449 long[] n_constr = new long[n];
450 for (int i = 0; i < n; i++)
451 {
452 Constructor<Object>[] constructor = c[i];
453
454 checkContextMatch(constructor);
455 cla[i] = new ConstructorList<>(this, constructor);
456 n_constr[i] = cla[i].getNativeObject();
457 }
458 long[] n_res = new long[n];
459 Native.mkDatatypes(nCtx(), n, Symbol.arrayToNative(names), n_res,
460 n_constr);
461 DatatypeSort<Object>[] res = new DatatypeSort[n];
462 for (int i = 0; i < n; i++)
463 res[i] = new DatatypeSort<>(this, n_res[i]);
464 return res;
465 }
466
471
472 {
473 return mkDatatypeSorts(mkSymbols(names), c);
474 }
475
482 public final <F extends Sort, R extends Sort> Expr<R> mkUpdateField(FuncDecl<F> field, Expr<R> t, Expr<F> v)
483 throws Z3Exception
484 {
485 return (Expr<R>) Expr.create(this,
486 Native.datatypeUpdateField
487 (nCtx(), field.getNativeObject(),
488 t.getNativeObject(), v.getNativeObject()));
489 }
490
491
495 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort[] domain, R range)
496 {
497 checkContextMatch(name);
498 checkContextMatch(domain);
499 checkContextMatch(range);
500 return new FuncDecl<>(this, name, domain, range);
501 }
502
503 public final <R extends Sort> FuncDecl<R> mkPropagateFunction(Symbol name, Sort[] domain, R range)
504 {
505 checkContextMatch(name);
506 checkContextMatch(domain);
507 checkContextMatch(range);
508 long f = Native.solverPropagateDeclare(
509 this.nCtx(),
510 name.getNativeObject(),
511 AST.arrayLength(domain),
512 AST.arrayToNative(domain),
513 range.getNativeObject());
514 return new FuncDecl<>(this, f);
515 }
516
517
521 public final <R extends Sort> FuncDecl<R> mkFuncDecl(Symbol name, Sort domain, R range)
522
523 {
524 checkContextMatch(name);
525 checkContextMatch(domain);
526 checkContextMatch(range);
527 Sort[] q = new Sort[] { domain };
528 return new FuncDecl<>(this, name, q, range);
529 }
530
534 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort[] domain, R range)
535
536 {
537 checkContextMatch(domain);
538 checkContextMatch(range);
539 return new FuncDecl<>(this, mkSymbol(name), domain, range);
540 }
541
545 public final <R extends Sort> FuncDecl<R> mkFuncDecl(String name, Sort domain, R range)
546
547 {
548 checkContextMatch(domain);
549 checkContextMatch(range);
550 Sort[] q = new Sort[] { domain };
551 return new FuncDecl<>(this, mkSymbol(name), q, range);
552 }
553
557 public final <R extends Sort> FuncDecl<R> mkRecFuncDecl(Symbol name, Sort[] domain, R range)
558 {
559 checkContextMatch(name);
560 checkContextMatch(domain);
561 checkContextMatch(range);
562 return new FuncDecl<>(this, name, domain, range, true);
563 }
564
565
572 public final <R extends Sort> void AddRecDef(FuncDecl<R> f, Expr<?>[] args, Expr<R> body)
573 {
574 checkContextMatch(f);
575 checkContextMatch(args);
576 checkContextMatch(body);
577 long[] argsNative = AST.arrayToNative(args);
578 Native.addRecDef(nCtx(), f.getNativeObject(), args.length, argsNative, body.getNativeObject());
579 }
580
587 public final <R extends Sort> FuncDecl<R> mkFreshFuncDecl(String prefix, Sort[] domain, R range)
588
589 {
590 checkContextMatch(domain);
591 checkContextMatch(range);
592 return new FuncDecl<>(this, prefix, domain, range);
593 }
594
598 public final <R extends Sort> FuncDecl<R> mkConstDecl(Symbol name, R range)
599 {
600 checkContextMatch(name);
601 checkContextMatch(range);
602 return new FuncDecl<>(this, name, null, range);
603 }
604
608 public final <R extends Sort> FuncDecl<R> mkConstDecl(String name, R range)
609 {
610 checkContextMatch(range);
611 return new FuncDecl<>(this, mkSymbol(name), null, range);
612 }
613
620 public final <R extends Sort> FuncDecl<R> mkFreshConstDecl(String prefix, R range)
621
622 {
623 checkContextMatch(range);
624 return new FuncDecl<>(this, prefix, null, range);
625 }
626
632 public final <R extends Sort> Expr<R> mkBound(int index, R ty)
633 {
634 return (Expr<R>) Expr.create(this,
635 Native.mkBound(nCtx(), index, ty.getNativeObject()));
636 }
637
641 @SafeVarargs
642 public final Pattern mkPattern(Expr<?>... terms)
643 {
644 if (terms.length == 0)
645 throw new Z3Exception("Cannot create a pattern from zero terms");
646
647 long[] termsNative = AST.arrayToNative(terms);
648 return new Pattern(this, Native.mkPattern(nCtx(), terms.length,
649 termsNative));
650 }
651
656 public final <R extends Sort> Expr<R> mkConst(Symbol name, R range)
657 {
658 checkContextMatch(name);
659 checkContextMatch(range);
660
661 return (Expr<R>) Expr.create(
662 this,
663 Native.mkConst(nCtx(), name.getNativeObject(),
664 range.getNativeObject()));
665 }
666
671 public final <R extends Sort> Expr<R> mkConst(String name, R range)
672 {
673 return mkConst(mkSymbol(name), range);
674 }
675
680 public final <R extends Sort> Expr<R> mkFreshConst(String prefix, R range)
681 {
682 checkContextMatch(range);
683 return (Expr<R>) Expr.create(this,
684 Native.mkFreshConst(nCtx(), prefix, range.getNativeObject()));
685 }
686
691 public final <R extends Sort> Expr<R> mkConst(FuncDecl<R> f)
692 {
693 return mkApp(f, (Expr<?>[]) null);
694 }
695
700 {
701 return (BoolExpr) mkConst(name, getBoolSort());
702 }
703
707 public BoolExpr mkBoolConst(String name)
708 {
709 return (BoolExpr) mkConst(mkSymbol(name), getBoolSort());
710 }
711
716 {
717 return (IntExpr) mkConst(name, getIntSort());
718 }
719
723 public IntExpr mkIntConst(String name)
724 {
725 return (IntExpr) mkConst(name, getIntSort());
726 }
727
732 {
733 return (RealExpr) mkConst(name, getRealSort());
734 }
735
739 public RealExpr mkRealConst(String name)
740 {
741 return (RealExpr) mkConst(name, getRealSort());
742 }
743
747 public BitVecExpr mkBVConst(Symbol name, int size)
748 {
749 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
750 }
751
755 public BitVecExpr mkBVConst(String name, int size)
756 {
757 return (BitVecExpr) mkConst(name, mkBitVecSort(size));
758 }
759
763 @SafeVarargs
764 public final <R extends Sort> Expr<R> mkApp(FuncDecl<R> f, Expr<?>... args)
765 {
766 checkContextMatch(f);
767 checkContextMatch(args);
768 return Expr.create(this, f, args);
769 }
770
775 {
776 return new BoolExpr(this, Native.mkTrue(nCtx()));
777 }
778
783 {
784 return new BoolExpr(this, Native.mkFalse(nCtx()));
785 }
786
790 public BoolExpr mkBool(boolean value)
791 {
792 return value ? mkTrue() : mkFalse();
793 }
794
799 {
800 checkContextMatch(x);
801 checkContextMatch(y);
802 return new BoolExpr(this, Native.mkEq(nCtx(), x.getNativeObject(),
803 y.getNativeObject()));
804 }
805
809 @SafeVarargs
810 public final BoolExpr mkDistinct(Expr<?>... args)
811 {
812 checkContextMatch(args);
813 return new BoolExpr(this, Native.mkDistinct(nCtx(), args.length,
814 AST.arrayToNative(args)));
815 }
816
821 {
822 checkContextMatch(a);
823 return new BoolExpr(this, Native.mkNot(nCtx(), a.getNativeObject()));
824 }
825
833 public final <R extends Sort> Expr<R> mkITE(Expr<BoolSort> t1, Expr<? extends R> t2, Expr<? extends R> t3)
834 {
835 checkContextMatch(t1);
836 checkContextMatch(t2);
837 checkContextMatch(t3);
838 return (Expr<R>) Expr.create(this, Native.mkIte(nCtx(), t1.getNativeObject(),
839 t2.getNativeObject(), t3.getNativeObject()));
840 }
841
846 {
847 checkContextMatch(t1);
848 checkContextMatch(t2);
849 return new BoolExpr(this, Native.mkIff(nCtx(), t1.getNativeObject(),
850 t2.getNativeObject()));
851 }
852
857 {
858 checkContextMatch(t1);
859 checkContextMatch(t2);
860 return new BoolExpr(this, Native.mkImplies(nCtx(),
861 t1.getNativeObject(), t2.getNativeObject()));
862 }
863
868 {
869 checkContextMatch(t1);
870 checkContextMatch(t2);
871 return new BoolExpr(this, Native.mkXor(nCtx(), t1.getNativeObject(),
872 t2.getNativeObject()));
873 }
874
878 @SafeVarargs
879 public final BoolExpr mkAnd(Expr<BoolSort>... t)
880 {
881 checkContextMatch(t);
882 return new BoolExpr(this, Native.mkAnd(nCtx(), t.length,
883 AST.arrayToNative(t)));
884 }
885
889 @SafeVarargs
890 public final BoolExpr mkOr(Expr<BoolSort>... t)
891 {
892 checkContextMatch(t);
893 return new BoolExpr(this, Native.mkOr(nCtx(), t.length,
894 AST.arrayToNative(t)));
895 }
896
900 @SafeVarargs
901 public final <R extends ArithSort> ArithExpr<R> mkAdd(Expr<? extends R>... t)
902 {
903 checkContextMatch(t);
904 return (ArithExpr<R>) Expr.create(this,
905 Native.mkAdd(nCtx(), t.length, AST.arrayToNative(t)));
906 }
907
911 @SafeVarargs
912 public final <R extends ArithSort> ArithExpr<R> mkMul(Expr<? extends R>... t)
913 {
914 checkContextMatch(t);
915 return (ArithExpr<R>) Expr.create(this,
916 Native.mkMul(nCtx(), t.length, AST.arrayToNative(t)));
917 }
918
922 @SafeVarargs
923 public final <R extends ArithSort> ArithExpr<R> mkSub(Expr<? extends R>... t)
924 {
925 checkContextMatch(t);
926 return (ArithExpr<R>) Expr.create(this,
927 Native.mkSub(nCtx(), t.length, AST.arrayToNative(t)));
928 }
929
933 public final <R extends ArithSort> ArithExpr<R> mkUnaryMinus(Expr<R> t)
934 {
935 checkContextMatch(t);
936 return (ArithExpr<R>) Expr.create(this,
937 Native.mkUnaryMinus(nCtx(), t.getNativeObject()));
938 }
939
943 public final <R extends ArithSort> ArithExpr<R> mkDiv(Expr<? extends R> t1, Expr<? extends R> t2)
944 {
945 checkContextMatch(t1);
946 checkContextMatch(t2);
947 return (ArithExpr<R>) Expr.create(this, Native.mkDiv(nCtx(),
948 t1.getNativeObject(), t2.getNativeObject()));
949 }
950
957 {
958 checkContextMatch(t1);
959 checkContextMatch(t2);
960 return new IntExpr(this, Native.mkMod(nCtx(), t1.getNativeObject(),
961 t2.getNativeObject()));
962 }
963
970 {
971 checkContextMatch(t1);
972 checkContextMatch(t2);
973 return new IntExpr(this, Native.mkRem(nCtx(), t1.getNativeObject(),
974 t2.getNativeObject()));
975 }
976
980 public final <R extends ArithSort> ArithExpr<R> mkPower(Expr<? extends R> t1,
982 {
983 checkContextMatch(t1);
984 checkContextMatch(t2);
985 return (ArithExpr<R>) Expr.create(
986 this,
987 Native.mkPower(nCtx(), t1.getNativeObject(),
988 t2.getNativeObject()));
989 }
990
995 {
996 checkContextMatch(t1);
997 checkContextMatch(t2);
998 return new BoolExpr(this, Native.mkLt(nCtx(), t1.getNativeObject(),
999 t2.getNativeObject()));
1000 }
1001
1006 {
1007 checkContextMatch(t1);
1008 checkContextMatch(t2);
1009 return new BoolExpr(this, Native.mkLe(nCtx(), t1.getNativeObject(),
1010 t2.getNativeObject()));
1011 }
1012
1017 {
1018 checkContextMatch(t1);
1019 checkContextMatch(t2);
1020 return new BoolExpr(this, Native.mkGt(nCtx(), t1.getNativeObject(),
1021 t2.getNativeObject()));
1022 }
1023
1028 {
1029 checkContextMatch(t1);
1030 checkContextMatch(t2);
1031 return new BoolExpr(this, Native.mkGe(nCtx(), t1.getNativeObject(),
1032 t2.getNativeObject()));
1033 }
1034
1046 {
1047 checkContextMatch(t);
1048 return new RealExpr(this,
1049 Native.mkInt2real(nCtx(), t.getNativeObject()));
1050 }
1051
1059 {
1060 checkContextMatch(t);
1061 return new IntExpr(this, Native.mkReal2int(nCtx(), t.getNativeObject()));
1062 }
1063
1068 {
1069 checkContextMatch(t);
1070 return new BoolExpr(this, Native.mkIsInt(nCtx(), t.getNativeObject()));
1071 }
1072
1079 {
1080 checkContextMatch(t);
1081 return new BitVecExpr(this, Native.mkBvnot(nCtx(), t.getNativeObject()));
1082 }
1083
1090 {
1091 checkContextMatch(t);
1092 return new BitVecExpr(this, Native.mkBvredand(nCtx(),
1093 t.getNativeObject()));
1094 }
1095
1102 {
1103 checkContextMatch(t);
1104 return new BitVecExpr(this, Native.mkBvredor(nCtx(),
1105 t.getNativeObject()));
1106 }
1107
1114 {
1115 checkContextMatch(t1);
1116 checkContextMatch(t2);
1117 return new BitVecExpr(this, Native.mkBvand(nCtx(),
1118 t1.getNativeObject(), t2.getNativeObject()));
1119 }
1120
1127 {
1128 checkContextMatch(t1);
1129 checkContextMatch(t2);
1130 return new BitVecExpr(this, Native.mkBvor(nCtx(), t1.getNativeObject(),
1131 t2.getNativeObject()));
1132 }
1133
1140 {
1141 checkContextMatch(t1);
1142 checkContextMatch(t2);
1143 return new BitVecExpr(this, Native.mkBvxor(nCtx(),
1144 t1.getNativeObject(), t2.getNativeObject()));
1145 }
1146
1153 {
1154 checkContextMatch(t1);
1155 checkContextMatch(t2);
1156 return new BitVecExpr(this, Native.mkBvnand(nCtx(),
1157 t1.getNativeObject(), t2.getNativeObject()));
1158 }
1159
1166 {
1167 checkContextMatch(t1);
1168 checkContextMatch(t2);
1169 return new BitVecExpr(this, Native.mkBvnor(nCtx(),
1170 t1.getNativeObject(), t2.getNativeObject()));
1171 }
1172
1179 {
1180 checkContextMatch(t1);
1181 checkContextMatch(t2);
1182 return new BitVecExpr(this, Native.mkBvxnor(nCtx(),
1183 t1.getNativeObject(), t2.getNativeObject()));
1184 }
1185
1192 {
1193 checkContextMatch(t);
1194 return new BitVecExpr(this, Native.mkBvneg(nCtx(), t.getNativeObject()));
1195 }
1196
1203 {
1204 checkContextMatch(t1);
1205 checkContextMatch(t2);
1206 return new BitVecExpr(this, Native.mkBvadd(nCtx(),
1207 t1.getNativeObject(), t2.getNativeObject()));
1208 }
1209
1216 {
1217 checkContextMatch(t1);
1218 checkContextMatch(t2);
1219 return new BitVecExpr(this, Native.mkBvsub(nCtx(),
1220 t1.getNativeObject(), t2.getNativeObject()));
1221 }
1222
1229 {
1230 checkContextMatch(t1);
1231 checkContextMatch(t2);
1232 return new BitVecExpr(this, Native.mkBvmul(nCtx(),
1233 t1.getNativeObject(), t2.getNativeObject()));
1234 }
1235
1244 {
1245 checkContextMatch(t1);
1246 checkContextMatch(t2);
1247 return new BitVecExpr(this, Native.mkBvudiv(nCtx(),
1248 t1.getNativeObject(), t2.getNativeObject()));
1249 }
1250
1265 {
1266 checkContextMatch(t1);
1267 checkContextMatch(t2);
1268 return new BitVecExpr(this, Native.mkBvsdiv(nCtx(),
1269 t1.getNativeObject(), t2.getNativeObject()));
1270 }
1271
1280 {
1281 checkContextMatch(t1);
1282 checkContextMatch(t2);
1283 return new BitVecExpr(this, Native.mkBvurem(nCtx(),
1284 t1.getNativeObject(), t2.getNativeObject()));
1285 }
1286
1298 {
1299 checkContextMatch(t1);
1300 checkContextMatch(t2);
1301 return new BitVecExpr(this, Native.mkBvsrem(nCtx(),
1302 t1.getNativeObject(), t2.getNativeObject()));
1303 }
1304
1312 {
1313 checkContextMatch(t1);
1314 checkContextMatch(t2);
1315 return new BitVecExpr(this, Native.mkBvsmod(nCtx(),
1316 t1.getNativeObject(), t2.getNativeObject()));
1317 }
1318
1325 {
1326 checkContextMatch(t1);
1327 checkContextMatch(t2);
1328 return new BoolExpr(this, Native.mkBvult(nCtx(), t1.getNativeObject(),
1329 t2.getNativeObject()));
1330 }
1331
1338 {
1339 checkContextMatch(t1);
1340 checkContextMatch(t2);
1341 return new BoolExpr(this, Native.mkBvslt(nCtx(), t1.getNativeObject(),
1342 t2.getNativeObject()));
1343 }
1344
1351 {
1352 checkContextMatch(t1);
1353 checkContextMatch(t2);
1354 return new BoolExpr(this, Native.mkBvule(nCtx(), t1.getNativeObject(),
1355 t2.getNativeObject()));
1356 }
1357
1364 {
1365 checkContextMatch(t1);
1366 checkContextMatch(t2);
1367 return new BoolExpr(this, Native.mkBvsle(nCtx(), t1.getNativeObject(),
1368 t2.getNativeObject()));
1369 }
1370
1377 {
1378 checkContextMatch(t1);
1379 checkContextMatch(t2);
1380 return new BoolExpr(this, Native.mkBvuge(nCtx(), t1.getNativeObject(),
1381 t2.getNativeObject()));
1382 }
1383
1390 {
1391 checkContextMatch(t1);
1392 checkContextMatch(t2);
1393 return new BoolExpr(this, Native.mkBvsge(nCtx(), t1.getNativeObject(),
1394 t2.getNativeObject()));
1395 }
1396
1403 {
1404 checkContextMatch(t1);
1405 checkContextMatch(t2);
1406 return new BoolExpr(this, Native.mkBvugt(nCtx(), t1.getNativeObject(),
1407 t2.getNativeObject()));
1408 }
1409
1416 {
1417 checkContextMatch(t1);
1418 checkContextMatch(t2);
1419 return new BoolExpr(this, Native.mkBvsgt(nCtx(), t1.getNativeObject(),
1420 t2.getNativeObject()));
1421 }
1422
1434 {
1435 checkContextMatch(t1);
1436 checkContextMatch(t2);
1437 return new BitVecExpr(this, Native.mkConcat(nCtx(),
1438 t1.getNativeObject(), t2.getNativeObject()));
1439 }
1440
1449 public BitVecExpr mkExtract(int high, int low, Expr<BitVecSort> t)
1450
1451 {
1452 checkContextMatch(t);
1453 return new BitVecExpr(this, Native.mkExtract(nCtx(), high, low,
1454 t.getNativeObject()));
1455 }
1456
1465 {
1466 checkContextMatch(t);
1467 return new BitVecExpr(this, Native.mkSignExt(nCtx(), i,
1468 t.getNativeObject()));
1469 }
1470
1479 {
1480 checkContextMatch(t);
1481 return new BitVecExpr(this, Native.mkZeroExt(nCtx(), i,
1482 t.getNativeObject()));
1483 }
1484
1491 {
1492 checkContextMatch(t);
1493 return new BitVecExpr(this, Native.mkRepeat(nCtx(), i,
1494 t.getNativeObject()));
1495 }
1496
1509 {
1510 checkContextMatch(t1);
1511 checkContextMatch(t2);
1512 return new BitVecExpr(this, Native.mkBvshl(nCtx(),
1513 t1.getNativeObject(), t2.getNativeObject()));
1514 }
1515
1528 {
1529 checkContextMatch(t1);
1530 checkContextMatch(t2);
1531 return new BitVecExpr(this, Native.mkBvlshr(nCtx(),
1532 t1.getNativeObject(), t2.getNativeObject()));
1533 }
1534
1548 {
1549 checkContextMatch(t1);
1550 checkContextMatch(t2);
1551 return new BitVecExpr(this, Native.mkBvashr(nCtx(),
1552 t1.getNativeObject(), t2.getNativeObject()));
1553 }
1554
1561 {
1562 checkContextMatch(t);
1563 return new BitVecExpr(this, Native.mkRotateLeft(nCtx(), i,
1564 t.getNativeObject()));
1565 }
1566
1573 {
1574 checkContextMatch(t);
1575 return new BitVecExpr(this, Native.mkRotateRight(nCtx(), i,
1576 t.getNativeObject()));
1577 }
1578
1586
1587 {
1588 checkContextMatch(t1);
1589 checkContextMatch(t2);
1590 return new BitVecExpr(this, Native.mkExtRotateLeft(nCtx(),
1591 t1.getNativeObject(), t2.getNativeObject()));
1592 }
1593
1601
1602 {
1603 checkContextMatch(t1);
1604 checkContextMatch(t2);
1605 return new BitVecExpr(this, Native.mkExtRotateRight(nCtx(),
1606 t1.getNativeObject(), t2.getNativeObject()));
1607 }
1608
1619 {
1620 checkContextMatch(t);
1621 return new BitVecExpr(this, Native.mkInt2bv(nCtx(), n,
1622 t.getNativeObject()));
1623 }
1624
1639 public IntExpr mkBV2Int(Expr<BitVecSort> t, boolean signed)
1640 {
1641 checkContextMatch(t);
1642 return new IntExpr(this, Native.mkBv2int(nCtx(), t.getNativeObject(),
1643 (signed)));
1644 }
1645
1652 boolean isSigned)
1653 {
1654 checkContextMatch(t1);
1655 checkContextMatch(t2);
1656 return new BoolExpr(this, Native.mkBvaddNoOverflow(nCtx(), t1
1657 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1658 }
1659
1666
1667 {
1668 checkContextMatch(t1);
1669 checkContextMatch(t2);
1670 return new BoolExpr(this, Native.mkBvaddNoUnderflow(nCtx(),
1671 t1.getNativeObject(), t2.getNativeObject()));
1672 }
1673
1680
1681 {
1682 checkContextMatch(t1);
1683 checkContextMatch(t2);
1684 return new BoolExpr(this, Native.mkBvsubNoOverflow(nCtx(),
1685 t1.getNativeObject(), t2.getNativeObject()));
1686 }
1687
1694 boolean isSigned)
1695 {
1696 checkContextMatch(t1);
1697 checkContextMatch(t2);
1698 return new BoolExpr(this, Native.mkBvsubNoUnderflow(nCtx(), t1
1699 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1700 }
1701
1708
1709 {
1710 checkContextMatch(t1);
1711 checkContextMatch(t2);
1712 return new BoolExpr(this, Native.mkBvsdivNoOverflow(nCtx(),
1713 t1.getNativeObject(), t2.getNativeObject()));
1714 }
1715
1722 {
1723 checkContextMatch(t);
1724 return new BoolExpr(this, Native.mkBvnegNoOverflow(nCtx(),
1725 t.getNativeObject()));
1726 }
1727
1734 boolean isSigned)
1735 {
1736 checkContextMatch(t1);
1737 checkContextMatch(t2);
1738 return new BoolExpr(this, Native.mkBvmulNoOverflow(nCtx(), t1
1739 .getNativeObject(), t2.getNativeObject(), (isSigned)));
1740 }
1741
1748
1749 {
1750 checkContextMatch(t1);
1751 checkContextMatch(t2);
1752 return new BoolExpr(this, Native.mkBvmulNoUnderflow(nCtx(),
1753 t1.getNativeObject(), t2.getNativeObject()));
1754 }
1755
1759 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(Symbol name, D domain, R range)
1760
1761 {
1762 return (ArrayExpr<D, R>) mkConst(name, mkArraySort(domain, range));
1763 }
1764
1768 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkArrayConst(String name, D domain, R range)
1769
1770 {
1771 return (ArrayExpr<D, R>) mkConst(mkSymbol(name), mkArraySort(domain, range));
1772 }
1773
1786 public final <D extends Sort, R extends Sort> Expr<R> mkSelect(Expr<ArraySort<D, R>> a, Expr<D> i)
1787 {
1788 checkContextMatch(a);
1789 checkContextMatch(i);
1790 return (Expr<R>) Expr.create(
1791 this,
1792 Native.mkSelect(nCtx(), a.getNativeObject(),
1793 i.getNativeObject()));
1794 }
1795
1808 public final <R extends Sort> Expr<R> mkSelect(Expr<ArraySort<Sort, R>> a, Expr<?>[] args)
1809 {
1810 checkContextMatch(a);
1811 checkContextMatch(args);
1812 return (Expr<R>) Expr.create(
1813 this,
1814 Native.mkSelectN(nCtx(), a.getNativeObject(), args.length, AST.arrayToNative(args)));
1815 }
1816
1833 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkStore(Expr<ArraySort<D, R>> a, Expr<D> i, Expr<R> v)
1834 {
1835 checkContextMatch(a);
1836 checkContextMatch(i);
1837 checkContextMatch(v);
1838 return new ArrayExpr<>(this, Native.mkStore(nCtx(), a.getNativeObject(),
1839 i.getNativeObject(), v.getNativeObject()));
1840 }
1841
1858 public final <R extends Sort> ArrayExpr<Sort, R> mkStore(Expr<ArraySort<Sort, R>> a, Expr<?>[] args, Expr<R> v)
1859 {
1860 checkContextMatch(a);
1861 checkContextMatch(args);
1862 checkContextMatch(v);
1863 return new ArrayExpr<>(this, Native.mkStoreN(nCtx(), a.getNativeObject(),
1864 args.length, AST.arrayToNative(args), v.getNativeObject()));
1865 }
1866
1876 public final <D extends Sort, R extends Sort> ArrayExpr<D, R> mkConstArray(D domain, Expr<R> v)
1877 {
1878 checkContextMatch(domain);
1879 checkContextMatch(v);
1880 return new ArrayExpr<>(this, Native.mkConstArray(nCtx(),
1881 domain.getNativeObject(), v.getNativeObject()));
1882 }
1883
1897 @SafeVarargs
1898 public final <D extends Sort, R1 extends Sort, R2 extends Sort> ArrayExpr<D, R2> mkMap(FuncDecl<R2> f, Expr<ArraySort<D, R1>>... args)
1899 {
1900 checkContextMatch(f);
1901 checkContextMatch(args);
1902 return (ArrayExpr<D, R2>) Expr.create(this, Native.mkMap(nCtx(),
1903 f.getNativeObject(), AST.arrayLength(args),
1904 AST.arrayToNative(args)));
1905 }
1906
1913 public final <D extends Sort, R extends Sort> Expr<R> mkTermArray(Expr<ArraySort<D, R>> array)
1914 {
1915 checkContextMatch(array);
1916 return (Expr<R>) Expr.create(this,
1917 Native.mkArrayDefault(nCtx(), array.getNativeObject()));
1918 }
1919
1923 public final <D extends Sort, R extends Sort> Expr<D> mkArrayExt(Expr<ArraySort<D, R>> arg1, Expr<ArraySort<D, R>> arg2)
1924 {
1925 checkContextMatch(arg1);
1926 checkContextMatch(arg2);
1927 return (Expr<D>) Expr.create(this, Native.mkArrayExt(nCtx(), arg1.getNativeObject(), arg2.getNativeObject()));
1928 }
1929
1930
1934 public final <D extends Sort> SetSort<D> mkSetSort(D ty)
1935 {
1936 checkContextMatch(ty);
1937 return new SetSort<>(this, ty);
1938 }
1939
1943 public final <D extends Sort> ArrayExpr<D, BoolSort> mkEmptySet(D domain)
1944 {
1945 checkContextMatch(domain);
1946 return (ArrayExpr<D, BoolSort>) Expr.create(this,
1947 Native.mkEmptySet(nCtx(), domain.getNativeObject()));
1948 }
1949
1953 public final <D extends Sort> ArrayExpr<D, BoolSort> mkFullSet(D domain)
1954 {
1955 checkContextMatch(domain);
1956 return (ArrayExpr<D, BoolSort>) Expr.create(this,
1957 Native.mkFullSet(nCtx(), domain.getNativeObject()));
1958 }
1959
1963 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetAdd(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
1964 {
1965 checkContextMatch(set);
1966 checkContextMatch(element);
1967 return (ArrayExpr<D, BoolSort>) Expr.create(this,
1968 Native.mkSetAdd(nCtx(), set.getNativeObject(),
1969 element.getNativeObject()));
1970 }
1971
1975 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetDel(Expr<ArraySort<D, BoolSort>> set, Expr<D> element)
1976 {
1977 checkContextMatch(set);
1978 checkContextMatch(element);
1979 return (ArrayExpr<D, BoolSort>)Expr.create(this,
1980 Native.mkSetDel(nCtx(), set.getNativeObject(),
1981 element.getNativeObject()));
1982 }
1983
1987 @SafeVarargs
1988 public final <D extends Sort> ArrayExpr<D, BoolSort> mkSetUnion(Expr<ArraySort<D, BoolSort>>... args)
1989 {
1990 checkContextMatch(args);
1991 return (ArrayExpr<D, BoolSort>)Expr.create(this,
1992 Native.mkSetUnion(nCtx(), args.length,
1993 AST.arrayToNative(args)));
1994 }
1995
1999 @SafeVarargs
2001 {
2002 checkContextMatch(args);
2003 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2004 Native.mkSetIntersect(nCtx(), args.length,
2005 AST.arrayToNative(args)));
2006 }
2007
2012 {
2013 checkContextMatch(arg1);
2014 checkContextMatch(arg2);
2015 return (ArrayExpr<D, BoolSort>) Expr.create(this,
2016 Native.mkSetDifference(nCtx(), arg1.getNativeObject(),
2017 arg2.getNativeObject()));
2018 }
2019
2024 {
2025 checkContextMatch(arg);
2026 return (ArrayExpr<D, BoolSort>)Expr.create(this,
2027 Native.mkSetComplement(nCtx(), arg.getNativeObject()));
2028 }
2029
2033 public final <D extends Sort> BoolExpr mkSetMembership(Expr<D> elem, Expr<ArraySort<D, BoolSort>> set)
2034 {
2035 checkContextMatch(elem);
2036 checkContextMatch(set);
2037 return (BoolExpr) Expr.create(this,
2038 Native.mkSetMember(nCtx(), elem.getNativeObject(),
2039 set.getNativeObject()));
2040 }
2041
2046 {
2047 checkContextMatch(arg1);
2048 checkContextMatch(arg2);
2049 return (BoolExpr) Expr.create(this,
2050 Native.mkSetSubset(nCtx(), arg1.getNativeObject(),
2051 arg2.getNativeObject()));
2052 }
2053
2054
2062 public final <R extends Sort> SeqExpr<R> mkEmptySeq(R s)
2063 {
2064 checkContextMatch(s);
2065 return (SeqExpr<R>) Expr.create(this, Native.mkSeqEmpty(nCtx(), s.getNativeObject()));
2066 }
2067
2071 public final <R extends Sort> SeqExpr<R> mkUnit(Expr<R> elem)
2072 {
2073 checkContextMatch(elem);
2074 return (SeqExpr<R>) Expr.create(this, Native.mkSeqUnit(nCtx(), elem.getNativeObject()));
2075 }
2076
2081 {
2082 StringBuilder buf = new StringBuilder();
2083 for (int i = 0; i < s.length(); i += Character.charCount(s.codePointAt(i))) {
2084 int code = s.codePointAt(i);
2085 if (code <= 32 || 127 < code)
2086 buf.append(String.format("\\u{%x}", code));
2087 else
2088 buf.append(s.charAt(i));
2089 }
2090 return (SeqExpr<CharSort>) Expr.create(this, Native.mkString(nCtx(), buf.toString()));
2091 }
2092
2097 {
2098 return (SeqExpr<CharSort>) Expr.create(this, Native.mkIntToStr(nCtx(), e.getNativeObject()));
2099 }
2100
2105 {
2106 return (SeqExpr<CharSort>) Expr.create(this, Native.mkUbvToStr(nCtx(), e.getNativeObject()));
2107 }
2108
2113 {
2114 return (SeqExpr<CharSort>) Expr.create(this, Native.mkSbvToStr(nCtx(), e.getNativeObject()));
2115 }
2116
2121 {
2122 return (IntExpr) Expr.create(this, Native.mkStrToInt(nCtx(), e.getNativeObject()));
2123 }
2124
2128 @SafeVarargs
2129 public final <R extends Sort> SeqExpr<R> mkConcat(Expr<SeqSort<R>>... t)
2130 {
2131 checkContextMatch(t);
2132 return (SeqExpr<R>) Expr.create(this, Native.mkSeqConcat(nCtx(), t.length, AST.arrayToNative(t)));
2133 }
2134
2135
2139 public final <R extends Sort> IntExpr mkLength(Expr<SeqSort<R>> s)
2140 {
2141 checkContextMatch(s);
2142 return (IntExpr) Expr.create(this, Native.mkSeqLength(nCtx(), s.getNativeObject()));
2143 }
2144
2148 public final <R extends Sort> BoolExpr mkPrefixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2149 {
2150 checkContextMatch(s1, s2);
2151 return (BoolExpr) Expr.create(this, Native.mkSeqPrefix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2152 }
2153
2157 public final <R extends Sort> BoolExpr mkSuffixOf(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2158 {
2159 checkContextMatch(s1, s2);
2160 return (BoolExpr)Expr.create(this, Native.mkSeqSuffix(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2161 }
2162
2166 public final <R extends Sort> BoolExpr mkContains(Expr<SeqSort<R>> s1, Expr<SeqSort<R>> s2)
2167 {
2168 checkContextMatch(s1, s2);
2169 return (BoolExpr) Expr.create(this, Native.mkSeqContains(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2170 }
2171
2177 {
2178 checkContextMatch(s1, s2);
2179 return new BoolExpr(this, Native.mkStrLt(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2180 }
2181
2186 {
2187 checkContextMatch(s1, s2);
2188 return new BoolExpr(this, Native.mkStrLe(nCtx(), s1.getNativeObject(), s2.getNativeObject()));
2189 }
2190
2191
2195 public final <R extends Sort> SeqExpr<R> mkAt(Expr<SeqSort<R>> s, Expr<IntSort> index)
2196 {
2197 checkContextMatch(s, index);
2198 return (SeqExpr<R>) Expr.create(this, Native.mkSeqAt(nCtx(), s.getNativeObject(), index.getNativeObject()));
2199 }
2200
2204 public final <R extends Sort> Expr<R> mkNth(Expr<SeqSort<R>> s, Expr<IntSort> index)
2205 {
2206 checkContextMatch(s, index);
2207 return (Expr<R>) Expr.create(this, Native.mkSeqNth(nCtx(), s.getNativeObject(), index.getNativeObject()));
2208 }
2209
2210
2214 public final <R extends Sort> SeqExpr<R> mkExtract(Expr<SeqSort<R>> s, Expr<IntSort> offset, Expr<IntSort> length)
2215 {
2216 checkContextMatch(s, offset, length);
2217 return (SeqExpr<R>) Expr.create(this, Native.mkSeqExtract(nCtx(), s.getNativeObject(), offset.getNativeObject(), length.getNativeObject()));
2218 }
2219
2223 public final <R extends Sort> IntExpr mkIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr, Expr<IntSort> offset)
2224 {
2225 checkContextMatch(s, substr, offset);
2226 return (IntExpr)Expr.create(this, Native.mkSeqIndex(nCtx(), s.getNativeObject(), substr.getNativeObject(), offset.getNativeObject()));
2227 }
2228
2232 public final <R extends Sort> IntExpr mkLastIndexOf(Expr<SeqSort<R>> s, Expr<SeqSort<R>> substr)
2233 {
2234 checkContextMatch(s, substr);
2235 return (IntExpr)Expr.create(this, Native.mkSeqLastIndex(nCtx(), s.getNativeObject(), substr.getNativeObject()));
2236 }
2237
2241 public final <R extends Sort> SeqExpr<R> mkReplace(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2242 {
2243 checkContextMatch(s, src, dst);
2244 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplace(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2245 }
2246
2250 public final <R extends Sort> SeqExpr<R> mkReplaceAll(Expr<SeqSort<R>> s, Expr<SeqSort<R>> src, Expr<SeqSort<R>> dst)
2251 {
2252 checkContextMatch(s, src, dst);
2253 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceAll(nCtx(), s.getNativeObject(), src.getNativeObject(), dst.getNativeObject()));
2254 }
2255
2259 public final <R extends Sort> SeqExpr<R> mkReplaceRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2260 {
2261 checkContextMatch(s, re, dst);
2262 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceRe(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2263 }
2264
2268 public final <R extends Sort> SeqExpr<R> mkReplaceReAll(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re, Expr<SeqSort<R>> dst)
2269 {
2270 checkContextMatch(s, re, dst);
2271 return (SeqExpr<R>) Expr.create(this, Native.mkSeqReplaceReAll(nCtx(), s.getNativeObject(), re.getNativeObject(), dst.getNativeObject()));
2272 }
2273
2277 public final <R extends Sort> ReExpr<SeqSort<R>> mkToRe(Expr<SeqSort<R>> s)
2278 {
2279 checkContextMatch(s);
2280 return (ReExpr<SeqSort<R>>) Expr.create(this, Native.mkSeqToRe(nCtx(), s.getNativeObject()));
2281 }
2282
2283
2287 public final <R extends Sort> BoolExpr mkInRe(Expr<SeqSort<R>> s, ReExpr<SeqSort<R>> re)
2288 {
2289 checkContextMatch(s, re);
2290 return (BoolExpr) Expr.create(this, Native.mkSeqInRe(nCtx(), s.getNativeObject(), re.getNativeObject()));
2291 }
2292
2296 public final <R extends Sort> ReExpr<R> mkStar(Expr<ReSort<R>> re)
2297 {
2298 checkContextMatch(re);
2299 return (ReExpr<R>) Expr.create(this, Native.mkReStar(nCtx(), re.getNativeObject()));
2300 }
2301
2305 public final <R extends Sort> ReExpr<R> mkPower(Expr<ReSort<R>> re, int n)
2306 {
2307 return (ReExpr<R>) Expr.create(this, Native.mkRePower(nCtx(), re.getNativeObject(), n));
2308 }
2309
2313 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo, int hi)
2314 {
2315 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, hi));
2316 }
2317
2321 public final <R extends Sort> ReExpr<R> mkLoop(Expr<ReSort<R>> re, int lo)
2322 {
2323 return (ReExpr<R>) Expr.create(this, Native.mkReLoop(nCtx(), re.getNativeObject(), lo, 0));
2324 }
2325
2326
2330 public final <R extends Sort> ReExpr<R> mkPlus(Expr<ReSort<R>> re)
2331 {
2332 checkContextMatch(re);
2333 return (ReExpr<R>) Expr.create(this, Native.mkRePlus(nCtx(), re.getNativeObject()));
2334 }
2335
2339 public final <R extends Sort> ReExpr<R> mkOption(Expr<ReSort<R>> re)
2340 {
2341 checkContextMatch(re);
2342 return (ReExpr<R>) Expr.create(this, Native.mkReOption(nCtx(), re.getNativeObject()));
2343 }
2344
2348 public final <R extends Sort> ReExpr<R> mkComplement(Expr<ReSort<R>> re)
2349 {
2350 checkContextMatch(re);
2351 return (ReExpr<R>) Expr.create(this, Native.mkReComplement(nCtx(), re.getNativeObject()));
2352 }
2353
2357 @SafeVarargs
2358 public final <R extends Sort> ReExpr<R> mkConcat(ReExpr<R>... t)
2359 {
2360 checkContextMatch(t);
2361 return (ReExpr<R>) Expr.create(this, Native.mkReConcat(nCtx(), t.length, AST.arrayToNative(t)));
2362 }
2363
2367 @SafeVarargs
2368 public final <R extends Sort> ReExpr<R> mkUnion(Expr<ReSort<R>>... t)
2369 {
2370 checkContextMatch(t);
2371 return (ReExpr<R>) Expr.create(this, Native.mkReUnion(nCtx(), t.length, AST.arrayToNative(t)));
2372 }
2373
2377 @SafeVarargs
2378 public final <R extends Sort> ReExpr<R> mkIntersect(Expr<ReSort<R>>... t)
2379 {
2380 checkContextMatch(t);
2381 return (ReExpr<R>) Expr.create(this, Native.mkReIntersect(nCtx(), t.length, AST.arrayToNative(t)));
2382 }
2383
2387 public final <R extends Sort> ReExpr<R> mkDiff(Expr<ReSort<R>> a, Expr<ReSort<R>> b)
2388 {
2389 checkContextMatch(a, b);
2390 return (ReExpr<R>) Expr.create(this, Native.mkReDiff(nCtx(), a.getNativeObject(), b.getNativeObject()));
2391 }
2392
2393
2398 public final <R extends Sort> ReExpr<R> mkEmptyRe(ReSort<R> s)
2399 {
2400 return (ReExpr<R>) Expr.create(this, Native.mkReEmpty(nCtx(), s.getNativeObject()));
2401 }
2402
2407 public final <R extends Sort> ReExpr<R> mkFullRe(ReSort<R> s)
2408 {
2409 return (ReExpr<R>) Expr.create(this, Native.mkReFull(nCtx(), s.getNativeObject()));
2410 }
2411
2417 public final <R extends Sort> ReExpr<R> mkAllcharRe(ReSort<R> s)
2418 {
2419 return (ReExpr<R>) Expr.create(this, Native.mkReAllchar(nCtx(), s.getNativeObject()));
2420 }
2421
2426 {
2427 checkContextMatch(lo, hi);
2428 return (ReExpr<SeqSort<CharSort>>) Expr.create(this, Native.mkReRange(nCtx(), lo.getNativeObject(), hi.getNativeObject()));
2429 }
2430
2435 {
2436 checkContextMatch(ch1, ch2);
2437 return (BoolExpr) Expr.create(this, Native.mkCharLe(nCtx(), ch1.getNativeObject(), ch2.getNativeObject()));
2438 }
2439
2444 {
2445 checkContextMatch(ch);
2446 return (IntExpr) Expr.create(this, Native.mkCharToInt(nCtx(), ch.getNativeObject()));
2447 }
2448
2453 {
2454 checkContextMatch(ch);
2455 return (BitVecExpr) Expr.create(this, Native.mkCharToBv(nCtx(), ch.getNativeObject()));
2456 }
2457
2462 {
2463 checkContextMatch(bv);
2464 return (Expr<CharSort>) Expr.create(this, Native.mkCharFromBv(nCtx(), bv.getNativeObject()));
2465 }
2466
2471 {
2472 checkContextMatch(ch);
2473 return (BoolExpr) Expr.create(this, Native.mkCharIsDigit(nCtx(), ch.getNativeObject()));
2474 }
2475
2479 public BoolExpr mkAtMost(Expr<BoolSort>[] args, int k)
2480 {
2481 checkContextMatch(args);
2482 return (BoolExpr) Expr.create(this, Native.mkAtmost(nCtx(), args.length, AST.arrayToNative(args), k));
2483 }
2484
2488 public BoolExpr mkAtLeast(Expr<BoolSort>[] args, int k)
2489 {
2490 checkContextMatch(args);
2491 return (BoolExpr) Expr.create(this, Native.mkAtleast(nCtx(), args.length, AST.arrayToNative(args), k));
2492 }
2493
2497 public BoolExpr mkPBLe(int[] coeffs, Expr<BoolSort>[] args, int k)
2498 {
2499 checkContextMatch(args);
2500 return (BoolExpr) Expr.create(this, Native.mkPble(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2501 }
2502
2506 public BoolExpr mkPBGe(int[] coeffs, Expr<BoolSort>[] args, int k)
2507 {
2508 checkContextMatch(args);
2509 return (BoolExpr) Expr.create(this, Native.mkPbge(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2510 }
2511
2515 public BoolExpr mkPBEq(int[] coeffs, Expr<BoolSort>[] args, int k)
2516 {
2517 checkContextMatch(args);
2518 return (BoolExpr) Expr.create(this, Native.mkPbeq(nCtx(), args.length, AST.arrayToNative(args), coeffs, k));
2519 }
2520
2532 public final <R extends Sort> Expr<R> mkNumeral(String v, R ty)
2533 {
2534 checkContextMatch(ty);
2535 return (Expr<R>) Expr.create(this,
2536 Native.mkNumeral(nCtx(), v, ty.getNativeObject()));
2537 }
2538
2549 public final <R extends Sort> Expr<R> mkNumeral(int v, R ty)
2550 {
2551 checkContextMatch(ty);
2552 return (Expr<R>) Expr.create(this, Native.mkInt(nCtx(), v, ty.getNativeObject()));
2553 }
2554
2565 public final <R extends Sort> Expr<R> mkNumeral(long v, R ty)
2566 {
2567 checkContextMatch(ty);
2568 return (Expr<R>) Expr.create(this,
2569 Native.mkInt64(nCtx(), v, ty.getNativeObject()));
2570 }
2571
2581 public RatNum mkReal(int num, int den)
2582 {
2583 if (den == 0) {
2584 throw new Z3Exception("Denominator is zero");
2585 }
2586
2587 return new RatNum(this, Native.mkReal(nCtx(), num, den));
2588 }
2589
2596 public RatNum mkReal(String v)
2597 {
2598
2599 return new RatNum(this, Native.mkNumeral(nCtx(), v, getRealSort()
2600 .getNativeObject()));
2601 }
2602
2609 public RatNum mkReal(int v)
2610 {
2611
2612 return new RatNum(this, Native.mkInt(nCtx(), v, getRealSort()
2613 .getNativeObject()));
2614 }
2615
2622 public RatNum mkReal(long v)
2623 {
2624
2625 return new RatNum(this, Native.mkInt64(nCtx(), v, getRealSort()
2626 .getNativeObject()));
2627 }
2628
2633 public IntNum mkInt(String v)
2634 {
2635
2636 return new IntNum(this, Native.mkNumeral(nCtx(), v, getIntSort()
2637 .getNativeObject()));
2638 }
2639
2646 public IntNum mkInt(int v)
2647 {
2648
2649 return new IntNum(this, Native.mkInt(nCtx(), v, getIntSort()
2650 .getNativeObject()));
2651 }
2652
2659 public IntNum mkInt(long v)
2660 {
2661
2662 return new IntNum(this, Native.mkInt64(nCtx(), v, getIntSort()
2663 .getNativeObject()));
2664 }
2665
2671 public BitVecNum mkBV(String v, int size)
2672 {
2673 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2674 }
2675
2681 public BitVecNum mkBV(int v, int size)
2682 {
2683 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2684 }
2685
2691 public BitVecNum mkBV(long v, int size)
2692 {
2693 return (BitVecNum) mkNumeral(v, mkBitVecSort(size));
2694 }
2695
2721 public Quantifier mkForall(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
2722 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
2723 Symbol quantifierID, Symbol skolemID)
2724 {
2725 return Quantifier.of(this, true, sorts, names, body, weight, patterns,
2726 noPatterns, quantifierID, skolemID);
2727 }
2728
2733 public Quantifier mkForall(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
2734 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
2735 Symbol skolemID)
2736 {
2737
2738 return Quantifier.of(this, true, boundConstants, body, weight,
2739 patterns, noPatterns, quantifierID, skolemID);
2740 }
2741
2746 public Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr<BoolSort> body,
2747 int weight, Pattern[] patterns, Expr<?>[] noPatterns,
2748 Symbol quantifierID, Symbol skolemID)
2749 {
2750
2751 return Quantifier.of(this, false, sorts, names, body, weight,
2752 patterns, noPatterns, quantifierID, skolemID);
2753 }
2754
2759 public Quantifier mkExists(Expr<?>[] boundConstants, Expr<BoolSort> body, int weight,
2760 Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID,
2761 Symbol skolemID)
2762 {
2763
2764 return Quantifier.of(this, false, boundConstants, body, weight,
2765 patterns, noPatterns, quantifierID, skolemID);
2766 }
2767
2772 public Quantifier mkQuantifier(boolean universal, Sort[] sorts,
2773 Symbol[] names, Expr<BoolSort> body, int weight, Pattern[] patterns,
2774 Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
2775
2776 {
2777
2778 if (universal)
2779 return mkForall(sorts, names, body, weight, patterns, noPatterns,
2780 quantifierID, skolemID);
2781 else
2782 return mkExists(sorts, names, body, weight, patterns, noPatterns,
2783 quantifierID, skolemID);
2784 }
2785
2790 public Quantifier mkQuantifier(boolean universal, Expr<?>[] boundConstants,
2791 Expr<BoolSort> body, int weight, Pattern[] patterns, Expr<?>[] noPatterns,
2792 Symbol quantifierID, Symbol skolemID)
2793 {
2794
2795 if (universal)
2796 return mkForall(boundConstants, body, weight, patterns, noPatterns,
2797 quantifierID, skolemID);
2798 else
2799 return mkExists(boundConstants, body, weight, patterns, noPatterns,
2800 quantifierID, skolemID);
2801 }
2802
2820 public final <R extends Sort> Lambda<R> mkLambda(Sort[] sorts, Symbol[] names, Expr<R> body)
2821 {
2822 return Lambda.of(this, sorts, names, body);
2823 }
2824
2831 public final <R extends Sort> Lambda<R> mkLambda(Expr<?>[] boundConstants, Expr<R> body)
2832 {
2833 return Lambda.of(this, boundConstants, body);
2834 }
2835
2836
2852 {
2853 Native.setAstPrintMode(nCtx(), value.toInt());
2854 }
2855
2869 public String benchmarkToSMTString(String name, String logic,
2870 String status, String attributes, Expr<BoolSort>[] assumptions,
2871 Expr<BoolSort> formula)
2872 {
2873
2874 return Native.benchmarkToSmtlibString(nCtx(), name, logic, status,
2875 attributes, assumptions.length,
2876 AST.arrayToNative(assumptions), formula.getNativeObject());
2877 }
2878
2888 public BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames,
2889 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
2890 {
2891 int csn = Symbol.arrayLength(sortNames);
2892 int cs = Sort.arrayLength(sorts);
2893 int cdn = Symbol.arrayLength(declNames);
2894 int cd = AST.arrayLength(decls);
2895 if (csn != cs || cdn != cd) {
2896 throw new Z3Exception("Argument size mismatch");
2897 }
2898 ASTVector v = new ASTVector(this, Native.parseSmtlib2String(nCtx(),
2899 str, AST.arrayLength(sorts), Symbol.arrayToNative(sortNames),
2900 AST.arrayToNative(sorts), AST.arrayLength(decls),
2901 Symbol.arrayToNative(declNames), AST.arrayToNative(decls)));
2902 return v.ToBoolExprArray();
2903 }
2904
2909 public BoolExpr[] parseSMTLIB2File(String fileName, Symbol[] sortNames,
2910 Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
2911 {
2912 int csn = Symbol.arrayLength(sortNames);
2913 int cs = Sort.arrayLength(sorts);
2914 int cdn = Symbol.arrayLength(declNames);
2915 int cd = AST.arrayLength(decls);
2916 if (csn != cs || cdn != cd)
2917 throw new Z3Exception("Argument size mismatch");
2918 ASTVector v = new ASTVector(this, Native.parseSmtlib2File(nCtx(),
2919 fileName, AST.arrayLength(sorts),
2920 Symbol.arrayToNative(sortNames), AST.arrayToNative(sorts),
2921 AST.arrayLength(decls), Symbol.arrayToNative(declNames),
2922 AST.arrayToNative(decls)));
2923 return v.ToBoolExprArray();
2924 }
2925
2936 public Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
2937 {
2938 return new Goal(this, models, unsatCores, proofs);
2939 }
2940
2945 {
2946 return new Params(this);
2947 }
2948
2952 public int getNumTactics()
2953 {
2954 return Native.getNumTactics(nCtx());
2955 }
2956
2960 public String[] getTacticNames()
2961 {
2962
2963 int n = getNumTactics();
2964 String[] res = new String[n];
2965 for (int i = 0; i < n; i++)
2966 res[i] = Native.getTacticName(nCtx(), i);
2967 return res;
2968 }
2969
2974 public String getTacticDescription(String name)
2975 {
2976 return Native.tacticGetDescr(nCtx(), name);
2977 }
2978
2982 public Tactic mkTactic(String name)
2983 {
2984 return new Tactic(this, name);
2985 }
2986
2991 public Tactic andThen(Tactic t1, Tactic t2, Tactic... ts)
2992
2993 {
2994 checkContextMatch(t1);
2995 checkContextMatch(t2);
2996 checkContextMatch(ts);
2997
2998 long last = 0;
2999 if (ts != null && ts.length > 0)
3000 {
3001 last = ts[ts.length - 1].getNativeObject();
3002 for (int i = ts.length - 2; i >= 0; i--) {
3003 last = Native.tacticAndThen(nCtx(), ts[i].getNativeObject(),
3004 last);
3005 }
3006 }
3007 if (last != 0)
3008 {
3009 last = Native.tacticAndThen(nCtx(), t2.getNativeObject(), last);
3010 return new Tactic(this, Native.tacticAndThen(nCtx(),
3011 t1.getNativeObject(), last));
3012 } else
3013 return new Tactic(this, Native.tacticAndThen(nCtx(),
3014 t1.getNativeObject(), t2.getNativeObject()));
3015 }
3016
3023 public Tactic then(Tactic t1, Tactic t2, Tactic... ts)
3024 {
3025 return andThen(t1, t2, ts);
3026 }
3027
3034 {
3035 checkContextMatch(t1);
3036 checkContextMatch(t2);
3037 return new Tactic(this, Native.tacticOrElse(nCtx(),
3038 t1.getNativeObject(), t2.getNativeObject()));
3039 }
3040
3047 public Tactic tryFor(Tactic t, int ms)
3048 {
3049 checkContextMatch(t);
3050 return new Tactic(this, Native.tacticTryFor(nCtx(),
3051 t.getNativeObject(), ms));
3052 }
3053
3061 {
3062 checkContextMatch(t);
3063 checkContextMatch(p);
3064 return new Tactic(this, Native.tacticWhen(nCtx(), p.getNativeObject(),
3065 t.getNativeObject()));
3066 }
3067
3073 public Tactic cond(Probe p, Tactic t1, Tactic t2)
3074 {
3075 checkContextMatch(p);
3076 checkContextMatch(t1);
3077 checkContextMatch(t2);
3078 return new Tactic(this, Native.tacticCond(nCtx(), p.getNativeObject(),
3079 t1.getNativeObject(), t2.getNativeObject()));
3080 }
3081
3086 public Tactic repeat(Tactic t, int max)
3087 {
3088 checkContextMatch(t);
3089 return new Tactic(this, Native.tacticRepeat(nCtx(),
3090 t.getNativeObject(), max));
3091 }
3092
3096 public Tactic skip()
3097 {
3098 return new Tactic(this, Native.tacticSkip(nCtx()));
3099 }
3100
3104 public Tactic fail()
3105 {
3106 return new Tactic(this, Native.tacticFail(nCtx()));
3107 }
3108
3114 {
3115 checkContextMatch(p);
3116 return new Tactic(this,
3117 Native.tacticFailIf(nCtx(), p.getNativeObject()));
3118 }
3119
3125 {
3126 return new Tactic(this, Native.tacticFailIfNotDecided(nCtx()));
3127 }
3128
3134 {
3135 checkContextMatch(t);
3136 checkContextMatch(p);
3137 return new Tactic(this, Native.tacticUsingParams(nCtx(),
3138 t.getNativeObject(), p.getNativeObject()));
3139 }
3140
3148 {
3149 return usingParams(t, p);
3150 }
3151
3155 public Tactic parOr(Tactic... t)
3156 {
3157 checkContextMatch(t);
3158 return new Tactic(this, Native.tacticParOr(nCtx(),
3160 }
3161
3167 {
3168 checkContextMatch(t1);
3169 checkContextMatch(t2);
3170 return new Tactic(this, Native.tacticParAndThen(nCtx(),
3171 t1.getNativeObject(), t2.getNativeObject()));
3172 }
3173
3179 public void interrupt()
3180 {
3181 Native.interrupt(nCtx());
3182 }
3183
3188 {
3189 return Native.getNumSimplifiers(nCtx());
3190 }
3191
3195 public String[] getSimplifierNames()
3196 {
3197
3198 int n = getNumSimplifiers();
3199 String[] res = new String[n];
3200 for (int i = 0; i < n; i++)
3201 res[i] = Native.getSimplifierName(nCtx(), i);
3202 return res;
3203 }
3204
3209 public String getSimplifierDescription(String name)
3210 {
3211 return Native.simplifierGetDescr(nCtx(), name);
3212 }
3213
3217 public Simplifier mkSimplifier(String name)
3218 {
3219 return new Simplifier(this, name);
3220 }
3221
3226
3227 {
3228 checkContextMatch(t1);
3229 checkContextMatch(t2);
3230 checkContextMatch(ts);
3231
3232 long last = 0;
3233 if (ts != null && ts.length > 0)
3234 {
3235 last = ts[ts.length - 1].getNativeObject();
3236 for (int i = ts.length - 2; i >= 0; i--) {
3237 last = Native.simplifierAndThen(nCtx(), ts[i].getNativeObject(),
3238 last);
3239 }
3240 }
3241 if (last != 0)
3242 {
3243 last = Native.simplifierAndThen(nCtx(), t2.getNativeObject(), last);
3244 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3245 t1.getNativeObject(), last));
3246 } else
3247 return new Simplifier(this, Native.simplifierAndThen(nCtx(),
3248 t1.getNativeObject(), t2.getNativeObject()));
3249 }
3250
3257 {
3258 return andThen(t1, t2, ts);
3259 }
3260
3266 {
3267 checkContextMatch(t);
3268 checkContextMatch(p);
3269 return new Simplifier(this, Native.simplifierUsingParams(nCtx(),
3270 t.getNativeObject(), p.getNativeObject()));
3271 }
3272
3280 {
3281 return usingParams(t, p);
3282 }
3283
3287 public int getNumProbes()
3288 {
3289 return Native.getNumProbes(nCtx());
3290 }
3291
3295 public String[] getProbeNames()
3296 {
3297
3298 int n = getNumProbes();
3299 String[] res = new String[n];
3300 for (int i = 0; i < n; i++)
3301 res[i] = Native.getProbeName(nCtx(), i);
3302 return res;
3303 }
3304
3309 public String getProbeDescription(String name)
3310 {
3311 return Native.probeGetDescr(nCtx(), name);
3312 }
3313
3317 public Probe mkProbe(String name)
3318 {
3319 return new Probe(this, name);
3320 }
3321
3325 public Probe constProbe(double val)
3326 {
3327 return new Probe(this, Native.probeConst(nCtx(), val));
3328 }
3329
3334 public Probe lt(Probe p1, Probe p2)
3335 {
3336 checkContextMatch(p1);
3337 checkContextMatch(p2);
3338 return new Probe(this, Native.probeLt(nCtx(), p1.getNativeObject(),
3339 p2.getNativeObject()));
3340 }
3341
3346 public Probe gt(Probe p1, Probe p2)
3347 {
3348 checkContextMatch(p1);
3349 checkContextMatch(p2);
3350 return new Probe(this, Native.probeGt(nCtx(), p1.getNativeObject(),
3351 p2.getNativeObject()));
3352 }
3353
3359 public Probe le(Probe p1, Probe p2)
3360 {
3361 checkContextMatch(p1);
3362 checkContextMatch(p2);
3363 return new Probe(this, Native.probeLe(nCtx(), p1.getNativeObject(),
3364 p2.getNativeObject()));
3365 }
3366
3372 public Probe ge(Probe p1, Probe p2)
3373 {
3374 checkContextMatch(p1);
3375 checkContextMatch(p2);
3376 return new Probe(this, Native.probeGe(nCtx(), p1.getNativeObject(),
3377 p2.getNativeObject()));
3378 }
3379
3384 public Probe eq(Probe p1, Probe p2)
3385 {
3386 checkContextMatch(p1);
3387 checkContextMatch(p2);
3388 return new Probe(this, Native.probeEq(nCtx(), p1.getNativeObject(),
3389 p2.getNativeObject()));
3390 }
3391
3395 public Probe and(Probe p1, Probe p2)
3396 {
3397 checkContextMatch(p1);
3398 checkContextMatch(p2);
3399 return new Probe(this, Native.probeAnd(nCtx(), p1.getNativeObject(),
3400 p2.getNativeObject()));
3401 }
3402
3406 public Probe or(Probe p1, Probe p2)
3407 {
3408 checkContextMatch(p1);
3409 checkContextMatch(p2);
3410 return new Probe(this, Native.probeOr(nCtx(), p1.getNativeObject(),
3411 p2.getNativeObject()));
3412 }
3413
3417 public Probe not(Probe p)
3418 {
3419 checkContextMatch(p);
3420 return new Probe(this, Native.probeNot(nCtx(), p.getNativeObject()));
3421 }
3422
3431 {
3432 return mkSolver((Symbol) null);
3433 }
3434
3442 public Solver mkSolver(Symbol logic)
3443 {
3444
3445 if (logic == null)
3446 return new Solver(this, Native.mkSolver(nCtx()));
3447 else
3448 return new Solver(this, Native.mkSolverForLogic(nCtx(),
3449 logic.getNativeObject()));
3450 }
3451
3456 public Solver mkSolver(String logic)
3457 {
3458 return mkSolver(mkSymbol(logic));
3459 }
3460
3465 {
3466 return new Solver(this, Native.mkSimpleSolver(nCtx()));
3467 }
3468
3476 {
3477
3478 return new Solver(this, Native.mkSolverFromTactic(nCtx(),
3479 t.getNativeObject()));
3480 }
3481
3486 {
3487 return new Solver(this, Native.solverAddSimplifier(nCtx(), s.getNativeObject(), simp.getNativeObject()));
3488 }
3489
3494 {
3495 return new Fixedpoint(this);
3496 }
3497
3502 {
3503 return new Optimize(this);
3504 }
3505
3506
3512 {
3513 return new FPRMSort(this);
3514 }
3515
3521 {
3522 return new FPRMExpr(this, Native.mkFpaRoundNearestTiesToEven(nCtx()));
3523 }
3524
3530 {
3531 return new FPRMNum(this, Native.mkFpaRne(nCtx()));
3532 }
3533
3539 {
3540 return new FPRMNum(this, Native.mkFpaRoundNearestTiesToAway(nCtx()));
3541 }
3542
3548 {
3549 return new FPRMNum(this, Native.mkFpaRna(nCtx()));
3550 }
3551
3557 {
3558 return new FPRMNum(this, Native.mkFpaRoundTowardPositive(nCtx()));
3559 }
3560
3566 {
3567 return new FPRMNum(this, Native.mkFpaRtp(nCtx()));
3568 }
3569
3575 {
3576 return new FPRMNum(this, Native.mkFpaRoundTowardNegative(nCtx()));
3577 }
3578
3584 {
3585 return new FPRMNum(this, Native.mkFpaRtn(nCtx()));
3586 }
3587
3593 {
3594 return new FPRMNum(this, Native.mkFpaRoundTowardZero(nCtx()));
3595 }
3596
3602 {
3603 return new FPRMNum(this, Native.mkFpaRtz(nCtx()));
3604 }
3605
3612 public FPSort mkFPSort(int ebits, int sbits)
3613 {
3614 return new FPSort(this, ebits, sbits);
3615 }
3616
3622 {
3623 return new FPSort(this, Native.mkFpaSortHalf(nCtx()));
3624 }
3625
3631 {
3632 return new FPSort(this, Native.mkFpaSort16(nCtx()));
3633 }
3634
3640 {
3641 return new FPSort(this, Native.mkFpaSortSingle(nCtx()));
3642 }
3643
3649 {
3650 return new FPSort(this, Native.mkFpaSort32(nCtx()));
3651 }
3652
3658 {
3659 return new FPSort(this, Native.mkFpaSortDouble(nCtx()));
3660 }
3661
3667 {
3668 return new FPSort(this, Native.mkFpaSort64(nCtx()));
3669 }
3670
3676 {
3677 return new FPSort(this, Native.mkFpaSortQuadruple(nCtx()));
3678 }
3679
3685 {
3686 return new FPSort(this, Native.mkFpaSort128(nCtx()));
3687 }
3688
3689
3696 {
3697 return new FPNum(this, Native.mkFpaNan(nCtx(), s.getNativeObject()));
3698 }
3699
3706 public FPNum mkFPInf(FPSort s, boolean negative)
3707 {
3708 return new FPNum(this, Native.mkFpaInf(nCtx(), s.getNativeObject(), negative));
3709 }
3710
3717 public FPNum mkFPZero(FPSort s, boolean negative)
3718 {
3719 return new FPNum(this, Native.mkFpaZero(nCtx(), s.getNativeObject(), negative));
3720 }
3721
3728 public FPNum mkFPNumeral(float v, FPSort s)
3729 {
3730 return new FPNum(this, Native.mkFpaNumeralFloat(nCtx(), v, s.getNativeObject()));
3731 }
3732
3739 public FPNum mkFPNumeral(double v, FPSort s)
3740 {
3741 return new FPNum(this, Native.mkFpaNumeralDouble(nCtx(), v, s.getNativeObject()));
3742 }
3743
3750 public FPNum mkFPNumeral(int v, FPSort s)
3751 {
3752 return new FPNum(this, Native.mkFpaNumeralInt(nCtx(), v, s.getNativeObject()));
3753 }
3754
3763 public FPNum mkFPNumeral(boolean sgn, int exp, int sig, FPSort s)
3764 {
3765 return new FPNum(this, Native.mkFpaNumeralIntUint(nCtx(), sgn, exp, sig, s.getNativeObject()));
3766 }
3767
3776 public FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
3777 {
3778 return new FPNum(this, Native.mkFpaNumeralInt64Uint64(nCtx(), sgn, exp, sig, s.getNativeObject()));
3779 }
3780
3787 public FPNum mkFP(float v, FPSort s)
3788 {
3789 return mkFPNumeral(v, s);
3790 }
3791
3798 public FPNum mkFP(double v, FPSort s)
3799 {
3800 return mkFPNumeral(v, s);
3801 }
3802
3810 public FPNum mkFP(int v, FPSort s)
3811 {
3812 return mkFPNumeral(v, s);
3813 }
3814
3823 public FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
3824 {
3825 return mkFPNumeral(sgn, exp, sig, s);
3826 }
3827
3836 public FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
3837 {
3838 return mkFPNumeral(sgn, exp, sig, s);
3839 }
3840
3841
3848 {
3849 return new FPExpr(this, Native.mkFpaAbs(nCtx(), t.getNativeObject()));
3850 }
3851
3858 {
3859 return new FPExpr(this, Native.mkFpaNeg(nCtx(), t.getNativeObject()));
3860 }
3861
3870 {
3871 return new FPExpr(this, Native.mkFpaAdd(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
3872 }
3873
3882 {
3883 return new FPExpr(this, Native.mkFpaSub(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
3884 }
3885
3894 {
3895 return new FPExpr(this, Native.mkFpaMul(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
3896 }
3897
3906 {
3907 return new FPExpr(this, Native.mkFpaDiv(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject()));
3908 }
3909
3921 {
3922 return new FPExpr(this, Native.mkFpaFma(nCtx(), rm.getNativeObject(), t1.getNativeObject(), t2.getNativeObject(), t3.getNativeObject()));
3923 }
3924
3932 {
3933 return new FPExpr(this, Native.mkFpaSqrt(nCtx(), rm.getNativeObject(), t.getNativeObject()));
3934 }
3935
3943 {
3944 return new FPExpr(this, Native.mkFpaRem(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
3945 }
3946
3955 {
3956 return new FPExpr(this, Native.mkFpaRoundToIntegral(nCtx(), rm.getNativeObject(), t.getNativeObject()));
3957 }
3958
3966 {
3967 return new FPExpr(this, Native.mkFpaMin(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
3968 }
3969
3977 {
3978 return new FPExpr(this, Native.mkFpaMax(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
3979 }
3980
3988 {
3989 return new BoolExpr(this, Native.mkFpaLeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
3990 }
3991
3999 {
4000 return new BoolExpr(this, Native.mkFpaLt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4001 }
4002
4010 {
4011 return new BoolExpr(this, Native.mkFpaGeq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4012 }
4013
4021 {
4022 return new BoolExpr(this, Native.mkFpaGt(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4023 }
4024
4034 {
4035 return new BoolExpr(this, Native.mkFpaEq(nCtx(), t1.getNativeObject(), t2.getNativeObject()));
4036 }
4037
4044 {
4045 return new BoolExpr(this, Native.mkFpaIsNormal(nCtx(), t.getNativeObject()));
4046 }
4047
4054 {
4055 return new BoolExpr(this, Native.mkFpaIsSubnormal(nCtx(), t.getNativeObject()));
4056 }
4057
4064 {
4065 return new BoolExpr(this, Native.mkFpaIsZero(nCtx(), t.getNativeObject()));
4066 }
4067
4074 {
4075 return new BoolExpr(this, Native.mkFpaIsInfinite(nCtx(), t.getNativeObject()));
4076 }
4077
4084 {
4085 return new BoolExpr(this, Native.mkFpaIsNan(nCtx(), t.getNativeObject()));
4086 }
4087
4094 {
4095 return new BoolExpr(this, Native.mkFpaIsNegative(nCtx(), t.getNativeObject()));
4096 }
4097
4104 {
4105 return new BoolExpr(this, Native.mkFpaIsPositive(nCtx(), t.getNativeObject()));
4106 }
4107
4122 {
4123 return new FPExpr(this, Native.mkFpaFp(nCtx(), sgn.getNativeObject(), sig.getNativeObject(), exp.getNativeObject()));
4124 }
4125
4138 {
4139 return new FPExpr(this, Native.mkFpaToFpBv(nCtx(), bv.getNativeObject(), s.getNativeObject()));
4140 }
4141
4154 {
4155 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4156 }
4157
4170 {
4171 return new FPExpr(this, Native.mkFpaToFpReal(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4172 }
4173
4187 public FPExpr mkFPToFP(Expr<FPRMSort> rm, Expr<BitVecSort> t, FPSort s, boolean signed)
4188 {
4189 if (signed)
4190 return new FPExpr(this, Native.mkFpaToFpSigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4191 else
4192 return new FPExpr(this, Native.mkFpaToFpUnsigned(nCtx(), rm.getNativeObject(), t.getNativeObject(), s.getNativeObject()));
4193 }
4194
4206 {
4207 return new FPExpr(this, Native.mkFpaToFpFloat(nCtx(), s.getNativeObject(), rm.getNativeObject(), t.getNativeObject()));
4208 }
4209
4222 public BitVecExpr mkFPToBV(Expr<FPRMSort> rm, Expr<FPSort> t, int sz, boolean signed)
4223 {
4224 if (signed)
4225 return new BitVecExpr(this, Native.mkFpaToSbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4226 else
4227 return new BitVecExpr(this, Native.mkFpaToUbv(nCtx(), rm.getNativeObject(), t.getNativeObject(), sz));
4228 }
4229
4240 {
4241 return new RealExpr(this, Native.mkFpaToReal(nCtx(), t.getNativeObject()));
4242 }
4243
4255 {
4256 return new BitVecExpr(this, Native.mkFpaToIeeeBv(nCtx(), t.getNativeObject()));
4257 }
4258
4273 {
4274 return new BitVecExpr(this, Native.mkFpaToFpIntReal(nCtx(), rm.getNativeObject(), exp.getNativeObject(), sig.getNativeObject(), s.getNativeObject()));
4275 }
4276
4282 public final <R extends Sort> FuncDecl<BoolSort> mkLinearOrder(R sort, int index) {
4283 return (FuncDecl<BoolSort>) FuncDecl.create(
4284 this,
4285 Native.mkLinearOrder(
4286 nCtx(),
4287 sort.getNativeObject(),
4288 index
4289 )
4290 );
4291 }
4292
4298 public final <R extends Sort> FuncDecl<BoolSort> mkPartialOrder(R sort, int index) {
4299 return (FuncDecl<BoolSort>) FuncDecl.create(
4300 this,
4301 Native.mkPartialOrder(
4302 nCtx(),
4303 sort.getNativeObject(),
4304 index
4305 )
4306 );
4307 }
4308
4319 public AST wrapAST(long nativeObject)
4320 {
4321 return AST.create(this, nativeObject);
4322 }
4323
4336 public long unwrapAST(AST a)
4337 {
4338 return a.getNativeObject();
4339 }
4340
4345 public String SimplifyHelp()
4346 {
4347 return Native.simplifyGetHelp(nCtx());
4348 }
4349
4354 {
4355 return new ParamDescrs(this, Native.simplifyGetParamDescrs(nCtx()));
4356 }
4357
4366 public void updateParamValue(String id, String value)
4367 {
4368 Native.updateParamValue(nCtx(), id, value);
4369 }
4370
4371
4372 public long nCtx()
4373 {
4374 if (m_ctx == 0)
4375 throw new Z3Exception("Context closed");
4376 return m_ctx;
4377 }
4378
4379
4380 void checkContextMatch(Z3Object other)
4381 {
4382 if (this != other.getContext())
4383 throw new Z3Exception("Context mismatch");
4384 }
4385
4386 void checkContextMatch(Z3Object other1, Z3Object other2)
4387 {
4388 checkContextMatch(other1);
4389 checkContextMatch(other2);
4390 }
4391
4392 void checkContextMatch(Z3Object other1, Z3Object other2, Z3Object other3)
4393 {
4394 checkContextMatch(other1);
4395 checkContextMatch(other2);
4396 checkContextMatch(other3);
4397 }
4398
4399 void checkContextMatch(Z3Object[] arr)
4400 {
4401 if (arr != null)
4402 for (Z3Object a : arr)
4403 checkContextMatch(a);
4404 }
4405
4406 private Z3ReferenceQueue m_RefQueue = new Z3ReferenceQueue(this);
4407
4408 Z3ReferenceQueue getReferenceQueue() { return m_RefQueue; }
4409
4413 @Override
4414 public void close()
4415 {
4416 if (m_ctx == 0)
4417 return;
4418
4419 m_RefQueue.forceClear();
4420
4421 m_boolSort = null;
4422 m_intSort = null;
4423 m_realSort = null;
4424 m_stringSort = null;
4425 m_RefQueue = null;
4426
4427 synchronized (creation_lock) {
4428 Native.delContext(m_ctx);
4429 }
4430 m_ctx = 0;
4431 }
4432}
final< R extends Sort > FuncDecl< R > mkFuncDecl(String name, Sort[] domain, R range)
Definition Context.java:534
final ReExpr< SeqSort< CharSort > > mkRange(Expr< SeqSort< CharSort > > lo, Expr< SeqSort< CharSort > > hi)
Probe ge(Probe p1, Probe p2)
final< R extends Sort > ListSort< R > mkListSort(Symbol name, R elemSort)
Definition Context.java:309
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetAdd(Expr< ArraySort< D, BoolSort > > set, Expr< D > element)
Solver mkSolver(String logic)
Tactic repeat(Tactic t, int max)
BitVecExpr mkBVXOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final BoolExpr mkDistinct(Expr<?>... args)
Definition Context.java:810
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:482
String[] getSimplifierNames()
final< R extends Sort > SeqExpr< R > mkAt(Expr< SeqSort< R > > s, Expr< IntSort > index)
BitVecExpr mkBVUDiv(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > Expr< R > mkNumeral(long v, R ty)
String getProbeDescription(String name)
FPNum mkFP(boolean sgn, long exp, long sig, FPSort s)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetIntersection(Expr< ArraySort< D, BoolSort > >... args)
FPNum mkFPNaN(FPSort s)
BoolExpr mkFPIsPositive(Expr< FPSort > t)
BitVecExpr mkBVNOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPExpr mkFPToFP(Expr< FPRMSort > rm, Expr< BitVecSort > t, FPSort s, boolean signed)
FPRMExpr mkFPRoundNearestTiesToEven()
Expr< CharSort > charFromBv(BitVecExpr bv)
IntExpr stringToInt(Expr< SeqSort< CharSort > > e)
final< R > EnumSort< R > mkEnumSort(Symbol name, Symbol... enumNames)
Definition Context.java:289
final< R extends Sort > Expr< R > mkFreshConst(String prefix, R range)
Definition Context.java:680
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)
BoolExpr mkBVNegNoOverflow(Expr< BitVecSort > t)
final< R extends Sort > ReExpr< SeqSort< R > > mkToRe(Expr< SeqSort< R > > s)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetComplement(Expr< ArraySort< D, BoolSort > > arg)
final< D extends Sort, R extends Sort > Expr< R > mkSelect(Expr< ArraySort< D, R > > a, Expr< D > i)
Tactic then(Tactic t1, Tactic t2, Tactic... ts)
FPExpr mkFPMax(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > FuncDecl< BoolSort > mkPartialOrder(R sort, int index)
IntExpr mkBV2Int(Expr< BitVecSort > t, boolean signed)
final< R extends Sort > ReExpr< R > mkLoop(Expr< ReSort< R > > re, int lo)
final< R extends Sort > ReExpr< R > mkComplement(Expr< ReSort< R > > re)
FPSort mkFPSort(int ebits, int sbits)
final< R extends Sort > FuncDecl< R > mkFreshConstDecl(String prefix, R range)
Definition Context.java:620
BoolExpr mkBVSDivNoOverflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
Probe le(Probe p1, Probe p2)
SeqExpr< CharSort > mkString(String s)
final< R extends Sort > BoolExpr mkPrefixOf(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
AST wrapAST(long nativeObject)
final< R extends Sort > SeqExpr< R > mkReplace(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
UninterpretedSort mkUninterpretedSort(Symbol s)
Definition Context.java:189
BitVecExpr mkBVXNOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkImplies(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:856
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:833
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:747
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)
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:755
final< R extends Sort > SeqSort< R > mkSeqSort(R s)
Definition Context.java:259
BoolExpr mkAtMost(Expr< BoolSort >[] args, int k)
final< R extends Sort > Expr< R > mkSelect(Expr< ArraySort< Sort, R > > a, Expr<?>[] args)
BoolExpr mkFPIsSubnormal(Expr< FPSort > t)
IntExpr mkMod(Expr< IntSort > t1, Expr< IntSort > t2)
Definition Context.java:956
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 > Expr< R > mkConst(String name, R range)
Definition Context.java:671
FPExpr mkFPMul(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkStar(Expr< ReSort< R > > re)
BitVecExpr mkConcat(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BitVecExpr mkSignExt(int i, Expr< BitVecSort > t)
BitVecExpr mkBVAdd(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFP(boolean sgn, int exp, int sig, FPSort s)
final< R extends Sort > FuncDecl< R > mkFreshFuncDecl(String prefix, Sort[] domain, R range)
Definition Context.java:587
final< R extends Sort > Expr< R > mkBound(int index, R ty)
Definition Context.java:632
final< R extends Sort > SeqExpr< R > mkReplaceAll(Expr< SeqSort< R > > s, Expr< SeqSort< R > > src, Expr< SeqSort< R > > dst)
void updateParamValue(String id, String value)
BitVecExpr mkZeroExt(int i, Expr< BitVecSort > t)
Simplifier andThen(Simplifier t1, Simplifier t2, Simplifier... ts)
SeqExpr< CharSort > ubvToString(Expr< BitVecSort > e)
final< R extends Sort > Lambda< R > mkLambda(Sort[] sorts, Symbol[] names, Expr< R > body)
final< R extends Sort > ReExpr< R > mkConcat(ReExpr< R >... t)
Tactic failIf(Probe p)
BoolExpr mkFPLt(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > ReExpr< R > mkFullRe(ReSort< R > s)
BitVecExpr mkBVRedAND(Expr< BitVecSort > t)
BitVecNum mkBV(long v, int size)
BitVecExpr mkBVSRem(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFPNumeral(float v, FPSort s)
Tactic when(Probe p, Tactic t)
final< R extends Sort > ReExpr< R > mkPlus(Expr< ReSort< R > > re)
IntNum mkInt(String v)
Probe mkProbe(String name)
BoolExpr mkPBLe(int[] coeffs, Expr< BoolSort >[] args, int k)
RealExpr mkRealConst(String name)
Definition Context.java:739
final< R extends Sort > IntExpr mkLength(Expr< SeqSort< R > > s)
final< R extends ArithSort > ArithExpr< R > mkAdd(Expr<? extends R >... t)
Definition Context.java:901
ParamDescrs getSimplifyParameterDescriptions()
BitVecExpr mkBVRotateRight(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< D extends Sort > ArrayExpr< D, BoolSort > mkFullSet(D domain)
SeqExpr< CharSort > sbvToString(Expr< BitVecSort > e)
Probe gt(Probe p1, Probe p2)
BoolExpr mkFPIsNaN(Expr< FPSort > t)
BoolExpr mkEq(Expr<?> x, Expr<?> y)
Definition Context.java:798
Tactic with(Tactic t, Params p)
final BoolExpr mkNot(Expr< BoolSort > a)
Definition Context.java:820
BitVecExpr mkBVASHR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr[] parseSMTLIB2String(String str, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl<?>[] decls)
final< R > DatatypeSort< R > mkDatatypeSort(Symbol name, Constructor< R >[] constructors)
Definition Context.java:374
Solver mkSolver(Solver s, Simplifier simp)
String benchmarkToSMTString(String name, String logic, String status, String attributes, Expr< BoolSort >[] assumptions, Expr< BoolSort > formula)
final< R extends Sort > ArraySort< Sort, R > mkArraySort(Sort[] domains, R range)
Definition Context.java:241
FPRMNum mkFPRoundNearestTiesToAway()
BoolExpr mkIsDigit(Expr< CharSort > ch)
BoolExpr mkBool(boolean value)
Definition Context.java:790
final< R extends Sort > BoolExpr mkInRe(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re)
final< D extends Sort, R extends Sort > ArraySort< D, R > mkArraySort(D domain, R range)
Definition Context.java:230
BitVecExpr mkBVMul(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > Expr< R > mkNumeral(int v, R ty)
BitVecExpr mkBVSub(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
TupleSort mkTupleSort(Symbol name, Symbol[] fieldNames, Sort[] fieldSorts)
Definition Context.java:276
BitVecExpr mkBVOR(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkLt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
Definition Context.java:994
final Pattern mkPattern(Expr<?>... terms)
Definition Context.java:642
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkArrayConst(Symbol name, D domain, R range)
final< R > Constructor< R > mkConstructor(String name, String recognizer, String[] fieldNames, Sort[] sorts, int[] sortRefs)
Definition Context.java:365
BitVecExpr mkRepeat(int i, Expr< BitVecSort > t)
final< R extends Sort > IntExpr mkLastIndexOf(Expr< SeqSort< R > > s, Expr< SeqSort< R > > substr)
final< R extends Sort > Expr< R > mkNumeral(String v, R ty)
BoolExpr mkXor(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:867
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:545
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)
Definition Context.java:943
FPExpr mkFPRem(Expr< FPSort > t1, Expr< FPSort > t2)
SeqSort< CharSort > getStringSort()
Definition Context.java:178
final< D extends Sort, R extends Sort > Expr< D > mkArrayExt(Expr< ArraySort< D, R > > arg1, Expr< ArraySort< D, R > > arg2)
final< R extends Sort > ReExpr< R > mkLoop(Expr< ReSort< R > > re, int lo, int hi)
Quantifier mkQuantifier(boolean universal, Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
IntExpr mkIntConst(String name)
Definition Context.java:723
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:764
BoolExpr mkBVAddNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkBVSubNoUnderflow(Expr< BitVecSort > t1, Expr< BitVecSort > t2, boolean isSigned)
BoolExpr mkFPIsZero(Expr< FPSort > t)
final< R > DatatypeSort< R > mkDatatypeSort(String name, Constructor< R >[] constructors)
Definition Context.java:384
final< R extends Sort > Expr< R > mkConst(FuncDecl< R > f)
Definition Context.java:691
BitVecExpr charToBv(Expr< CharSort > ch)
IntExpr mkIntConst(Symbol name)
Definition Context.java:715
final< R > FiniteDomainSort< R > mkFiniteDomainSort(Symbol name, long size)
Definition Context.java:328
final< R extends Sort > ReExpr< R > mkPower(Expr< ReSort< R > > re, int n)
final< R extends Sort > FuncDecl< R > mkConstDecl(String name, R range)
Definition Context.java:608
Simplifier with(Simplifier t, Params p)
BitVecExpr mkBVNeg(Expr< BitVecSort > t)
Tactic mkTactic(String name)
BoolExpr mkBVSLE(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFPNumeral(double v, FPSort s)
final< R extends Sort > ListSort< R > mkListSort(String name, R elemSort)
Definition Context.java:319
Tactic parAndThen(Tactic t1, Tactic t2)
RatNum mkReal(long v)
BoolExpr mkGt(Expr<? extends ArithSort > t1, Expr<? extends ArithSort > t2)
BitVecNum mkBV(int v, int size)
final< R extends ArithSort > ArithExpr< R > mkPower(Expr<? extends R > t1, Expr<? extends R > t2)
Definition Context.java:980
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:521
final< R extends ArithSort > ArithExpr< R > mkMul(Expr<? extends R >... t)
Definition Context.java:912
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:731
String getTacticDescription(String name)
Solver mkSolver(Symbol logic)
BoolExpr mkFPEq(Expr< FPSort > t1, Expr< FPSort > t2)
final< R extends Sort > IntExpr mkIndexOf(Expr< SeqSort< R > > s, Expr< SeqSort< R > > substr, Expr< IntSort > offset)
BoolExpr mkFPLEq(Expr< FPSort > t1, Expr< FPSort > t2)
RatNum mkReal(int num, int den)
BitVecSort mkBitVecSort(int size)
Definition Context.java:222
final< D extends Sort, R extends Sort > ArrayExpr< D, R > mkStore(Expr< ArraySort< D, R > > a, Expr< D > i, Expr< R > v)
FPExpr mkFPToFP(Expr< BitVecSort > bv, FPSort s)
BoolExpr mkBVSLT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
BoolExpr mkFPGt(Expr< FPSort > t1, Expr< FPSort > t2)
BoolExpr mkIff(Expr< BoolSort > t1, Expr< BoolSort > t2)
Definition Context.java:845
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:707
RealExpr mkFPToReal(Expr< FPSort > t)
BoolExpr MkStringLt(Expr< SeqSort< CharSort > > s1, Expr< SeqSort< CharSort > > s2)
FPExpr mkFP(Expr< BitVecSort > sgn, Expr< BitVecSort > sig, Expr< BitVecSort > exp)
FPExpr mkFPToFP(FPSort s, Expr< FPRMSort > rm, Expr< FPSort > t)
FPExpr mkFPNeg(Expr< FPSort > t)
final< R extends Sort > SeqExpr< R > mkConcat(Expr< SeqSort< R > >... t)
BoolExpr mkCharLe(Expr< CharSort > ch1, Expr< CharSort > ch2)
FPNum mkFPNumeral(boolean sgn, long exp, long sig, FPSort s)
final< R extends Sort > BoolExpr mkSuffixOf(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
SeqSort< CharSort > mkStringSort()
Definition Context.java:251
final< R extends Sort > BoolExpr mkContains(Expr< SeqSort< R > > s1, Expr< SeqSort< R > > s2)
FPRMNum mkFPRoundTowardPositive()
final< D extends Sort > SetSort< D > mkSetSort(D ty)
Quantifier mkExists(Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final< D extends Sort > BoolExpr mkSetMembership(Expr< D > elem, Expr< ArraySort< D, BoolSort > > set)
final< R > Constructor< R > mkConstructor(Symbol name, Symbol recognizer, Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
Definition Context.java:355
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetUnion(Expr< ArraySort< D, BoolSort > >... args)
BoolExpr mkBVULT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > ArrayExpr< Sort, R > mkStore(Expr< ArraySort< Sort, R > > a, Expr<?>[] args, Expr< R > v)
final< R extends Sort > ReExpr< R > mkOption(Expr< ReSort< R > > re)
BoolExpr mkFPIsNormal(Expr< FPSort > t)
DatatypeSort< Object >[] mkDatatypeSorts(String[] names, Constructor< Object >[][] c)
Definition Context.java:470
final< R extends Sort > SeqExpr< R > mkReplaceRe(Expr< SeqSort< R > > s, ReExpr< SeqSort< R > > re, Expr< SeqSort< R > > dst)
Probe and(Probe p1, Probe p2)
IntExpr charToInt(Expr< CharSort > ch)
Tactic tryFor(Tactic t, int ms)
FPExpr mkFPFMA(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2, Expr< FPSort > t3)
UninterpretedSort mkUninterpretedSort(String str)
Definition Context.java:198
void setPrintMode(Z3_ast_print_mode value)
DatatypeSort< Object >[] mkDatatypeSorts(Symbol[] names, Constructor< Object >[][] c)
Definition Context.java:444
final BoolExpr mkAnd(Expr< BoolSort >... t)
Definition Context.java:879
final< R extends Sort > FuncDecl< R > mkConstDecl(Symbol name, R range)
Definition Context.java:598
BitVecNum mkBV(String v, int size)
BitVecExpr mkBVRotateLeft(int i, Expr< BitVecSort > t)
Probe lt(Probe p1, Probe p2)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetDel(Expr< ArraySort< D, BoolSort > > set, Expr< D > element)
Quantifier mkForall(Expr<?>[] boundConstants, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
final< R extends Sort > void AddRecDef(FuncDecl< R > f, Expr<?>[] args, Expr< R > body)
Definition Context.java:572
final< R extends Sort > ReSort< R > mkReSort(R s)
Definition Context.java:267
IntExpr mkRem(Expr< IntSort > t1, Expr< IntSort > t2)
Definition Context.java:969
BitVecExpr mkBVNot(Expr< BitVecSort > t)
final< R extends ArithSort > ArithExpr< R > mkSub(Expr<? extends R >... t)
Definition Context.java:923
BitVecExpr mkBVAND(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
final< R extends Sort > FuncDecl< R > mkFuncDecl(Symbol name, Sort[] domain, R range)
Definition Context.java:495
FPExpr mkFPAbs(Expr< FPSort > t)
BoolExpr mkPBEq(int[] coeffs, Expr< BoolSort >[] args, int k)
Goal mkGoal(boolean models, boolean unsatCores, boolean proofs)
final< R extends ArithSort > ArithExpr< R > mkUnaryMinus(Expr< R > t)
Definition Context.java:933
FPExpr mkFPAdd(Expr< FPRMSort > rm, Expr< FPSort > t1, Expr< FPSort > t2)
BoolExpr mkBVUGT(Expr< BitVecSort > t1, Expr< BitVecSort > t2)
FPNum mkFP(float v, FPSort s)
final BoolExpr mkOr(Expr< BoolSort >... t)
Definition Context.java:890
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:656
final< D extends Sort > ArrayExpr< D, BoolSort > mkEmptySet(D domain)
Quantifier mkExists(Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
BitVecExpr mkFPToIEEEBV(Expr< FPSort > t)
final< R extends Sort > Lambda< R > mkLambda(Expr<?>[] boundConstants, Expr< R > body)
FPExpr mkFPMin(Expr< FPSort > t1, Expr< FPSort > t2)
Tactic orElse(Tactic t1, Tactic t2)
final< R extends Sort > FuncDecl< R > mkRecFuncDecl(Symbol name, Sort[] domain, R range)
Definition Context.java:557
final< R extends Sort > FuncDecl< R > mkPropagateFunction(Symbol name, Sort[] domain, R range)
Definition Context.java:503
RatNum mkReal(String v)
FPNum mkFP(int v, FPSort s)
final< D extends Sort, R extends Sort > Expr< R > mkTermArray(Expr< ArraySort< D, R > > array)
final< R extends Sort > ReExpr< R > mkUnion(Expr< ReSort< R > >... t)
IntSymbol mkSymbol(int i)
Definition Context.java:94
final< R extends Sort > ReExpr< R > mkDiff(Expr< ReSort< R > > a, Expr< ReSort< R > > b)
StringSymbol mkSymbol(String name)
Definition Context.java:102
FPNum mkFPZero(FPSort s, boolean negative)
final< D extends Sort > ArrayExpr< D, BoolSort > mkSetDifference(Expr< ArraySort< D, BoolSort > > arg1, Expr< ArraySort< D, BoolSort > > arg2)
BoolExpr mkFPIsInfinite(Expr< FPSort > t)
final< R > FiniteDomainSort< R > mkFiniteDomainSort(String name, long size)
Definition Context.java:338
Simplifier usingParams(Simplifier t, Params p)
BoolExpr mkBoolConst(Symbol name)
Definition Context.java:699
final< R > EnumSort< R > mkEnumSort(String name, String... enumNames)
Definition Context.java:300
BitVecExpr mkFPToBV(Expr< FPRMSort > rm, Expr< FPSort > t, int sz, boolean signed)
BoolExpr mkPBGe(int[] coeffs, Expr< BoolSort >[] args, int k)
static< R extends Sort > Lambda< R > of(Context ctx, Sort[] sorts, Symbol[] names, Expr< R > body)
Definition Lambda.java:94
static Quantifier of(Context ctx, boolean isForall, Sort[] sorts, Symbol[] names, Expr< BoolSort > body, int weight, Pattern[] patterns, Expr<?>[] noPatterns, Symbol quantifierID, Symbol skolemID)
static long[] arrayToNative(Z3Object[] a)
Definition Z3Object.java:73
static int arrayLength(Z3Object[] a)
Definition Z3Object.java:83
Z3_ast_print_mode
Z3 pretty printing modes (See Z3_set_ast_print_mode).
Definition z3_api.h:1322