Z3
 
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions
Expr< R extends Sort > Class Template Reference
+ Inheritance diagram for Expr< R extends Sort >:

Public Member Functions

Expr< R > simplify ()
 
Expr< R > simplify (Params p)
 
FuncDecl< R > getFuncDecl ()
 
Z3_lbool getBoolValue ()
 
int getNumArgs ()
 
Expr<?>[] getArgs ()
 
Expr< R > update (Expr<?>[] args)
 
Expr< R > substitute (Expr<?>[] from, Expr<?>[] to)
 
Expr< R > substitute (Expr<?> from, Expr<?> to)
 
Expr< R > substituteVars (Expr<?>[] to)
 
Expr< R > substituteFuns (FuncDecl<?>[] from, Expr<?>[] to)
 
Expr< R > translate (Context ctx)
 
String toString ()
 
boolean isNumeral ()
 
double getNumeralDouble ()
 
boolean isWellSorted ()
 
getSort ()
 
boolean isConst ()
 
boolean isIntNum ()
 
boolean isRatNum ()
 
boolean isAlgebraicNumber ()
 
boolean isGround ()
 
boolean isLambda ()
 
boolean isBool ()
 
boolean isTrue ()
 
boolean isFalse ()
 
boolean isEq ()
 
boolean isDistinct ()
 
boolean isITE ()
 
boolean isAnd ()
 
boolean isOr ()
 
boolean isIff ()
 
boolean isXor ()
 
boolean isNot ()
 
boolean isImplies ()
 
boolean isInt ()
 
boolean isReal ()
 
boolean isArithmeticNumeral ()
 
boolean isLE ()
 
boolean isGE ()
 
boolean isLT ()
 
boolean isGT ()
 
boolean isAdd ()
 
boolean isSub ()
 
boolean isUMinus ()
 
boolean isMul ()
 
boolean isDiv ()
 
boolean isIDiv ()
 
boolean isRemainder ()
 
boolean isModulus ()
 
boolean isIntToReal ()
 
boolean isRealToInt ()
 
boolean isRealIsInt ()
 
boolean isArray ()
 
boolean isStore ()
 
boolean isSelect ()
 
boolean isConstantArray ()
 
boolean isDefaultArray ()
 
boolean isArrayMap ()
 
boolean isAsArray ()
 
boolean isSetUnion ()
 
boolean isSetIntersect ()
 
boolean isSetDifference ()
 
boolean isSetComplement ()
 
boolean isSetSubset ()
 
boolean isBV ()
 
boolean isBVNumeral ()
 
boolean isBVBitOne ()
 
boolean isBVBitZero ()
 
boolean isBVUMinus ()
 
boolean isBVAdd ()
 
boolean isBVSub ()
 
boolean isBVMul ()
 
boolean isBVSDiv ()
 
boolean isBVUDiv ()
 
boolean isBVSRem ()
 
boolean isBVURem ()
 
boolean isBVSMod ()
 
boolean isBVULE ()
 
boolean isBVSLE ()
 
boolean isBVUGE ()
 
boolean isBVSGE ()
 
boolean isBVULT ()
 
boolean isBVSLT ()
 
boolean isBVUGT ()
 
boolean isBVSGT ()
 
boolean isBVAND ()
 
boolean isBVOR ()
 
boolean isBVNOT ()
 
boolean isBVXOR ()
 
boolean isBVNAND ()
 
boolean isBVNOR ()
 
boolean isBVXNOR ()
 
boolean isBVConcat ()
 
boolean isBVSignExtension ()
 
boolean isBVZeroExtension ()
 
boolean isBVExtract ()
 
boolean isBVRepeat ()
 
boolean isBVReduceOR ()
 
boolean isBVReduceAND ()
 
boolean isBVComp ()
 
boolean isBVShiftLeft ()
 
boolean isBVShiftRightLogical ()
 
boolean isBVShiftRightArithmetic ()
 
boolean isBVRotateLeft ()
 
boolean isBVRotateRight ()
 
boolean isBVRotateLeftExtended ()
 
boolean isBVRotateRightExtended ()
 
boolean isIntToBV ()
 
boolean isBVToInt ()
 
boolean isBVCarry ()
 
boolean isBVXOR3 ()
 
boolean isLabel ()
 
boolean isLabelLit ()
 
boolean isString ()
 
String getString ()
 
boolean isConcat ()
 
boolean isOEQ ()
 
boolean isProofTrue ()
 
boolean isProofAsserted ()
 
boolean isProofGoal ()
 
boolean isProofModusPonens ()
 
boolean isProofReflexivity ()
 
boolean isProofSymmetry ()
 
boolean isProofTransitivity ()
 
boolean isProofTransitivityStar ()
 
boolean isProofMonotonicity ()
 
boolean isProofQuantIntro ()
 
boolean isProofDistributivity ()
 
boolean isProofAndElimination ()
 
boolean isProofOrElimination ()
 
boolean isProofRewrite ()
 
boolean isProofRewriteStar ()
 
boolean isProofPullQuant ()
 
boolean isProofPushQuant ()
 
boolean isProofElimUnusedVars ()
 
boolean isProofDER ()
 
boolean isProofQuantInst ()
 
boolean isProofHypothesis ()
 
boolean isProofLemma ()
 
boolean isProofUnitResolution ()
 
boolean isProofIFFTrue ()
 
boolean isProofIFFFalse ()
 
boolean isProofCommutativity ()
 
boolean isProofDefAxiom ()
 
boolean isProofDefIntro ()
 
boolean isProofApplyDef ()
 
boolean isProofIFFOEQ ()
 
boolean isProofNNFPos ()
 
boolean isProofNNFNeg ()
 
boolean isProofSkolemize ()
 
boolean isProofModusPonensOEQ ()
 
boolean isProofTheoryLemma ()
 
boolean isRelation ()
 
boolean isRelationStore ()
 
boolean isEmptyRelation ()
 
boolean isIsEmptyRelation ()
 
boolean isRelationalJoin ()
 
boolean isRelationUnion ()
 
boolean isRelationWiden ()
 
boolean isRelationProject ()
 
boolean isRelationFilter ()
 
boolean isRelationNegationFilter ()
 
boolean isRelationRename ()
 
boolean isRelationComplement ()
 
boolean isRelationSelect ()
 
boolean isRelationClone ()
 
boolean isFiniteDomain ()
 
boolean isFiniteDomainLT ()
 
int getIndex ()
 
- Public Member Functions inherited from AST
boolean equals (Object o)
 
int compareTo (AST other)
 
int hashCode ()
 
int getId ()
 
int getDepth ()
 
Z3_ast_kind getASTKind ()
 
boolean isExpr ()
 
boolean isApp ()
 
boolean isVar ()
 
boolean isQuantifier ()
 
boolean isSort ()
 
boolean isFuncDecl ()
 
String getSExpr ()
 

Protected Member Functions

 Expr (Context ctx, long obj)
 

Additional Inherited Members

- Static Public Member Functions inherited from Z3Object
static long[] arrayToNative (Z3Object[] a)
 
static int arrayLength (Z3Object[] a)
 

Detailed Description

Expressions are terms.

Definition at line 34 of file Expr.java.

Constructor & Destructor Documentation

◆ Expr()

Expr ( Context  ctx,
long  obj 
)
inlineprotected

Constructor for Expr

Exceptions
Z3Exceptionon error

Definition at line 2172 of file Expr.java.

2172 {
2173 super(ctx, obj);
2174 Type superclass = getClass().getGenericSuperclass();
2175 if (superclass instanceof ParameterizedType) {
2176 Type argType = ((ParameterizedType) superclass).getActualTypeArguments()[0];
2177 if (argType instanceof Class) {
2178 this.sort = (Class) argType;
2179 }
2180 }
2181 }

Member Function Documentation

◆ getArgs()

Expr<?>[] getArgs ( )
inline

The arguments of the expression.

Exceptions
Z3Exceptionon error
Returns
an Expr[]

Definition at line 109 of file Expr.java.

110 {
111 int n = getNumArgs();
112 Expr<?>[] res = new Expr[n];
113 for (int i = 0; i < n; i++) {
114 res[i] = Expr.create(getContext(),
115 Native.getAppArg(getContext().nCtx(), getNativeObject(), i));
116 }
117 return res;
118 }
Expr(Context ctx, long obj)
Definition Expr.java:2172

Referenced by FuncInterp< R extends Sort >.toString().

◆ getBoolValue()

Z3_lbool getBoolValue ( )
inline

Indicates whether the expression is the true or false expression or something else (Z3_L_UNDEF).

Exceptions
Z3Exceptionon error
Returns
a Z3_lbool

Definition at line 88 of file Expr.java.

89 {
90 return Z3_lbool.fromInt(Native.getBoolValue(getContext().nCtx(),
91 getNativeObject()));
92 }
Z3_lbool
Lifted Boolean type: false, undefined, true.
Definition z3_api.h:58

◆ getFuncDecl()

FuncDecl< R > getFuncDecl ( )
inline

The function declaration of the function that is applied in this expression.

Returns
a FuncDecl
Exceptions
Z3Exceptionon error

Definition at line 76 of file Expr.java.

77 {
78 return new FuncDecl<>(getContext(), Native.getAppDecl(getContext().nCtx(),
79 getNativeObject()));
80 }

◆ getIndex()

int getIndex ( )
inline

The de-Bruijn index of a bound variable. Remarks: Bound variables are indexed by de-Bruijn indices. It is perhaps easiest to explain the meaning of de-Bruijn indices by indicating the compilation process from non-de-Bruijn formulas to de-Bruijn format.
abs(forall (x1) phi) = forall (x1) abs1(phi, x1, 0)
abs(forall (x1, x2) phi) = abs(forall (x1) abs(forall (x2) phi))
abs1(x, x, n) = b_n
abs1(y, x, n) = y
abs1(f(t1,...,tn), x, n) = f(abs1(t1,x,n), ..., abs1(tn,x,n))
abs1(forall (x1) phi, x, n) = forall (x1) (abs1(phi, x, n+1))
The last line is significant: the index of a bound variable is different depending on the scope in which it appears. The deeper x appears, the higher is its index.

Exceptions
Z3Exceptionon error
Returns
an int

Definition at line 2140 of file Expr.java.

2141 {
2142 if (!isVar()) {
2143 throw new Z3Exception("Term is not a bound variable.");
2144 }
2145
2146 return Native.getIndexValue(getContext().nCtx(), getNativeObject());
2147 }
boolean isVar()
Definition AST.java:153

◆ getNumArgs()

int getNumArgs ( )
inline

The number of arguments of the expression.

Exceptions
Z3Exceptionon error
Returns
an int

Definition at line 99 of file Expr.java.

100 {
101 return Native.getAppNumArgs(getContext().nCtx(), getNativeObject());
102 }

◆ getNumeralDouble()

double getNumeralDouble ( )
inline

Return the numeral value as a double. The expression must be a numeral or an algebraic number.

Definition at line 251 of file Expr.java.

252 {
253 return Native.getNumeralDouble(getContext().nCtx(), getNativeObject());
254 }

◆ getSort()

R getSort ( )
inline

The Sort of the term.

Exceptions
Z3Exceptionon error
Returns
a sort

Definition at line 272 of file Expr.java.

273 {
274 return (R) Sort.create(getContext(),
275 Native.getSort(getContext().nCtx(), getNativeObject()));
276 }

◆ getString()

String getString ( )
inline

Retrieve string corresponding to string constant. Remark: the expression should be a string constant, (isString() should return true).

Exceptions
Z3Exceptionon error
Returns
a string

Definition at line 1345 of file Expr.java.

1346 {
1347 return Native.getString(getContext().nCtx(), getNativeObject());
1348 }

◆ isAdd()

boolean isAdd ( )
inline

Indicates whether the term is addition (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 537 of file Expr.java.

538 {
539 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ADD;
540 }
boolean isApp()
Definition AST.java:143
FuncDecl< R > getFuncDecl()
Definition Expr.java:76
Z3_decl_kind
The different kinds of interpreted function kinds.
Definition z3_api.h:988

◆ isAlgebraicNumber()

boolean isAlgebraicNumber ( )
inline

Indicates whether the term is an algebraic number

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 313 of file Expr.java.

314 {
315 return Native.isAlgebraicNumber(getContext().nCtx(), getNativeObject());
316 }

◆ isAnd()

boolean isAnd ( )
inline

Indicates whether the term is an n-ary conjunction

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 406 of file Expr.java.

407 {
408 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_AND;
409 }

◆ isArithmeticNumeral()

boolean isArithmeticNumeral ( )
inline

Indicates whether the term is an arithmetic numeral.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 487 of file Expr.java.

488 {
489 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ANUM;
490 }

◆ isArray()

boolean isArray ( )
inline

Indicates whether the term is of an array sort.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 648 of file Expr.java.

649 {
650 return (Native.isApp(getContext().nCtx(), getNativeObject()) && Z3_sort_kind
651 .fromInt(Native.getSortKind(getContext().nCtx(),
652 Native.getSort(getContext().nCtx(), getNativeObject()))) == Z3_sort_kind.Z3_ARRAY_SORT);
653 }
Z3_sort_kind
The different kinds of Z3 types (See Z3_get_sort_kind).
Definition z3_api.h:110

◆ isArrayMap()

boolean isArrayMap ( )
inline

Indicates whether the term is an array map. Remarks: It satisfies mapf[i] = f(a1[i],...,a_n[i]) for every i.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 705 of file Expr.java.

706 {
707 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ARRAY_MAP;
708 }

◆ isAsArray()

boolean isAsArray ( )
inline

Indicates whether the term is an as-array term. Remarks: An as-array term * is n array value that behaves as the function graph of the function * passed as parameter.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 716 of file Expr.java.

717 {
718 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_AS_ARRAY;
719 }

◆ isBool()

boolean isBool ( )
inline

Indicates whether the term has Boolean sort.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 343 of file Expr.java.

344 {
345 return (isExpr() && Native.isEqSort(getContext().nCtx(),
346 Native.mkBoolSort(getContext().nCtx()),
347 Native.getSort(getContext().nCtx(), getNativeObject())));
348 }
boolean isExpr()
Definition AST.java:124

◆ isBV()

boolean isBV ( )
inline

Indicates whether the terms is of bit-vector sort.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 776 of file Expr.java.

777 {
778 return Native.getSortKind(getContext().nCtx(),
779 Native.getSort(getContext().nCtx(), getNativeObject())) == Z3_sort_kind.Z3_BV_SORT
780 .toInt();
781 }

◆ isBVAdd()

boolean isBVAdd ( )
inline

Indicates whether the term is a bit-vector addition (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 828 of file Expr.java.

829 {
830 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BADD;
831 }

◆ isBVAND()

boolean isBVAND ( )
inline

Indicates whether the term is a bit-wise AND

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1039 of file Expr.java.

1040 {
1041 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BAND;
1042 }

◆ isBVBitOne()

boolean isBVBitOne ( )
inline

Indicates whether the term is a one-bit bit-vector with value one

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 798 of file Expr.java.

799 {
800 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BIT1;
801 }

◆ isBVBitZero()

boolean isBVBitZero ( )
inline

Indicates whether the term is a one-bit bit-vector with value zero

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 808 of file Expr.java.

809 {
810 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BIT0;
811 }

◆ isBVCarry()

boolean isBVCarry ( )
inline

Indicates whether the term is a bit-vector carry Remarks: Compute the * carry bit in a full-adder. The meaning is given by the equivalence (carry * l1 l2 l3) <=> (or (and l1 l2) (and l1 l3) (and l2 l3)))

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1288 of file Expr.java.

1289 {
1290 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_CARRY;
1291 }

◆ isBVComp()

boolean isBVComp ( )
inline

Indicates whether the term is a bit-vector comparison

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1179 of file Expr.java.

1180 {
1181 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BCOMP;
1182 }

◆ isBVConcat()

boolean isBVConcat ( )
inline

Indicates whether the term is a bit-vector concatenation (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1109 of file Expr.java.

1110 {
1111 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_CONCAT;
1112 }

◆ isBVExtract()

boolean isBVExtract ( )
inline

Indicates whether the term is a bit-vector extraction

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1139 of file Expr.java.

1140 {
1141 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_EXTRACT;
1142 }

◆ isBVMul()

boolean isBVMul ( )
inline

Indicates whether the term is a bit-vector multiplication (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 848 of file Expr.java.

849 {
850 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BMUL;
851 }

◆ isBVNAND()

boolean isBVNAND ( )
inline

Indicates whether the term is a bit-wise NAND

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1079 of file Expr.java.

1080 {
1081 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BNAND;
1082 }

◆ isBVNOR()

boolean isBVNOR ( )
inline

Indicates whether the term is a bit-wise NOR

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1089 of file Expr.java.

1090 {
1091 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BNOR;
1092 }

◆ isBVNOT()

boolean isBVNOT ( )
inline

Indicates whether the term is a bit-wise NOT

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1059 of file Expr.java.

1060 {
1061 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BNOT;
1062 }

◆ isBVNumeral()

boolean isBVNumeral ( )
inline

Indicates whether the term is a bit-vector numeral

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 788 of file Expr.java.

789 {
790 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BNUM;
791 }

◆ isBVOR()

boolean isBVOR ( )
inline

Indicates whether the term is a bit-wise OR

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1049 of file Expr.java.

1050 {
1051 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BOR;
1052 }

◆ isBVReduceAND()

boolean isBVReduceAND ( )
inline

Indicates whether the term is a bit-vector reduce AND

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1169 of file Expr.java.

1170 {
1171 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BREDAND;
1172 }

◆ isBVReduceOR()

boolean isBVReduceOR ( )
inline

Indicates whether the term is a bit-vector reduce OR

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1159 of file Expr.java.

1160 {
1161 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BREDOR;
1162 }

◆ isBVRepeat()

boolean isBVRepeat ( )
inline

Indicates whether the term is a bit-vector repetition

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1149 of file Expr.java.

1150 {
1151 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_REPEAT;
1152 }

◆ isBVRotateLeft()

boolean isBVRotateLeft ( )
inline

Indicates whether the term is a bit-vector rotate left

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1219 of file Expr.java.

1220 {
1221 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ROTATE_LEFT;
1222 }

◆ isBVRotateLeftExtended()

boolean isBVRotateLeftExtended ( )
inline

Indicates whether the term is a bit-vector rotate left (extended) Remarks: Similar to Z3_OP_ROTATE_LEFT, but it is a binary operator instead of a parametric one.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1241 of file Expr.java.

1242 {
1243 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_EXT_ROTATE_LEFT;
1244 }

◆ isBVRotateRight()

boolean isBVRotateRight ( )
inline

Indicates whether the term is a bit-vector rotate right

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1229 of file Expr.java.

1230 {
1231 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ROTATE_RIGHT;
1232 }

◆ isBVRotateRightExtended()

boolean isBVRotateRightExtended ( )
inline

Indicates whether the term is a bit-vector rotate right (extended) Remarks: Similar to Z3_OP_ROTATE_RIGHT, but it is a binary operator instead of a parametric one.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1253 of file Expr.java.

1254 {
1255 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_EXT_ROTATE_RIGHT;
1256 }

◆ isBVSDiv()

boolean isBVSDiv ( )
inline

Indicates whether the term is a bit-vector signed division (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 858 of file Expr.java.

859 {
860 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BSDIV;
861 }

◆ isBVSGE()

boolean isBVSGE ( )
inline

Indicates whether the term is a signed bit-vector greater-than-or-equal

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 989 of file Expr.java.

990 {
991 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SGEQ;
992 }

◆ isBVSGT()

boolean isBVSGT ( )
inline

Indicates whether the term is a signed bit-vector greater-than

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1029 of file Expr.java.

1030 {
1031 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SGT;
1032 }

◆ isBVShiftLeft()

boolean isBVShiftLeft ( )
inline

Indicates whether the term is a bit-vector shift left

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1189 of file Expr.java.

1190 {
1191 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BSHL;
1192 }

◆ isBVShiftRightArithmetic()

boolean isBVShiftRightArithmetic ( )
inline

Indicates whether the term is a bit-vector arithmetic shift left

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1209 of file Expr.java.

1210 {
1211 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BASHR;
1212 }

◆ isBVShiftRightLogical()

boolean isBVShiftRightLogical ( )
inline

Indicates whether the term is a bit-vector logical shift right

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1199 of file Expr.java.

1200 {
1201 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BLSHR;
1202 }

◆ isBVSignExtension()

boolean isBVSignExtension ( )
inline

Indicates whether the term is a bit-vector sign extension

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1119 of file Expr.java.

1120 {
1121 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SIGN_EXT;
1122 }

◆ isBVSLE()

boolean isBVSLE ( )
inline

Indicates whether the term is a signed bit-vector less-than-or-equal

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 968 of file Expr.java.

969 {
970 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SLEQ;
971 }

◆ isBVSLT()

boolean isBVSLT ( )
inline

Indicates whether the term is a signed bit-vector less-than

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1009 of file Expr.java.

1010 {
1011 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SLT;
1012 }

◆ isBVSMod()

boolean isBVSMod ( )
inline

Indicates whether the term is a bit-vector signed modulus

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 898 of file Expr.java.

899 {
900 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BSMOD;
901 }

◆ isBVSRem()

boolean isBVSRem ( )
inline

Indicates whether the term is a bit-vector signed remainder (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 878 of file Expr.java.

879 {
880 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BSREM;
881 }

◆ isBVSub()

boolean isBVSub ( )
inline

Indicates whether the term is a bit-vector subtraction (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 838 of file Expr.java.

839 {
840 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BSUB;
841 }

◆ isBVToInt()

boolean isBVToInt ( )
inline

Indicates whether the term is a coercion from bit-vector to integer

Remarks: This function is not supported by the decision procedures. Only * the most rudimentary simplification rules are applied to this * function.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1277 of file Expr.java.

1278 {
1279 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BV2INT;
1280 }

◆ isBVUDiv()

boolean isBVUDiv ( )
inline

Indicates whether the term is a bit-vector unsigned division (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 868 of file Expr.java.

869 {
870 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BUDIV;
871 }

◆ isBVUGE()

boolean isBVUGE ( )
inline

Indicates whether the term is an unsigned bit-vector greater-than-or-equal

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 979 of file Expr.java.

980 {
981 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_UGEQ;
982 }

◆ isBVUGT()

boolean isBVUGT ( )
inline

Indicates whether the term is an unsigned bit-vector greater-than

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1019 of file Expr.java.

1020 {
1021 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_UGT;
1022 }

◆ isBVULE()

boolean isBVULE ( )
inline

Indicates whether the term is an unsigned bit-vector less-than-or-equal

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 958 of file Expr.java.

959 {
960 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ULEQ;
961 }

◆ isBVULT()

boolean isBVULT ( )
inline

Indicates whether the term is an unsigned bit-vector less-than

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 999 of file Expr.java.

1000 {
1001 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ULT;
1002 }

◆ isBVUMinus()

boolean isBVUMinus ( )
inline

Indicates whether the term is a bit-vector unary minus

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 818 of file Expr.java.

819 {
820 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BNEG;
821 }

◆ isBVURem()

boolean isBVURem ( )
inline

Indicates whether the term is a bit-vector unsigned remainder (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 888 of file Expr.java.

889 {
890 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BUREM;
891 }

◆ isBVXNOR()

boolean isBVXNOR ( )
inline

Indicates whether the term is a bit-wise XNOR

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1099 of file Expr.java.

1100 {
1101 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BXNOR;
1102 }

◆ isBVXOR()

boolean isBVXOR ( )
inline

Indicates whether the term is a bit-wise XOR

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1069 of file Expr.java.

1070 {
1071 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_BXOR;
1072 }

◆ isBVXOR3()

boolean isBVXOR3 ( )
inline

Indicates whether the term is a bit-vector ternary XOR Remarks: The * meaning is given by the equivalence (xor3 l1 l2 l3) <=> (xor (xor * l1 l2) l3)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1299 of file Expr.java.

1300 {
1301 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_XOR3;
1302 }

◆ isBVZeroExtension()

boolean isBVZeroExtension ( )
inline

Indicates whether the term is a bit-vector zero extension

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1129 of file Expr.java.

1130 {
1131 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ZERO_EXT;
1132 }

◆ isConcat()

boolean isConcat ( )
inline

TBD: sketch for #2522, 'Pointer' seems deprecated and instead approach seems to be around Set/Get CharArrayRegion and updating Native.cpp code generation to produce the char[].

public char[] getNativeString() { Native.IntPtr len = new Native.IntPtr(); long s = Native.getLstring(getContext().nCtx(), getNativeObject(), len); char[] result = new char[len.value]; Pointer ptr = Pointer.createConstant(s); for (int i = 0; i < len.value; ++i) result[i] = ptr.getChar(i); return result; } Check whether expression is a concatenation

Returns
a boolean

Definition at line 1370 of file Expr.java.

1371 {
1372 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SEQ_CONCAT;
1373 }

◆ isConst()

boolean isConst ( )
inline

Indicates whether the term represents a constant.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 283 of file Expr.java.

284 {
285 return isApp() && getNumArgs() == 0 && getFuncDecl().getDomainSize() == 0;
286 }

◆ isConstantArray()

boolean isConstantArray ( )
inline

Indicates whether the term is a constant array. Remarks: For example, * select(const(v),i) = v holds for every v and i. The function is * unary.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 682 of file Expr.java.

683 {
684 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_CONST_ARRAY;
685 }

◆ isDefaultArray()

boolean isDefaultArray ( )
inline

Indicates whether the term is a default array. Remarks: For example default(const(v)) = v. The function is unary.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 693 of file Expr.java.

694 {
695 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ARRAY_DEFAULT;
696 }

◆ isDistinct()

boolean isDistinct ( )
inline

Indicates whether the term is an n-ary distinct predicate (every argument is mutually distinct).

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 386 of file Expr.java.

387 {
388 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_DISTINCT;
389 }

◆ isDiv()

boolean isDiv ( )
inline

Indicates whether the term is division (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 577 of file Expr.java.

578 {
579 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_DIV;
580 }

◆ isEmptyRelation()

boolean isEmptyRelation ( )
inline

Indicates whether the term is an empty relation

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1950 of file Expr.java.

1951 {
1952 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_EMPTY;
1953 }

◆ isEq()

boolean isEq ( )
inline

Indicates whether the term is an equality predicate.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 375 of file Expr.java.

376 {
377 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_EQ;
378 }

◆ isFalse()

boolean isFalse ( )
inline

Indicates whether the term is the constant false.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 365 of file Expr.java.

366 {
367 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_FALSE;
368 }

Referenced by Solver.cube().

◆ isFiniteDomain()

boolean isFiniteDomain ( )
inline

Indicates whether the term is of an array sort.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2104 of file Expr.java.

2105 {
2106 return (Native.isApp(getContext().nCtx(), getNativeObject()) && Native
2107 .getSortKind(getContext().nCtx(),
2108 Native.getSort(getContext().nCtx(), getNativeObject())) == Z3_sort_kind.Z3_FINITE_DOMAIN_SORT
2109 .toInt());
2110 }

◆ isFiniteDomainLT()

boolean isFiniteDomainLT ( )
inline

Indicates whether the term is a less than predicate over a finite domain.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2117 of file Expr.java.

2118 {
2119 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_FD_LT;
2120 }

◆ isGE()

boolean isGE ( )
inline

Indicates whether the term is a greater-than-or-equal

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 507 of file Expr.java.

508 {
509 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_GE;
510 }

◆ isGround()

boolean isGround ( )
inline

Indicates whether the term is ground (contains no free variables).

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 323 of file Expr.java.

324 {
325 return Native.isGround(getContext().nCtx(), getNativeObject());
326 }

◆ isGT()

boolean isGT ( )
inline

Indicates whether the term is a greater-than

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 527 of file Expr.java.

528 {
529 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_GT;
530 }

◆ isIDiv()

boolean isIDiv ( )
inline

Indicates whether the term is integer division (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 587 of file Expr.java.

588 {
589 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_IDIV;
590 }

◆ isIff()

boolean isIff ( )
inline

Indicates whether the term is an if-and-only-if (Boolean equivalence, binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 427 of file Expr.java.

428 {
429 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_IFF;
430 }

◆ isImplies()

boolean isImplies ( )
inline

Indicates whether the term is an implication

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 457 of file Expr.java.

458 {
459 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_IMPLIES;
460 }

◆ isInt()

boolean isInt ( )
inline

Indicates whether the term is of integer sort.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 467 of file Expr.java.

468 {
469 return Native.getSortKind(getContext().nCtx(), Native.getSort(getContext().nCtx(), getNativeObject())) == Z3_sort_kind.Z3_INT_SORT.toInt();
470 }

◆ isIntNum()

boolean isIntNum ( )
inline

Indicates whether the term is an integer numeral.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 293 of file Expr.java.

294 {
295 return isNumeral() && isInt();
296 }
boolean isNumeral()
Definition Expr.java:242

◆ isIntToBV()

boolean isIntToBV ( )
inline

Indicates whether the term is a coercion from integer to bit-vector

Remarks: This function is not supported by the decision procedures. Only * the most rudimentary simplification rules are applied to this * function.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1265 of file Expr.java.

1266 {
1267 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_INT2BV;
1268 }

◆ isIntToReal()

boolean isIntToReal ( )
inline

Indicates whether the term is a coercion of integer to real (unary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 617 of file Expr.java.

618 {
619 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_TO_REAL;
620 }

◆ isIsEmptyRelation()

boolean isIsEmptyRelation ( )
inline

Indicates whether the term is a test for the emptiness of a relation

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1960 of file Expr.java.

1961 {
1962 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_IS_EMPTY;
1963 }

◆ isITE()

boolean isITE ( )
inline

Indicates whether the term is a ternary if-then-else term

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 396 of file Expr.java.

397 {
398 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_ITE;
399 }

◆ isLabel()

boolean isLabel ( )
inline

Indicates whether the term is a label (used by the Boogie Verification condition generator). Remarks: The label has two parameters, a string and a Boolean polarity. It takes one argument, a formula.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1312 of file Expr.java.

1313 {
1314 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_LABEL;
1315 }

◆ isLabelLit()

boolean isLabelLit ( )
inline

Indicates whether the term is a label literal (used by the Boogie Verification condition generator). Remarks: A label literal has a set of string parameters. It takes no arguments.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1325 of file Expr.java.

1326 {
1327 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_LABEL_LIT;
1328 }

◆ isLambda()

boolean isLambda ( )
inline

Indicates whether the term is a lambda expression.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 333 of file Expr.java.

334 {
335 return Native.isLambda(getContext().nCtx(), getNativeObject());
336 }

◆ isLE()

boolean isLE ( )
inline

Indicates whether the term is a less-than-or-equal

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 497 of file Expr.java.

498 {
499 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_LE;
500 }

◆ isLT()

boolean isLT ( )
inline

Indicates whether the term is a less-than

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 517 of file Expr.java.

518 {
519 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_LT;
520 }

◆ isModulus()

boolean isModulus ( )
inline

Indicates whether the term is modulus (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 607 of file Expr.java.

608 {
609 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_MOD;
610 }

◆ isMul()

boolean isMul ( )
inline

Indicates whether the term is multiplication (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 567 of file Expr.java.

568 {
569 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_MUL;
570 }

◆ isNot()

boolean isNot ( )
inline

Indicates whether the term is a negation

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 447 of file Expr.java.

448 {
449 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_NOT;
450 }

◆ isNumeral()

boolean isNumeral ( )
inline

Indicates whether the term is a numeral

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 242 of file Expr.java.

243 {
244 return Native.isNumeralAst(getContext().nCtx(), getNativeObject());
245 }

◆ isOEQ()

boolean isOEQ ( )
inline

Indicates whether the term is a binary equivalence modulo namings. Remarks: This binary predicate is used in proof terms. It captures equisatisfiability and equivalence modulo renamings.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1382 of file Expr.java.

1383 {
1384 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_OEQ;
1385 }

◆ isOr()

boolean isOr ( )
inline

Indicates whether the term is an n-ary disjunction

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 416 of file Expr.java.

417 {
418 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_OR;
419 }

◆ isProofAndElimination()

boolean isProofAndElimination ( )
inline

Indicates whether the term is a proof by elimination of AND Remarks: * Given a proof for (and l_1 ... l_n), produces a proof for l_i T1: (and * l_1 ... l_n) [and-elim T1]: l_i

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1542 of file Expr.java.

1543 {
1544 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_AND_ELIM;
1545 }

◆ isProofApplyDef()

boolean isProofApplyDef ( )
inline

Indicates whether the term is a proof for application of a definition Remarks: [apply-def T1]: F ~ n F is 'equivalent' to n, given that T1 is a proof that n is a name for F.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1801 of file Expr.java.

1802 {
1803 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_APPLY_DEF;
1804 }

◆ isProofAsserted()

boolean isProofAsserted ( )
inline

Indicates whether the term is a proof for a fact asserted by the user.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1402 of file Expr.java.

1403 {
1404 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_ASSERTED;
1405 }

◆ isProofCommutativity()

boolean isProofCommutativity ( )
inline

Indicates whether the term is a proof by commutativity Remarks: [comm]: (= (f a b) (f b a))

f is a commutative operator.

This proof object has no antecedents. Remark: if f is bool, then = is iff.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1740 of file Expr.java.

1741 {
1742 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_COMMUTATIVITY;
1743 }

◆ isProofDefAxiom()

boolean isProofDefAxiom ( )
inline

Indicates whether the term is a proof for Tseitin-like axioms Remarks: Proof object used to justify Tseitin's like axioms:

(or (not (and p q)) p) (or (not (and p q)) q) (or (not (and p q r)) p) (or (not (and p q r)) q) (or (not (and p q r)) r) ... (or (and p q) (not p) (not q)) (or (not (or p q)) p q) (or (or p q) (not p)) (or (or p q) (not q)) (or (not (iff p q)) (not p) q) (or (not (iff p q)) p (not q)) (or (iff p q) (not p) (not q)) (or (iff p q) p q) (or (not (ite a b c)) (not a) b) (or (not (ite a b c)) a c) (or (ite a b c) (not a) (not b)) (or (ite a b c) a (not c)) (or (not (not a)) (not a)) (or (not a) a)

This proof object has no antecedents. Note: all axioms are propositional tautologies. Note also that 'and' and 'or' can take multiple arguments. You can recover the propositional tautologies by unfolding the Boolean connectives in the axioms a small bounded number of steps (=3).

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1766 of file Expr.java.

1767 {
1768 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_DEF_AXIOM;
1769 }

◆ isProofDefIntro()

boolean isProofDefIntro ( )
inline

Indicates whether the term is a proof for introduction of a name Remarks: Introduces a name for a formula/term. Suppose e is an expression with free variables x, and def-intro introduces the name n(x). The possible cases are:

When e is of Boolean type: [def-intro]: (and (or n (not e)) (or (not n) e))

or: [def-intro]: (or (not n) e) when e only occurs positively.

When e is of the form (ite cond th el): [def-intro]: (and (or (not cond) (= n th)) (or cond (= n el)))

Otherwise: [def-intro]: (= n e)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1789 of file Expr.java.

1790 {
1791 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_DEF_INTRO;
1792 }

◆ isProofDER()

boolean isProofDER ( )
inline

Indicates whether the term is a proof for destructive equality resolution Remarks: A proof for destructive equality resolution: (iff (forall (x) (or (not (= x t)) P[x])) P[t]) if x does not occur in t.

This proof object has no antecedents.

Several variables can be eliminated simultaneously.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1648 of file Expr.java.

1649 {
1650 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_DER;
1651 }

◆ isProofDistributivity()

boolean isProofDistributivity ( )
inline

Indicates whether the term is a distributivity proof object. Remarks: Given that f (= or) distributes over g (= and), produces a proof for (= (f a (g c d)) (g (f a c) (f a d))) If f and g are associative, this proof also justifies the following equality: (= (f (g a b) (g c d)) (g (f a c) (f a d) (f b c) (f b d))) where each f and g can have arbitrary number of arguments.

This proof object has no antecedents. Remark. This rule is used by the CNF conversion pass and instantiated by f = or, and g = and.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1531 of file Expr.java.

1532 {
1533 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_DISTRIBUTIVITY;
1534 }

◆ isProofElimUnusedVars()

boolean isProofElimUnusedVars ( )
inline

Indicates whether the term is a proof for elimination of unused variables. Remarks: A proof for (iff (forall (x_1 ... x_n y_1 ... y_m) p[x_1 ... x_n]) (forall (x_1 ... x_n) p[x_1 ... x_n]))

It is used to justify the elimination of unused variables. This proof object has no antecedents.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1632 of file Expr.java.

1633 {
1634 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_ELIM_UNUSED_VARS;
1635 }

◆ isProofGoal()

boolean isProofGoal ( )
inline

Indicates whether the term is a proof for a fact (tagged as goal) asserted by the user.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1413 of file Expr.java.

1414 {
1415 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_GOAL;
1416 }

◆ isProofHypothesis()

boolean isProofHypothesis ( )
inline

Indicates whether the term is a hypothesis marker. Remarks: Mark a hypothesis in a natural deduction style proof.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1672 of file Expr.java.

1673 {
1674 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_HYPOTHESIS;
1675 }

◆ isProofIFFFalse()

boolean isProofIFFFalse ( )
inline

Indicates whether the term is a proof by iff-false Remarks: T1: (not p) [iff-false T1]: (iff p false)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1723 of file Expr.java.

1724 {
1725 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_IFF_FALSE;
1726 }

◆ isProofIFFOEQ()

boolean isProofIFFOEQ ( )
inline

Indicates whether the term is a proof iff-oeq Remarks: T1: (iff p q) [iff~ T1]: (~ p q)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1813 of file Expr.java.

1814 {
1815 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_IFF_OEQ;
1816 }

◆ isProofIFFTrue()

boolean isProofIFFTrue ( )
inline

Indicates whether the term is a proof by iff-true Remarks: T1: p [iff-true T1]: (iff p true)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1711 of file Expr.java.

1712 {
1713 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_IFF_TRUE;
1714 }

◆ isProofLemma()

boolean isProofLemma ( )
inline

Indicates whether the term is a proof by lemma Remarks: T1: false [lemma T1]: (or (not l_1) ... (not l_n))

This proof object has one antecedent: a hypothetical proof for false. It converts the proof in a proof for (or (not l_1) ... (not l_n)), when T1 contains the hypotheses: l_1, ..., l_n.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1688 of file Expr.java.

1689 {
1690 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_LEMMA;
1691 }

◆ isProofModusPonens()

boolean isProofModusPonens ( )
inline

Indicates whether the term is proof via modus ponens Remarks: Given a proof for p and a proof for (implies p q), produces a proof for q. T1: p T2: (implies p q) [mp T1 T2]: q The second antecedents may also be a proof for (iff p q).

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1427 of file Expr.java.

1428 {
1429 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_MODUS_PONENS;
1430 }

◆ isProofModusPonensOEQ()

boolean isProofModusPonensOEQ ( )
inline

Indicates whether the term is a proof by modus ponens for equi-satisfiability. Remarks: Modus ponens style rule for equi-satisfiability. T1: p T2: (~ p q) [mp~ T1 T2]: q

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1891 of file Expr.java.

1892 {
1893 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_MODUS_PONENS_OEQ;
1894 }

◆ isProofMonotonicity()

boolean isProofMonotonicity ( )
inline

Indicates whether the term is a monotonicity proof object. Remarks: T1: (R t_1 s_1) ... Tn: (R t_n s_n) [monotonicity T1 ... Tn]: (R (f t_1 ... t_n) (f s_1 ... s_n)) Remark: if t_i == s_i, then the antecedent Ti is suppressed. That is, reflexivity proofs are suppressed to save space.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1501 of file Expr.java.

1502 {
1503 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_MONOTONICITY;
1504 }

◆ isProofNNFNeg()

boolean isProofNNFNeg ( )
inline

Indicates whether the term is a proof for a negative NNF step Remarks: Proof for a (negative) NNF step. Examples:

T1: (not s_1) ~ r_1 ... Tn: (not s_n) ~ r_n [nnf-neg T1 ... Tn]: (not (and s_1 ... s_n)) ~ (or r_1 ... r_n) and T1: (not s_1) ~ r_1 ... Tn: (not s_n) ~ r_n [nnf-neg T1 ... Tn]: (not (or s_1 ... s_n)) ~ (and r_1 ... r_n) and T1: (not s_1) ~ r_1 T2: (not s_2) ~ r_2 T3: s_1 ~ r_1' T4: s_2 ~ r_2' [nnf-neg T1 T2 T3 T4]: (~ (not (iff s_1 s_2)) (and (or r_1 r_2) (or r_1' r_2')))

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1860 of file Expr.java.

1861 {
1862 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_NNF_NEG;
1863 }

◆ isProofNNFPos()

boolean isProofNNFPos ( )
inline

Indicates whether the term is a proof for a positive NNF step Remarks: Proof for a (positive) NNF step. Example:

T1: (not s_1) ~ r_1 T2: (not s_2) ~ r_2 T3: s_1 ~ r_1' T4: s_2 ~ r_2'

r_2)))

The negation normal form steps NNF_POS and NNF_NEG are used in the following cases: (a) When creating the NNF of a positive force quantifier. The quantifier is retained (unless the bound variables are eliminated). Example T1: q ~ q_new [nnf-pos T1]: (~ (forall (x R) q) (forall (x R) q_new))

(b) When recursively creating NNF over Boolean formulas, where the top-level connective is changed during NNF conversion. The relevant Boolean connectives for NNF_POS are 'implies', 'iff', 'xor', 'ite'. NNF_NEG furthermore handles the case where negation is pushed over Boolean connectives 'and' and 'or'.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1841 of file Expr.java.

1842 {
1843 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_NNF_POS;
1844 }

◆ isProofOrElimination()

boolean isProofOrElimination ( )
inline

Indicates whether the term is a proof by elimination of not-or Remarks: * Given a proof for (not (or l_1 ... l_n)), produces a proof for (not l_i). * T1: (not (or l_1 ... l_n)) [not-or-elim T1]: (not l_i)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1553 of file Expr.java.

1554 {
1555 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_NOT_OR_ELIM;
1556 }

◆ isProofPullQuant()

boolean isProofPullQuant ( )
inline

Indicates whether the term is a proof for pulling quantifiers out. Remarks: A proof for (iff (f (forall (x) q(x)) r) (forall (x) (f (q x) r))). This proof object has no antecedents.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1601 of file Expr.java.

1602 {
1603 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_PULL_QUANT;
1604 }

◆ isProofPushQuant()

boolean isProofPushQuant ( )
inline

Indicates whether the term is a proof for pushing quantifiers in. Remarks: A proof for: (iff (forall (x_1 ... x_m) (and p_1[x_1 ... x_m] ... p_n[x_1 ... x_m])) (and (forall (x_1 ... x_m) p_1[x_1 ... x_m]) ... (forall (x_1 ... x_m) p_n[x_1 ... x_m]))) This proof object has no antecedents

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1616 of file Expr.java.

1617 {
1618 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_PUSH_QUANT;
1619 }

◆ isProofQuantInst()

boolean isProofQuantInst ( )
inline

Indicates whether the term is a proof for quantifier instantiation

Remarks: A proof of (or (not (forall (x) (P x))) (P a))

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1660 of file Expr.java.

1661 {
1662 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_QUANT_INST;
1663 }

◆ isProofQuantIntro()

boolean isProofQuantIntro ( )
inline

Indicates whether the term is a quant-intro proof Remarks: Given a proof * for (~ p q), produces a proof for (~ (forall (x) p) (forall (x) q)). T1: * (~ p q) [quant-intro T1]: (~ (forall (x) p) (forall (x) q))

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1512 of file Expr.java.

1513 {
1514 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_QUANT_INTRO;
1515 }

◆ isProofReflexivity()

boolean isProofReflexivity ( )
inline

Indicates whether the term is a proof for (R t t), where R is a reflexive relation. Remarks: This proof object has no antecedents. The only reflexive relations that are used are equivalence modulo namings, equality and equivalence. That is, R is either '~', '=' or 'iff'.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1442 of file Expr.java.

1443 {
1444 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_REFLEXIVITY;
1445 }

◆ isProofRewrite()

boolean isProofRewrite ( )
inline

Indicates whether the term is a proof by rewriting Remarks: A proof for a local rewriting step (= t s). The head function symbol of t is interpreted.

This proof object has no antecedents. The conclusion of a rewrite rule is either an equality (= t s), an equivalence (iff t s), or equi-satisfiability (~ t s). Remark: if f is bool, then = is iff.

Examples: (= (+ x 0) x) (= (+ x 1 2) (+ 3 x)) (iff (or x false) x)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1573 of file Expr.java.

1574 {
1575 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_REWRITE;
1576 }

◆ isProofRewriteStar()

boolean isProofRewriteStar ( )
inline

Indicates whether the term is a proof by rewriting Remarks: A proof for rewriting an expression t into an expression s. This proof object can have n antecedents. The antecedents are proofs for equalities used as substitution rules. The object is used in a few cases . The cases are: - When applying contextual simplification (CONTEXT_SIMPLIFIER=true) - When converting bit-vectors to Booleans (BIT2BOOL=true)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1589 of file Expr.java.

1590 {
1591 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_REWRITE_STAR;
1592 }

◆ isProofSkolemize()

boolean isProofSkolemize ( )
inline

Indicates whether the term is a proof for a Skolemization step Remarks: Proof for:

(p x y)) (p (sk y) y))

This proof object has no antecedents.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1878 of file Expr.java.

1879 {
1880 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_SKOLEMIZE;
1881 }

◆ isProofSymmetry()

boolean isProofSymmetry ( )
inline

Indicates whether the term is proof by symmetricity of a relation

Remarks: Given an symmetric relation R and a proof for (R t s), produces * a proof for (R s t). T1: (R t s) [symmetry T1]: (R s t) T1 is the * antecedent of this proof object.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1454 of file Expr.java.

1455 {
1456 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_SYMMETRY;
1457 }

◆ isProofTheoryLemma()

boolean isProofTheoryLemma ( )
inline

Indicates whether the term is a proof for theory lemma Remarks: Generic proof for theory lemmas.

The theory lemma function comes with one or more parameters. The first parameter indicates the name of the theory. For the theory of arithmetic, additional parameters provide hints for checking the theory lemma. The hints for arithmetic are: - farkas - followed by rational coefficients. Multiply the coefficients to the inequalities in the lemma, add the (negated) inequalities and obtain a contradiction. - triangle-eq - Indicates a lemma related to the equivalence: (iff (= t1 t2) (and (<= t1 t2) (<= t2 t1))) - gcd-test - Indicates an integer linear arithmetic lemma that uses a gcd test.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1913 of file Expr.java.

1914 {
1915 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_TH_LEMMA;
1916 }

◆ isProofTransitivity()

boolean isProofTransitivity ( )
inline

Indicates whether the term is a proof by transitivity of a relation

Remarks: Given a transitive relation R, and proofs for (R t s) and (R s * u), produces a proof for (R t u). T1: (R t s) T2: (R s u) [trans T1 T2]: * (R t u)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1466 of file Expr.java.

1467 {
1468 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_TRANSITIVITY;
1469 }

◆ isProofTransitivityStar()

boolean isProofTransitivityStar ( )
inline

Indicates whether the term is a proof by condensed transitivity of a relation Remarks: Condensed transitivity proof. It combines several symmetry and transitivity proofs. Example: T1: (R a b) T2: (R c b) T3: (R c d) [trans* T1 T2 T3]: (R a d) R must be a symmetric and transitive relation.

Assuming that this proof object is a proof for (R s t), then a proof checker must check if it is possible to prove (R s t) using the antecedents, symmetry and transitivity. That is, if there is a path from s to t, if we view every antecedent (R a b) as an edge between a and b.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1486 of file Expr.java.

1487 {
1488 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_TRANSITIVITY_STAR;
1489 }

◆ isProofTrue()

boolean isProofTrue ( )
inline

Indicates whether the term is a Proof for the expression 'true'.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1392 of file Expr.java.

1393 {
1394 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_TRUE;
1395 }

◆ isProofUnitResolution()

boolean isProofUnitResolution ( )
inline

Indicates whether the term is a proof by unit resolution Remarks: T1: * (or l_1 ... l_n l_1' ... l_m') T2: (not l_1) ... R(n+1): (not l_n) * [unit-resolution T1 ... R(n+1)]: (or l_1' ... l_m')

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1699 of file Expr.java.

1700 {
1701 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_PR_UNIT_RESOLUTION;
1702 }

◆ isRatNum()

boolean isRatNum ( )
inline

Indicates whether the term is a real numeral.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 303 of file Expr.java.

304 {
305 return isNumeral() && isReal();
306 }

◆ isReal()

boolean isReal ( )
inline

Indicates whether the term is of sort real.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 477 of file Expr.java.

478 {
479 return Native.getSortKind(getContext().nCtx(), Native.getSort(getContext().nCtx(), getNativeObject())) == Z3_sort_kind.Z3_REAL_SORT.toInt();
480 }

◆ isRealIsInt()

boolean isRealIsInt ( )
inline

Indicates whether the term is a check that tests whether a real is integral (unary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 638 of file Expr.java.

639 {
640 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_IS_INT;
641 }

◆ isRealToInt()

boolean isRealToInt ( )
inline

Indicates whether the term is a coercion of real to integer (unary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 627 of file Expr.java.

628 {
629 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_TO_INT;
630 }

◆ isRelation()

boolean isRelation ( )
inline

Indicates whether the term is of an array sort.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1923 of file Expr.java.

1924 {
1925 return (Native.isApp(getContext().nCtx(), getNativeObject()) && Native
1926 .getSortKind(getContext().nCtx(),
1927 Native.getSort(getContext().nCtx(), getNativeObject())) == Z3_sort_kind.Z3_RELATION_SORT
1928 .toInt());
1929 }

◆ isRelationalJoin()

boolean isRelationalJoin ( )
inline

Indicates whether the term is a relational join

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1970 of file Expr.java.

1971 {
1972 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_JOIN;
1973 }

◆ isRelationClone()

boolean isRelationClone ( )
inline

Indicates whether the term is a relational clone (copy) Remarks: Create a fresh copy (clone) of a relation. The function is logically the identity, but in the context of a register machine allows for terms of kind isRelationUnion to perform destructive updates to the first argument.

See also
#isRelationUnion
Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2094 of file Expr.java.

2095 {
2096 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_CLONE;
2097 }

◆ isRelationComplement()

boolean isRelationComplement ( )
inline

Indicates whether the term is the complement of a relation

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2064 of file Expr.java.

2065 {
2066 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_COMPLEMENT;
2067 }

◆ isRelationFilter()

boolean isRelationFilter ( )
inline

Indicates whether the term is a relation filter Remarks: Filter (restrict) a relation with respect to a predicate. The first argument is a relation. The second argument is a predicate with free de-Bruijn indices corresponding to the columns of the relation. So the first column in the relation has index 0.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2022 of file Expr.java.

2023 {
2024 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_FILTER;
2025 }

◆ isRelationNegationFilter()

boolean isRelationNegationFilter ( )
inline

Indicates whether the term is an intersection of a relation with the negation of another. Remarks: Intersect the first relation with respect to negation of the second relation (the function takes two arguments). Logically, the specification can be described by a function

target = filter_by_negation(pos, neg, columns)

where columns are pairs c1, d1, .., cN, dN of columns from pos and neg, such that target are elements in x in pos, such that there is no y in neg that agrees with x on the columns c1, d1, .., cN, dN.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2042 of file Expr.java.

2043 {
2044 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_NEGATION_FILTER;
2045 }

◆ isRelationProject()

boolean isRelationProject ( )
inline

Indicates whether the term is a projection of columns (provided as numbers in the parameters). Remarks: The function takes one argument.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2007 of file Expr.java.

2008 {
2009 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_PROJECT;
2010 }

◆ isRelationRename()

boolean isRelationRename ( )
inline

Indicates whether the term is the renaming of a column in a relation Remarks: The function takes one argument. The parameters contain the renaming as a cycle.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2054 of file Expr.java.

2055 {
2056 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_RENAME;
2057 }

◆ isRelationSelect()

boolean isRelationSelect ( )
inline

Indicates whether the term is a relational select Remarks: Check if a record is an element of the relation. The function takes n+1 arguments, where the first argument is a relation, and the remaining n arguments correspond to a record.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 2078 of file Expr.java.

2079 {
2080 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_SELECT;
2081 }

◆ isRelationStore()

boolean isRelationStore ( )
inline

Indicates whether the term is an relation store Remarks: Insert a record into a relation. The function takes n+1 arguments, where the first argument is the relation and the remaining n elements correspond to the n columns of the relation.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1940 of file Expr.java.

1941 {
1942 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_STORE;
1943 }

◆ isRelationUnion()

boolean isRelationUnion ( )
inline

Indicates whether the term is the union or convex hull of two relations.

Remarks: The function takes two arguments.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1982 of file Expr.java.

1983 {
1984 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_UNION;
1985 }

◆ isRelationWiden()

boolean isRelationWiden ( )
inline

Indicates whether the term is the widening of two relations Remarks: The function takes two arguments.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 1994 of file Expr.java.

1995 {
1996 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_RA_WIDEN;
1997 }

◆ isRemainder()

boolean isRemainder ( )
inline

Indicates whether the term is remainder (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 597 of file Expr.java.

598 {
599 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_REM;
600 }

◆ isSelect()

boolean isSelect ( )
inline

Indicates whether the term is an array select.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 671 of file Expr.java.

672 {
673 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SELECT;
674 }

◆ isSetComplement()

boolean isSetComplement ( )
inline

Indicates whether the term is set complement

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 756 of file Expr.java.

757 {
758 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SET_COMPLEMENT;
759 }

◆ isSetDifference()

boolean isSetDifference ( )
inline

Indicates whether the term is set difference

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 746 of file Expr.java.

747 {
748 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SET_DIFFERENCE;
749 }

◆ isSetIntersect()

boolean isSetIntersect ( )
inline

Indicates whether the term is set intersection

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 736 of file Expr.java.

737 {
738 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SET_INTERSECT;
739 }

◆ isSetSubset()

boolean isSetSubset ( )
inline

Indicates whether the term is set subset

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 766 of file Expr.java.

767 {
768 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SET_SUBSET;
769 }

◆ isSetUnion()

boolean isSetUnion ( )
inline

Indicates whether the term is set union

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 726 of file Expr.java.

727 {
728 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SET_UNION;
729 }

◆ isStore()

boolean isStore ( )
inline

Indicates whether the term is an array store. Remarks: It satisfies * select(store(a,i,v),j) = if i = j then v else select(a,j). Array store * takes at least 3 arguments.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 661 of file Expr.java.

662 {
663 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_STORE;
664 }

◆ isString()

boolean isString ( )
inline

Check whether expression is a string constant.

Returns
a boolean

Definition at line 1334 of file Expr.java.

1335 {
1336 return isApp() && Native.isString(getContext().nCtx(), getNativeObject());
1337 }

◆ isSub()

boolean isSub ( )
inline

Indicates whether the term is subtraction (binary)

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 547 of file Expr.java.

548 {
549 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_SUB;
550 }

◆ isTrue()

boolean isTrue ( )
inline

Indicates whether the term is the constant true.

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 355 of file Expr.java.

356 {
357 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_TRUE;
358 }

◆ isUMinus()

boolean isUMinus ( )
inline

Indicates whether the term is a unary minus

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 557 of file Expr.java.

558 {
559 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_UMINUS;
560 }

◆ isWellSorted()

boolean isWellSorted ( )
inline

Indicates whether the term is well-sorted.

Exceptions
Z3Exceptionon error
Returns
True if the term is well-sorted, false otherwise.

Definition at line 262 of file Expr.java.

263 {
264 return Native.isWellSorted(getContext().nCtx(), getNativeObject());
265 }

◆ isXor()

boolean isXor ( )
inline

Indicates whether the term is an exclusive or

Exceptions
Z3Exceptionon error
Returns
a boolean

Definition at line 437 of file Expr.java.

438 {
439 return isApp() && getFuncDecl().getDeclKind() == Z3_decl_kind.Z3_OP_XOR;
440 }

◆ simplify() [1/2]

Expr< R > simplify ( )
inline

Returns a simplified version of the expression

Returns
Expr
Exceptions
Z3Exceptionon error

Definition at line 41 of file Expr.java.

42 {
43 return simplify(null);
44 }
Expr< R > simplify()
Definition Expr.java:41

◆ simplify() [2/2]

Expr< R > simplify ( Params  p)
inline

Returns a simplified version of the expression A set of parameters

Parameters
pa Params object to configure the simplifier
See also
Context::SimplifyHelp
Returns
an Expr
Exceptions
Z3Exceptionon error

Definition at line 55 of file Expr.java.

56 {
57
58 if (p == null) {
59 return (Expr<R>) Expr.create(getContext(),
60 Native.simplify(getContext().nCtx(), getNativeObject()));
61 }
62 else {
63 return (Expr<R>) Expr.create(
64 getContext(),
65 Native.simplifyEx(getContext().nCtx(), getNativeObject(),
66 p.getNativeObject()));
67 }
68 }

◆ substitute() [1/2]

Expr< R > substitute ( Expr<?>  from,
Expr<?>  to 
)
inline

Substitute every occurrence of from in the expression with to.

See also
Expr::substitute(Expr[],Expr[])
Exceptions
Z3Exceptionon error
Returns
an Expr

Definition at line 168 of file Expr.java.

169 {
170 return substitute(new Expr[] { from }, new Expr[] { to });
171 }
Expr< R > substitute(Expr<?>[] from, Expr<?>[] to)
Definition Expr.java:149

◆ substitute() [2/2]

Expr< R > substitute ( Expr<?>[]  from,
Expr<?>[]  to 
)
inline

Substitute every occurrence of from[i] in the expression with to[i], for i smaller than num_exprs. Remarks: The result is the new expression. The arrays from and to must have size num_exprs. For every i smaller than num_exprs, we must have that sort of from[i] must be equal to sort of to[i].

Exceptions
Z3Exceptionon error
Returns
an Expr

Definition at line 149 of file Expr.java.

150 {
151 getContext().checkContextMatch(from);
152 getContext().checkContextMatch(to);
153 if (from.length != to.length) {
154 throw new Z3Exception("Argument sizes do not match");
155 }
156 return (Expr<R>) Expr.create(getContext(), Native.substitute(getContext().nCtx(),
157 getNativeObject(), from.length, Expr.arrayToNative(from),
158 Expr.arrayToNative(to)));
159 }

◆ substituteFuns()

Expr< R > substituteFuns ( FuncDecl<?>[]  from,
Expr<?>[]  to 
)
inline

Substitute functions in from with the expressions in to. The expressions in to can have free variables. The free variable in to[i] at de-Bruijn index 0 refers to the first argument of from[i], the free variable at index 1 corresponds to the second argument, and so on. Remarks: The arrays from and to must have the same size.

Parameters
fromArray of function declarations to be substituted
toArray of expressions to substitute with
Exceptions
Z3Exceptionon error
Returns
an Expr

Definition at line 203 of file Expr.java.

204 {
205 getContext().checkContextMatch(from);
206 getContext().checkContextMatch(to);
207 if (from.length != to.length) {
208 throw new Z3Exception("Arrays 'from' and 'to' must have the same length");
209 }
210 return (Expr<R>) Expr.create(getContext(), Native.substituteFuns(getContext().nCtx(),
211 getNativeObject(), from.length, AST.arrayToNative(from),
212 Expr.arrayToNative(to)));
213 }

◆ substituteVars()

Expr< R > substituteVars ( Expr<?>[]  to)
inline

Substitute the free variables in the expression with the expressions in to Remarks: For every i smaller than * num_exprs, the variable with de-Bruijn index i * is replaced with term to[i].

Exceptions
Z3Exceptionon error
Z3Exceptionon error
Returns
an Expr

Definition at line 183 of file Expr.java.

184 {
185
186 getContext().checkContextMatch(to);
187 return (Expr<R>) Expr.create(getContext(), Native.substituteVars(getContext().nCtx(),
188 getNativeObject(), to.length, Expr.arrayToNative(to)));
189 }

◆ toString()

String toString ( )
inline

Returns a string representation of the expression.

Reimplemented from AST.

Definition at line 232 of file Expr.java.

233 {
234 return super.toString();
235 }

Referenced by Optimize.AssertSoft().

◆ translate()

Expr< R > translate ( Context  ctx)
inline

Translates (copies) the term to the Context ctx.

Parameters
ctxA context
Returns
A copy of the term which is associated with ctx
Exceptions
Z3Exceptionon error

Reimplemented from AST.

Definition at line 223 of file Expr.java.

224 {
225 return (Expr<R>) super.translate(ctx);
226 }

Referenced by AstRef.__copy__(), Goal.__copy__(), AstVector.__copy__(), FuncInterp.__copy__(), ModelRef.__copy__(), Goal.__deepcopy__(), AstVector.__deepcopy__(), FuncInterp.__deepcopy__(), ModelRef.__deepcopy__(), and Expr< R extends Sort >.translate().

◆ update()

Expr< R > update ( Expr<?>[]  args)
inline

Update the arguments of the expression using the arguments args The number of new arguments should coincide with the current number of arguments.

Parameters
argsarguments
Exceptions
Z3Exceptionon error

Definition at line 127 of file Expr.java.

128 {
129 getContext().checkContextMatch(args);
130 if (isApp() && args.length != getNumArgs()) {
131 throw new Z3Exception("Number of arguments does not match");
132 }
133 return (Expr<R>) Expr.create(getContext(), Native.updateTerm(getContext().nCtx(), getNativeObject(),
134 args.length, Expr.arrayToNative(args)));
135 }