1 /********************* */
4 ** Top contributors (to current version):
5 ** Aina Niemetz, Andrew Reynolds, Makai Mann
6 ** This file is part of the CVC4 project.
7 ** Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
8 ** in the top-level source directory and their institutional affiliations.
9 ** All rights reserved. See the file COPYING in the top-level source
10 ** directory for licensing information.\endverbatim
12 ** \brief The term kinds of the CVC4 C++ API.
14 ** The term kinds of the CVC4 C++ API.
17 #include "cvc4_export.h"
19 #ifndef CVC5__API__CVC5_KIND_H
20 #define CVC5__API__CVC5_KIND_H
27 /* -------------------------------------------------------------------------- */
29 /* -------------------------------------------------------------------------- */
32 * The kind of a CVC4 term.
34 * Note that the underlying type of Kind must be signed (to enable range
35 * checks for validity). The size of this type depends on the size of
36 * cvc5::Kind (NodeValue::NBITS_KIND, currently 10 bits, see expr/node_value.h).
38 enum CVC4_EXPORT Kind
: int32_t
42 * Should never be exposed or created via the API.
47 * Should never be exposed or created via the API.
51 * Null kind (kind of null term Term()).
52 * Do not explicitly create via API functions other than Term().
56 /* Builtin --------------------------------------------------------------- */
59 * Uninterpreted constant.
61 * -[1]: Sort of the constant
62 * -[2]: Index of the constant
64 * mkUninterpretedConst(Sort sort, int32_t index)
66 UNINTERPRETED_CONSTANT
,
68 * Abstract value (other than uninterpreted sort constants).
70 * -[1]: Index of the abstract value
72 * mkAbstractValue(const std::string& index);
73 * mkAbstractValue(uint64_t index);
77 /* Built-in operator */
81 * Equality, chainable.
83 * -[1]..[n]: Terms with same sorts
85 * mkTerm(Kind kind, Term child1, Term child2)
86 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
87 * mkTerm(Kind kind, const std::vector<Term>& children)
93 * -[1]..[n]: Terms with same sorts
95 * mkTerm(Kind kind, Term child1, Term child2)
96 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
97 * mkTerm(Kind kind, const std::vector<Term>& children)
101 * First-order constant.
102 * Not permitted in bindings (forall, exists, ...).
106 * mkConst(const std::string& symbol, Sort sort)
112 * Permitted in bindings and in the lambda and quantifier bodies only.
116 * mkVar(const std::string& symbol, Sort sort)
121 /* Skolem variable (internal only) */
125 * Symbolic expression.
129 * mkTerm(Kind kind, Term child)
130 * mkTerm(Kind kind, Term child1, Term child2)
131 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
132 * mkTerm(Kind kind, const std::vector<Term>& children)
138 * -[1]: BOUND_VAR_LIST
141 * mkTerm(Kind kind, Term child1, Term child2)
142 * mkTerm(Kind kind, const std::vector<Term>& children)
146 * The syntax of a witness term is similar to a quantified formula except that
147 * only one bound variable is allowed.
148 * The term (witness ((x T)) F) returns an element x of type T
151 * The witness operator behaves like the description operator
152 * (see https://planetmath.org/hilbertsvarepsilonoperator) if there is no x
153 * that satisfies F. But if such x exists, the witness operator does not
154 * enforce the axiom that ensures uniqueness up to logical equivalence:
155 * forall x. F \equiv G => witness x. F = witness x. G
157 * For example if there are 2 elements of type T that satisfy F, then the
158 * following formula is satisfiable:
160 * (witness ((x Int)) F)
161 * (witness ((x Int)) F))
163 * This kind is primarily used internally, but may be returned in models
164 * (e.g. for arithmetic terms in non-linear queries). However, it is not
165 * supported by the parser. Moreover, the user of the API should be cautious
166 * when using this operator. In general, all witness terms
167 * (witness ((x Int)) F) should be such that (exists ((x Int)) F) is a valid
168 * formula. If this is not the case, then the semantics in formulas that use
169 * witness terms may be unintuitive. For example, the following formula is
171 * (or (= (witness ((x Int)) false) 0) (not (= (witness ((x Int)) false) 0))
172 * whereas notice that (or (= z 0) (not (= z 0))) is true for any z.
175 * -[1]: BOUND_VAR_LIST
178 * mkTerm(Kind kind, Term child1, Term child2)
179 * mkTerm(Kind kind, const std::vector<Term>& children)
183 /* Boolean --------------------------------------------------------------- */
188 * -[1]: Boolean value of the constant
192 * mkBoolean(bool val)
197 * -[1]: Boolean Term to negate
199 * mkTerm(Kind kind, Term child)
204 * -[1]..[n]: Boolean Term of the conjunction
206 * mkTerm(Kind kind, Term child1, Term child2)
207 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
208 * mkTerm(Kind kind, const std::vector<Term>& children)
212 * Logical implication.
214 * -[1]..[n]: Boolean Terms, right associative
216 * mkTerm(Kind kind, Term child1, Term child2)
217 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
218 * mkTerm(Kind kind, const std::vector<Term>& children)
223 * -[1]..[n]: Boolean Term of the disjunction
225 * mkTerm(Kind kind, Term child1, Term child2)
226 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
227 * mkTerm(Kind kind, const std::vector<Term>& children)
230 /* Logical exclusive or, left associative.
232 * -[1]..[n]: Boolean Terms, [1] xor ... xor [n]
234 * mkTerm(Kind kind, Term child1, Term child2)
235 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
236 * mkTerm(Kind kind, const std::vector<Term>& children)
241 * -[1] is a Boolean condition Term
242 * -[2] the 'then' Term
243 * -[3] the 'else' Term
244 * 'then' and 'else' term must have same base sort.
246 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
247 * mkTerm(Kind kind, const std::vector<Term>& children)
251 /* UF -------------------------------------------------------------------- */
253 /* Application of an uninterpreted function.
255 * -[1]: Function Term
256 * -[2]..[n]: Function argument instantiation Terms
258 * mkTerm(Kind kind, Term child1, Term child2)
259 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
260 * mkTerm(Kind kind, const std::vector<Term>& children)
264 /* Boolean term variable */
265 BOOLEAN_TERM_VARIABLE
,
268 * Cardinality constraint on uninterpreted sort S.
269 * Interpreted as a predicate that is true when the cardinality of S
270 * is less than or equal to the value of the second argument.
272 * -[1]: Term of sort S
273 * -[2]: Positive integer constant that bounds the cardinality of sort S
275 * mkTerm(Kind kind, Term child1, Term child2)
276 * mkTerm(Kind kind, const std::vector<Term>& children)
278 CARDINALITY_CONSTRAINT
,
280 * Cardinality value for uninterpreted sort S.
281 * An operator that returns an integer indicating the value of the cardinality
284 * -[1]: Term of sort S
286 * mkTerm(Kind kind, Term child1)
287 * mkTerm(Kind kind, const std::vector<Term>& children)
291 /* Combined cardinality constraint. */
292 COMBINED_CARDINALITY_CONSTRAINT
,
293 /* Partial uninterpreted function application. */
297 * Higher-order applicative encoding of function application, left
300 * -[1]: Function to apply
301 * -[2] ... [n]: Arguments of the function
303 * mkTerm(Kind kind, Term child1, Term child2)
304 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
305 * mkTerm(Kind kind, const std::vector<Term>& children)
309 /* Arithmetic ------------------------------------------------------------ */
312 * Arithmetic addition.
314 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
316 * mkTerm(Kind kind, Term child1, Term child2)
317 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
318 * mkTerm(Kind kind, const std::vector<Term>& children)
322 * Arithmetic multiplication.
324 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
326 * mkTerm(Kind kind, Term child1, Term child2)
327 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
328 * mkTerm(Kind kind, const std::vector<Term>& children)
332 * Operator for Integer AND
334 * -[1]: Size of the bit-vector that determines the semantics of the IAND
336 * mkOp(Kind kind, uint32_t param).
338 * Apply integer conversion to bit-vector.
340 * -[1]: Op of kind IAND
344 * mkTerm(Op op, Term child1, Term child2)
345 * mkTerm(Op op, const std::vector<Term>& children)
349 /* Synonym for MULT. */
353 * Arithmetic subtraction, left associative.
355 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
357 * mkTerm(Kind kind, Term child1, Term child2)
358 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
359 * mkTerm(Kind kind, const std::vector<Term>& children)
363 * Arithmetic negation.
365 * -[1]: Term of sort Integer, Real
367 * mkTerm(Kind kind, Term child)
371 * Real division, division by 0 undefined, left associative.
373 * -[1]..[n]: Terms of sort Integer, Real
375 * mkTerm(Kind kind, Term child1, Term child2)
376 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
377 * mkTerm(Kind kind, const std::vector<Term>& children)
381 * Integer division, division by 0 undefined, left associative.
383 * -[1]..[n]: Terms of sort Integer
385 * mkTerm(Kind kind, Term child1, Term child2)
386 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
387 * mkTerm(Kind kind, const std::vector<Term>& children)
391 * Integer modulus, division by 0 undefined.
393 * -[1]..[2]: Terms of sort Integer
395 * mkTerm(Kind kind, Term child1, Term child2)
396 * mkTerm(Kind kind, const std::vector<Term>& children)
402 * -[1]: Term of sort Integer
404 * mkTerm(Kind kind, Term child)
410 * -[1]..[2]: Terms of sort Integer, Real
412 * mkTerm(Kind kind, Term child1, Term child2)
413 * mkTerm(Kind kind, const std::vector<Term>& children)
419 * -[1]: Term of sort Integer, Real
421 * mkTerm(Kind kind, Term child)
427 * -[1]: Term of sort Integer, Real
429 * mkTerm(Kind kind, Term child)
435 * -[1]: Term of sort Integer, Real
437 * mkTerm(Kind kind, Term child)
443 * -[1]: Term of sort Integer, Real
445 * mkTerm(Kind kind, Term child)
451 * -[1]: Term of sort Integer, Real
453 * mkTerm(Kind kind, Term child)
459 * -[1]: Term of sort Integer, Real
461 * mkTerm(Kind kind, Term child)
467 * -[1]: Term of sort Integer, Real
469 * mkTerm(Kind kind, Term child)
475 * -[1]: Term of sort Integer, Real
477 * mkTerm(Kind kind, Term child)
483 * -[1]: Term of sort Integer, Real
485 * mkTerm(Kind kind, Term child)
491 * -[1]: Term of sort Integer, Real
493 * mkTerm(Kind kind, Term child)
499 * -[1]: Term of sort Integer, Real
501 * mkTerm(Kind kind, Term child)
507 * -[1]: Term of sort Integer, Real
509 * mkTerm(Kind kind, Term child)
515 * -[1]: Term of sort Integer, Real
517 * mkTerm(Kind kind, Term child)
523 * -[1]: Term of sort Integer, Real
525 * mkTerm(Kind kind, Term child)
529 * Operator for the divisibility-by-k predicate.
531 * -[1]: The k to divide by (sort Integer)
533 * mkOp(Kind kind, uint32_t param)
535 * Apply divisibility-by-k predicate.
537 * -[1]: Op of kind DIVISIBLE
540 * mkTerm(Op op, Term child1, Term child2)
541 * mkTerm(Op op, const std::vector<Term>& children)
545 * Multiple-precision rational constant.
547 * See mkInteger(), mkReal(), mkRational()
549 * mkInteger(const char* s, uint32_t base = 10)
550 * mkInteger(const std::string& s, uint32_t base = 10)
551 * mkInteger(int32_t val)
552 * mkInteger(uint32_t val)
553 * mkInteger(int64_t val)
554 * mkInteger(uint64_t val)
555 * mkReal(const char* s, uint32_t base = 10)
556 * mkReal(const std::string& s, uint32_t base = 10)
557 * mkReal(int32_t val)
558 * mkReal(int64_t val)
559 * mkReal(uint32_t val)
560 * mkReal(uint64_t val)
561 * mkReal(int32_t num, int32_t den)
562 * mkReal(int64_t num, int64_t den)
563 * mkReal(uint32_t num, uint32_t den)
564 * mkReal(uint64_t num, uint64_t den)
568 * Less than, chainable.
570 * -[1]..[n]: Terms of sort Integer, Real; [1] < ... < [n]
572 * mkTerm(Kind kind, Term child1, Term child2)
573 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
574 * mkTerm(Kind kind, const std::vector<Term>& children)
578 * Less than or equal, chainable.
580 * -[1]..[n]: Terms of sort Integer, Real; [1] <= ... <= [n]
582 * mkTerm(Kind kind, Term child1, Term child2)
583 * mkTerm(Kind kind, const std::vector<Term>& children)
587 * Greater than, chainable.
589 * -[1]..[n]: Terms of sort Integer, Real, [1] > ... > [n]
591 * mkTerm(Kind kind, Term child1, Term child2)
592 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
593 * mkTerm(Kind kind, const std::vector<Term>& children)
597 * Greater than or equal, chainable.
599 * -[1]..[n]: Terms of sort Integer, Real; [1] >= ... >= [n]
601 * mkTerm(Kind kind, Term child1, Term child2)
602 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
603 * mkTerm(Kind kind, const std::vector<Term>& children)
607 * Is-integer predicate.
609 * -[1]: Term of sort Integer, Real
611 * mkTerm(Kind kind, Term child)
615 * Convert Term to Integer by the floor function.
617 * -[1]: Term of sort Integer, Real
619 * mkTerm(Kind kind, Term child)
623 * Convert Term to Real.
625 * -[1]: Term of sort Integer, Real
626 * This is a no-op in CVC4, as Integer is a subtype of Real.
637 /* BV -------------------------------------------------------------------- */
640 * Fixed-size bit-vector constant.
644 * mkBitVector(uint32_t size, uint64_t val)
645 * mkBitVector(const char* s, uint32_t base = 2)
646 * mkBitVector(std::string& s, uint32_t base = 2)
650 * Concatenation of two or more bit-vectors.
652 * -[1]..[n]: Terms of bit-vector sort
654 * mkTerm(Kind kind, Term child1, Term child2)
655 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
656 * mkTerm(Kind kind, const std::vector<Term>& children)
662 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
664 * mkTerm(Kind kind, Term child1, Term child2)
665 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
666 * mkTerm(Kind kind, const std::vector<Term>& children)
672 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
674 * mkTerm(Kind kind, Term child1, Term child2)
675 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
676 * mkTerm(Kind kind, const std::vector<Term>& children)
682 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
684 * mkTerm(Kind kind, Term child1, Term child2)
685 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
686 * mkTerm(Kind kind, const std::vector<Term>& children)
692 * -[1]: Term of bit-vector sort
694 * mkTerm(Kind kind, Term child)
700 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
702 * mkTerm(Kind kind, Term child1, Term child2)
703 * mkTerm(Kind kind, const std::vector<Term>& children)
709 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
711 * mkTerm(Kind kind, Term child1, Term child2)
712 * mkTerm(Kind kind, const std::vector<Term>& children)
716 * Bit-wise xnor, left associative.
718 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
720 * mkTerm(Kind kind, Term child1, Term child2)
721 * mkTerm(Kind kind, const std::vector<Term>& children)
725 * Equality comparison (returns bit-vector of size 1).
727 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
729 * mkTerm(Kind kind, Term child1, Term child2)
730 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
731 * mkTerm(Kind kind, const std::vector<Term>& children)
735 * Multiplication of two or more bit-vectors.
737 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
739 * mkTerm(Kind kind, Term child1, Term child2)
740 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
741 * mkTerm(Kind kind, const std::vector<Term>& children)
745 * Addition of two or more bit-vectors.
747 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
749 * mkTerm(Kind kind, Term child1, Term child2)
750 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
751 * mkTerm(Kind kind, const std::vector<Term>& children)
755 * Subtraction of two bit-vectors.
757 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
759 * mkTerm(Kind kind, Term child1, Term child2)
760 * mkTerm(Kind kind, const std::vector<Term>& children)
764 * Negation of a bit-vector (two's complement).
766 * -[1]: Term of bit-vector sort
768 * mkTerm(Kind kind, Term child)
772 * Unsigned division of two bit-vectors, truncating towards 0.
774 * Note: The semantics of this operator depends on `bv-div-zero-const`
775 * (default is true). Depending on the setting, a division by zero is
776 * treated as all ones (default, corresponds to SMT-LIB >=2.6) or an
777 * uninterpreted value (corresponds to SMT-LIB <2.6).
780 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
782 * mkTerm(Kind kind, Term child1, Term child2)
783 * mkTerm(Kind kind, const std::vector<Term>& children)
787 * Unsigned remainder from truncating division of two bit-vectors.
789 * Note: The semantics of this operator depends on `bv-div-zero-const`
790 * (default is true). Depending on the setting, if the modulus is zero, the
791 * result is either the dividend (default, corresponds to SMT-LIB >=2.6) or
792 * an uninterpreted value (corresponds to SMT-LIB <2.6).
795 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
797 * mkTerm(Kind kind, Term child1, Term child2)
798 * mkTerm(Kind kind, const std::vector<Term>& children)
802 * Two's complement signed division of two bit-vectors.
804 * Note: The semantics of this operator depends on `bv-div-zero-const`
805 * (default is true). By default, the function returns all ones if the
806 * dividend is positive and one if the dividend is negative (corresponds to
807 * SMT-LIB >=2.6). If the option is disabled, a division by zero is treated
808 * as an uninterpreted value (corresponds to SMT-LIB <2.6).
811 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
813 * mkTerm(Kind kind, Term child1, Term child2)
814 * mkTerm(Kind kind, const std::vector<Term>& children)
818 * Two's complement signed remainder of two bit-vectors
819 * (sign follows dividend).
821 * Note: The semantics of this operator depends on `bv-div-zero-const`
822 * (default is true, corresponds to SMT-LIB >=2.6). Depending on the setting,
823 * if the modulus is zero, the result is either the dividend (default) or an
824 * uninterpreted value (corresponds to SMT-LIB <2.6).
827 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
829 * mkTerm(Kind kind, Term child1, Term child2)
830 * mkTerm(Kind kind, const std::vector<Term>& children)
834 * Two's complement signed remainder
835 * (sign follows divisor).
837 * Note: The semantics of this operator depends on `bv-div-zero-const`
838 * (default is on). Depending on the setting, if the modulus is zero, the
839 * result is either the dividend (default, corresponds to SMT-LIB >=2.6) or
840 * an uninterpreted value (corresponds to SMT-LIB <2.6).
843 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
845 * mkTerm(Kind kind, Term child1, Term child2)
846 * mkTerm(Kind kind, const std::vector<Term>& children)
850 * Bit-vector shift left.
851 * The two bit-vector parameters must have same width.
853 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
855 * mkTerm(Kind kind, Term child1, Term child2)
856 * mkTerm(Kind kind, const std::vector<Term>& children)
860 * Bit-vector logical shift right.
861 * The two bit-vector parameters must have same width.
863 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
865 * mkTerm(Kind kind, Term child1, Term child2)
866 * mkTerm(Kind kind, const std::vector<Term>& children)
870 * Bit-vector arithmetic shift right.
871 * The two bit-vector parameters must have same width.
873 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
875 * mkTerm(Kind kind, Term child1, Term child2)
876 * mkTerm(Kind kind, const std::vector<Term>& children)
880 * Bit-vector unsigned less than.
881 * The two bit-vector parameters must have same width.
883 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
885 * mkTerm(Kind kind, Term child1, Term child2)
886 * mkTerm(Kind kind, const std::vector<Term>& children)
890 * Bit-vector unsigned less than or equal.
891 * The two bit-vector parameters must have same width.
893 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
895 * mkTerm(Kind kind, Term child1, Term child2)
896 * mkTerm(Kind kind, const std::vector<Term>& children)
900 * Bit-vector unsigned greater than.
901 * The two bit-vector parameters must have same width.
903 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
905 * mkTerm(Kind kind, Term child1, Term child2)
906 * mkTerm(Kind kind, const std::vector<Term>& children)
910 * Bit-vector unsigned greater than or equal.
911 * The two bit-vector parameters must have same width.
914 * mkTerm(Kind kind, Term child1, Term child2)
915 * mkTerm(Kind kind, const std::vector<Term>& children)
918 /* Bit-vector signed less than.
919 * The two bit-vector parameters must have same width.
922 * mkTerm(Kind kind, Term child1, Term child2)
923 * mkTerm(Kind kind, const std::vector<Term>& children)
927 * Bit-vector signed less than or equal.
928 * The two bit-vector parameters must have same width.
930 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
932 * mkTerm(Kind kind, Term child1, Term child2)
933 * mkTerm(Kind kind, const std::vector<Term>& children)
937 * Bit-vector signed greater than.
938 * The two bit-vector parameters must have same width.
940 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
942 * mkTerm(Kind kind, Term child1, Term child2)
943 * mkTerm(Kind kind, const std::vector<Term>& children)
947 * Bit-vector signed greater than or equal.
948 * The two bit-vector parameters must have same width.
950 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
952 * mkTerm(Kind kind, Term child1, Term child2)
953 * mkTerm(Kind kind, const std::vector<Term>& children)
957 * Bit-vector unsigned less than, returns bit-vector of size 1.
959 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
961 * mkTerm(Kind kind, Term child1, Term child2)
962 * mkTerm(Kind kind, const std::vector<Term>& children)
966 * Bit-vector signed less than. returns bit-vector of size 1.
968 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
970 * mkTerm(Kind kind, Term child1, Term child2)
971 * mkTerm(Kind kind, const std::vector<Term>& children)
975 * Same semantics as regular ITE, but condition is bit-vector of size 1.
977 * -[1]: Term of bit-vector sort of size 1, representing the condition
978 * -[2]: Term reprsenting the 'then' branch
979 * -[3]: Term representing the 'else' branch
980 * 'then' and 'else' term must have same base sort.
982 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
983 * mkTerm(Kind kind, const std::vector<Term>& children)
989 * -[1]: Term of bit-vector sort
991 * mkTerm(Kind kind, Term child)
997 * -[1]: Term of bit-vector sort
999 * mkTerm(Kind kind, Term child)
1003 /* formula to be treated as a bv atom via eager bit-blasting
1004 * (internal-only symbol) */
1005 BITVECTOR_EAGER_ATOM
,
1006 /* term to be treated as a variable. used for eager bit-blasting Ackermann
1007 * expansion of bvudiv (internal-only symbol) */
1008 BITVECTOR_ACKERMANIZE_UDIV
,
1009 /* term to be treated as a variable. used for eager bit-blasting Ackermann
1010 * expansion of bvurem (internal-only symbol) */
1011 BITVECTOR_ACKERMANIZE_UREM
,
1014 * Operator for bit-vector extract (from index 'high' to 'low').
1016 * -[1]: The 'high' index
1017 * -[2]: The 'low' index
1019 * mkOp(Kind kind, uint32_t param, uint32_t param)
1021 * Apply bit-vector extract.
1023 * -[1]: Op of kind BITVECTOR_EXTRACT
1024 * -[2]: Term of bit-vector sort
1026 * mkTerm(Op op, Term child)
1027 * mkTerm(Op op, const std::vector<Term>& children)
1031 * Operator for bit-vector repeat.
1033 * -[1]: Number of times to repeat a given bit-vector
1035 * mkOp(Kind kind, uint32_t param).
1037 * Apply bit-vector repeat.
1039 * -[1]: Op of kind BITVECTOR_REPEAT
1040 * -[2]: Term of bit-vector sort
1042 * mkTerm(Op op, Term child)
1043 * mkTerm(Op op, const std::vector<Term>& children)
1047 * Operator for bit-vector zero-extend.
1049 * -[1]: Number of bits by which a given bit-vector is to be extended
1051 * mkOp(Kind kind, uint32_t param).
1053 * Apply bit-vector zero-extend.
1055 * -[1]: Op of kind BITVECTOR_ZERO_EXTEND
1056 * -[2]: Term of bit-vector sort
1058 * mkTerm(Op op, Term child)
1059 * mkTerm(Op op, const std::vector<Term>& children)
1061 BITVECTOR_ZERO_EXTEND
,
1063 * Operator for bit-vector sign-extend.
1065 * -[1]: Number of bits by which a given bit-vector is to be extended
1067 * mkOp(Kind kind, uint32_t param).
1069 * Apply bit-vector sign-extend.
1071 * -[1]: Op of kind BITVECTOR_SIGN_EXTEND
1072 * -[2]: Term of bit-vector sort
1074 * mkTerm(Op op, Term child)
1075 * mkTerm(Op op, const std::vector<Term>& children)
1077 BITVECTOR_SIGN_EXTEND
,
1079 * Operator for bit-vector rotate left.
1081 * -[1]: Number of bits by which a given bit-vector is to be rotated
1083 * mkOp(Kind kind, uint32_t param).
1085 * Apply bit-vector rotate left.
1087 * -[1]: Op of kind BITVECTOR_ROTATE_LEFT
1088 * -[2]: Term of bit-vector sort
1090 * mkTerm(Op op, Term child)
1091 * mkTerm(Op op, const std::vector<Term>& children)
1093 BITVECTOR_ROTATE_LEFT
,
1095 * Operator for bit-vector rotate right.
1097 * -[1]: Number of bits by which a given bit-vector is to be rotated
1099 * mkOp(Kind kind, uint32_t param).
1101 * Apply bit-vector rotate right.
1103 * -[1]: Op of kind BITVECTOR_ROTATE_RIGHT
1104 * -[2]: Term of bit-vector sort
1106 * mkTerm(Op op, Term child)
1107 * mkTerm(Op op, const std::vector<Term>& children)
1109 BITVECTOR_ROTATE_RIGHT
,
1111 /* bit-vector boolean bit extract. */
1115 * Operator for the conversion from Integer to bit-vector.
1117 * -[1]: Size of the bit-vector to convert to
1119 * mkOp(Kind kind, uint32_t param).
1121 * Apply integer conversion to bit-vector.
1123 * -[1]: Op of kind INT_TO_BITVECTOR
1124 * -[2]: Integer term
1126 * mkTerm(Op op, Term child)
1127 * mkTerm(Op op, const std::vector<Term>& children)
1131 * Bit-vector conversion to (nonnegative) integer.
1133 * -[1]: Term of bit-vector sort
1135 * mkTerm(Kind kind, Term child)
1139 /* FP -------------------------------------------------------------------- */
1142 * Floating-point constant, constructed from a double or string.
1144 * -[1]: Size of the exponent
1145 * -[2]: Size of the significand
1146 * -[3]: Value of the floating-point constant as a bit-vector term
1148 * mkFloatingPoint(uint32_t sig, uint32_t exp, Term val)
1150 CONST_FLOATINGPOINT
,
1152 * Floating-point rounding mode term.
1154 * mkRoundingMode(RoundingMode rm)
1158 * Create floating-point literal from bit-vector triple.
1160 * -[1]: Sign bit as a bit-vector term
1161 * -[2]: Exponent bits as a bit-vector term
1162 * -[3]: Significand bits as a bit-vector term (without hidden bit)
1164 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1165 * mkTerm(Kind kind, const std::vector<Term>& children)
1169 * Floating-point equality.
1171 * -[1]..[2]: Terms of floating point sort
1173 * mkTerm(Kind kind, Term child1, Term child2)
1174 * mkTerm(Kind kind, const std::vector<Term>& children)
1178 * Floating-point absolute value.
1180 * -[1]: Term of floating point sort
1182 * mkTerm(Kind kind, Term child)
1186 * Floating-point negation.
1188 * -[1]: Term of floating point sort
1190 * mkTerm(Kind kind, Term child)
1194 * Floating-point addition.
1196 * -[1]: CONST_ROUNDINGMODE
1197 * -[2]: Term of sort FloatingPoint
1198 * -[3]: Term of sort FloatingPoint
1200 * mkTerm(Kind kind, Term child1, Term child2, child3)
1201 * mkTerm(Kind kind, const std::vector<Term>& children)
1205 * Floating-point sutraction.
1207 * -[1]: CONST_ROUNDINGMODE
1208 * -[2]: Term of sort FloatingPoint
1209 * -[3]: Term of sort FloatingPoint
1211 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1212 * mkTerm(Kind kind, const std::vector<Term>& children)
1216 * Floating-point multiply.
1218 * -[1]: CONST_ROUNDINGMODE
1219 * -[2]: Term of sort FloatingPoint
1220 * -[3]: Term of sort FloatingPoint
1222 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1223 * mkTerm(Kind kind, const std::vector<Term>& children)
1227 * Floating-point division.
1229 * -[1]: CONST_ROUNDINGMODE
1230 * -[2]: Term of sort FloatingPoint
1231 * -[3]: Term of sort FloatingPoint
1233 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1234 * mkTerm(Kind kind, const std::vector<Term>& children)
1238 * Floating-point fused multiply and add.
1240 * -[1]: CONST_ROUNDINGMODE
1241 * -[2]: Term of sort FloatingPoint
1242 * -[3]: Term of sort FloatingPoint
1243 * -[4]: Term of sort FloatingPoint
1245 * mkTerm(Kind kind, const std::vector<Term>& children)
1249 * Floating-point square root.
1251 * -[1]: CONST_ROUNDINGMODE
1252 * -[2]: Term of sort FloatingPoint
1254 * mkTerm(Kind kind, Term child1, Term child2)
1255 * mkTerm(Kind kind, const std::vector<Term>& children)
1259 * Floating-point remainder.
1261 * -[1]..[2]: Terms of floating point sort
1263 * mkTerm(Kind kind, Term child1, Term child2)
1264 * mkTerm(Kind kind, const std::vector<Term>& children)
1268 * Floating-point round to integral.
1270 * -[1]..[2]: Terms of floating point sort
1272 * mkTerm(Kind kind, Term child1, Term child2)
1273 * mkTerm(Kind kind, const std::vector<Term>& children)
1277 * Floating-point minimum.
1279 * -[1]..[2]: Terms of floating point sort
1281 * mkTerm(Kind kind, Term child1, Term child2)
1282 * mkTerm(Kind kind, const std::vector<Term>& children)
1286 * Floating-point maximum.
1288 * -[1]..[2]: Terms of floating point sort
1290 * mkTerm(Kind kind, Term child1, Term child2)
1291 * mkTerm(Kind kind, const std::vector<Term>& children)
1295 * Floating-point less than or equal.
1297 * -[1]..[2]: Terms of floating point sort
1299 * mkTerm(Kind kind, Term child1, Term child2)
1300 * mkTerm(Kind kind, const std::vector<Term>& children)
1304 * Floating-point less than.
1306 * -[1]..[2]: Terms of floating point sort
1308 * mkTerm(Kind kind, Term child1, Term child2)
1309 * mkTerm(Kind kind, const std::vector<Term>& children)
1313 * Floating-point greater than or equal.
1315 * -[1]..[2]: Terms of floating point sort
1317 * mkTerm(Kind kind, Term child1, Term child2)
1318 * mkTerm(Kind kind, const std::vector<Term>& children)
1322 * Floating-point greater than.
1325 * mkTerm(Kind kind, Term child1, Term child2)
1326 * mkTerm(Kind kind, const std::vector<Term>& children)
1330 * Floating-point is normal.
1332 * -[1]: Term of floating point sort
1334 * mkTerm(Kind kind, Term child)
1338 * Floating-point is sub-normal.
1340 * -[1]: Term of floating point sort
1342 * mkTerm(Kind kind, Term child)
1346 * Floating-point is zero.
1348 * -[1]: Term of floating point sort
1350 * mkTerm(Kind kind, Term child)
1354 * Floating-point is infinite.
1356 * -[1]: Term of floating point sort
1358 * mkTerm(Kind kind, Term child)
1360 FLOATINGPOINT_ISINF
,
1362 * Floating-point is NaN.
1364 * -[1]: Term of floating point sort
1366 * mkTerm(Kind kind, Term child)
1368 FLOATINGPOINT_ISNAN
,
1370 * Floating-point is negative.
1372 * -[1]: Term of floating point sort
1374 * mkTerm(Kind kind, Term child)
1376 FLOATINGPOINT_ISNEG
,
1378 * Floating-point is positive.
1380 * -[1]: Term of floating point sort
1382 * mkTerm(Kind kind, Term child)
1384 FLOATINGPOINT_ISPOS
,
1386 * Operator for to_fp from bit vector.
1388 * -[1]: Exponent size
1389 * -[2]: Significand size
1391 * mkOp(Kind kind, uint32_t param1, uint32_t param2)
1393 * Conversion from an IEEE-754 bit vector to floating-point.
1395 * -[1]: Op of kind FLOATINGPOINT_TO_FP_IEEE_BITVECTOR
1396 * -[2]: Term of sort FloatingPoint
1398 * mkTerm(Op op, Term child)
1399 * mkTerm(Op op, const std::vector<Term>& children)
1401 FLOATINGPOINT_TO_FP_IEEE_BITVECTOR
,
1403 * Operator for to_fp from floating point.
1405 * -[1]: Exponent size
1406 * -[2]: Significand size
1408 * mkOp(Kind kind, uint32_t param1, uint32_t param2)
1410 * Conversion between floating-point sorts.
1412 * -[1]: Op of kind FLOATINGPOINT_TO_FP_FLOATINGPOINT
1413 * -[2]: Term of sort FloatingPoint
1415 * mkTerm(Op op, Term child)
1416 * mkTerm(Op op, const std::vector<Term>& children)
1418 FLOATINGPOINT_TO_FP_FLOATINGPOINT
,
1420 * Operator for to_fp from real.
1422 * -[1]: Exponent size
1423 * -[2]: Significand size
1425 * mkOp(Kind kind, uint32_t param1, uint32_t param2)
1427 * Conversion from a real to floating-point.
1429 * -[1]: Op of kind FLOATINGPOINT_TO_FP_REAL
1430 * -[2]: Term of sort FloatingPoint
1432 * mkTerm(Op op, Term child)
1433 * mkTerm(Op op, const std::vector<Term>& children)
1435 FLOATINGPOINT_TO_FP_REAL
,
1437 * Operator for to_fp from signed bit vector.
1439 * -[1]: Exponent size
1440 * -[2]: Significand size
1442 * mkOp(Kind kind, uint32_t param1, uint32_t param2)
1444 * Conversion from a signed bit vector to floating-point.
1446 * -[1]: Op of kind FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR
1447 * -[2]: Term of sort FloatingPoint
1449 * mkTerm(Op op, Term child)
1450 * mkTerm(Op op, const std::vector<Term>& children)
1452 FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR
,
1454 * Operator for to_fp from unsigned bit vector.
1456 * -[1]: Exponent size
1457 * -[2]: Significand size
1459 * mkOp(Kind kind, uint32_t param1, uint32_t param2)
1461 * Converting an unsigned bit vector to floating-point.
1463 * -[1]: Op of kind FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR
1464 * -[2]: Term of sort FloatingPoint
1466 * mkTerm(Op op, Term child)
1467 * mkTerm(Op op, const std::vector<Term>& children)
1469 FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR
,
1471 * Operator for a generic to_fp.
1473 * -[1]: exponent size
1474 * -[2]: Significand size
1476 * mkOp(Kind kind, uint32_t param1, uint32_t param2)
1478 * Generic conversion to floating-point, used in parsing only.
1480 * -[1]: Op of kind FLOATINGPOINT_TO_FP_GENERIC
1481 * -[2]: Term of sort FloatingPoint
1483 * mkTerm(Op op, Term child)
1484 * mkTerm(Op op, const std::vector<Term>& children)
1486 FLOATINGPOINT_TO_FP_GENERIC
,
1488 * Operator for to_ubv.
1490 * -[1]: Size of the bit-vector to convert to
1492 * mkOp(Kind kind, uint32_t param)
1494 * Conversion from a floating-point value to an unsigned bit vector.
1496 * -[1]: Op of kind FLOATINGPOINT_TO_FP_TO_UBV
1497 * -[2]: Term of sort FloatingPoint
1499 * mkTerm(Op op, Term child)
1500 * mkTerm(Op op, const std::vector<Term>& children)
1502 FLOATINGPOINT_TO_UBV
,
1504 * Operator for to_sbv.
1506 * -[1]: Size of the bit-vector to convert to
1508 * mkOp(Kind kind, uint32_t param)
1510 * Conversion from a floating-point value to a signed bit vector.
1512 * -[1]: Op of kind FLOATINGPOINT_TO_FP_TO_SBV
1513 * -[2]: Term of sort FloatingPoint
1515 * mkTerm(Op op, Term child)
1516 * mkTerm(Op op, const std::vector<Term>& children)
1518 FLOATINGPOINT_TO_SBV
,
1520 * Floating-point to real.
1522 * -[1]: Term of sort FloatingPoint
1524 * mkTerm(Kind kind, Term child)
1526 FLOATINGPOINT_TO_REAL
,
1528 /* Arrays ---------------------------------------------------------------- */
1533 * -[1]: Term of array sort
1534 * -[2]: Selection index
1536 * mkTerm(Op op, Term child1, Term child2)
1537 * mkTerm(Op op, const std::vector<Term>& children)
1543 * -[1]: Term of array sort
1545 * -[3]: Term to store at the index
1547 * mkTerm(Op op, Term child1, Term child2, Term child3)
1548 * mkTerm(Op op, const std::vector<Term>& children)
1555 * -[2]: Term representing a constant
1557 * mkTerm(Op op, Term child1, Term child2)
1558 * mkTerm(Op op, const std::vector<Term>& children)
1560 * Note: We currently support the creation of constant arrays, but under some
1561 * conditions when there is a chain of equalities connecting two constant
1562 * arrays, the solver doesn't know what to do and aborts (Issue #1667).
1566 * Equality over arrays a and b over a given range [i,j], i.e.,
1567 * \forall k . i <= k <= j --> a[k] = b[k]
1571 * -[2]: Second array
1572 * -[3]: Lower bound of range (inclusive)
1573 * -[4]: Uppper bound of range (inclusive)
1575 * mkTerm(Op op, const std::vector<Term>& children)
1577 * Note: We currently support the creation of array equalities over index
1578 * types bit-vector, floating-point, integer and real. Option --arrays-exp is
1579 * required to support this operator.
1583 /* array table function (internal-only symbol) */
1585 /* array lambda (internal-only symbol) */
1587 /* partial array select, for internal use only */
1589 /* partial array select, for internal use only */
1593 /* Datatypes ------------------------------------------------------------- */
1596 * Constructor application.
1598 * -[1]: Constructor (operator)
1599 * -[2]..[n]: Parameters to the constructor
1601 * mkTerm(Kind kind, Op op)
1602 * mkTerm(Kind kind, Op op, Term child)
1603 * mkTerm(Kind kind, Op op, Term child1, Term child2)
1604 * mkTerm(Kind kind, Op op, Term child1, Term child2, Term child3)
1605 * mkTerm(Kind kind, Op op, const std::vector<Term>& children)
1609 * Datatype selector application.
1611 * -[1]: Selector (operator)
1612 * -[2]: Datatype term (undefined if mis-applied)
1614 * mkTerm(Kind kind, Op op, Term child)
1618 * Datatype tester application.
1621 * -[2]: Datatype term
1623 * mkTerm(Kind kind, Term child1, Term child2)
1624 * mkTerm(Kind kind, const std::vector<Term>& children)
1628 /* Parametric datatype term. */
1629 PARAMETRIC_DATATYPE
,
1630 /* type ascription, for datatype constructor applications;
1631 * first parameter is an ASCRIPTION_TYPE, second is the datatype constructor
1632 * application being ascribed */
1633 APPLY_TYPE_ASCRIPTION
,
1636 * Operator for a tuple update.
1638 * -[1]: Index of the tuple to be updated
1640 * mkOp(Kind kind, uint32_t param)
1642 * Apply tuple update.
1644 * -[1]: Op of kind TUPLE_UPDATE (which references an index)
1646 * -[3]: Element to store in the tuple at the given index
1648 * mkTerm(Op op, Term child1, Term child2)
1649 * mkTerm(Op op, const std::vector<Term>& children)
1653 * Operator for a record update.
1655 * -[1]: Name of the field to be updated
1657 * mkOp(Kind kind, const std::string& param)
1661 * -[1]: Op of kind RECORD_UPDATE (which references a field)
1662 * -[2]: Record term to update
1663 * -[3]: Element to store in the record in the given field
1665 * mkTerm(Op op, Term child1, Term child2)
1666 * mkTerm(Op op,, const std::vector<Term>& children)
1669 /* Match expressions.
1670 * For example, the smt2 syntax match term
1671 * (match l (((cons h t) h) (nil 0)))
1672 * is represented by the AST
1674 * (MATCH_BIND_CASE (BOUND_VAR_LIST h t) (cons h t) h)
1675 * (MATCH_CASE nil 0))
1676 * The type of the last argument of each case term could be equal.
1678 * -[1]..[n]: Terms of kind MATCH_CASE or MATCH_BIND_CASE
1680 * mkTerm(Kind kind, Term child1, Term child2)
1681 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1682 * mkTerm(Kind kind, const std::vector<Term>& children)
1687 * A (constant) case expression to be used within a match expression.
1689 * -[1] Term denoting the pattern expression
1690 * -[2] Term denoting the return value
1692 * mkTerm(Kind kind, Term child1, Term child2)
1693 * mkTerm(Kind kind, const std::vector<Term>& children)
1697 * A (non-constant) case expression to be used within a match expression.
1699 * -[1] a BOUND_VAR_LIST Term containing the free variables of the case
1700 * -[2] Term denoting the pattern expression
1701 * -[3] Term denoting the return value
1703 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1704 * mkTerm(Kind kind, const std::vector<Term>& children)
1709 * An operator mapping datatypes to an integer denoting the number of
1710 * non-nullary applications of constructors they contain.
1712 * -[1]: Datatype term
1714 * mkTerm(Kind kind, Term child1)
1715 * mkTerm(Kind kind, const std::vector<Term>& children)
1719 * Operator for tuple projection indices
1721 * -[1]: The tuple projection indices
1723 * mkOp(Kind TUPLE_PROJECT, std::vector<uint32_t> param)
1725 * constructs a new tuple from an existing one using the elements at the
1728 * -[1]: a term of tuple sort
1730 * mkTerm(Op op, Term child)
1731 * mkTerm(Op op, const std::vector<Term>& children)
1735 /* datatypes height bound */
1737 /* datatypes height bound */
1739 /* datatypes sygus bound */
1741 /* datatypes sygus term order */
1742 DT_SYGUS_TERM_ORDER
,
1743 /* datatypes sygus is constant */
1747 /* Separation Logic ------------------------------------------------------ */
1750 * Separation logic nil term.
1753 * mkSepNil(Sort sort)
1757 * Separation logic empty heap.
1759 * -[1]: Term of the same sort as the sort of the location of the heap
1760 * that is constrained to be empty
1761 * -[2]: Term of the same sort as the data sort of the heap that is
1762 * that is constrained to be empty
1764 * mkTerm(Kind kind, Term child1, Term child2)
1765 * mkTerm(Kind kind, const std::vector<Term>& children)
1769 * Separation logic points-to relation.
1771 * -[1]: Location of the points-to constraint
1772 * -[2]: Data of the points-to constraint
1774 * mkTerm(Kind kind, Term child1, Term child2)
1775 * mkTerm(Kind kind, const std::vector<Term>& children)
1779 * Separation logic star.
1780 * Parameters: n >= 2
1781 * -[1]..[n]: Child constraints that hold in disjoint (separated) heaps
1783 * mkTerm(Kind kind, Term child1, Term child2)
1784 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1785 * mkTerm(Kind kind, const std::vector<Term>& children)
1789 * Separation logic magic wand.
1791 * -[1]: Antecendant of the magic wand constraint
1792 * -[2]: Conclusion of the magic wand constraint, which is asserted to
1793 * hold in all heaps that are disjoint extensions of the antecedent.
1795 * mkTerm(Kind kind, Term child1, Term child2)
1796 * mkTerm(Kind kind, const std::vector<Term>& children)
1800 /* separation label (internal use only) */
1804 /* Sets ------------------------------------------------------------------ */
1807 * Empty set constant.
1809 * -[1]: Sort of the set elements
1811 * mkEmptySet(Sort sort)
1817 * -[1]..[2]: Terms of set sort
1819 * mkTerm(Kind kind, Term child1, Term child2)
1820 * mkTerm(Kind kind, const std::vector<Term>& children)
1826 * -[1]..[2]: Terms of set sort
1828 * mkTerm(Kind kind, Term child1, Term child2)
1829 * mkTerm(Kind kind, const std::vector<Term>& children)
1835 * -[1]..[2]: Terms of set sort
1837 * mkTerm(Kind kind, Term child1, Term child2)
1838 * mkTerm(Kind kind, const std::vector<Term>& children)
1844 * -[1]..[2]: Terms of set sort, [1] a subset of set [2]?
1846 * mkTerm(Kind kind, Term child1, Term child2)
1847 * mkTerm(Kind kind, const std::vector<Term>& children)
1851 * Set membership predicate.
1853 * -[1]..[2]: Terms of set sort, [1] a member of set [2]?
1855 * mkTerm(Kind kind, Term child1, Term child2)
1856 * mkTerm(Kind kind, const std::vector<Term>& children)
1860 * Construct a singleton set from an element given as a parameter.
1861 * The returned set has same type of the element.
1863 * -[1]: Single element
1865 * mkTerm(Kind kind, Term child)
1869 * The set obtained by inserting elements;
1871 * -[1]..[n-1]: Elements inserted into set [n]
1874 * mkTerm(Kind kind, Term child)
1875 * mkTerm(Kind kind, Term child1, Term child2)
1876 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1877 * mkTerm(Kind kind, const std::vector<Term>& children)
1883 * -[1]: Set to determine the cardinality of
1885 * mkTerm(Kind kind, Term child)
1889 * Set complement with respect to finite universe.
1891 * -[1]: Set to complement
1893 * mkTerm(Kind kind, Term child)
1897 * Finite universe set.
1898 * All set variables must be interpreted as subsets of it.
1900 * mkUniverseSet(Sort sort)
1906 * -[1]..[2]: Terms of set sort
1908 * mkTerm(Kind kind, Term child1, Term child2)
1909 * mkTerm(Kind kind, const std::vector<Term>& children)
1913 * Set cartesian product.
1915 * -[1]..[2]: Terms of set sort
1917 * mkTerm(Kind kind, Term child1, Term child2)
1918 * mkTerm(Kind kind, const std::vector<Term>& children)
1924 * -[1]: Term of set sort
1926 * mkTerm(Kind kind, Term child)
1930 * Set transitive closure.
1932 * -[1]: Term of set sort
1934 * mkTerm(Kind kind, Term child)
1940 * -[1]..[2]: Terms of set sort
1942 * mkTerm(Kind kind, Term child1, Term child2)
1943 * mkTerm(Kind kind, const std::vector<Term>& children)
1949 * -[1]: Term of set sort
1951 * mkTerm(Kind kind, Term child)
1956 * A set comprehension is specified by a bound variable list x1 ... xn,
1957 * a predicate P[x1...xn], and a term t[x1...xn]. A comprehension C with the
1958 * above form has members given by the following semantics:
1959 * forall y. ( exists x1...xn. P[x1...xn] ^ t[x1...xn] = y ) <=> (member y C)
1960 * where y ranges over the element type of the (set) type of the
1961 * comprehension. If t[x1..xn] is not provided, it is equivalent to y in the
1964 * -[1]: Term BOUND_VAR_LIST
1965 * -[2]: Term denoting the predicate of the comprehension
1966 * -[3]: (optional) a Term denoting the generator for the comprehension
1968 * mkTerm(Kind kind, Term child1, Term child2)
1969 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1970 * mkTerm(Kind kind, const std::vector<Term>& children)
1974 * Returns an element from a given set.
1975 * If a set A = {x}, then the term (choose A) is equivalent to the term x.
1976 * If the set is empty, then (choose A) is an arbitrary value.
1977 * If the set has cardinality > 1, then (choose A) will deterministically
1978 * return an element in A.
1980 * -[1]: Term of set sort
1982 * mkTerm(Kind kind, Term child)
1986 * Set is_singleton predicate.
1988 * -[1]: Term of set sort, is [1] a singleton set?
1990 * mkTerm(Kind kind, Term child)
1993 /* Bags ------------------------------------------------------------------ */
1995 * Empty bag constant.
1997 * -[1]: Sort of the bag elements
1999 * mkEmptyBag(Sort sort)
2005 * -[1]..[2]: Terms of bag sort
2007 * mkTerm(Kind kind, Term child1, Term child2)
2008 * mkTerm(Kind kind, const std::vector<Term>& children)
2012 * Bag disjoint union (sum).
2014 * -[1]..[2]: Terms of bag sort
2016 * mkTerm(Kind kind, Term child1, Term child2)
2017 * mkTerm(Kind kind, const std::vector<Term>& children)
2021 * Bag intersection (min).
2023 * -[1]..[2]: Terms of bag sort
2025 * mkTerm(Kind kind, Term child1, Term child2)
2026 * mkTerm(Kind kind, const std::vector<Term>& children)
2030 * Bag difference subtract (subtracts multiplicities of the second from the
2033 * -[1]..[2]: Terms of bag sort
2035 * mkTerm(Kind kind, Term child1, Term child2)
2036 * mkTerm(Kind kind, const std::vector<Term>& children)
2038 DIFFERENCE_SUBTRACT
,
2040 * Bag difference 2 (removes shared elements in the two bags).
2042 * -[1]..[2]: Terms of bag sort
2044 * mkTerm(Kind kind, Term child1, Term child2)
2045 * mkTerm(Kind kind, const std::vector<Term>& children)
2049 * Inclusion predicate for bags
2050 * (multiplicities of the first bag <= multiplicities of the second bag).
2052 * -[1]..[2]: Terms of bag sort
2054 * mkTerm(Kind kind, Term child1, Term child2)
2055 * mkTerm(Kind kind, const std::vector<Term>& children)
2059 * Element multiplicity in a bag
2061 * -[1]..[2]: Terms of bag sort (Bag E), [1] an element of sort E
2063 * mkTerm(Kind kind, Term child1, Term child2)
2064 * mkTerm(Kind kind, const std::vector<Term>& children)
2068 * Eliminate duplicates in a given bag. The returned bag contains exactly the
2069 * same elements in the given bag, but with multiplicity one.
2071 * -[1]: a term of bag sort
2073 * mkTerm(Kind kind, Term child)
2074 * mkTerm(Kind kind, const std::vector<Term>& children)
2078 * The bag of the single element given as a parameter.
2080 * -[1]: Single element
2082 * mkTerm(Kind kind, Term child)
2088 * -[1]: Bag to determine the cardinality of
2090 * mkTerm(Kind kind, Term child)
2094 * Returns an element from a given bag.
2095 * If a bag A = {(x,n)} where n is the multiplicity, then the term (choose A)
2096 * is equivalent to the term x.
2097 * If the bag is empty, then (choose A) is an arbitrary value.
2098 * If the bag contains distinct elements, then (choose A) will
2099 * deterministically return an element in A.
2101 * -[1]: Term of bag sort
2103 * mkTerm(Kind kind, Term child)
2107 * Bag is_singleton predicate (single element with multiplicity exactly one).
2109 * -[1]: Term of bag sort, is [1] a singleton bag?
2111 * mkTerm(Kind kind, Term child)
2115 * Bag.from_set converts a set to a bag.
2117 * -[1]: Term of set sort
2119 * mkTerm(Kind kind, Term child)
2123 * Bag.to_set converts a bag to a set.
2125 * -[1]: Term of bag sort
2127 * mkTerm(Kind kind, Term child)
2131 /* Strings --------------------------------------------------------------- */
2136 * -[1]..[n]: Terms of String sort
2138 * mkTerm(Kind kind, Term child1, Term child2)
2139 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2140 * mkTerm(Kind kind, const std::vector<Term>& children)
2144 * String membership.
2146 * -[1]: Term of String sort
2147 * -[2]: Term of RegExp sort
2149 * mkTerm(Kind kind, Term child1, Term child2)
2150 * mkTerm(Kind kind, const std::vector<Term>& children)
2156 * -[1]: Term of String sort
2158 * mkTerm(Kind kind, Term child)
2163 * Extracts a substring, starting at index i and of length l, from a string
2164 * s. If the start index is negative, the start index is greater than the
2165 * length of the string, or the length is negative, the result is the empty
2168 * -[1]: Term of sort String
2169 * -[2]: Term of sort Integer (index i)
2170 * -[3]: Term of sort Integer (length l)
2172 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2173 * mkTerm(Kind kind, const std::vector<Term>& children)
2178 * Updates a string s by replacing its context starting at an index with t.
2179 * If the start index is negative, the start index is greater than the
2180 * length of the string, the result is s. Otherwise, the length of the
2181 * original string is preserved.
2183 * -[1]: Term of sort String
2184 * -[2]: Term of sort Integer (index i)
2185 * -[3]: Term of sort String (replacement string t)
2187 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2188 * mkTerm(Kind kind, const std::vector<Term>& children)
2192 * String character at.
2193 * Returns the character at index i from a string s. If the index is negative
2194 * or the index is greater than the length of the string, the result is the
2195 * empty string. Otherwise the result is a string of length 1.
2197 * -[1]: Term of sort String (string s)
2198 * -[2]: Term of sort Integer (index i)
2200 * mkTerm(Kind kind, Term child1, Term child2)
2201 * mkTerm(Kind kind, const std::vector<Term>& children)
2206 * Checks whether a string s1 contains another string s2. If s2 is empty, the
2207 * result is always true.
2209 * -[1]: Term of sort String (the string s1)
2210 * -[2]: Term of sort String (the string s2)
2212 * mkTerm(Kind kind, Term child1, Term child2)
2213 * mkTerm(Kind kind, const std::vector<Term>& children)
2218 * Returns the index of a substring s2 in a string s1 starting at index i. If
2219 * the index is negative or greater than the length of string s1 or the
2220 * substring s2 does not appear in string s1 after index i, the result is -1.
2222 * -[1]: Term of sort String (substring s1)
2223 * -[2]: Term of sort String (substring s2)
2224 * -[3]: Term of sort Integer (index i)
2226 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2227 * mkTerm(Kind kind, const std::vector<Term>& children)
2232 * Replaces a string s2 in a string s1 with string s3. If s2 does not appear
2233 * in s1, s1 is returned unmodified.
2235 * -[1]: Term of sort String (string s1)
2236 * -[2]: Term of sort String (string s2)
2237 * -[3]: Term of sort String (string s3)
2239 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2240 * mkTerm(Kind kind, const std::vector<Term>& children)
2244 * String replace all.
2245 * Replaces all occurrences of a string s2 in a string s1 with string s3.
2246 * If s2 does not appear in s1, s1 is returned unmodified.
2248 * -[1]: Term of sort String (string s1)
2249 * -[2]: Term of sort String (string s2)
2250 * -[3]: Term of sort String (string s3)
2252 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2253 * mkTerm(Kind kind, const std::vector<Term>& children)
2257 * String replace regular expression match.
2258 * Replaces the first match of a regular expression r in string s1 with
2259 * string s2. If r does not match a substring of s1, s1 is returned
2262 * -[1]: Term of sort String (string s1)
2263 * -[2]: Term of sort Regexp (regexp r)
2264 * -[3]: Term of sort String (string s2)
2266 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2267 * mkTerm(Kind kind, const std::vector<Term>& children)
2271 * String replace all regular expression matches.
2272 * Replaces all matches of a regular expression r in string s1 with string
2273 * s2. If r does not match a substring of s1, s1 is returned unmodified.
2275 * -[1]: Term of sort String (string s1)
2276 * -[2]: Term of sort Regexp (regexp r)
2277 * -[3]: Term of sort String (string s2)
2279 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2280 * mkTerm(Kind kind, const std::vector<Term>& children)
2282 STRING_REPLACE_RE_ALL
,
2284 * String to lower case.
2286 * -[1]: Term of String sort
2288 * mkTerm(Kind kind, Term child)
2292 * String to upper case.
2294 * -[1]: Term of String sort
2296 * mkTerm(Kind kind, Term child)
2302 * -[1]: Term of String sort
2304 * mkTerm(Kind kind, Term child)
2309 * Returns the code point of a string if it has length one, or returns -1
2312 * -[1]: Term of String sort
2314 * mkTerm(Kind kind, Term child)
2319 * Returns a string containing a single character whose code point matches
2320 * the argument to this function, or the empty string if the argument is
2323 * -[1]: Term of Integer sort
2325 * mkTerm(Kind kind, Term child)
2330 * Returns true if string s1 is (strictly) less than s2 based on a
2331 * lexiographic ordering over code points.
2333 * -[1]: Term of sort String (the string s1)
2334 * -[2]: Term of sort String (the string s2)
2336 * mkTerm(Kind kind, Term child1, Term child2)
2337 * mkTerm(Kind kind, const std::vector<Term>& children)
2341 * String less than or equal.
2342 * Returns true if string s1 is less than or equal to s2 based on a
2343 * lexiographic ordering over code points.
2345 * -[1]: Term of sort String (the string s1)
2346 * -[2]: Term of sort String (the string s2)
2348 * mkTerm(Kind kind, Term child1, Term child2)
2349 * mkTerm(Kind kind, const std::vector<Term>& children)
2354 * Checks whether a string s1 is a prefix of string s2. If string s1 is
2355 * empty, this operator returns true.
2357 * -[1]: Term of sort String (string s1)
2358 * -[2]: Term of sort String (string s2)
2360 * mkTerm(Kind kind, Term child1, Term child2)
2361 * mkTerm(Kind kind, const std::vector<Term>& children)
2366 * Checks whether a string s1 is a suffix of string 2. If string s1 is empty,
2367 * this operator returns true.
2369 * -[1]: Term of sort String (string s1)
2370 * -[2]: Term of sort String (string s2)
2372 * mkTerm(Kind kind, Term child1, Term child2)
2373 * mkTerm(Kind kind, const std::vector<Term>& children)
2378 * Returns true if string s is digit (it is one of "0", ..., "9").
2380 * -[1]: Term of sort String
2382 * mkTerm(Kind kind, Term child1)
2383 * mkTerm(Kind kind, const std::vector<Term>& children)
2387 * Integer to string.
2388 * If the integer is negative this operator returns the empty string.
2390 * -[1]: Term of sort Integer
2392 * mkTerm(Kind kind, Term child)
2396 * String to integer (total function).
2397 * If the string does not contain an integer or the integer is negative, the
2398 * operator returns -1.
2400 * -[1]: Term of sort String
2402 * mkTerm(Kind kind, Term child)
2410 * mkString(const char* s)
2411 * mkString(const std::string& s)
2412 * mkString(const unsigned char c)
2413 * mkString(const std::vector<unsigned>& s)
2417 * Conversion from string to regexp.
2419 * -[1]: Term of sort String
2421 * mkTerm(Kind kind, Term child)
2425 * Regexp Concatenation .
2427 * -[1]..[2]: Terms of Regexp sort
2429 * mkTerm(Kind kind, Term child1, Term child2)
2430 * mkTerm(Kind kind, const std::vector<Term>& children)
2436 * -[1]..[2]: Terms of Regexp sort
2438 * mkTerm(Kind kind, Term child1, Term child2)
2439 * mkTerm(Kind kind, const std::vector<Term>& children)
2443 * Regexp intersection.
2445 * -[1]..[2]: Terms of Regexp sort
2447 * mkTerm(Kind kind, Term child1, Term child2)
2448 * mkTerm(Kind kind, const std::vector<Term>& children)
2452 * Regexp difference.
2454 * -[1]..[2]: Terms of Regexp sort
2456 * mkTerm(Kind kind, Term child1, Term child2)
2457 * mkTerm(Kind kind, const std::vector<Term>& children)
2463 * -[1]: Term of sort Regexp
2465 * mkTerm(Kind kind, Term child)
2471 * -[1]: Term of sort Regexp
2473 * mkTerm(Kind kind, Term child)
2479 * -[1]: Term of sort Regexp
2481 * mkTerm(Kind kind, Term child)
2487 * -[1]: Lower bound character for the range
2488 * -[2]: Upper bound character for the range
2490 * mkTerm(Kind kind, Term child1, Term child2)
2491 * mkTerm(Kind kind, const std::vector<Term>& children)
2495 * Operator for regular expression repeat.
2497 * -[1]: The number of repetitions
2499 * mkOp(Kind kind, uint32_t param)
2501 * Apply regular expression loop.
2503 * -[1]: Op of kind REGEXP_REPEAT
2504 * -[2]: Term of regular expression sort
2506 * mkTerm(Op op, Term child)
2507 * mkTerm(Op op, const std::vector<Term>& children)
2511 * Operator for regular expression loop, from lower bound to upper bound
2512 * number of repetitions.
2514 * -[1]: The lower bound
2515 * -[2]: The upper bound
2517 * mkOp(Kind kind, uint32_t param, uint32_t param)
2519 * Apply regular expression loop.
2521 * -[1]: Op of kind REGEXP_LOOP
2522 * -[2]: Term of regular expression sort
2524 * mkTerm(Op op, Term child)
2525 * mkTerm(Op op, const std::vector<Term>& children)
2537 * Regexp all characters.
2545 * Regexp complement.
2547 * -[1]: Term of sort RegExp
2549 * mkTerm(Kind kind, Term child1)
2556 * -[1]..[n]: Terms of Sequence sort
2558 * mkTerm(Kind kind, Term child1, Term child2)
2559 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2560 * mkTerm(Kind kind, const std::vector<Term>& children)
2566 * -[1]: Term of Sequence sort
2568 * mkTerm(Kind kind, Term child)
2573 * Extracts a subsequence, starting at index i and of length l, from a
2574 * sequence s. If the start index is negative, the start index is greater
2575 * than the length of the sequence, or the length is negative, the result is
2576 * the empty sequence. Parameters: 3
2577 * -[1]: Term of sort Sequence
2578 * -[2]: Term of sort Integer (index i)
2579 * -[3]: Term of sort Integer (length l)
2581 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2582 * mkTerm(Kind kind, const std::vector<Term>& children)
2587 * Updates a sequence s by replacing its context starting at an index with t.
2588 * If the start index is negative, the start index is greater than the
2589 * length of the sequence, the result is s. Otherwise, the length of the
2590 * original sequence is preserved.
2592 * -[1]: Term of sort Sequence
2593 * -[2]: Term of sort Integer (index i)
2594 * -[3]: Term of sort Sequence (replacement sequence t)
2596 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2597 * mkTerm(Kind kind, const std::vector<Term>& children)
2601 * Sequence element at.
2602 * Returns the element at index i from a sequence s. If the index is negative
2603 * or the index is greater or equal to the length of the sequence, the result
2604 * is the empty sequence. Otherwise the result is a sequence of length 1.
2606 * -[1]: Term of sequence sort (string s)
2607 * -[2]: Term of sort Integer (index i)
2609 * mkTerm(Kind kind, Term child1, Term child2)
2610 * mkTerm(Kind kind, const std::vector<Term>& children)
2614 * Sequence contains.
2615 * Checks whether a sequence s1 contains another sequence s2. If s2 is empty,
2616 * the result is always true. Parameters: 2
2617 * -[1]: Term of sort Sequence (the sequence s1)
2618 * -[2]: Term of sort Sequence (the sequence s2)
2620 * mkTerm(Kind kind, Term child1, Term child2)
2621 * mkTerm(Kind kind, const std::vector<Term>& children)
2625 * Sequence index-of.
2626 * Returns the index of a subsequence s2 in a sequence s1 starting at index i.
2627 * If the index is negative or greater than the length of sequence s1 or the
2628 * subsequence s2 does not appear in sequence s1 after index i, the result is
2630 * -[1]: Term of sort Sequence (subsequence s1)
2631 * -[2]: Term of sort Sequence (subsequence s2)
2632 * -[3]: Term of sort Integer (index i)
2634 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2635 * mkTerm(Kind kind, const std::vector<Term>& children)
2640 * Replaces the first occurrence of a sequence s2 in a sequence s1 with
2641 * sequence s3. If s2 does not appear in s1, s1 is returned unmodified.
2643 * -[1]: Term of sort Sequence (sequence s1)
2644 * -[2]: Term of sort Sequence (sequence s2)
2645 * -[3]: Term of sort Sequence (sequence s3)
2647 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2648 * mkTerm(Kind kind, const std::vector<Term>& children)
2652 * Sequence replace all.
2653 * Replaces all occurrences of a sequence s2 in a sequence s1 with sequence
2654 * s3. If s2 does not appear in s1, s1 is returned unmodified. Parameters: 3
2655 * -[1]: Term of sort Sequence (sequence s1)
2656 * -[2]: Term of sort Sequence (sequence s2)
2657 * -[3]: Term of sort Sequence (sequence s3)
2659 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2660 * mkTerm(Kind kind, const std::vector<Term>& children)
2666 * -[1]: Term of Sequence sort
2668 * mkTerm(Kind kind, Term child)
2672 * Sequence prefix-of.
2673 * Checks whether a sequence s1 is a prefix of sequence s2. If sequence s1 is
2674 * empty, this operator returns true.
2676 * -[1]: Term of sort Sequence (sequence s1)
2677 * -[2]: Term of sort Sequence (sequence s2)
2679 * mkTerm(Kind kind, Term child1, Term child2)
2680 * mkTerm(Kind kind, const std::vector<Term>& children)
2684 * Sequence suffix-of.
2685 * Checks whether a sequence s1 is a suffix of sequence s2. If sequence s1 is
2686 * empty, this operator returns true. Parameters: 2
2687 * -[1]: Term of sort Sequence (sequence s1)
2688 * -[2]: Term of sort Sequence (sequence s2)
2690 * mkTerm(Kind kind, Term child1, Term child2)
2691 * mkTerm(Kind kind, const std::vector<Term>& children)
2695 * Constant sequence.
2697 * See mkEmptySequence()
2699 * mkEmptySequence(Sort sort)
2700 * Note that a constant sequence is a term that is equivalent to:
2701 * (seq.++ (seq.unit c1) ... (seq.unit cn))
2702 * where n>=0 and c1, ..., cn are constants of some sort. The elements
2703 * can be extracted by Term::getConstSequenceElements().
2707 * Sequence unit, corresponding to a sequence of length one with the given
2710 * -[1] Element term.
2712 * mkTerm(Kind kind, Term child1)
2716 * Sequence nth, corresponding to the nth element of a sequence.
2718 * -[1] Sequence term.
2719 * -[2] Integer term.
2721 * mkTerm(Kind kind, Term child1, Term child2)
2725 /* Quantifiers ----------------------------------------------------------- */
2728 * Universally quantified formula.
2730 * -[1]: BOUND_VAR_LIST Term
2731 * -[2]: Quantifier body
2732 * -[3]: (optional) INST_PATTERN_LIST Term
2734 * mkTerm(Kind kind, Term child1, Term child2)
2735 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2736 * mkTerm(Kind kind, const std::vector<Term>& children)
2740 * Existentially quantified formula.
2742 * -[1]: BOUND_VAR_LIST Term
2743 * -[2]: Quantifier body
2744 * -[3]: (optional) INST_PATTERN_LIST Term
2746 * mkTerm(Kind kind, Term child1, Term child2)
2747 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2748 * mkTerm(Kind kind, const std::vector<Term>& children)
2752 * A list of bound variables (used to bind variables under a quantifier)
2754 * -[1]..[n]: Terms with kind BOUND_VARIABLE
2756 * mkTerm(Kind kind, Term child1, Term child2)
2757 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2758 * mkTerm(Kind kind, const std::vector<Term>& children)
2762 * An instantiation pattern.
2763 * Specifies a (list of) terms to be used as a pattern for quantifier
2766 * -[1]..[n]: Terms with kind BOUND_VARIABLE
2768 * mkTerm(Kind kind, Term child1, Term child2)
2769 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2770 * mkTerm(Kind kind, const std::vector<Term>& children)
2774 * An instantiation no-pattern.
2775 * Specifies a (list of) terms that should not be used as a pattern for
2776 * quantifier instantiation.
2778 * -[1]..[n]: Terms with kind BOUND_VARIABLE
2780 * mkTerm(Kind kind, Term child1, Term child2)
2781 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2782 * mkTerm(Kind kind, const std::vector<Term>& children)
2786 * An instantiation attribute
2787 * Specifies a custom property for a quantified formula given by a
2788 * term that is ascribed a user attribute.
2790 * -[1]: Term with a user attribute.
2792 * mkTerm(Kind kind, Term child)
2796 * A list of instantiation patterns and/or attributes.
2798 * -[1]..[n]: Terms with kind INST_PATTERN, INST_NO_PATTERN, or
2801 * mkTerm(Kind kind, Term child1, Term child2)
2802 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2803 * mkTerm(Kind kind, const std::vector<Term>& children)
2808 /* Sort Kinds ------------------------------------------------------------ */
2812 /* a type parameter for type ascription */
2816 /* a datatype type index */
2820 /* set type, takes as parameter the type of the elements */
2822 /* bag type, takes as parameter the type of the elements */
2826 /* specifies types of user-declared 'uninterpreted' sorts */
2830 /* a representation for basic types */
2832 /* a function type */
2834 /* the type of a symbolic expression */
2836 /* bit-vector type */
2838 /* floating-point type */
2842 /* ----------------------------------------------------------------------- */
2843 /* marks the upper-bound of this enumeration */
2848 * Get the string representation of a given kind.
2850 * @return the string representation of kind k
2852 std::string
kindToString(Kind k
) CVC4_EXPORT
;
2855 * Serialize a kind to given stream.
2856 * @param out the output stream
2857 * @param k the kind to be serialized to the given output stream
2858 * @return the output stream
2860 std::ostream
& operator<<(std::ostream
& out
, Kind k
) CVC4_EXPORT
;
2863 * Hash function for Kinds.
2865 struct CVC4_EXPORT KindHashFunction
2867 size_t operator()(Kind k
) const;