diff options
author | Aina Niemetz <aina.niemetz@gmail.com> | 2018-06-27 14:00:58 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-27 14:00:58 -0700 |
commit | bf40a0811328e294d98c07cf137f557aea68bdc8 (patch) | |
tree | 05305105f107a30867a5144da651dcd313a7767a /src/api/cvc4cppkind.h | |
parent | d6c7967cfc7a9f8530f0de50f12f99bfc5f93da7 (diff) |
Header for new C++ API. (#1697)
Diffstat (limited to 'src/api/cvc4cppkind.h')
-rw-r--r-- | src/api/cvc4cppkind.h | 2334 |
1 files changed, 2334 insertions, 0 deletions
diff --git a/src/api/cvc4cppkind.h b/src/api/cvc4cppkind.h new file mode 100644 index 000000000..afa1e29f9 --- /dev/null +++ b/src/api/cvc4cppkind.h @@ -0,0 +1,2334 @@ +/********************* */ +/*! \file cvc4cpp.h + ** \verbatim + ** Top authors (to current version): Aina Niemetz + ** This file is part of the CVC4 project. + ** Copyright (c) 2009-2018 by the authors listed in the file AUTHORS + ** in the top-level source directory) and their institutional affiliations. + ** All rights reserved. See the file COPYING in the top-level source + ** directory for licensing information.\endverbatim + ** + ** \brief The term kinds of the CVC4 C++ API. + ** + ** The term kinds of the CVC4 C++ API. + **/ + +#include "cvc4_public.h" + +#ifndef __CVC4__API__CVC4CPPKIND_H +#define __CVC4__API__CVC4CPPKIND_H + +#include <ostream> + +namespace CVC4 { +namespace api { + +/* -------------------------------------------------------------------------- */ +/* Kind */ +/* -------------------------------------------------------------------------- */ + +/** + * The kind of a CVC4 term. + */ +enum CVC4_PUBLIC Kind +{ + /** + * Internal kind. + * Should never be exposed or created via the API. + */ + INTERNAL_KIND = -2, + /** + * Undefined kind. + * Should never be exposed or created via the API. + */ + UNDEFINED_KIND = -1, + /** + * Null kind (kind of null term Term()). + * Do not explicitly create via API functions other than Term(). + */ + NULL_EXPR, + + /* Builtin --------------------------------------------------------------- */ + + /** + * Uninterpreted constant. + * Parameters: 2 + * -[1]: Sort of the constant + * -[2]: Index of the constant + * Create with: + * mkConst(Kind, Sort, int32_t) + */ + UNINTERPRETED_CONSTANT, + /** + * Abstract value (other than uninterpreted sort constants). + * Parameters: 1 + * -[1]: Index of the abstract value + * Create with: + * mkConst(Kind kind, const char* s, uint32_t base = 10) + * mkConst(Kind kind, const std::string& s, uint32_t base = 10) + * mkConst(Kind kind, uint32_t arg) + * mkConst(Kind kind, int32_t arg) + * mkConst(Kind kind, int64_t arg) + * mkConst(Kind kind, uint64_t arg) + */ + ABSTRACT_VALUE, +#if 0 + /* Built-in operator */ + BUILTIN, +#endif + /** + * Defined function. + * Parameters: 3 (4) + * See defineFun(). + * Create with: + * defineFun(const std::string& symbol, + * const std::vector<Term>& bound_vars, + * Sort sort, + * Term term) + * defineFun(Term fun, + * const std::vector<Term>& bound_vars, + * Term term) + */ + FUNCTION, + /** + * Application of a defined function. + * Parameters: n > 1 + * -[1]..[n]: Function argument instantiation Terms + * Create with: + * mkTerm(Kind kind, Term child) + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + APPLY, + /** + * Equality. + * Parameters: 2 + * -[1]..[2]: Terms with same sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + EQUAL, + /** + * Disequality. + * Parameters: n > 1 + * -[1]..[n]: Terms with same sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + DISTINCT, + /** + * Variable. + * Not permitted in bindings (forall, exists, ...). + * Parameters: + * See mkVar(). + * Create with: + * mkVar(const std::string& symbol, Sort sort) + * mkVar(Sort sort) + */ + VARIABLE, + /** + * Bound variable. + * Permitted in bindings and in the lambda and quantifier bodies only. + * Parameters: + * See mkBoundVar(). + * Create with: + * mkBoundVar(const std::string& symbol, Sort sort) + * mkBoundVar(Sort sort) + */ + BOUND_VARIABLE, +#if 0 + /* Skolem variable (internal only) */ + SKOLEM, + /* Symbolic expression (any arity) */ + SEXPR, +#endif + /** + * Lambda expression. + * Parameters: 2 + * -[1]: BOUND_VAR_LIST + * -[2]: Lambda body + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + LAMBDA, + /** + * Hilbert choice (epsilon) expression. + * Parameters: 2 + * -[1]: BOUND_VAR_LIST + * -[2]: Hilbert choice body + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + CHOICE, + /** + * Chained operation. + * Parameters: n > 1 + * -[1]: Term of kind CHAIN_OP (represents a binary op) + * -[2]..[n]: Arguments to that operator + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + * Turned into a conjunction of binary applications of the operator on + * adjoining parameters. + */ + CHAIN, + /** + * Chained operator. + * Parameters: 1 + * -[1]: Kind of the binary operation + * Create with: + * mkOpTerm(Kind opkind, Kind kind) + */ + CHAIN_OP, + + /* Boolean --------------------------------------------------------------- */ + + /** + * Boolean constant. + * Parameters: 1 + * -[1]: Boolean value of the constant + * Create with: + * mkTrue() + * mkFalse() + * mkBoolean(bool val) + * mkConst(Kind kind, bool arg) + */ + CONST_BOOLEAN, + /* Logical not. + * Parameters: 1 + * -[1]: Boolean Term to negate + * Create with: + * mkTerm(Kind kind, Term child) + */ + NOT, + /* Logical and. + * Parameters: n > 1 + * -[1]..[n]: Boolean Term of the conjunction + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + AND, + /** + * Logical implication. + * Parameters: 2 + * -[1]..[2]: Boolean Terms, [1] implies [2] + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + IMPLIES, + /* Logical or. + * Parameters: n > 1 + * -[1]..[n]: Boolean Term of the disjunction + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + OR, + /* Logical exclusive or. + * Parameters: 2 + * -[1]..[2]: Boolean Terms, [1] xor [2] + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + XOR, + /* If-then-else. + * Parameters: 3 + * -[1] is a Boolean condition Term + * -[2] the 'then' Term + * -[3] the 'else' Term + * 'then' and 'else' term must have same base sort. + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + ITE, + + /* UF -------------------------------------------------------------------- */ + + /* Application of an uninterpreted function. + * Parameters: n > 1 + * -[1]: Function Term + * -[2]..[n]: Function argument instantiation Terms + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + APPLY_UF, +#if 0 + /* Boolean term variable */ + BOOLEAN_TERM_VARIABLE, +#endif + /** + * Cardinality constraint on sort S. + * Parameters: 2 + * -[1]: Term of sort S + * -[2]: Positive integer constant that bounds the cardinality of sort S + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + CARDINALITY_CONSTRAINT, +#if 0 + /* Combined cardinality constraint. */ + COMBINED_CARDINALITY_CONSTRAINT, + /* Partial uninterpreted function application. */ + PARTIAL_APPLY_UF, + /* cardinality value of sort S: + * first parameter is (any) term of sort S */ + CARDINALITY_VALUE, +#endif + /** + * Higher-order applicative encoding of function application. + * Parameters: 2 + * -[1]: Function to apply + * -[2]: Argument of the function + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + HO_APPLY, + + /* Arithmetic ------------------------------------------------------------ */ + + /** + * Arithmetic addition. + * Parameters: n > 1 + * -[1]..[n]: Terms of sort Integer, Real (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + PLUS, + /** + * Arithmetic multiplication. + * Parameters: n > 1 + * -[1]..[n]: Terms of sort Integer, Real (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + MULT, +#if 0 + /* Synonym for MULT. */ + NONLINEAR_MULT, +#endif + /** + * Arithmetic subtraction. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + MINUS, + /** + * Arithmetic negation. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + UMINUS, + /** + * Real division, division by 0 undefined + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + DIVISION, + /** + * Real division with interpreted division by 0 + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + DIVISION_TOTAL, + /** + * Integer division, division by 0 undefined. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + INTS_DIVISION, + /** + * Integer division with interpreted division by 0. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + INTS_DIVISION_TOTAL, + /** + * Integer modulus, division by 0 undefined. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + INTS_MODULUS, + /** + * Integer modulus with interpreted division by 0. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + INTS_MODULUS_TOTAL, + /** + * Absolute value. + * Parameters: 1 + * -[1]: Term of sort Integer + * Create with: + * mkTerm(Kind kind, Term child) + */ + ABS, + /** + * Divisibility-by-k predicate. + * Parameters: 2 + * -[1]: DIVISIBLE_OP Term + * -[2]: Integer Term + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + DIVISIBLE, + /** + * Arithmetic power. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + POW, + /** + * Exponential. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + EXPONENTIAL, + /** + * Sine. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + SINE, + /** + * Cosine. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + COSINE, + /** + * Tangent. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + TANGENT, + /** + * Cosecant. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + COSECANT, + /** + * Secant. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + SECANT, + /** + * Cotangent. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + COTANGENT, + /** + * Arc sine. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + ARCSINE, + /** + * Arc cosine. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + ARCCOSINE, + /** + * Arc tangent. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + ARCTANGENT, + /** + * Arc cosecant. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + ARCCOSECANT, + /** + * Arc secant. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + ARCSECANT, + /** + * Arc cotangent. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + ARCCOTANGENT, + /** + * Square root. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + SQRT, + /** + * Operator for the divisibility-by-k predicate. + * Parameter: 1 + * -[1]: The k to divide by (sort Integer) + * Create with: + * mkOpTerm(Kind kind, uint32_t param) + */ + DIVISIBLE_OP, + /** + * Multiple-precision rational constant. + * Parameters: + * See mkInteger(), mkReal(), mkRational() + * Create with: + * mkInteger(const char* s, uint32_t base = 10) + * mkInteger(const std::string& s, uint32_t base = 10) + * mkInteger(int32_t val) + * mkInteger(uint32_t val) + * mkInteger(int64_t val) + * mkInteger(uint64_t val) + * mkReal(const char* s, uint32_t base = 10) + * mkReal(const std::string& s, uint32_t base = 10) + * mkReal(int32_t val) + * mkReal(int64_t val) + * mkReal(uint32_t val) + * mkReal(uint64_t val) + * mkRational(int32_t num, int32_t den) + * mkRational(int64_t num, int64_t den) + * mkRational(uint32_t num, uint32_t den) + * mkRational(uint64_t num, uint64_t den) + * mkConst(Kind kind, const char* s, uint32_t base = 10) + * mkConst(Kind kind, const std::string& s, uint32_t base = 10) + * mkConst(Kind kind, uint32_t arg) + * mkConst(Kind kind, int64_t arg) + * mkConst(Kind kind, uint64_t arg) + * mkConst(Kind kind, int32_t arg) + * mkConst(Kind kind, int32_t arg1, int32_t arg2) + * mkConst(Kind kind, int64_t arg1, int64_t arg2) + * mkConst(Kind kind, uint32_t arg1, uint32_t arg2) + * mkConst(Kind kind, uint64_t arg1, uint64_t arg2) + */ + CONST_RATIONAL, + /** + * Less than. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real; [1] < [2] + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + LT, + /** + * Less than or equal. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real; [1] <= [2] + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + LEQ, + /** + * Greater than. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real, [1] > [2] + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + GT, + /** + * Greater than or equal. + * Parameters: 2 + * -[1]..[2]: Terms of sort Integer, Real; [1] >= [2] + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + GEQ, + /** + * Is-integer predicate. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + IS_INTEGER, + /** + * Convert Term to Integer by the floor function. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * Create with: + * mkTerm(Kind kind, Term child) + */ + TO_INTEGER, + /** + * Convert Term to Real. + * Parameters: 1 + * -[1]: Term of sort Integer, Real + * This is a no-op in CVC4, as Integer is a subtype of Real. + */ + TO_REAL, + /** + * Pi constant. + * Create with: + * mkPi() + * mkTerm(Kind kind) + */ + PI, + + /* BV -------------------------------------------------------------------- */ + + /** + * Fixed-size bit-vector constant. + * Parameters: + * See mkBitVector(). + * Create with: + * mkBitVector(uint32_t size) + * mkBitVector(uint32_t size, uint32_t val) + * mkBitVector(uint32_t size, uint64_t val) + * mkBitVector(const char* s, uint32_t base = 2) + * mkBitVector(std::string& s, uint32_t base = 2) + * mkConst(Kind kind, const char* s, uint32_t base = 10) + * mkConst(Kind kind, const std::string& s, uint32_t base = 10) + * mkConst(Kind kind, uint32_t arg) + * mkConst(Kind kind, uint32_t arg1, uint64_t arg2) + */ + CONST_BITVECTOR, + /** + * Concatenation of two or more bit-vectors. + * Parameters: n > 1 + * -[1]..[n]: Terms of bit-vector sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_CONCAT, + /** + * Bit-wise and. + * Parameters: n > 1 + * -[1]..[n]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_AND, + /** + * Bit-wise or. + * Parameters: n > 1 + * -[1]..[n]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_OR, + /** + * Bit-wise xor. + * Parameters: n > 1 + * -[1]..[n]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_XOR, + /** + * Bit-wise negation. + * Parameters: 1 + * -[1]: Term of bit-vector sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + BITVECTOR_NOT, + /** + * Bit-wise nand. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_NAND, + /** + * Bit-wise nor. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_NOR, + /** + * Bit-wise xnor. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_XNOR, + /** + * Equality comparison (returns bit-vector of size 1). + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_COMP, + /** + * Multiplication of two or more bit-vectors. + * Parameters: n > 1 + * -[1]..[n]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_MULT, + /** + * Addition of two or more bit-vectors. + * Parameters: n > 1 + * -[1]..[n]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_PLUS, + /** + * Subtraction of two bit-vectors. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SUB, + /** + * Negation of a bit-vector (two's complement). + * Parameters: 1 + * -[1]: Term of bit-vector sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + BITVECTOR_NEG, + /** + * Unsigned division of two bit-vectors, truncating towards 0. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_UDIV, + /** + * Unsigned remainder from truncating division of two bit-vectors. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_UREM, + /** + * Two's complement signed division of two bit-vectors. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SDIV, + /** + * Two's complement signed remainder of two bit-vectors + * (sign follows dividend). + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SREM, + /** + * Two's complement signed remainder + * (sign follows divisor). + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SMOD, + /** + * Unsigned division of two bit-vectors, truncating towards 0 + * (defined to be the all-ones bit pattern, if divisor is 0). + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_UDIV_TOTAL, + /** + * Unsigned remainder from truncating division of two bit-vectors + * (defined to be equal to the dividend, if divisor is 0). + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_UREM_TOTAL, + /** + * Bit-vector shift left. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SHL, + /** + * Bit-vector logical shift right. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_LSHR, + /** + * Bit-vector arithmetic shift right. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_ASHR, + /** + * Bit-vector unsigned less than. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_ULT, + /** + * Bit-vector unsigned less than or equal. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_ULE, + /** + * Bit-vector unsigned greater than. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_UGT, + /** + * Bit-vector unsigned greater than or equal. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_UGE, + /* Bit-vector signed less than. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SLT, + /** + * Bit-vector signed less than or equal. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SLE, + /** + * Bit-vector signed greater than. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SGT, + /** + * Bit-vector signed greater than or equal. + * The two bit-vector parameters must have same width. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SGE, + /** + * Bit-vector unsigned less than, returns bit-vector of size 1. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_ULTBV, + /** + * Bit-vector signed less than. returns bit-vector of size 1. + * Parameters: 2 + * -[1]..[2]: Terms of bit-vector sort (sorts must match) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_SLTBV, + /** + * Same semantics as regular ITE, but condition is bit-vector of size 1. + * Parameters: 3 + * -[1]: Term of bit-vector sort of size 1, representing the condition + * -[2]: Term reprsenting the 'then' branch + * -[3]: Term representing the 'else' branch + * 'then' and 'else' term must have same base sort. + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + BITVECTOR_ITE, + /** + * Bit-vector redor. + * Parameters: 1 + * -[1]: Term of bit-vector sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + BITVECTOR_REDOR, + /** + * Bit-vector redand. + * Parameters: 1 + * -[1]: Term of bit-vector sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + BITVECTOR_REDAND, +#if 0 + /* formula to be treated as a bv atom via eager bit-blasting + * (internal-only symbol) */ + BITVECTOR_EAGER_ATOM, + /* term to be treated as a variable. used for eager bit-blasting Ackermann + * expansion of bvudiv (internal-only symbol) */ + BITVECTOR_ACKERMANIZE_UDIV, + /* term to be treated as a variable. used for eager bit-blasting Ackermann + * expansion of bvurem (internal-only symbol) */ + BITVECTOR_ACKERMANIZE_UREM, + /* operator for the bit-vector boolean bit extract. + * One parameter, parameter is the index of the bit to extract */ + BITVECTOR_BITOF_OP, +#endif + /** + * Operator for bit-vector extract (from index 'high' to 'low'). + * Parameters: 2 + * -[1]: The 'high' index + * -[2]: The 'low' index + * Create with: + * mkOpTerm(Kind kind, uint32_t param, uint32_t param) + */ + BITVECTOR_EXTRACT_OP, + /** + * Operator for bit-vector repeat. + * Parameter 1: + * -[1]: Number of times to repeat a given bit-vector + * Create with: + * mkOpTerm(Kind kind, uint32_t param). + */ + BITVECTOR_REPEAT_OP, + /** + * Operator for bit-vector zero-extend. + * Parameter 1: + * -[1]: Number of bits by which a given bit-vector is to be extended + * Create with: + * mkOpTerm(Kind kind, uint32_t param). + */ + BITVECTOR_ZERO_EXTEND_OP, + /** + * Operator for bit-vector sign-extend. + * Parameter 1: + * -[1]: Number of bits by which a given bit-vector is to be extended + * Create with: + * mkOpTerm(Kind kind, uint32_t param). + */ + BITVECTOR_SIGN_EXTEND_OP, + /** + * Operator for bit-vector rotate left. + * Parameter 1: + * -[1]: Number of bits by which a given bit-vector is to be rotated + * Create with: + * mkOpTerm(Kind kind, uint32_t param). + */ + BITVECTOR_ROTATE_LEFT_OP, + /** + * Operator for bit-vector rotate right. + * Parameter 1: + * -[1]: Number of bits by which a given bit-vector is to be rotated + * Create with: + * mkOpTerm(Kind kind, uint32_t param). + */ + BITVECTOR_ROTATE_RIGHT_OP, +#if 0 + /* bit-vector boolean bit extract. + * first parameter is a BITVECTOR_BITOF_OP, second is a bit-vector term */ + BITVECTOR_BITOF, +#endif + /* Bit-vector extract. + * Parameters: 2 + * -[1]: BITVECTOR_EXTRACT_OP Term + * -[2]: Term of bit-vector sort + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + BITVECTOR_EXTRACT, + /* Bit-vector repeat. + * Parameters: 2 + * -[1]: BITVECTOR_REPEAT_OP Term + * -[2]: Term of bit-vector sort + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + BITVECTOR_REPEAT, + /* Bit-vector zero-extend. + * Parameters: 2 + * -[1]: BITVECTOR_ZERO_EXTEND_OP Term + * -[2]: Term of bit-vector sort + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + BITVECTOR_ZERO_EXTEND, + /* Bit-vector sign-extend. + * Parameters: 2 + * -[1]: BITVECTOR_SIGN_EXTEND_OP Term + * -[2]: Term of bit-vector sort + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + BITVECTOR_SIGN_EXTEND, + /* Bit-vector rotate left. + * Parameters: 2 + * -[1]: BITVECTOR_ROTATE_LEFT_OP Term + * -[2]: Term of bit-vector sort + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + BITVECTOR_ROTATE_LEFT, + /** + * Bit-vector rotate right. + * Parameters: 2 + * -[1]: BITVECTOR_ROTATE_RIGHT_OP Term + * -[2]: Term of bit-vector sort + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + BITVECTOR_ROTATE_RIGHT, + /** + * Operator for the conversion from Integer to bit-vector. + * Parameter: 1 + * -[1]: Size of the bit-vector to convert to + * Create with: + * mkOpTerm(Kind kind, uint32_t param). + */ + INT_TO_BITVECTOR_OP, + /** + * Integer conversion to bit-vector. + * Parameters: 2 + * -[1]: INT_TO_BITVECTOR_OP Term + * -[2]: Integer term + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + INT_TO_BITVECTOR, + /** + * Bit-vector conversion to (nonnegative) integer. + * Parameter: 1 + * -[1]: Term of bit-vector sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + BITVECTOR_TO_NAT, + + /* FP -------------------------------------------------------------------- */ + + /** + * Floating-point constant, constructed from a double or string. + * Parameters: 3 + * -[1]: Size of the exponent + * -[2]: Size of the significand + * -[3]: Value of the floating-point constant as a bit-vector term + * Create with: + * mkConst(Kind kind, uint32_t arg1, uint32_t arg2, Term arg3) + */ + CONST_FLOATINGPOINT, + /** + * Floating-point rounding mode term. + * Create with: + * mkConst(RoundingMode rm) + */ + CONST_ROUNDINGMODE, + /** + * Create floating-point literal from bit-vector triple. + * Parameters: 3 + * -[1]: Sign bit as a bit-vector term + * -[2]: Exponent bits as a bit-vector term + * -[3]: Significand bits as a bit-vector term (without hidden bit) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_FP, + /** + * Floating-point equality. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_EQ, + /** + * Floating-point absolute value. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ABS, + /** + * Floating-point negation. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_NEG, + /** + * Floating-point addition. + * Parameters: 3 + * -[1]: CONST_ROUNDINGMODE + * -[2]: Term of sort FloatingPoint + * -[3]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_PLUS, + /** + * Floating-point sutraction. + * Parameters: 3 + * -[1]: CONST_ROUNDINGMODE + * -[2]: Term of sort FloatingPoint + * -[3]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_SUB, + /** + * Floating-point multiply. + * Parameters: 3 + * -[1]: CONST_ROUNDINGMODE + * -[2]: Term of sort FloatingPoint + * -[3]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_MULT, + /** + * Floating-point division. + * Parameters: 3 + * -[1]: CONST_ROUNDINGMODE + * -[2]: Term of sort FloatingPoint + * -[3]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_DIV, + /** + * Floating-point fused multiply and add. + * Parameters: 4 + * -[1]: CONST_ROUNDINGMODE + * -[2]: Term of sort FloatingPoint + * -[3]: Term of sort FloatingPoint + * -[4]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_FMA, + /** + * Floating-point square root. + * Parameters: 2 + * -[1]: CONST_ROUNDINGMODE + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_SQRT, + /** + * Floating-point remainder. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_REM, + /** + * Floating-point round to integral. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_RTI, + /** + * Floating-point minimum. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_MIN, + /** + * Floating-point maximum. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_MAX, +#if 0 + /* floating-point minimum (defined for all inputs) */ + FLOATINGPOINT_MIN_TOTAL, + /* floating-point maximum (defined for all inputs) */ + FLOATINGPOINT_MAX_TOTAL, +#endif + /** + * Floating-point less than or equal. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_LEQ, + /** + * Floating-point less than. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_LT, + /** + * Floating-point greater than or equal. + * Parameters: 2 + * -[1]..[2]: Terms of floating point sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_GEQ, + /** + * Floating-point greater than. + * Parameters: 2 + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FLOATINGPOINT_GT, + /** + * Floating-point is normal. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ISN, + /** + * Floating-point is sub-normal. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ISSN, + /** + * Floating-point is zero. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ISZ, + /** + * Floating-point is infinite. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ISINF, + /** + * Floating-point is NaN. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ISNAN, + /** + * Floating-point is negative. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ISNEG, + /** + * Floating-point is positive. + * Parameters: 1 + * -[1]: Term of floating point sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_ISPOS, + /** + * Operator for to_fp from bit vector. + * Parameters: 2 + * -[1]: Exponent size + * -[2]: Significand size + * Create with: + * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2) + */ + FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP, + /** + * Conversion from an IEEE-754 bit vector to floating-point. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_FP_IEEE_BITVECTOR, + /** + * Operator for to_fp from floating point. + * Parameters: 2 + * -[1]: Exponent size + * -[2]: Significand size + * Create with: + * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2) + */ + FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP, + /** + * Conversion between floating-point sorts. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_FP_FLOATINGPOINT, + /** + * Operator for to_fp from real. + * Parameters: 2 + * -[1]: Exponent size + * -[2]: Significand size + * Create with: + * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2) + */ + FLOATINGPOINT_TO_FP_REAL_OP, + /** + * Conversion from a real to floating-point. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_REAL_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_FP_REAL, + /* + * Operator for to_fp from signed bit vector. + * Parameters: 2 + * -[1]: Exponent size + * -[2]: Significand size + * Create with: + * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2) + */ + FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP, + /** + * Conversion from a signed bit vector to floating-point. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR, + /** + * Operator for to_fp from unsigned bit vector. + * Parameters: 2 + * -[1]: Exponent size + * -[2]: Significand size + * Create with: + * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2) + */ + FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP, + /** + * Operator for converting an unsigned bit vector to floating-point. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR, + /** + * Operator for a generic to_fp. + * Parameters: 2 + * -[1]: exponent size + * -[2]: Significand size + * Create with: + * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2) + */ + FLOATINGPOINT_TO_FP_GENERIC_OP, + /** + * Generic conversion to floating-point, used in parsing only. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_GENERIC_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_FP_GENERIC, + /** + * Operator for to_ubv. + * Parameters: 1 + * -[1]: Size of the bit-vector to convert to + * Create with: + * mkOpTerm(Kind kind, uint32_t param) + */ + FLOATINGPOINT_TO_UBV_OP, + /** + * Conversion from a floating-point value to an unsigned bit vector. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_UBV, + /** + * Operator for to_ubv_total. + * Parameters: 1 + * -[1]: Size of the bit-vector to convert to + * Create with: + * mkOpTerm(Kind kind, uint32_t param) + */ + FLOATINGPOINT_TO_UBV_TOTAL_OP, + /** + * Conversion from a floating-point value to an unsigned bit vector + * (defined for all inputs). + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_TOTAL_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_UBV_TOTAL, + /** + * Operator for to_sbv. + * Parameters: 1 + * -[1]: Size of the bit-vector to convert to + * Create with: + * mkOpTerm(Kind kind, uint32_t param) + */ + FLOATINGPOINT_TO_SBV_OP, + /** + * Conversion from a floating-point value to a signed bit vector. + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_SBV, + /** + * Operator for to_sbv_total. + * Parameters: 1 + * -[1]: Size of the bit-vector to convert to + * Create with: + * mkOpTerm(Kind kind, uint32_t param) + */ + FLOATINGPOINT_TO_SBV_TOTAL_OP, + /** + * Conversion from a floating-point value to a signed bit vector + * (defined for all inputs). + * Parameters: 2 + * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_TOTAL_OP Term + * -[2]: Term of sort FloatingPoint + * Create with: + * mkTerm(Term opTerm, Term child) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + FLOATINGPOINT_TO_SBV_TOTAL, + /** + * Floating-point to real. + * Parameters: 1 + * -[1]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_TO_REAL, + /** + * Floating-point to real (defined for all inputs). + * Parameters: 1 + * -[1]: Term of sort FloatingPoint + * Create with: + * mkTerm(Kind kind, Term child) + */ + FLOATINGPOINT_TO_REAL_TOTAL, + + /* Arrays ---------------------------------------------------------------- */ + + /** + * Aarray select. + * Parameters: 2 + * -[1]: Term of array sort + * -[2]: Selection index + * Create with: + * mkTerm(Term opTerm, Term child1, Term child2) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + SELECT, + /** + * Array store. + * Parameters: 3 + * -[1]: Term of array sort + * -[2]: Store index + * -[3]: Term to store at the index + * Create with: + * mkTerm(Term opTerm, Term child1, Term child2, Term child3) + * mkTerm(Term opTerm, const std::vector<Term>& children) + */ + STORE, + /** + * Constant array. + * Parameters: 2 + * -[1]: Array sort + * -[2]: Term representing a constant + * Create with: + * mkTerm(Term opTerm, Term child1, Term child2) + * mkTerm(Term opTerm, const std::vector<Term>& children) + * + * Note: We currently support the creation of constant arrays, but under some + * conditions when there is a chain of equalities connecting two constant + * arrays, the solver doesn't know what to do and aborts (Issue #1667). + */ + STORE_ALL, +#if 0 + /* array table function (internal-only symbol) */ + ARR_TABLE_FUN, + /* array lambda (internal-only symbol) */ + ARRAY_LAMBDA, + /* partial array select, for internal use only */ + PARTIAL_SELECT_0, + /* partial array select, for internal use only */ + PARTIAL_SELECT_1, +#endif + + /* Datatypes ------------------------------------------------------------- */ + + /** + * Constructor application. + * Paramters: n > 0 + * -[1]: Constructor + * -[2]..[n]: Parameters to the constructor + * Create with: + * mkTerm(Kind kind) + * mkTerm(Kind kind, Term child) + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + APPLY_SELECTOR, + /** + * Datatype selector application. + * Parameters: 1 + * -[1]: Datatype term (undefined if mis-applied) + * Create with: + * mkTerm(Kind kind, Term child) + */ + APPLY_CONSTRUCTOR, + /** + * Datatype selector application. + * Parameters: 1 + * -[1]: Datatype term (defined rigidly if mis-applied) + * Create with: + * mkTerm(Kind kind, Term child) + */ + APPLY_SELECTOR_TOTAL, + /** + * Datatype tester application. + * Parameters: 2 + * -[1]: Tester term + * -[2]: Datatype term + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + APPLY_TESTER, +#if 0 + /* Parametric datatype term. */ + PARAMETRIC_DATATYPE, + /* type ascription, for datatype constructor applications; + * first parameter is an ASCRIPTION_TYPE, second is the datatype constructor + * application being ascribed */ + APPLY_TYPE_ASCRIPTION, +#endif + /** + * Operator for a tuple update. + * Parameters: 1 + * -[1]: Index of the tuple to be updated + * Create with: + * mkOpTerm(Kind kind, uint32_t param) + */ + TUPLE_UPDATE_OP, + /** + * Tuple update. + * Parameters: 3 + * -[1]: TUPLE_UPDATE_OP (which references an index) + * -[2]: Tuple + * -[3]: Element to store in the tuple at the given index + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + TUPLE_UPDATE, + /** + * Operator for a record update. + * Parameters: 1 + * -[1]: Name of the field to be updated + * Create with: + * mkOpTerm(Kind kind, const std::string& param) + */ + RECORD_UPDATE_OP, + /** + * Record update. + * Parameters: 3 + * -[1]: RECORD_UPDATE_OP Term (which references a field) + * -[2]: Record term to update + * -[3]: Element to store in the record in the given field + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + RECORD_UPDATE, +#if 0 + /* datatypes size */ + DT_SIZE, + /* datatypes height bound */ + DT_HEIGHT_BOUND, + /* datatypes height bound */ + DT_SIZE_BOUND, + /* datatypes sygus bound */ + DT_SYGUS_BOUND, + /* datatypes sygus term order */ + DT_SYGUS_TERM_ORDER, + /* datatypes sygus is constant */ + DT_SYGUS_IS_CONST, +#endif + + /* Separation Logic ------------------------------------------------------ */ + + /** + * Separation logic nil term. + * Parameters: 0 + * Create with: + * mkSepNil(Sort sort) + * mkTerm(Kind kind, Sort sort) + */ + SEP_NIL, + /** + * Separation logic empty heap. + * Parameters: 2 + * -[1]: Term of the same sort as the sort of the location of the heap + * that is constrained to be empty + * -[2]: Term of the same sort as the data sort of the heap that is + * that is constrained to be empty + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + SEP_EMP, + /** + * Separation logic points-to relation. + * Parameters: 2 + * -[1]: Location of the points-to constraint + * -[2]: Data of the points-to constraint + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + SEP_PTO, + /** + * Separation logic star. + * Parameters: n >= 2 + * -[1]..[n]: Child constraints that hold in disjoint (separated) heaps + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + SEP_STAR, + /** + * Separation logic magic wand. + * Parameters: 2 + * -[1]: Antecendant of the magic wand constraint + * -[2]: Conclusion of the magic wand constraint, which is asserted to + * hold in all heaps that are disjoint extensions of the antecedent. + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + SEP_WAND, +#if 0 + /* separation label (internal use only) */ + SEP_LABEL, +#endif + + /* Sets ------------------------------------------------------------------ */ + + /** + * Empty set constant. + * Parameters: 1 + * -[1]: Sort of the set elements + * Create with: + * mkEmptySet(Sort sort) + * mkConst(Sort sort) + */ + EMPTYSET, + /** + * Set union. + * Parameters: 2 + * -[1]..[2]: Terms of set sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + UNION, + /** + * Set intersection. + * Parameters: 2 + * -[1]..[2]: Terms of set sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + INTERSECTION, + /** + * Set subtraction. + * Parameters: 2 + * -[1]..[2]: Terms of set sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + SETMINUS, + /** + * Subset predicate. + * Parameters: 2 + * -[1]..[2]: Terms of set sort, [1] a subset of set [2]? + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + SUBSET, + /** + * Set membership predicate. + * Parameters: 2 + * -[1]..[2]: Terms of set sort, [1] a member of set [2]? + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + MEMBER, + /** + * The set of the single element given as a parameter. + * Parameters: 1 + * -[1]: Single element + * Create with: + * mkTerm(Kind kind, Term child) + */ + SINGLETON, + /** + * The set obtained by inserting elements; + * Parameters: n > 0 + * -[1]..[n-1]: Elements inserted into set [n] + * -[n]: Set Term + * Create with: + * mkTerm(Kind kind, Term child) + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + INSERT, + /** + * Set cardinality. + * Parameters: 1 + * -[1]: Set to determine the cardinality of + * Create with: + * mkTerm(Kind kind, Term child) + */ + CARD, + /** + * Set complement with respect to finite universe. + * Parameters: 1 + * -[1]: Set to complement + * Create with: + * mkTerm(Kind kind, Term child) + */ + COMPLEMENT, + /** + * Finite universe set. + * All set variables must be interpreted as subsets of it. + * Create with: + * mkUniverseSet(Sort sort) + * mkTerm(Kind kind, Sort sort) + */ + UNIVERSE_SET, + /** + * Set join. + * Parameters: 2 + * -[1]..[2]: Terms of set sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + JOIN, + /** + * Set cartesian product. + * Parameters: 2 + * -[1]..[2]: Terms of set sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + PRODUCT, + /** + * Set transpose. + * Parameters: 1 + * -[1]: Term of set sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + TRANSPOSE, + /** + * Set transitive closure. + * Parameters: 1 + * -[1]: Term of set sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + TCLOSURE, + /** + * Set join image. + * Parameters: 2 + * -[1]..[2]: Terms of set sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + JOIN_IMAGE, + /** + * Set identity. + * Parameters: 1 + * -[1]: Term of set sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + IDEN, + + /* Strings --------------------------------------------------------------- */ + + /** + * String concat. + * Parameters: n > 1 + * -[1]..[n]: Terms of String sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_CONCAT, + /** + * String membership. + * Parameters: 2 + * -[1]..[2]: Terms of String sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_IN_REGEXP, + /** + * String length. + * Parameters: 1 + * -[1]: Term of String sort + * Create with: + * mkTerm(Kind kind, Term child) + */ + STRING_LENGTH, + /** + * 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. + * Parameters: 3 + * -[1]: Term of sort String + * -[2]: Term of sort Integer (index i) + * -[3]: Term of sort Integer (length l) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_SUBSTR, + /** + * 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. + * Parameters: 2 + * -[1]: Term of sort String (string s) + * -[2]: Term of sort Integer (index i) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_CHARAT, + /** + * String contains. + * Checks whether a string s1 contains another string s2. If s2 is empty, the + * result is always true. + * Parameters: 2 + * -[1]: Term of sort String (the string s1) + * -[2]: Term of sort String (the string s2) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_STRCTN, + /** + * String index-of. + * Returns the index of a substring s2 in a string s1 starting at index i. If + * the index is negative or greater than the length of string s1 or the + * substring s2 does not appear in string s1 after index i, the result is -1. + * Parameters: 3 + * -[1]: Term of sort String (substring s1) + * -[2]: Term of sort String (substring s2) + * -[3]: Term of sort Integer (index i) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_STRIDOF, + /** + * String replace. + * Replaces a string s2 in a string s1 with string s3. If s2 does not appear + * in s1, s1 is returned unmodified. + * Parameters: 3 + * -[1]: Term of sort String (string s1) + * -[2]: Term of sort String (string s2) + * -[3]: Term of sort String (string s3) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_STRREPL, + /** + * String prefix-of. + * Checks whether a string s1 is a prefix of string s2. If string s1 is + * empty, this operator returns true. + * Parameters: 2 + * -[1]: Term of sort String (string s1) + * -[2]: Term of sort String (string s2) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_PREFIX, + /** + * String suffix-of. + * Checks whether a string s1 is a suffix of string 2. If string s1 is empty, + * this operator returns true. + * Parameters: 2 + * -[1]: Term of sort String (string s1) + * -[2]: Term of sort String (string s2) + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + STRING_SUFFIX, + /** + * Integer to string. + * If the integer is negative this operator returns the empty string. + * Parameters: 1 + * -[1]: Term of sort Integer + * Create with: + * mkTerm(Kind kind, Term child) + */ + STRING_ITOS, + /** + * String to integer (total function). + * If the string does not contain an integer or the integer is negative, the + * operator returns -1. + * Parameters: 1 + * -[1]: Term of sort String + * Create with: + * mkTerm(Kind kind, Term child) + */ + STRING_STOI, + /** + * Constant string. + * Parameters: + * See mkString() + * Create with: + * mkString(const char* s) + * mkString(const std::string& s) + * mkString(const unsigned char c) + * mkString(const std::vector<unsigned>& s) + * mkConst(Kind kind, const char* s) + * mkConst(Kind kind, const std::string& s) + */ + CONST_STRING, + /** + * Conversion from string to regexp. + * Parameters: 1 + * -[1]: Term of sort String + * Create with: + * mkTerm(Kind kind, Term child) + */ + STRING_TO_REGEXP, + /** + * Regexp Concatenation . + * Parameters: 2 + * -[1]..[2]: Terms of Regexp sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + REGEXP_CONCAT, + /** + * Regexp union. + * Parameters: 2 + * -[1]..[2]: Terms of Regexp sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + REGEXP_UNION, + /** + * Regexp intersection. + * Parameters: 2 + * -[1]..[2]: Terms of Regexp sort + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + REGEXP_INTER, + /** + * Regexp *. + * Parameters: 1 + * -[1]: Term of sort Regexp + * Create with: + * mkTerm(Kind kind, Term child) + */ + REGEXP_STAR, + /** + * Regexp +. + * Parameters: 1 + * -[1]: Term of sort Regexp + * Create with: + * mkTerm(Kind kind, Term child) + */ + REGEXP_PLUS, + /** + * Regexp ?. + * Parameters: 1 + * -[1]: Term of sort Regexp + * Create with: + * mkTerm(Kind kind, Term child) + */ + REGEXP_OPT, + /** + * Regexp range. + * Parameters: 2 + * -[1]: Lower bound character for the range + * -[2]: Upper bound character for the range + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + REGEXP_RANGE, + /** + * Regexp loop. + * Parameters: 2 (3) + * -[1]: Term of sort RegExp + * -[2]: Lower bound for the number of repetitions of the first argument + * -[3]: Upper bound for the number of repetitions of the first argument + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + REGEXP_LOOP, + /** + * Regexp empty. + * Parameters: 0 + * Create with: + * mkRegexpEmpty() + * mkTerm(Kind kind) + */ + REGEXP_EMPTY, + /** + * Regexp all characters. + * Parameters: 0 + * Create with: + * mkRegexpSigma() + * mkTerm(Kind kind) + */ + REGEXP_SIGMA, +#if 0 + /* regexp rv (internal use only) */ + REGEXP_RV, +#endif + + /* Quantifiers ----------------------------------------------------------- */ + + /** + * Universally quantified formula. + * Parameters: 2 (3) + * -[1]: BOUND_VAR_LIST Term + * -[2]: Quantifier body + * -[3]: (optional) INST_PATTERN_LIST Term + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + FORALL, + /** + * Existentially quantified formula. + * Parameters: 2 (3) + * -[1]: BOUND_VAR_LIST Term + * -[2]: Quantifier body + * -[3]: (optional) INST_PATTERN_LIST Term + * Create with: + * mkTerm(Kind kind, Term child1, Term child2) + * mkTerm(Kind kind, Term child1, Term child2, Term child3) + * mkTerm(Kind kind, const std::vector<Term>& children) + */ + EXISTS, +#if 0 + /* instantiation constant */ + INST_CONSTANT, + /* instantiation pattern */ + INST_PATTERN, + /* a list of bound variables (used to bind variables under a quantifier) */ + BOUND_VAR_LIST, + /* instantiation no-pattern */ + INST_NO_PATTERN, + /* instantiation attribute */ + INST_ATTRIBUTE, + /* a list of instantiation patterns */ + INST_PATTERN_LIST, + /* predicate for specifying term in instantiation closure. */ + INST_CLOSURE, + /* general rewrite rule (for rewrite-rules theory) */ + REWRITE_RULE, + /* actual rewrite rule (for rewrite-rules theory) */ + RR_REWRITE, + /* actual reduction rule (for rewrite-rules theory) */ + RR_REDUCTION, + /* actual deduction rule (for rewrite-rules theory) */ + RR_DEDUCTION, + + /* Sort Kinds ------------------------------------------------------------ */ + + /* array type */ + ARRAY_TYPE, + /* a type parameter for type ascription */ + ASCRIPTION_TYPE, + /* constructor */ + CONSTRUCTOR_TYPE, + /* a datatype type index */ + DATATYPE_TYPE, + /* selector */ + SELECTOR_TYPE, + /* set type, takes as parameter the type of the elements */ + SET_TYPE, + /* sort tag */ + SORT_TAG, + /* specifies types of user-declared 'uninterpreted' sorts */ + SORT_TYPE, + /* tester */ + TESTER_TYPE, + /* a representation for basic types */ + TYPE_CONSTANT, + /* a function type */ + FUNCTION_TYPE, + /* the type of a symbolic expression */ + SEXPR_TYPE, + /* bit-vector type */ + BITVECTOR_TYPE, + /* floating-point type */ + FLOATINGPOINT_TYPE, +#endif + + /* ----------------------------------------------------------------------- */ + /* marks the upper-bound of this enumeration */ + LAST_KIND +}; + +/** + * Serialize a kind to given stream. + * @param out the output stream + * @param k the kind to be serialized to the given output stream + * @return the output stream + */ +std::ostream& operator<<(std::ostream& out, Kind k) CVC4_PUBLIC; + +/** + * Hash function for Kinds. + */ +struct CVC4_PUBLIC KindHashFunction +{ + size_t operator()(Kind k) const; +}; + +} // namespace api +} // namespace CVC4 + +#endif |