Kind
Every
Term
has an associated kind.
This kind distinguishes if the Term is a value, constant, variable or operator,
and what kind of each.
For example, a bit-vector value has kind
CONST_BITVECTOR
,
a free constant symbol has kind
CONSTANT
,
an equality over terms of any sort has kind
EQUAL
, and a universally
quantified formula has kind
FORALL
.
-
enum
cvc5
::
Kind
-
The kind of a cvc5 Term .
Values:
-
enumerator
INTERNAL_KIND
-
Internal kind.
This kind serves as an abstraction for internal kinds that are not exposed via the API but may appear in terms returned by API functions, e.g., when querying the simplified form of a term.
Note
Should never be created via the API.
-
enumerator
UNDEFINED_KIND
-
Undefined kind.
Note
Should never be exposed or created via the API.
-
enumerator
NULL_TERM
-
Null kind.
The kind of a null term ( Term::Term() ).
Note
May not be explicitly created via API functions other than
Term::Term()
.
-
enumerator
UNINTERPRETED_SORT_VALUE
-
The value of an uninterpreted constant.
Note
May be returned as the result of an API call, but terms of this kind may not be created explicitly via the API and may not appear in assertions.
-
enumerator
EQUAL
-
Equality, chainable.
-
enumerator
DISTINCT
-
Disequality.
-
enumerator
CONSTANT
-
Free constant symbol.
-
Create Term of this Kind with:
-
Solver::mkConst(const Sort&, const std::string&) const
-
Solver::mkConst(const Sort&) const
-
-
-
enumerator
VARIABLE
-
(Bound) variable.
-
Create Term of this Kind with:
-
Solver::mkVar(const Sort&, const std::string&) const
-
Note
Only permitted in bindings and in lambda and quantifier bodies.
-
-
enumerator
SEXPR
-
Symbolic expression.
-
Arity:
n > 0
-
1..n:
Terms with same sorts
-
-
Create Term of this Kind with:
-
Create Op of this kind with:
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
LAMBDA
-
Lambda expression.
-
enumerator
WITNESS
-
Witness.
The syntax of a witness term is similar to a quantified formula except that only one variable is allowed. For example, the term
(witness ((x S)) F)
returns an element \(x\) of Sort \(S\) and asserts formula \(F\) .
The witness operator behaves like the description operator (see https://planetmath.org/hilbertsvarepsilonoperator ) if there is no \(x\) that satisfies \(F\) . But if such \(x\) exists, the witness operator does not enforce the following axiom which ensures uniqueness up to logical equivalence:
\[\forall x. F \equiv G \Rightarrow witness~x. F = witness~x. G\]For example, if there are two elements of Sort \(S\) that satisfy formula \(F\) , then the following formula is satisfiable:
(distinct (witness ((x Int)) F) (witness ((x Int)) F))
Note
This kind is primarily used internally, but may be returned in models (e.g., for arithmetic terms in non-linear queries). However, it is not supported by the parser. Moreover, the user of the API should be cautious when using this operator. In general, all witness terms
(witness ((x Int)) F)
should be such that(exists ((x Int)) F)
is a valid formula. If this is not the case, then the semantics in formulas that use witness terms may be unintuitive. For example, the following formula is unsatisfiable:(or (= (witness ((x Int)) false) 0) (not (= (witness ((x Int)) false) 0))
, whereas notice that(or (= z 0) (not (= z 0)))
is true for any \(z\) .
-
enumerator
NOT
-
Logical negation.
-
enumerator
AND
-
Logical conjunction.
-
enumerator
IMPLIES
-
Logical implication.
-
enumerator
OR
-
Logical disjunction.
-
enumerator
XOR
-
Logical exclusive disjunction, left associative.
-
enumerator
APPLY_UF
-
Application of an uninterpreted function.
-
enumerator
CARDINALITY_CONSTRAINT
-
Cardinality constraint on uninterpreted sort.
Interpreted as a predicate that is true when the cardinality of uinterpreted Sort \(S\) is less than or equal to an upper bound.
-
Create Term of this Kind with:
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
HO_APPLY
-
Higher-order applicative encoding of function application, left associative.
-
enumerator
ADD
-
Arithmetic addition.
-
enumerator
MULT
-
Arithmetic multiplication.
-
enumerator
IAND
-
Integer and.
Operator for bit-wise
AND
over integers, parameterized by a (positive) bit-width \(k\) .((_ iand k) i_1 i_2)
is equivalent to
((_ iand k) i_1 i_2) (bv2int (bvand ((_ int2bv k) i_1) ((_ int2bv k) i_2)))
for all integers
i_1
,i_2
.-
Arity:
2
-
1..2:
Terms of Sort Int
-
-
Indices:
1
-
1:
Bit-width \(k\)
-
-
-
enumerator
POW2
-
Power of two.
Operator for raising
2
to a non-negative integer power.
-
enumerator
SUB
-
Arithmetic subtraction, left associative.
-
enumerator
NEG
-
Arithmetic negation.
-
enumerator
DIVISION
-
Real division, division by 0 undefined, left associative.
-
enumerator
INTS_DIVISION
-
Integer division, division by 0 undefined, left associative.
-
enumerator
INTS_MODULUS
-
Integer modulus, modulus by 0 undefined.
-
enumerator
ABS
-
Absolute value.
-
enumerator
POW
-
Arithmetic power.
-
enumerator
EXPONENTIAL
-
Exponential function.
-
enumerator
SINE
-
Sine function.
-
enumerator
COSINE
-
Cosine function.
-
enumerator
TANGENT
-
Tangent function.
-
enumerator
COSECANT
-
Cosecant function.
-
enumerator
SECANT
-
Secant function.
-
enumerator
COTANGENT
-
Cotangent function.
-
enumerator
ARCSINE
-
Arc sine function.
-
enumerator
ARCCOSINE
-
Arc cosine function.
-
enumerator
ARCTANGENT
-
Arc tangent function.
-
enumerator
ARCCOSECANT
-
Arc cosecant function.
-
enumerator
ARCSECANT
-
Arc secant function.
-
enumerator
ARCCOTANGENT
-
Arc cotangent function.
-
enumerator
DIVISIBLE
-
Operator for the divisibility-by- \(k\) predicate.
-
Arity:
1
-
1:
Term of Sort Int
-
-
Indices:
1
-
1:
The integer \(k\) to divide by.
-
-
-
enumerator
CONST_RATIONAL
-
Multiple-precision rational constant.
-
enumerator
LT
-
Less than, chainable.
-
enumerator
LEQ
-
Less than or equal, chainable.
-
enumerator
GT
-
Greater than, chainable.
-
enumerator
GEQ
-
Greater than or equal, chainable.
-
enumerator
IS_INTEGER
-
Is-integer predicate.
-
enumerator
TO_INTEGER
-
Convert Term of sort Int or Real to Int via the floor function.
-
enumerator
TO_REAL
-
Convert Term of Sort Int or Real to Real.
-
enumerator
PI
-
Pi constant.
-
Create Term of this Kind with:
Note
PI
is considered a special symbol of Sort Real, but is not a Real value, i.e.,Term::isRealValue()
will returnfalse
. -
-
enumerator
CONST_BITVECTOR
-
Fixed-size bit-vector constant.
-
enumerator
BITVECTOR_CONCAT
-
Concatenation of two or more bit-vectors.
-
enumerator
BITVECTOR_AND
-
Bit-wise and.
-
enumerator
BITVECTOR_OR
-
Bit-wise or.
-
enumerator
BITVECTOR_XOR
-
Bit-wise xor.
-
enumerator
BITVECTOR_NOT
-
Bit-wise negation.
-
enumerator
BITVECTOR_NAND
-
Bit-wise nand.
-
enumerator
BITVECTOR_NOR
-
Bit-wise nor.
-
enumerator
BITVECTOR_XNOR
-
Bit-wise xnor, left associative.
-
enumerator
BITVECTOR_COMP
-
Equality comparison (returns bit-vector of size
1
).
-
enumerator
BITVECTOR_MULT
-
Multiplication of two or more bit-vectors.
-
enumerator
BITVECTOR_ADD
-
Addition of two or more bit-vectors.
-
enumerator
BITVECTOR_SUB
-
Subtraction of two bit-vectors.
-
enumerator
BITVECTOR_NEG
-
Negation of a bit-vector (two’s complement).
-
enumerator
BITVECTOR_UDIV
-
Unsigned bit-vector division.
Truncates towards
0
. If the divisor is zero, the result is all ones.
-
enumerator
BITVECTOR_UREM
-
Unsigned bit-vector remainder.
Remainder from unsigned bit-vector division. If the modulus is zero, the result is the dividend.
-
enumerator
BITVECTOR_SDIV
-
Signed bit-vector division.
Two’s complement signed division of two bit-vectors. If the divisor is zero and the dividend is positive, the result is all ones. If the divisor is zero and the dividend is negative, the result is one.
-
enumerator
BITVECTOR_SREM
-
Signed bit-vector remainder (sign follows dividend).
Two’s complement signed remainder of two bit-vectors where the sign follows the dividend. If the modulus is zero, the result is the dividend.
-
enumerator
BITVECTOR_SMOD
-
Signed bit-vector remainder (sign follows divisor).
Two’s complement signed remainder where the sign follows the divisor. If the modulus is zero, the result is the dividend.
-
enumerator
BITVECTOR_SHL
-
Bit-vector shift left.
-
enumerator
BITVECTOR_LSHR
-
Bit-vector logical shift right.
-
enumerator
BITVECTOR_ASHR
-
Bit-vector arithmetic shift right.
-
enumerator
BITVECTOR_ULT
-
Bit-vector unsigned less than.
-
enumerator
BITVECTOR_ULE
-
Bit-vector unsigned less than or equal.
-
enumerator
BITVECTOR_UGT
-
Bit-vector unsigned greater than.
-
enumerator
BITVECTOR_UGE
-
Bit-vector unsigned greater than or equal.
-
enumerator
BITVECTOR_SLT
-
Bit-vector signed less than.
-
enumerator
BITVECTOR_SLE
-
Bit-vector signed less than or equal.
-
enumerator
BITVECTOR_SGT
-
Bit-vector signed greater than.
-
enumerator
BITVECTOR_SGE
-
Bit-vector signed greater than or equal.
-
enumerator
BITVECTOR_ULTBV
-
Bit-vector unsigned less than returning a bit-vector of size 1.
-
enumerator
BITVECTOR_SLTBV
-
Bit-vector signed less than returning a bit-vector of size
1
.
-
enumerator
BITVECTOR_ITE
-
Bit-vector if-then-else.
Same semantics as regular ITE, but condition is bit-vector of size
1
.
-
enumerator
BITVECTOR_REDOR
-
Bit-vector redor.
-
enumerator
BITVECTOR_REDAND
-
Bit-vector redand.
-
enumerator
BITVECTOR_EXTRACT
-
Bit-vector extract.
-
enumerator
BITVECTOR_REPEAT
-
Bit-vector repeat.
-
enumerator
BITVECTOR_ZERO_EXTEND
-
Bit-vector zero extension.
-
enumerator
BITVECTOR_SIGN_EXTEND
-
Bit-vector sign extension.
-
enumerator
BITVECTOR_ROTATE_LEFT
-
Bit-vector rotate left.
-
enumerator
BITVECTOR_ROTATE_RIGHT
-
Bit-vector rotate right.
-
enumerator
INT_TO_BITVECTOR
-
Conversion from Int to bit-vector.
-
enumerator
BITVECTOR_TO_NAT
-
Bit-vector conversion to (non-negative) integer.
-
enumerator
CONST_FLOATINGPOINT
-
Floating-point constant, created from IEEE-754 bit-vector representation of the floating-point value.
-
Create Term of this Kind with:
-
-
enumerator
FLOATINGPOINT_FP
-
Create floating-point literal from bit-vector triple.
-
enumerator
FLOATINGPOINT_EQ
-
Floating-point equality.
-
enumerator
FLOATINGPOINT_ABS
-
Floating-point absolute value.
-
enumerator
FLOATINGPOINT_NEG
-
Floating-point negation.
-
enumerator
FLOATINGPOINT_ADD
-
Floating-point addition.
-
enumerator
FLOATINGPOINT_SUB
-
Floating-point sutraction.
-
enumerator
FLOATINGPOINT_MULT
-
Floating-point multiply.
-
enumerator
FLOATINGPOINT_DIV
-
Floating-point division.
-
enumerator
FLOATINGPOINT_FMA
-
Floating-point fused multiply and add.
-
enumerator
FLOATINGPOINT_SQRT
-
Floating-point square root.
-
enumerator
FLOATINGPOINT_REM
-
Floating-point remainder.
-
enumerator
FLOATINGPOINT_RTI
-
Floating-point round to integral.
-
enumerator
FLOATINGPOINT_MIN
-
Floating-point minimum.
-
enumerator
FLOATINGPOINT_MAX
-
Floating-point maximum.
-
enumerator
FLOATINGPOINT_LEQ
-
Floating-point less than or equal.
-
enumerator
FLOATINGPOINT_LT
-
Floating-point less than.
-
enumerator
FLOATINGPOINT_GEQ
-
Floating-point greater than or equal.
-
enumerator
FLOATINGPOINT_GT
-
Floating-point greater than.
-
enumerator
FLOATINGPOINT_IS_NORMAL
-
Floating-point is normal tester.
-
enumerator
FLOATINGPOINT_IS_SUBNORMAL
-
Floating-point is sub-normal tester.
-
enumerator
FLOATINGPOINT_IS_ZERO
-
Floating-point is zero tester.
-
enumerator
FLOATINGPOINT_IS_INF
-
Floating-point is infinite tester.
-
enumerator
FLOATINGPOINT_IS_NAN
-
Floating-point is NaN tester.
-
enumerator
FLOATINGPOINT_IS_NEG
-
Floating-point is negative tester.
-
enumerator
FLOATINGPOINT_IS_POS
-
Floating-point is positive tester.
-
enumerator
FLOATINGPOINT_TO_FP_FROM_IEEE_BV
-
Conversion to floating-point from IEEE-754 bit-vector.
-
enumerator
FLOATINGPOINT_TO_FP_FROM_FP
-
Conversion to floating-point from floating-point.
-
enumerator
FLOATINGPOINT_TO_FP_FROM_REAL
-
Conversion to floating-point from Real.
-
enumerator
FLOATINGPOINT_TO_FP_FROM_SBV
-
Conversion to floating-point from signed bit-vector.
-
enumerator
FLOATINGPOINT_TO_FP_FROM_UBV
-
Conversion to floating-point from unsigned bit-vector.
-
enumerator
FLOATINGPOINT_TO_UBV
-
Conversion to unsigned bit-vector from floating-point.
-
enumerator
FLOATINGPOINT_TO_SBV
-
Conversion to signed bit-vector from floating-point.
-
enumerator
FLOATINGPOINT_TO_REAL
-
Conversion to Real from floating-point.
-
enumerator
SELECT
-
Array select.
-
enumerator
STORE
-
Array store.
-
enumerator
CONST_ARRAY
-
Constant array.
-
enumerator
EQ_RANGE
-
Equality over arrays \(a\) and \(b\) over a given range \([i,j]\) , i.e.,
\[\forall k . i \leq k \leq j \Rightarrow a[k] = b[k]\]Note
We currently support the creation of array equalities over index Sorts bit-vector, floating-point, Int and Real. Requires to enable option arrays-exp .
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
APPLY_CONSTRUCTOR
-
Datatype constructor application.
-
Arity:
n > 0
-
1:
DatatypeConstructor Term (see DatatypeConstructor::getTerm() const ) -
2..n:
Terms of the Sorts of the selectors of the constructor (the arguments to the constructor)
-
-
Create Term of this Kind with:
-
Create Op of this kind with:
-
-
enumerator
APPLY_SELECTOR
-
Datatype selector application.
-
Arity:
2
-
Create Term of this Kind with:
-
Create Op of this kind with:
Note
Undefined if misapplied.
-
-
enumerator
APPLY_TESTER
-
Datatype tester application.
-
enumerator
APPLY_UPDATER
-
Datatype update application.
Note
Does not change the datatype argument if misapplied.
-
enumerator
MATCH
-
Match expression.
This kind is primarily used in the parser to support the SMT-LIBv2
match
expression.For example, the SMT-LIBv2 syntax for the following match term
(match l (((cons h t) h) (nil 0)))
is represented by the AST
(MATCH l (MATCH_BIND_CASE (VARIABLE_LIST h t) (cons h t) h) (MATCH_CASE nil 0))
Terms of kind
MATCH_CASE
are constant case expressions, which are used for nullary constructors. KindMATCH_BIND_CASE
is used for constructors with selectors and variable match patterns. If not all constructors are covered, at least one catch-all variable pattern must be included.-
Arity:
n > 1
-
1..n:
Terms of kindMATCH_CASE
andMATCH_BIND_CASE
-
-
-
enumerator
MATCH_CASE
-
Match case for nullary constructors.
A (constant) case expression to be used within a match expression.
-
Arity:
2
-
1:
Term of kindAPPLY_CONSTRUCTOR
(the pattern to match against) -
2:
Term of any Sort (the term the match term evaluates to)
-
-
-
enumerator
MATCH_BIND_CASE
-
Match case with binders, for constructors with selectors and variable patterns.
A (non-constant) case expression to be used within a match expression.
-
Arity:
3
-
For variable patterns:
-
1:
Term of kindVARIABLE_LIST
(containing the free variable of the case) -
2:
Term of kindVARIABLE
(the pattern expression, the free variable of the case) -
3:
Term of any Sort (the term the pattern evaluates to)
-
-
For constructors with selectors:
-
1:
Term of kindVARIABLE_LIST
(containing the free variable of the case) -
2:
Term of kindAPPLY_CONSTRUCTOR
(the pattern expression, applying the set of variables to the constructor) -
3:
Term of any Sort (the term the match term evaluates to)
-
-
-
-
enumerator
TUPLE_PROJECT
-
Tuple projection.
This operator takes a tuple as an argument and returns a tuple obtained by concatenating components of its argument at the provided indices.
For example,
((_ tuple.project 1 2 2 3 1) (tuple 10 20 30 40))
(tuple 20 30 30 40 20)
-
enumerator
SEP_NIL
-
Separation logic nil.
-
Create Term of this Kind with:
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
SEP_EMP
-
Separation logic empty heap.
-
Create Term of this Kind with:
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
SEP_PTO
-
Separation logic points-to relation.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
SEP_STAR
-
Separation logic star.
-
Arity:
n > 1
-
1..n:
Terms of sort Bool (the child constraints that hold in disjoint (separated) heaps)
-
-
Create Term of this Kind with:
-
Create Op of this kind with:
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
SEP_WAND
-
Separation logic magic wand.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
SET_UNION
-
Set union.
-
enumerator
SET_INTER
-
Set intersection.
-
enumerator
SET_MINUS
-
Set subtraction.
-
enumerator
SET_SUBSET
-
Subset predicate.
Determines if the first set is a subset of the second set.
-
enumerator
SET_MEMBER
-
Set membership predicate.
Determines if the given set element is a member of the second set.
-
enumerator
SET_SINGLETON
-
Singleton set.
Construct a singleton set from an element given as a parameter. The returned set has the same Sort as the element.
-
enumerator
SET_INSERT
-
The set obtained by inserting elements;
-
enumerator
SET_CARD
-
Set cardinality.
-
enumerator
SET_COMPLEMENT
-
Set complement with respect to finite universe.
-
enumerator
SET_UNIVERSE
-
Finite universe set.
All set variables must be interpreted as subsets of it.
-
Create Term of this Kind with:
Note
SET_UNIVERSE
is considered a special symbol of the theory of sets and is not considered as a set value, i.e., Term::isSetValue() will returnfalse
. -
-
enumerator
SET_COMPREHENSION
-
Set comprehension
A set comprehension is specified by a variable list \(x_1 ... x_n\) , a predicate \(P[x_1...x_n]\) , and a term \(t[x_1...x_n]\) . A comprehension \(C\) with the above form has members given by the following semantics:
\[\forall y. ( \exists x_1...x_n. P[x_1...x_n] \wedge t[x_1...x_n] = y ) \Leftrightarrow (set.member \; y \; C)\]where \(y\) ranges over the element Sort of the (set) Sort of the comprehension. If \(t[x_1..x_n]\) is not provided, it is equivalent to \(y\) in the above formula.
-
Arity:
3
-
1:
Term of KindVARIABLE_LIST
-
2:
Term of sort Bool (the predicate of the comprehension) -
3:
(optional) Term denoting the generator for the comprehension
-
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
SET_CHOOSE
-
Set choose.
Select an element from a given set. For a set \(A = \{x\}\) , the term (set.choose \(A\) ) is equivalent to the term \(x_1\) . For an empty set, it is an arbitrary value. For a set with cardinality > 1, it will deterministically return an element in \(A\) .
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
SET_IS_SINGLETON
-
Set is singleton tester.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
SET_MAP
-
Set map.
This operator applies the first argument, a function of Sort \((\rightarrow S_1 \; S_2)\) , to every element of the second argument, a set of Sort (Set \(S_1\) ), and returns a set of Sort (Set \(S_2\) ).
-
Arity:
2
-
1:
Term of function Sort \((\rightarrow S_1 \; S_2)\) -
2:
Term of set Sort (Set \(S_1\) )
-
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
RELATION_JOIN
-
Relation join.
-
enumerator
RELATION_PRODUCT
-
Relation cartesian product.
-
enumerator
RELATION_TRANSPOSE
-
Relation transpose.
-
enumerator
RELATION_TCLOSURE
-
Relation transitive closure.
-
enumerator
RELATION_JOIN_IMAGE
-
Relation join image.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
RELATION_IDEN
-
Relation identity.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
BAG_UNION_MAX
-
Bag max union.
-
enumerator
BAG_UNION_DISJOINT
-
Bag disjoint union (sum).
-
enumerator
BAG_INTER_MIN
-
Bag intersection (min).
-
enumerator
BAG_DIFFERENCE_SUBTRACT
-
Bag difference subtract.
Subtracts multiplicities of the second from the first.
-
enumerator
BAG_DIFFERENCE_REMOVE
-
Bag difference remove.
Removes shared elements in the two bags.
-
enumerator
BAG_SUBBAG
-
Bag inclusion predicate.
Determine if multiplicities of the first bag are less than or equal to multiplicities of the second bag.
-
enumerator
BAG_COUNT
-
Bag element multiplicity.
-
Create Term of this Kind with:
-
Solver::mkTerm(Kind, const Term&, const Term&) const
-
-
-
enumerator
BAG_MEMBER
-
Bag membership predicate.
-
enumerator
BAG_DUPLICATE_REMOVAL
-
Bag duplicate removal.
Eliminate duplicates in a given bag. The returned bag contains exactly the same elements in the given bag, but with multiplicity one.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
BAG_MAKE
-
Bag make.
Construct a bag with the given element and given multiplicity.
-
enumerator
BAG_CARD
-
Bag cardinality.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
BAG_CHOOSE
-
Bag choose.
Select an element from a given bag.
For a bag \(A = \{(x,n)\}\) where \(n\) is the multiplicity, then the term (choose \(A\) ) is equivalent to the term \(x\) . For an empty bag, then it is an arbitrary value. For a bag that contains distinct elements, it will deterministically return an element in \(A\) .
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
BAG_IS_SINGLETON
-
Bag is singleton tester.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
BAG_FROM_SET
-
Conversion from set to bag.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
BAG_TO_SET
-
Conversion from bag to set.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
BAG_MAP
-
Bag map.
This operator applies the first argument, a function of Sort \((\rightarrow S_1 \; S_2)\) , to every element of the second argument, a set of Sort (Bag \(S_1\) ), and returns a set of Sort (Bag \(S_2\) ).
-
Arity:
2
-
1:
Term of function Sort \((\rightarrow S_1 \; S_2)\) -
2:
Term of bag Sort (Bag \(S_1\) )
-
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
BAG_FILTER
-
Bag filter.
This operator filters the elements of a bag. (bag.filter \(p \; B\) ) takes a predicate \(p\) of Sort \((\rightarrow S_1 \; S_2)\) as a first argument, and a bag \(B\) of Sort (Bag \(S\) ) as a second argument, and returns a subbag of Sort (Bag \(T\) ) that includes all elements of \(B\) that satisfy \(p\) with the same multiplicity.
-
Arity:
2
-
1:
Term of function Sort \((\rightarrow S_1 \; S_2)\) -
2:
Term of bag Sort (Bag \(S_1\) )
-
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
BAG_FOLD
-
Bag fold.
This operator combines elements of a bag into a single value. (bag.fold \(f \; t \; B\) ) folds the elements of bag \(B\) starting with Term \(t\) and using the combining function \(f\) .
-
Arity:
2
-
1:
Term of function Sort \((\rightarrow S_1 \; S_2 \; S_2)\) -
2:
Term of Sort \(S_2\) (the initial value) -
3:
Term of bag Sort (Bag \(S_1\) )
-
Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
TABLE_PRODUCT
-
Table cross product.
Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
STRING_CONCAT
-
String concat.
-
enumerator
STRING_IN_REGEXP
-
String membership.
-
enumerator
STRING_LENGTH
-
String length.
-
enumerator
STRING_SUBSTR
-
String substring.
Extracts a substring, starting at index \(i\) and of length \(l\) , from a string \(s\) . If the start index is negative, the start index is greater than the length of the string, or the length is negative, the result is the empty string.
-
Arity:
3
-
1:
Term of Sort String -
2:
Term of Sort Int (index \(i\) ) -
3:
Term of Sort Int (length \(l\) )
-
-
-
enumerator
STRING_UPDATE
-
String update.
Updates a string \(s\) by replacing its context starting at an index with string \(t\) . If the start index is negative, the start index is greater than the length of the string, the result is \(s\) . Otherwise, the length of the original string is preserved.
-
Arity:
3
-
1:
Term of Sort String -
2:
Term of Sort Int (index \(i\) ) -
3:
Term of Sort Strong (replacement string \(t\) )
-
-
-
enumerator
STRING_CHARAT
-
String character at.
Returns the character at index \(i\) from a string \(s\) . If the index is negative or the index is greater than the length of the string, the result is the empty string. Otherwise the result is a string of length 1.
-
Arity:
2
-
1:
Term of Sort String (string \(s\) ) -
2:
Term of Sort Int (index \(i\) )
-
-
-
enumerator
STRING_CONTAINS
-
String contains.
Determines whether a string \(s_1\) contains another string \(s_2\) . If \(s_2\) is empty, the result is always
true
.-
Arity:
2
-
1:
Term of Sort String (the string \(s_1\) ) -
2:
Term of Sort String (the string \(s_2\) )
-
-
-
enumerator
STRING_INDEXOF
-
String index-of.
Returns the index of a substring \(s_2\) in a string \(s_1\) starting at index \(i\) . If the index is negative or greater than the length of string \(s_1\) or the substring \(s_2\) does not appear in string \(s_1\) after index \(i\) , the result is -1.
-
Arity:
2
-
1:
Term of Sort String (substring \(s_1\) ) -
2:
Term of Sort String (substring \(s_2\) ) -
3:
Term of Sort Int (index \(i\) )
-
-
-
enumerator
STRING_INDEXOF_RE
-
String index-of regular expression match.
Returns the first match of a regular expression \(r\) in a string \(s\) . If the index is negative or greater than the length of string \(s_1\) , or \(r\) does not match a substring in \(s\) after index \(i\) , the result is -1.
-
Arity:
3
-
1:
Term of Sort String (string \(s\) ) -
2:
Term of Sort RegLan (regular expression \(r\) ) -
3:
Term of Sort Int (index \(i\) )
-
-
-
enumerator
STRING_REPLACE
-
String replace.
Replaces a string \(s_2\) in a string \(s_1\) with string \(s_3\) . If \(s_2\) does not appear in \(s_1\) , \(s_1\) is returned unmodified.
-
Arity:
3
-
1:
Term of Sort String (string \(s_1\) ) -
2:
Term of Sort String (string \(s_2\) ) -
3:
Term of Sort String (string \(s_3\) )
-
-
-
enumerator
STRING_REPLACE_ALL
-
String replace all.
Replaces all occurrences of a string \(s_2\) in a string \(s_1\) with string \(s_3\) . If \(s_2\) does not appear in \(s_1\) , \(s_1\) is returned unmodified.
-
Arity:
3
-
1:
Term of Sort String ( \(s_1\) ) -
2:
Term of Sort String ( \(s_2\) ) -
3:
Term of Sort String ( \(s_3\) )
-
-
-
enumerator
STRING_REPLACE_RE
-
String replace regular expression match.
Replaces the first match of a regular expression \(r\) in string \(s_1\) with string \(s_2\) . If \(r\) does not match a substring of \(s_1\) , \(s_1\) is returned unmodified.
-
Arity:
3
-
1:
Term of Sort String ( \(s_1\) ) -
2:
Term of Sort RegLan -
3:
Term of Sort String ( \(s_2\) )
-
-
-
enumerator
STRING_REPLACE_RE_ALL
-
String replace all regular expression matches.
Replaces all matches of a regular expression \(r\) in string \(s_1\) with string \(s_2\) . If \(r\) does not match a substring of \(s_1\) , string \(s_1\) is returned unmodified.
-
Arity:
3
-
1:
Term of Sort String ( \(s_1\) ) -
2:
Term of Sort RegLan -
3:
Term of Sort String ( \(s_2\) )
-
-
-
enumerator
STRING_TO_LOWER
-
String to lower case.
-
enumerator
STRING_TO_UPPER
-
String to upper case.
-
enumerator
STRING_REV
-
String reverse.
-
enumerator
STRING_TO_CODE
-
String to code.
Returns the code point of a string if it has length one, or returns
-1
otherwise.
-
enumerator
STRING_FROM_CODE
-
String from code.
Returns a string containing a single character whose code point matches the argument to this function, or the empty string if the argument is out-of-bounds.
-
enumerator
STRING_LT
-
String less than.
Returns true if string \(s_1\) is (strictly) less than \(s_2\) based on a lexiographic ordering over code points.
-
Arity:
2
-
1:
Term of Sort String ( \(s_1\) ) -
2:
Term of Sort String ( \(s_2\) )
-
-
-
enumerator
STRING_LEQ
-
String less than or equal.
Returns true if string \(s_1\) is less than or equal to \(s_2\) based on a lexiographic ordering over code points.
-
Arity:
2
-
1:
Term of Sort String ( \(s_1\) ) -
2:
Term of Sort String ( \(s_2\) )
-
-
-
enumerator
STRING_PREFIX
-
String prefix-of.
Determines whether a string \(s_1\) is a prefix of string \(s_2\) . If string s1 is empty, this operator returns
true
.-
Arity:
2
-
1:
Term of Sort String ( \(s_1\) ) -
2:
Term of Sort String ( \(s_2\) )
-
-
-
enumerator
STRING_SUFFIX
-
String suffix-of.
Determines whether a string \(s_1\) is a suffix of the second string. If string \(s_1\) is empty, this operator returns
true
.-
Arity:
2
-
1:
Term of Sort String ( \(s_1\) ) -
2:
Term of Sort String ( \(s_2\) )
-
-
-
enumerator
STRING_IS_DIGIT
-
String is-digit.
Returns true if given string is a digit (it is one of
"0"
, …,"9"
).
-
enumerator
STRING_FROM_INT
-
Conversion from Int to String.
If the integer is negative this operator returns the empty string.
-
enumerator
STRING_TO_INT
-
String to integer (total function).
If the string does not contain an integer or the integer is negative, the operator returns
-1
.
-
enumerator
STRING_TO_REGEXP
-
Conversion from string to regexp.
-
enumerator
REGEXP_CONCAT
-
Regular expression concatenation.
-
enumerator
REGEXP_UNION
-
Regular expression union.
-
enumerator
REGEXP_INTER
-
Regular expression intersection.
-
enumerator
REGEXP_DIFF
-
Regular expression difference.
-
enumerator
REGEXP_STAR
-
Regular expression *.
-
enumerator
REGEXP_PLUS
-
Regular expression +.
-
enumerator
REGEXP_OPT
-
Regular expression ?.
-
enumerator
REGEXP_RANGE
-
Regular expression range.
-
enumerator
REGEXP_REPEAT
-
Operator for regular expression repeat.
-
enumerator
REGEXP_LOOP
-
Regular expression loop.
Regular expression loop from lower bound to upper bound number of repetitions.
-
enumerator
REGEXP_COMPLEMENT
-
Regular expression complement.
-
enumerator
SEQ_CONCAT
-
Sequence concat.
-
enumerator
SEQ_LENGTH
-
Sequence length.
-
enumerator
SEQ_EXTRACT
-
Sequence extract.
Extracts a subsequence, starting at index \(i\) and of length \(l\) , from a sequence \(s\) . If the start index is negative, the start index is greater than the length of the sequence, or the length is negative, the result is the empty sequence.
-
Arity:
3
-
1:
Term of sequence Sort -
2:
Term of Sort Int (index \(i\) ) -
3:
Term of Sort Int (length \(l\) )
-
-
-
enumerator
SEQ_UPDATE
-
Sequence update.
Updates a sequence \(s\) by replacing its context starting at an index with string \(t\) . If the start index is negative, the start index is greater than the length of the sequence, the result is \(s\) . Otherwise, the length of the original sequence is preserved.
-
Arity:
3
-
1:
Term of sequence Sort -
2:
Term of Sort Int (index \(i\) ) -
3:
Term of sequence Sort (replacement sequence \(t\) )
-
-
-
enumerator
SEQ_AT
-
Sequence element at.
Returns the element at index \(i\) from a sequence \(s\) . If the index is negative or the index is greater or equal to the length of the sequence, the result is the empty sequence. Otherwise the result is a sequence of length
1
.-
Arity:
2
-
1:
Term of sequence Sort -
2:
Term of Sort Int (index \(i\) )
-
-
-
enumerator
SEQ_CONTAINS
-
Sequence contains.
Checks whether a sequence \(s_1\) contains another sequence \(s_2\) . If \(s_2\) is empty, the result is always
true
.-
Arity:
2
-
1:
Term of sequence Sort ( \(s_1\) ) -
2:
Term of sequence Sort ( \(s_2\) )
-
-
-
enumerator
SEQ_INDEXOF
-
Sequence index-of.
Returns the index of a subsequence \(s_2\) in a sequence \(s_1\) starting at index \(i\) . If the index is negative or greater than the length of sequence \(s_1\) or the subsequence \(s_2\) does not appear in sequence \(s_1\) after index \(i\) , the result is -1.
-
Arity:
3
-
1:
Term of sequence Sort ( \(s_1\) ) -
2:
Term of sequence Sort ( \(s_2\) ) -
3:
Term of Sort Int ( \(i\) )
-
-
-
enumerator
SEQ_REPLACE
-
Sequence replace.
Replaces the first occurrence of a sequence \(s_2\) in a sequence \(s_1\) with sequence \(s_3\) . If \(s_2\) does not appear in \(s_1\) , \(s_1\) is returned unmodified.
-
Arity:
3
-
1:
Term of sequence Sort ( \(s_1\) ) -
2:
Term of sequence Sort ( \(s_2\) ) -
3:
Term of sequence Sort ( \(s_3\) )
-
-
-
enumerator
SEQ_REPLACE_ALL
-
Sequence replace all.
Replaces all occurrences of a sequence \(s_2\) in a sequence \(s_1\) with sequence \(s_3\) . If \(s_2\) does not appear in \(s_1\) , sequence \(s_1\) is returned unmodified.
-
Arity:
3
-
1:
Term of sequence Sort ( \(s_1\) ) -
2:
Term of sequence Sort ( \(s_2\) ) -
3:
Term of sequence Sort ( \(s_3\) )
-
-
-
enumerator
SEQ_REV
-
Sequence reverse.
-
enumerator
SEQ_PREFIX
-
Sequence prefix-of.
Checks whether a sequence \(s_1\) is a prefix of sequence \(s_2\) . If sequence \(s_1\) is empty, this operator returns
true
.-
Arity:
1
-
1:
Term of sequence Sort ( \(s_1\) ) -
2:
Term of sequence Sort ( \(s_2\) )
-
-
-
enumerator
SEQ_SUFFIX
-
Sequence suffix-of.
Checks whether a sequence \(s_1\) is a suffix of sequence \(s_2\) . If sequence \(s_1\) is empty, this operator returns
true
.-
Arity:
1
-
1:
Term of sequence Sort ( \(s_1\) ) -
2:
Term of sequence Sort ( \(s_2\) )
-
-
-
enumerator
CONST_SEQUENCE
-
Constant sequence.
A constant sequence is a term that is equivalent to:
(seq.++ (seq.unit c1) ... (seq.unit cn))
where \(n \leq 0\) and \(c_1, ..., c_n\) are constants of some sort. The elements can be extracted with Term::getSequenceValue().
-
Create Term of this Kind with:
-
-
enumerator
SEQ_UNIT
-
Sequence unit.
Corresponds to a sequence of length one with the given term.
-
enumerator
SEQ_NTH
-
Sequence nth.
Corresponds to the nth element of a sequence.
-
Arity:
2
-
1:
Term of sequence Sort -
2:
Term of Sort Int ( \(n\) )
-
-
-
enumerator
FORALL
-
Universally quantified formula.
-
Arity:
3
-
1:
Term of KindVARIABLE_LIST
-
2:
Term of Sort Bool (the quantifier body) -
3:
(optional) Term of KindINST_PATTERN
-
-
-
enumerator
EXISTS
-
Existentially quantified formula.
-
Arity:
3
-
1:
Term of KindVARIABLE_LIST
-
2:
Term of Sort Bool (the quantifier body) -
3:
(optional) Term of KindINST_PATTERN
-
-
-
enumerator
VARIABLE_LIST
-
Variable list.
A list of variables (used to bind variables under a quantifier)
-
Arity:
n > 0
-
1..n:
Terms of KindVARIABLE
-
-
-
enumerator
INST_PATTERN
-
Instantiation pattern.
Specifies a (list of) terms to be used as a pattern for quantifier instantiation.
Note
Should only be used as a child of
INST_PATTERN_LIST
.
-
enumerator
INST_NO_PATTERN
-
Instantiation no-pattern.
Specifies a (list of) terms that should not be used as a pattern for quantifier instantiation.
Note
Should only be used as a child of
INST_PATTERN_LIST
.
-
enumerator
INST_POOL
-
Instantiation pool annotation.
Specifies an annotation for pool based instantiation.
In detail, pool symbols can be declared via the method
A pool symbol represents a set of terms of a given sort. An instantiation pool annotation should match the types of the quantified formula.
For example, for a quantified formula:
(FORALL (VARIABLE_LIST x y) F (INST_PATTERN_LIST (INST_POOL p q)))
if \(x\) and \(y\) have Sorts \(S_1\) and \(S_2\) , then pool symbols \(p\) and \(q\) should have Sorts (Set \(S_1\) ) and (Set \(S_2\) ), respectively. This annotation specifies that the quantified formula above should be instantiated with the product of all terms that occur in the sets \(p\) and \(q\) .
-
Arity:
n > 0
-
1..n:
Terms that comprise the pools, which are one-to-one with the variables of the quantified formula to be instantiated
-
-
Create Term of this Kind with:
-
Create Op of this kind with:
Note
Should only be used as a child of
INST_PATTERN_LIST
.Warning
This kind is experimental and may be changed or removed in future versions.
-
-
enumerator
INST_ADD_TO_POOL
-
A instantantiation-add-to-pool annotation.
An instantantiation-add-to-pool annotation indicates that when a quantified formula is instantiated, the instantiated version of a term should be added to the given pool.
For example, consider a quantified formula:
(FORALL (VARIABLE_LIST x) F (INST_PATTERN_LIST (INST_ADD_TO_POOL (ADD x 1) p)))
where assume that \(x\) has type Int. When this quantified formula is instantiated with, e.g., the term \(t\) , the term
(ADD t 1)
is added to pool \(p\) .Note
Should only be used as a child of
INST_PATTERN_LIST
.Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
SKOLEM_ADD_TO_POOL
-
A skolemization-add-to-pool annotation.
An skolemization-add-to-pool annotation indicates that when a quantified formula is skolemized, the skolemized version of a term should be added to the given pool.
For example, consider a quantified formula:
(FORALL (VARIABLE_LIST x) F (INST_PATTERN_LIST (SKOLEM_ADD_TO_POOL (ADD x 1) p)))
where assume that \(x\) has type Int. When this quantified formula is skolemized, e.g., with \(k\) of type Int, then the term
(ADD k 1)
is added to the pool \(p\) .Note
Should only be used as a child of
INST_PATTERN_LIST
.Warning
This kind is experimental and may be changed or removed in future versions.
-
enumerator
INST_ATTRIBUTE
-
Instantiation attribute.
Specifies a custom property for a quantified formula given by a term that is ascribed a user attribute.
-
Arity:
n > 0
-
1:
Term of Kind :cpp:enumerator:CONST_STRING
(the keyword of the attribute) -
2...n:
Terms representing the values of the attribute
-
-
Create Term of this Kind with:
-
Create Op of this kind with:
Note
Should only be used as a child of
INST_PATTERN_LIST
. -
-
enumerator
INST_PATTERN_LIST
-
A list of instantiation patterns, attributes or annotations.
-
Arity:
n > 1
-
1..n:
Terms of KindINST_PATTERN
,INST_NO_PATTERN
,INST_POOL
,INST_ADD_TO_POOL
,SKOLEM_ADD_TO_POOL
,INST_ATTRIBUTE
-
-
-
enumerator
LAST_KIND
-
Marks the upper-bound of this enumeration.
-
enumerator
INTERNAL_KIND