1 /********************* */
2 /*! \file cvc4cppkind.h
4 ** Top contributors (to current version):
6 ** This file is part of the CVC4 project.
7 ** Copyright (c) 2009-2019 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_public.h"
19 #ifndef CVC4__API__CVC4CPPKIND_H
20 #define CVC4__API__CVC4CPPKIND_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 * CVC4::Kind (CVC4__EXPR__NODE_VALUE__NBITS__KIND, currently 10 bits,
37 * see expr/metakind_template.h).
39 enum CVC4_PUBLIC Kind
: int32_t
43 * Should never be exposed or created via the API.
48 * Should never be exposed or created via the API.
52 * Null kind (kind of null term Term()).
53 * Do not explicitly create via API functions other than Term().
57 /* Builtin --------------------------------------------------------------- */
60 * Uninterpreted constant.
62 * -[1]: Sort of the constant
63 * -[2]: Index of the constant
65 * mkUninterpretedConst(Sort sort, int32_t index)
67 UNINTERPRETED_CONSTANT
,
69 * Abstract value (other than uninterpreted sort constants).
71 * -[1]: Index of the abstract value
73 * mkAbstractValue(const std::string& index);
74 * mkAbstractValue(uint64_t index);
78 /* Built-in operator */
86 * defineFun(const std::string& symbol,
87 * const std::vector<Term>& bound_vars,
91 * const std::vector<Term>& bound_vars,
96 * Application of a defined function.
98 * -[1]..[n]: Function argument instantiation Terms
100 * mkTerm(Kind kind, Term child)
101 * mkTerm(Kind kind, Term child1, Term child2)
102 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
103 * mkTerm(Kind kind, const std::vector<Term>& children)
109 * -[1]..[2]: Terms with same sort
111 * mkTerm(Kind kind, Term child1, Term child2)
112 * mkTerm(Kind kind, const std::vector<Term>& children)
118 * -[1]..[n]: Terms with same sort
120 * mkTerm(Kind kind, Term child1, Term child2)
121 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
122 * mkTerm(Kind kind, const std::vector<Term>& children)
126 * First-order constant.
127 * Not permitted in bindings (forall, exists, ...).
131 * mkConst(const std::string& symbol, Sort sort)
137 * Permitted in bindings and in the lambda and quantifier bodies only.
141 * mkVar(const std::string& symbol, Sort sort)
146 /* Skolem variable (internal only) */
148 /* Symbolic expression (any arity) */
154 * -[1]: BOUND_VAR_LIST
157 * mkTerm(Kind kind, Term child1, Term child2)
158 * mkTerm(Kind kind, const std::vector<Term>& children)
162 * Hilbert choice (epsilon) expression.
164 * -[1]: BOUND_VAR_LIST
165 * -[2]: Hilbert choice body
167 * mkTerm(Kind kind, Term child1, Term child2)
168 * mkTerm(Kind kind, const std::vector<Term>& children)
174 * -[1]: Term of kind CHAIN_OP (represents a binary op)
175 * -[2]..[n]: Arguments to that operator
177 * mkTerm(Kind kind, Term child1, Term child2)
178 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
179 * mkTerm(Kind kind, const std::vector<Term>& children)
180 * Turned into a conjunction of binary applications of the operator on
181 * adjoining parameters.
187 * -[1]: Kind of the binary operation
189 * mkOpTerm(Kind opkind, Kind kind)
193 /* Boolean --------------------------------------------------------------- */
198 * -[1]: Boolean value of the constant
202 * mkBoolean(bool val)
207 * -[1]: Boolean Term to negate
209 * mkTerm(Kind kind, Term child)
214 * -[1]..[n]: Boolean Term of the conjunction
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)
222 * Logical implication.
224 * -[1]..[2]: Boolean Terms, [1] implies [2]
226 * mkTerm(Kind kind, Term child1, Term child2)
227 * mkTerm(Kind kind, const std::vector<Term>& children)
232 * -[1]..[n]: Boolean Term of the disjunction
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)
239 /* Logical exclusive or.
241 * -[1]..[2]: Boolean Terms, [1] xor [2]
243 * mkTerm(Kind kind, Term child1, Term child2)
244 * mkTerm(Kind kind, const std::vector<Term>& children)
249 * -[1] is a Boolean condition Term
250 * -[2] the 'then' Term
251 * -[3] the 'else' Term
252 * 'then' and 'else' term must have same base sort.
254 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
255 * mkTerm(Kind kind, const std::vector<Term>& children)
259 /* UF -------------------------------------------------------------------- */
261 /* Application of an uninterpreted function.
263 * -[1]: Function Term
264 * -[2]..[n]: Function argument instantiation Terms
266 * mkTerm(Kind kind, Term child1, Term child2)
267 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
268 * mkTerm(Kind kind, const std::vector<Term>& children)
272 /* Boolean term variable */
273 BOOLEAN_TERM_VARIABLE
,
276 * Cardinality constraint on sort S.
278 * -[1]: Term of sort S
279 * -[2]: Positive integer constant that bounds the cardinality of sort S
281 * mkTerm(Kind kind, Term child1, Term child2)
282 * mkTerm(Kind kind, const std::vector<Term>& children)
284 CARDINALITY_CONSTRAINT
,
286 /* Combined cardinality constraint. */
287 COMBINED_CARDINALITY_CONSTRAINT
,
288 /* Partial uninterpreted function application. */
290 /* cardinality value of sort S:
291 * first parameter is (any) term of sort S */
295 * Higher-order applicative encoding of function application.
297 * -[1]: Function to apply
298 * -[2]: Argument of the function
300 * mkTerm(Kind kind, Term child1, Term child2)
301 * mkTerm(Kind kind, const std::vector<Term>& children)
305 /* Arithmetic ------------------------------------------------------------ */
308 * Arithmetic addition.
310 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
312 * mkTerm(Kind kind, Term child1, Term child2)
313 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
314 * mkTerm(Kind kind, const std::vector<Term>& children)
318 * Arithmetic multiplication.
320 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
322 * mkTerm(Kind kind, Term child1, Term child2)
323 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
324 * mkTerm(Kind kind, const std::vector<Term>& children)
328 /* Synonym for MULT. */
332 * Arithmetic subtraction.
334 * -[1]..[2]: Terms of sort Integer, Real (sorts must match)
336 * mkTerm(Kind kind, Term child1, Term child2)
337 * mkTerm(Kind kind, const std::vector<Term>& children)
341 * Arithmetic negation.
343 * -[1]: Term of sort Integer, Real
345 * mkTerm(Kind kind, Term child)
349 * Real division, division by 0 undefined
351 * -[1]..[2]: Terms of sort Integer, Real
353 * mkTerm(Kind kind, Term child1, Term child2)
354 * mkTerm(Kind kind, const std::vector<Term>& children)
358 * Real division with interpreted division by 0
360 * -[1]..[2]: Terms of sort Integer, Real
362 * mkTerm(Kind kind, Term child1, Term child2)
363 * mkTerm(Kind kind, const std::vector<Term>& children)
367 * Integer division, division by 0 undefined.
369 * -[1]..[2]: Terms of sort Integer
371 * mkTerm(Kind kind, Term child1, Term child2)
372 * mkTerm(Kind kind, const std::vector<Term>& children)
376 * Integer division with interpreted division by 0.
378 * -[1]..[2]: Terms of sort Integer
380 * mkTerm(Kind kind, Term child1, Term child2)
381 * mkTerm(Kind kind, const std::vector<Term>& children)
385 * Integer modulus, division by 0 undefined.
387 * -[1]..[2]: Terms of sort Integer
389 * mkTerm(Kind kind, Term child1, Term child2)
390 * mkTerm(Kind kind, const std::vector<Term>& children)
394 * Integer modulus with interpreted division by 0.
396 * -[1]..[2]: Terms of sort Integer
398 * mkTerm(Kind kind, Term child1, Term child2)
399 * mkTerm(Kind kind, const std::vector<Term>& children)
405 * -[1]: Term of sort Integer
407 * mkTerm(Kind kind, Term child)
411 * Divisibility-by-k predicate.
413 * -[1]: DIVISIBLE_OP Term
416 * mkTerm(Kind kind, Term child1, Term child2)
417 * mkTerm(Kind kind, const std::vector<Term>& children)
423 * -[1]..[2]: Terms of sort Integer, Real
425 * mkTerm(Kind kind, Term child1, Term child2)
426 * mkTerm(Kind kind, const std::vector<Term>& children)
432 * -[1]: Term of sort Integer, Real
434 * mkTerm(Kind kind, Term child)
440 * -[1]: Term of sort Integer, Real
442 * mkTerm(Kind kind, Term child)
448 * -[1]: Term of sort Integer, Real
450 * mkTerm(Kind kind, Term child)
456 * -[1]: Term of sort Integer, Real
458 * mkTerm(Kind kind, Term child)
464 * -[1]: Term of sort Integer, Real
466 * mkTerm(Kind kind, Term child)
472 * -[1]: Term of sort Integer, Real
474 * mkTerm(Kind kind, Term child)
480 * -[1]: Term of sort Integer, Real
482 * mkTerm(Kind kind, Term child)
488 * -[1]: Term of sort Integer, Real
490 * mkTerm(Kind kind, Term child)
496 * -[1]: Term of sort Integer, Real
498 * mkTerm(Kind kind, Term child)
504 * -[1]: Term of sort Integer, Real
506 * mkTerm(Kind kind, Term child)
512 * -[1]: Term of sort Integer, Real
514 * mkTerm(Kind kind, Term child)
520 * -[1]: Term of sort Integer, Real
522 * mkTerm(Kind kind, Term child)
528 * -[1]: Term of sort Integer, Real
530 * mkTerm(Kind kind, Term child)
536 * -[1]: Term of sort Integer, Real
538 * mkTerm(Kind kind, Term child)
542 * Operator for the divisibility-by-k predicate.
544 * -[1]: The k to divide by (sort Integer)
546 * mkOpTerm(Kind kind, uint32_t param)
550 * Multiple-precision rational constant.
552 * See mkInteger(), mkReal(), mkRational()
554 * mkInteger(const char* s, uint32_t base = 10)
555 * mkInteger(const std::string& s, uint32_t base = 10)
556 * mkInteger(int32_t val)
557 * mkInteger(uint32_t val)
558 * mkInteger(int64_t val)
559 * mkInteger(uint64_t val)
560 * mkReal(const char* s, uint32_t base = 10)
561 * mkReal(const std::string& s, uint32_t base = 10)
562 * mkReal(int32_t val)
563 * mkReal(int64_t val)
564 * mkReal(uint32_t val)
565 * mkReal(uint64_t val)
566 * mkReal(int32_t num, int32_t den)
567 * mkReal(int64_t num, int64_t den)
568 * mkReal(uint32_t num, uint32_t den)
569 * mkReal(uint64_t num, uint64_t den)
575 * -[1]..[2]: Terms of sort Integer, Real; [1] < [2]
577 * mkTerm(Kind kind, Term child1, Term child2)
578 * mkTerm(Kind kind, const std::vector<Term>& children)
582 * Less than or equal.
584 * -[1]..[2]: Terms of sort Integer, Real; [1] <= [2]
586 * mkTerm(Kind kind, Term child1, Term child2)
587 * mkTerm(Kind kind, const std::vector<Term>& children)
593 * -[1]..[2]: Terms of sort Integer, Real, [1] > [2]
595 * mkTerm(Kind kind, Term child1, Term child2)
596 * mkTerm(Kind kind, const std::vector<Term>& children)
600 * Greater than or equal.
602 * -[1]..[2]: Terms of sort Integer, Real; [1] >= [2]
604 * mkTerm(Kind kind, Term child1, Term child2)
605 * mkTerm(Kind kind, const std::vector<Term>& children)
609 * Is-integer predicate.
611 * -[1]: Term of sort Integer, Real
613 * mkTerm(Kind kind, Term child)
617 * Convert Term to Integer by the floor function.
619 * -[1]: Term of sort Integer, Real
621 * mkTerm(Kind kind, Term child)
625 * Convert Term to Real.
627 * -[1]: Term of sort Integer, Real
628 * This is a no-op in CVC4, as Integer is a subtype of Real.
639 /* BV -------------------------------------------------------------------- */
642 * Fixed-size bit-vector constant.
646 * mkBitVector(uint32_t size, uint64_t val)
647 * mkBitVector(const char* s, uint32_t base = 2)
648 * mkBitVector(std::string& s, uint32_t base = 2)
652 * Concatenation of two or more bit-vectors.
654 * -[1]..[n]: Terms of bit-vector sort
656 * mkTerm(Kind kind, Term child1, Term child2)
657 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
658 * mkTerm(Kind kind, const std::vector<Term>& children)
664 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
666 * mkTerm(Kind kind, Term child1, Term child2)
667 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
668 * mkTerm(Kind kind, const std::vector<Term>& children)
674 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
676 * mkTerm(Kind kind, Term child1, Term child2)
677 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
678 * mkTerm(Kind kind, const std::vector<Term>& children)
684 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
686 * mkTerm(Kind kind, Term child1, Term child2)
687 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
688 * mkTerm(Kind kind, const std::vector<Term>& children)
694 * -[1]: Term of bit-vector sort
696 * mkTerm(Kind kind, Term child)
702 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
704 * mkTerm(Kind kind, Term child1, Term child2)
705 * mkTerm(Kind kind, const std::vector<Term>& children)
711 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
713 * mkTerm(Kind kind, Term child1, Term child2)
714 * mkTerm(Kind kind, const std::vector<Term>& children)
720 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
722 * mkTerm(Kind kind, Term child1, Term child2)
723 * mkTerm(Kind kind, const std::vector<Term>& children)
727 * Equality comparison (returns bit-vector of size 1).
729 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
731 * mkTerm(Kind kind, Term child1, Term child2)
732 * mkTerm(Kind kind, const std::vector<Term>& children)
736 * Multiplication of two or more bit-vectors.
738 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
740 * mkTerm(Kind kind, Term child1, Term child2)
741 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
742 * mkTerm(Kind kind, const std::vector<Term>& children)
746 * Addition of two or more bit-vectors.
748 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
750 * mkTerm(Kind kind, Term child1, Term child2)
751 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
752 * mkTerm(Kind kind, const std::vector<Term>& children)
756 * Subtraction of two bit-vectors.
758 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
760 * mkTerm(Kind kind, Term child1, Term child2)
761 * mkTerm(Kind kind, const std::vector<Term>& children)
765 * Negation of a bit-vector (two's complement).
767 * -[1]: Term of bit-vector sort
769 * mkTerm(Kind kind, Term child)
773 * Unsigned division of two bit-vectors, truncating towards 0.
775 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
777 * mkTerm(Kind kind, Term child1, Term child2)
778 * mkTerm(Kind kind, const std::vector<Term>& children)
782 * Unsigned remainder from truncating division of two bit-vectors.
784 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
786 * mkTerm(Kind kind, Term child1, Term child2)
787 * mkTerm(Kind kind, const std::vector<Term>& children)
791 * Two's complement signed division of two bit-vectors.
793 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
795 * mkTerm(Kind kind, Term child1, Term child2)
796 * mkTerm(Kind kind, const std::vector<Term>& children)
800 * Two's complement signed remainder of two bit-vectors
801 * (sign follows dividend).
803 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
805 * mkTerm(Kind kind, Term child1, Term child2)
806 * mkTerm(Kind kind, const std::vector<Term>& children)
810 * Two's complement signed remainder
811 * (sign follows divisor).
813 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
815 * mkTerm(Kind kind, Term child1, Term child2)
816 * mkTerm(Kind kind, const std::vector<Term>& children)
820 * Unsigned division of two bit-vectors, truncating towards 0
821 * (defined to be the all-ones bit pattern, if divisor is 0).
823 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
825 * mkTerm(Kind kind, Term child1, Term child2)
826 * mkTerm(Kind kind, const std::vector<Term>& children)
828 BITVECTOR_UDIV_TOTAL
,
830 * Unsigned remainder from truncating division of two bit-vectors
831 * (defined to be equal to the dividend, if divisor is 0).
833 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
835 * mkTerm(Kind kind, Term child1, Term child2)
836 * mkTerm(Kind kind, const std::vector<Term>& children)
838 BITVECTOR_UREM_TOTAL
,
840 * Bit-vector shift left.
841 * The two bit-vector parameters must have same width.
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 logical shift right.
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 arithmetic 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 unsigned less than.
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 or equal.
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 greater than.
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 or equal.
901 * The two bit-vector parameters must have same width.
904 * mkTerm(Kind kind, Term child1, Term child2)
905 * mkTerm(Kind kind, const std::vector<Term>& children)
908 /* Bit-vector signed less than.
909 * The two bit-vector parameters must have same width.
912 * mkTerm(Kind kind, Term child1, Term child2)
913 * mkTerm(Kind kind, const std::vector<Term>& children)
917 * Bit-vector signed less than or equal.
918 * The two bit-vector parameters must have same width.
920 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
922 * mkTerm(Kind kind, Term child1, Term child2)
923 * mkTerm(Kind kind, const std::vector<Term>& children)
927 * Bit-vector signed greater than.
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 or equal.
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 unsigned less than, returns bit-vector of size 1.
949 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
951 * mkTerm(Kind kind, Term child1, Term child2)
952 * mkTerm(Kind kind, const std::vector<Term>& children)
956 * Bit-vector signed less than. returns bit-vector of size 1.
958 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
960 * mkTerm(Kind kind, Term child1, Term child2)
961 * mkTerm(Kind kind, const std::vector<Term>& children)
965 * Same semantics as regular ITE, but condition is bit-vector of size 1.
967 * -[1]: Term of bit-vector sort of size 1, representing the condition
968 * -[2]: Term reprsenting the 'then' branch
969 * -[3]: Term representing the 'else' branch
970 * 'then' and 'else' term must have same base sort.
972 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
973 * mkTerm(Kind kind, const std::vector<Term>& children)
979 * -[1]: Term of bit-vector sort
981 * mkTerm(Kind kind, Term child)
987 * -[1]: Term of bit-vector sort
989 * mkTerm(Kind kind, Term child)
993 /* formula to be treated as a bv atom via eager bit-blasting
994 * (internal-only symbol) */
995 BITVECTOR_EAGER_ATOM
,
996 /* term to be treated as a variable. used for eager bit-blasting Ackermann
997 * expansion of bvudiv (internal-only symbol) */
998 BITVECTOR_ACKERMANIZE_UDIV
,
999 /* term to be treated as a variable. used for eager bit-blasting Ackermann
1000 * expansion of bvurem (internal-only symbol) */
1001 BITVECTOR_ACKERMANIZE_UREM
,
1002 /* operator for the bit-vector boolean bit extract.
1003 * One parameter, parameter is the index of the bit to extract */
1007 * Operator for bit-vector extract (from index 'high' to 'low').
1009 * -[1]: The 'high' index
1010 * -[2]: The 'low' index
1012 * mkOpTerm(Kind kind, uint32_t param, uint32_t param)
1014 BITVECTOR_EXTRACT_OP
,
1016 * Operator for bit-vector repeat.
1018 * -[1]: Number of times to repeat a given bit-vector
1020 * mkOpTerm(Kind kind, uint32_t param).
1022 BITVECTOR_REPEAT_OP
,
1024 * Operator for bit-vector zero-extend.
1026 * -[1]: Number of bits by which a given bit-vector is to be extended
1028 * mkOpTerm(Kind kind, uint32_t param).
1030 BITVECTOR_ZERO_EXTEND_OP
,
1032 * Operator for bit-vector sign-extend.
1034 * -[1]: Number of bits by which a given bit-vector is to be extended
1036 * mkOpTerm(Kind kind, uint32_t param).
1038 BITVECTOR_SIGN_EXTEND_OP
,
1040 * Operator for bit-vector rotate left.
1042 * -[1]: Number of bits by which a given bit-vector is to be rotated
1044 * mkOpTerm(Kind kind, uint32_t param).
1046 BITVECTOR_ROTATE_LEFT_OP
,
1048 * Operator for bit-vector rotate right.
1050 * -[1]: Number of bits by which a given bit-vector is to be rotated
1052 * mkOpTerm(Kind kind, uint32_t param).
1054 BITVECTOR_ROTATE_RIGHT_OP
,
1056 /* bit-vector boolean bit extract.
1057 * first parameter is a BITVECTOR_BITOF_OP, second is a bit-vector term */
1060 /* Bit-vector extract.
1062 * -[1]: BITVECTOR_EXTRACT_OP Term
1063 * -[2]: Term of bit-vector sort
1065 * mkTerm(Term opTerm, Term child)
1066 * mkTerm(Term opTerm, const std::vector<Term>& children)
1069 /* Bit-vector repeat.
1071 * -[1]: BITVECTOR_REPEAT_OP Term
1072 * -[2]: Term of bit-vector sort
1074 * mkTerm(Term opTerm, Term child)
1075 * mkTerm(Term opTerm, const std::vector<Term>& children)
1078 /* Bit-vector zero-extend.
1080 * -[1]: BITVECTOR_ZERO_EXTEND_OP Term
1081 * -[2]: Term of bit-vector sort
1083 * mkTerm(Term opTerm, Term child)
1084 * mkTerm(Term opTerm, const std::vector<Term>& children)
1086 BITVECTOR_ZERO_EXTEND
,
1087 /* Bit-vector sign-extend.
1089 * -[1]: BITVECTOR_SIGN_EXTEND_OP Term
1090 * -[2]: Term of bit-vector sort
1092 * mkTerm(Term opTerm, Term child)
1093 * mkTerm(Term opTerm, const std::vector<Term>& children)
1095 BITVECTOR_SIGN_EXTEND
,
1096 /* Bit-vector rotate left.
1098 * -[1]: BITVECTOR_ROTATE_LEFT_OP Term
1099 * -[2]: Term of bit-vector sort
1101 * mkTerm(Term opTerm, Term child)
1102 * mkTerm(Term opTerm, const std::vector<Term>& children)
1104 BITVECTOR_ROTATE_LEFT
,
1106 * Bit-vector rotate right.
1108 * -[1]: BITVECTOR_ROTATE_RIGHT_OP Term
1109 * -[2]: Term of bit-vector sort
1111 * mkTerm(Term opTerm, Term child)
1112 * mkTerm(Term opTerm, const std::vector<Term>& children)
1114 BITVECTOR_ROTATE_RIGHT
,
1116 * Operator for the conversion from Integer to bit-vector.
1118 * -[1]: Size of the bit-vector to convert to
1120 * mkOpTerm(Kind kind, uint32_t param).
1122 INT_TO_BITVECTOR_OP
,
1124 * Integer conversion to bit-vector.
1126 * -[1]: INT_TO_BITVECTOR_OP Term
1127 * -[2]: Integer term
1129 * mkTerm(Kind kind, Term child1, Term child2)
1130 * mkTerm(Kind kind, const std::vector<Term>& children)
1134 * Bit-vector conversion to (nonnegative) integer.
1136 * -[1]: Term of bit-vector sort
1138 * mkTerm(Kind kind, Term child)
1142 /* FP -------------------------------------------------------------------- */
1145 * Floating-point constant, constructed from a double or string.
1147 * -[1]: Size of the exponent
1148 * -[2]: Size of the significand
1149 * -[3]: Value of the floating-point constant as a bit-vector term
1151 * mkFloatingPoint(uint32_t sig, uint32_t exp, Term val)
1153 CONST_FLOATINGPOINT
,
1155 * Floating-point rounding mode term.
1157 * mkRoundingMode(RoundingMode rm)
1161 * Create floating-point literal from bit-vector triple.
1163 * -[1]: Sign bit as a bit-vector term
1164 * -[2]: Exponent bits as a bit-vector term
1165 * -[3]: Significand bits as a bit-vector term (without hidden bit)
1167 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1168 * mkTerm(Kind kind, const std::vector<Term>& children)
1172 * Floating-point equality.
1174 * -[1]..[2]: Terms of floating point sort
1176 * mkTerm(Kind kind, Term child1, Term child2)
1177 * mkTerm(Kind kind, const std::vector<Term>& children)
1181 * Floating-point absolute value.
1183 * -[1]: Term of floating point sort
1185 * mkTerm(Kind kind, Term child)
1189 * Floating-point negation.
1191 * -[1]: Term of floating point sort
1193 * mkTerm(Kind kind, Term child)
1197 * Floating-point addition.
1199 * -[1]: CONST_ROUNDINGMODE
1200 * -[2]: Term of sort FloatingPoint
1201 * -[3]: Term of sort FloatingPoint
1203 * mkTerm(Kind kind, Term child1, Term child2, child3)
1204 * mkTerm(Kind kind, const std::vector<Term>& children)
1208 * Floating-point sutraction.
1210 * -[1]: CONST_ROUNDINGMODE
1211 * -[2]: Term of sort FloatingPoint
1212 * -[3]: Term of sort FloatingPoint
1214 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1215 * mkTerm(Kind kind, const std::vector<Term>& children)
1219 * Floating-point multiply.
1221 * -[1]: CONST_ROUNDINGMODE
1222 * -[2]: Term of sort FloatingPoint
1223 * -[3]: Term of sort FloatingPoint
1225 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1226 * mkTerm(Kind kind, const std::vector<Term>& children)
1230 * Floating-point division.
1232 * -[1]: CONST_ROUNDINGMODE
1233 * -[2]: Term of sort FloatingPoint
1234 * -[3]: Term of sort FloatingPoint
1236 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1237 * mkTerm(Kind kind, const std::vector<Term>& children)
1241 * Floating-point fused multiply and add.
1243 * -[1]: CONST_ROUNDINGMODE
1244 * -[2]: Term of sort FloatingPoint
1245 * -[3]: Term of sort FloatingPoint
1246 * -[4]: Term of sort FloatingPoint
1248 * mkTerm(Kind kind, const std::vector<Term>& children)
1252 * Floating-point square root.
1254 * -[1]: CONST_ROUNDINGMODE
1255 * -[2]: Term of sort FloatingPoint
1257 * mkTerm(Kind kind, Term child1, Term child2)
1258 * mkTerm(Kind kind, const std::vector<Term>& children)
1262 * Floating-point remainder.
1264 * -[1]..[2]: Terms of floating point sort
1266 * mkTerm(Kind kind, Term child1, Term child2)
1267 * mkTerm(Kind kind, const std::vector<Term>& children)
1271 * Floating-point round to integral.
1273 * -[1]..[2]: Terms of floating point sort
1275 * mkTerm(Kind kind, Term child1, Term child2)
1276 * mkTerm(Kind kind, const std::vector<Term>& children)
1280 * Floating-point minimum.
1282 * -[1]..[2]: Terms of floating point sort
1284 * mkTerm(Kind kind, Term child1, Term child2)
1285 * mkTerm(Kind kind, const std::vector<Term>& children)
1289 * Floating-point maximum.
1291 * -[1]..[2]: Terms of floating point sort
1293 * mkTerm(Kind kind, Term child1, Term child2)
1294 * mkTerm(Kind kind, const std::vector<Term>& children)
1298 /* floating-point minimum (defined for all inputs) */
1299 FLOATINGPOINT_MIN_TOTAL
,
1300 /* floating-point maximum (defined for all inputs) */
1301 FLOATINGPOINT_MAX_TOTAL
,
1304 * Floating-point less than or equal.
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 less than.
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 or equal.
1324 * -[1]..[2]: Terms of floating point sort
1326 * mkTerm(Kind kind, Term child1, Term child2)
1327 * mkTerm(Kind kind, const std::vector<Term>& children)
1331 * Floating-point greater than.
1334 * mkTerm(Kind kind, Term child1, Term child2)
1335 * mkTerm(Kind kind, const std::vector<Term>& children)
1339 * Floating-point is normal.
1341 * -[1]: Term of floating point sort
1343 * mkTerm(Kind kind, Term child)
1347 * Floating-point is sub-normal.
1349 * -[1]: Term of floating point sort
1351 * mkTerm(Kind kind, Term child)
1355 * Floating-point is zero.
1357 * -[1]: Term of floating point sort
1359 * mkTerm(Kind kind, Term child)
1363 * Floating-point is infinite.
1365 * -[1]: Term of floating point sort
1367 * mkTerm(Kind kind, Term child)
1369 FLOATINGPOINT_ISINF
,
1371 * Floating-point is NaN.
1373 * -[1]: Term of floating point sort
1375 * mkTerm(Kind kind, Term child)
1377 FLOATINGPOINT_ISNAN
,
1379 * Floating-point is negative.
1381 * -[1]: Term of floating point sort
1383 * mkTerm(Kind kind, Term child)
1385 FLOATINGPOINT_ISNEG
,
1387 * Floating-point is positive.
1389 * -[1]: Term of floating point sort
1391 * mkTerm(Kind kind, Term child)
1393 FLOATINGPOINT_ISPOS
,
1395 * Operator for to_fp from bit vector.
1397 * -[1]: Exponent size
1398 * -[2]: Significand size
1400 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1402 FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP
,
1404 * Conversion from an IEEE-754 bit vector to floating-point.
1406 * -[1]: FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP Term
1407 * -[2]: Term of sort FloatingPoint
1409 * mkTerm(Term opTerm, Term child)
1410 * mkTerm(Term opTerm, const std::vector<Term>& children)
1412 FLOATINGPOINT_TO_FP_IEEE_BITVECTOR
,
1414 * Operator for to_fp from floating point.
1416 * -[1]: Exponent size
1417 * -[2]: Significand size
1419 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1421 FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP
,
1423 * Conversion between floating-point sorts.
1425 * -[1]: FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP Term
1426 * -[2]: Term of sort FloatingPoint
1428 * mkTerm(Term opTerm, Term child)
1429 * mkTerm(Term opTerm, const std::vector<Term>& children)
1431 FLOATINGPOINT_TO_FP_FLOATINGPOINT
,
1433 * Operator for to_fp from real.
1435 * -[1]: Exponent size
1436 * -[2]: Significand size
1438 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1440 FLOATINGPOINT_TO_FP_REAL_OP
,
1442 * Conversion from a real to floating-point.
1444 * -[1]: FLOATINGPOINT_TO_FP_REAL_OP Term
1445 * -[2]: Term of sort FloatingPoint
1447 * mkTerm(Term opTerm, Term child)
1448 * mkTerm(Term opTerm, const std::vector<Term>& children)
1450 FLOATINGPOINT_TO_FP_REAL
,
1452 * Operator for to_fp from signed bit vector.
1454 * -[1]: Exponent size
1455 * -[2]: Significand size
1457 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1459 FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP
,
1461 * Conversion from a signed bit vector to floating-point.
1463 * -[1]: FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP Term
1464 * -[2]: Term of sort FloatingPoint
1466 * mkTerm(Term opTerm, Term child)
1467 * mkTerm(Term opTerm, const std::vector<Term>& children)
1469 FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR
,
1471 * Operator for to_fp from unsigned bit vector.
1473 * -[1]: Exponent size
1474 * -[2]: Significand size
1476 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1478 FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP
,
1480 * Operator for converting an unsigned bit vector to floating-point.
1482 * -[1]: FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP Term
1483 * -[2]: Term of sort FloatingPoint
1485 * mkTerm(Term opTerm, Term child)
1486 * mkTerm(Term opTerm, const std::vector<Term>& children)
1488 FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR
,
1490 * Operator for a generic to_fp.
1492 * -[1]: exponent size
1493 * -[2]: Significand size
1495 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1497 FLOATINGPOINT_TO_FP_GENERIC_OP
,
1499 * Generic conversion to floating-point, used in parsing only.
1501 * -[1]: FLOATINGPOINT_TO_FP_GENERIC_OP Term
1502 * -[2]: Term of sort FloatingPoint
1504 * mkTerm(Term opTerm, Term child)
1505 * mkTerm(Term opTerm, const std::vector<Term>& children)
1507 FLOATINGPOINT_TO_FP_GENERIC
,
1509 * Operator for to_ubv.
1511 * -[1]: Size of the bit-vector to convert to
1513 * mkOpTerm(Kind kind, uint32_t param)
1515 FLOATINGPOINT_TO_UBV_OP
,
1517 * Conversion from a floating-point value to an unsigned bit vector.
1519 * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_OP Term
1520 * -[2]: Term of sort FloatingPoint
1522 * mkTerm(Term opTerm, Term child)
1523 * mkTerm(Term opTerm, const std::vector<Term>& children)
1525 FLOATINGPOINT_TO_UBV
,
1527 * Operator for to_ubv_total.
1529 * -[1]: Size of the bit-vector to convert to
1531 * mkOpTerm(Kind kind, uint32_t param)
1533 FLOATINGPOINT_TO_UBV_TOTAL_OP
,
1535 * Conversion from a floating-point value to an unsigned bit vector
1536 * (defined for all inputs).
1538 * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_TOTAL_OP Term
1539 * -[2]: Term of sort FloatingPoint
1541 * mkTerm(Term opTerm, Term child)
1542 * mkTerm(Term opTerm, const std::vector<Term>& children)
1544 FLOATINGPOINT_TO_UBV_TOTAL
,
1546 * Operator for to_sbv.
1548 * -[1]: Size of the bit-vector to convert to
1550 * mkOpTerm(Kind kind, uint32_t param)
1552 FLOATINGPOINT_TO_SBV_OP
,
1554 * Conversion from a floating-point value to a signed bit vector.
1556 * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_OP Term
1557 * -[2]: Term of sort FloatingPoint
1559 * mkTerm(Term opTerm, Term child)
1560 * mkTerm(Term opTerm, const std::vector<Term>& children)
1562 FLOATINGPOINT_TO_SBV
,
1564 * Operator for to_sbv_total.
1566 * -[1]: Size of the bit-vector to convert to
1568 * mkOpTerm(Kind kind, uint32_t param)
1570 FLOATINGPOINT_TO_SBV_TOTAL_OP
,
1572 * Conversion from a floating-point value to a signed bit vector
1573 * (defined for all inputs).
1575 * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_TOTAL_OP Term
1576 * -[2]: Term of sort FloatingPoint
1578 * mkTerm(Term opTerm, Term child)
1579 * mkTerm(Term opTerm, const std::vector<Term>& children)
1581 FLOATINGPOINT_TO_SBV_TOTAL
,
1583 * Floating-point to real.
1585 * -[1]: Term of sort FloatingPoint
1587 * mkTerm(Kind kind, Term child)
1589 FLOATINGPOINT_TO_REAL
,
1591 * Floating-point to real (defined for all inputs).
1593 * -[1]: Term of sort FloatingPoint
1595 * mkTerm(Kind kind, Term child)
1597 FLOATINGPOINT_TO_REAL_TOTAL
,
1599 /* Arrays ---------------------------------------------------------------- */
1604 * -[1]: Term of array sort
1605 * -[2]: Selection index
1607 * mkTerm(Term opTerm, Term child1, Term child2)
1608 * mkTerm(Term opTerm, const std::vector<Term>& children)
1614 * -[1]: Term of array sort
1616 * -[3]: Term to store at the index
1618 * mkTerm(Term opTerm, Term child1, Term child2, Term child3)
1619 * mkTerm(Term opTerm, const std::vector<Term>& children)
1626 * -[2]: Term representing a constant
1628 * mkTerm(Term opTerm, Term child1, Term child2)
1629 * mkTerm(Term opTerm, const std::vector<Term>& children)
1631 * Note: We currently support the creation of constant arrays, but under some
1632 * conditions when there is a chain of equalities connecting two constant
1633 * arrays, the solver doesn't know what to do and aborts (Issue #1667).
1637 /* array table function (internal-only symbol) */
1639 /* array lambda (internal-only symbol) */
1641 /* partial array select, for internal use only */
1643 /* partial array select, for internal use only */
1647 /* Datatypes ------------------------------------------------------------- */
1650 * Constructor application.
1652 * -[1]: Constructor (operator term)
1653 * -[2]..[n]: Parameters to the constructor
1655 * mkTerm(Kind kind, OpTerm opTerm)
1656 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1657 * mkTerm(Kind kind, OpTerm opTerm, Term child1, Term child2)
1658 * mkTerm(Kind kind, OpTerm opTerm, Term child1, Term child2, Term child3)
1659 * mkTerm(Kind kind, OpTerm opTerm, const std::vector<Term>& children)
1663 * Datatype selector application.
1665 * -[1]: Selector (operator term)
1666 * -[2]: Datatype term (undefined if mis-applied)
1668 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1672 * Datatype selector application.
1674 * -[1]: Selector (operator term)
1675 * -[2]: Datatype term (defined rigidly if mis-applied)
1677 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1679 APPLY_SELECTOR_TOTAL
,
1681 * Datatype tester application.
1684 * -[2]: Datatype term
1686 * mkTerm(Kind kind, Term child1, Term child2)
1687 * mkTerm(Kind kind, const std::vector<Term>& children)
1691 /* Parametric datatype term. */
1692 PARAMETRIC_DATATYPE
,
1693 /* type ascription, for datatype constructor applications;
1694 * first parameter is an ASCRIPTION_TYPE, second is the datatype constructor
1695 * application being ascribed */
1696 APPLY_TYPE_ASCRIPTION
,
1699 * Operator for a tuple update.
1701 * -[1]: Index of the tuple to be updated
1703 * mkOpTerm(Kind kind, uint32_t param)
1709 * -[1]: TUPLE_UPDATE_OP (which references an index)
1711 * -[3]: Element to store in the tuple at the given index
1713 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1714 * mkTerm(Kind kind, const std::vector<Term>& children)
1718 * Operator for a record update.
1720 * -[1]: Name of the field to be updated
1722 * mkOpTerm(Kind kind, const std::string& param)
1728 * -[1]: RECORD_UPDATE_OP Term (which references a field)
1729 * -[2]: Record term to update
1730 * -[3]: Element to store in the record in the given field
1732 * mkTerm(Kind kind, Term child1, Term child2)
1733 * mkTerm(Kind kind, const std::vector<Term>& children)
1737 /* datatypes size */
1739 /* datatypes height bound */
1741 /* datatypes height bound */
1743 /* datatypes sygus bound */
1745 /* datatypes sygus term order */
1746 DT_SYGUS_TERM_ORDER
,
1747 /* datatypes sygus is constant */
1751 /* Separation Logic ------------------------------------------------------ */
1754 * Separation logic nil term.
1757 * mkSepNil(Sort sort)
1761 * Separation logic empty heap.
1763 * -[1]: Term of the same sort as the sort of the location of the heap
1764 * that is constrained to be empty
1765 * -[2]: Term of the same sort as the data sort of the heap that is
1766 * that is constrained to be empty
1768 * mkTerm(Kind kind, Term child1, Term child2)
1769 * mkTerm(Kind kind, const std::vector<Term>& children)
1773 * Separation logic points-to relation.
1775 * -[1]: Location of the points-to constraint
1776 * -[2]: Data of the points-to constraint
1778 * mkTerm(Kind kind, Term child1, Term child2)
1779 * mkTerm(Kind kind, const std::vector<Term>& children)
1783 * Separation logic star.
1784 * Parameters: n >= 2
1785 * -[1]..[n]: Child constraints that hold in disjoint (separated) heaps
1787 * mkTerm(Kind kind, Term child1, Term child2)
1788 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1789 * mkTerm(Kind kind, const std::vector<Term>& children)
1793 * Separation logic magic wand.
1795 * -[1]: Antecendant of the magic wand constraint
1796 * -[2]: Conclusion of the magic wand constraint, which is asserted to
1797 * hold in all heaps that are disjoint extensions of the antecedent.
1799 * mkTerm(Kind kind, Term child1, Term child2)
1800 * mkTerm(Kind kind, const std::vector<Term>& children)
1804 /* separation label (internal use only) */
1808 /* Sets ------------------------------------------------------------------ */
1811 * Empty set constant.
1813 * -[1]: Sort of the set elements
1815 * mkEmptySet(Sort sort)
1821 * -[1]..[2]: Terms of set sort
1823 * mkTerm(Kind kind, Term child1, Term child2)
1824 * mkTerm(Kind kind, const std::vector<Term>& children)
1830 * -[1]..[2]: Terms of set sort
1832 * mkTerm(Kind kind, Term child1, Term child2)
1833 * mkTerm(Kind kind, const std::vector<Term>& children)
1839 * -[1]..[2]: Terms of set sort
1841 * mkTerm(Kind kind, Term child1, Term child2)
1842 * mkTerm(Kind kind, const std::vector<Term>& children)
1848 * -[1]..[2]: Terms of set sort, [1] a subset of set [2]?
1850 * mkTerm(Kind kind, Term child1, Term child2)
1851 * mkTerm(Kind kind, const std::vector<Term>& children)
1855 * Set membership predicate.
1857 * -[1]..[2]: Terms of set sort, [1] a member of set [2]?
1859 * mkTerm(Kind kind, Term child1, Term child2)
1860 * mkTerm(Kind kind, const std::vector<Term>& children)
1864 * The set of the single element given as a parameter.
1866 * -[1]: Single element
1868 * mkTerm(Kind kind, Term child)
1872 * The set obtained by inserting elements;
1874 * -[1]..[n-1]: Elements inserted into set [n]
1877 * mkTerm(Kind kind, Term child)
1878 * mkTerm(Kind kind, Term child1, Term child2)
1879 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1880 * mkTerm(Kind kind, const std::vector<Term>& children)
1886 * -[1]: Set to determine the cardinality of
1888 * mkTerm(Kind kind, Term child)
1892 * Set complement with respect to finite universe.
1894 * -[1]: Set to complement
1896 * mkTerm(Kind kind, Term child)
1900 * Finite universe set.
1901 * All set variables must be interpreted as subsets of it.
1903 * mkUniverseSet(Sort sort)
1909 * -[1]..[2]: Terms of set sort
1911 * mkTerm(Kind kind, Term child1, Term child2)
1912 * mkTerm(Kind kind, const std::vector<Term>& children)
1916 * Set cartesian product.
1918 * -[1]..[2]: Terms of set sort
1920 * mkTerm(Kind kind, Term child1, Term child2)
1921 * mkTerm(Kind kind, const std::vector<Term>& children)
1927 * -[1]: Term of set sort
1929 * mkTerm(Kind kind, Term child)
1933 * Set transitive closure.
1935 * -[1]: Term of set sort
1937 * mkTerm(Kind kind, Term child)
1943 * -[1]..[2]: Terms of set sort
1945 * mkTerm(Kind kind, Term child1, Term child2)
1946 * mkTerm(Kind kind, const std::vector<Term>& children)
1952 * -[1]: Term of set sort
1954 * mkTerm(Kind kind, Term child)
1958 /* Strings --------------------------------------------------------------- */
1963 * -[1]..[n]: Terms of String sort
1965 * mkTerm(Kind kind, Term child1, Term child2)
1966 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1967 * mkTerm(Kind kind, const std::vector<Term>& children)
1971 * String membership.
1973 * -[1]..[2]: Terms of String sort
1975 * mkTerm(Kind kind, Term child1, Term child2)
1976 * mkTerm(Kind kind, const std::vector<Term>& children)
1982 * -[1]: Term of String sort
1984 * mkTerm(Kind kind, Term child)
1989 * Extracts a substring, starting at index i and of length l, from a string
1990 * s. If the start index is negative, the start index is greater than the
1991 * length of the string, or the length is negative, the result is the empty
1994 * -[1]: Term of sort String
1995 * -[2]: Term of sort Integer (index i)
1996 * -[3]: Term of sort Integer (length l)
1998 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1999 * mkTerm(Kind kind, const std::vector<Term>& children)
2003 * String character at.
2004 * Returns the character at index i from a string s. If the index is negative
2005 * or the index is greater than the length of the string, the result is the
2006 * empty string. Otherwise the result is a string of length 1.
2008 * -[1]: Term of sort String (string s)
2009 * -[2]: Term of sort Integer (index i)
2011 * mkTerm(Kind kind, Term child1, Term child2)
2012 * mkTerm(Kind kind, const std::vector<Term>& children)
2017 * Checks whether a string s1 contains another string s2. If s2 is empty, the
2018 * result is always true.
2020 * -[1]: Term of sort String (the string s1)
2021 * -[2]: Term of sort String (the string s2)
2023 * mkTerm(Kind kind, Term child1, Term child2)
2024 * mkTerm(Kind kind, const std::vector<Term>& children)
2029 * Returns the index of a substring s2 in a string s1 starting at index i. If
2030 * the index is negative or greater than the length of string s1 or the
2031 * substring s2 does not appear in string s1 after index i, the result is -1.
2033 * -[1]: Term of sort String (substring s1)
2034 * -[2]: Term of sort String (substring s2)
2035 * -[3]: Term of sort Integer (index i)
2037 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2038 * mkTerm(Kind kind, const std::vector<Term>& children)
2043 * Replaces a string s2 in a string s1 with string s3. If s2 does not appear
2044 * in s1, s1 is returned unmodified.
2046 * -[1]: Term of sort String (string s1)
2047 * -[2]: Term of sort String (string s2)
2048 * -[3]: Term of sort String (string s3)
2050 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2051 * mkTerm(Kind kind, const std::vector<Term>& children)
2056 * Checks whether a string s1 is a prefix of string s2. If string s1 is
2057 * empty, this operator returns true.
2059 * -[1]: Term of sort String (string s1)
2060 * -[2]: Term of sort String (string s2)
2062 * mkTerm(Kind kind, Term child1, Term child2)
2063 * mkTerm(Kind kind, const std::vector<Term>& children)
2068 * Checks whether a string s1 is a suffix of string 2. If string s1 is empty,
2069 * this operator returns true.
2071 * -[1]: Term of sort String (string s1)
2072 * -[2]: Term of sort String (string s2)
2074 * mkTerm(Kind kind, Term child1, Term child2)
2075 * mkTerm(Kind kind, const std::vector<Term>& children)
2079 * Integer to string.
2080 * If the integer is negative this operator returns the empty string.
2082 * -[1]: Term of sort Integer
2084 * mkTerm(Kind kind, Term child)
2088 * String to integer (total function).
2089 * If the string does not contain an integer or the integer is negative, the
2090 * operator returns -1.
2092 * -[1]: Term of sort String
2094 * mkTerm(Kind kind, Term child)
2102 * mkString(const char* s)
2103 * mkString(const std::string& s)
2104 * mkString(const unsigned char c)
2105 * mkString(const std::vector<unsigned>& s)
2109 * Conversion from string to regexp.
2111 * -[1]: Term of sort String
2113 * mkTerm(Kind kind, Term child)
2117 * Regexp Concatenation .
2119 * -[1]..[2]: Terms of Regexp sort
2121 * mkTerm(Kind kind, Term child1, Term child2)
2122 * mkTerm(Kind kind, const std::vector<Term>& children)
2128 * -[1]..[2]: Terms of Regexp sort
2130 * mkTerm(Kind kind, Term child1, Term child2)
2131 * mkTerm(Kind kind, const std::vector<Term>& children)
2135 * Regexp intersection.
2137 * -[1]..[2]: Terms of Regexp sort
2139 * mkTerm(Kind kind, Term child1, Term child2)
2140 * mkTerm(Kind kind, const std::vector<Term>& children)
2146 * -[1]: Term of sort Regexp
2148 * mkTerm(Kind kind, Term child)
2154 * -[1]: Term of sort Regexp
2156 * mkTerm(Kind kind, Term child)
2162 * -[1]: Term of sort Regexp
2164 * mkTerm(Kind kind, Term child)
2170 * -[1]: Lower bound character for the range
2171 * -[2]: Upper bound character for the range
2173 * mkTerm(Kind kind, Term child1, Term child2)
2174 * mkTerm(Kind kind, const std::vector<Term>& children)
2180 * -[1]: Term of sort RegExp
2181 * -[2]: Lower bound for the number of repetitions of the first argument
2182 * -[3]: Upper bound for the number of repetitions of the first argument
2184 * mkTerm(Kind kind, Term child1, Term child2)
2185 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2186 * mkTerm(Kind kind, const std::vector<Term>& children)
2198 * Regexp all characters.
2206 /* regexp rv (internal use only) */
2210 /* Quantifiers ----------------------------------------------------------- */
2213 * Universally quantified formula.
2215 * -[1]: BOUND_VAR_LIST Term
2216 * -[2]: Quantifier body
2217 * -[3]: (optional) INST_PATTERN_LIST Term
2219 * mkTerm(Kind kind, Term child1, Term child2)
2220 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2221 * mkTerm(Kind kind, const std::vector<Term>& children)
2225 * Existentially quantified formula.
2227 * -[1]: BOUND_VAR_LIST Term
2228 * -[2]: Quantifier body
2229 * -[3]: (optional) INST_PATTERN_LIST Term
2231 * mkTerm(Kind kind, Term child1, Term child2)
2232 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2233 * mkTerm(Kind kind, const std::vector<Term>& children)
2237 /* instantiation constant */
2239 /* instantiation pattern */
2241 /* a list of bound variables (used to bind variables under a quantifier) */
2243 /* instantiation no-pattern */
2245 /* instantiation attribute */
2247 /* a list of instantiation patterns */
2249 /* predicate for specifying term in instantiation closure. */
2251 /* general rewrite rule (for rewrite-rules theory) */
2253 /* actual rewrite rule (for rewrite-rules theory) */
2255 /* actual reduction rule (for rewrite-rules theory) */
2257 /* actual deduction rule (for rewrite-rules theory) */
2260 /* Sort Kinds ------------------------------------------------------------ */
2264 /* a type parameter for type ascription */
2268 /* a datatype type index */
2272 /* set type, takes as parameter the type of the elements */
2276 /* specifies types of user-declared 'uninterpreted' sorts */
2280 /* a representation for basic types */
2282 /* a function type */
2284 /* the type of a symbolic expression */
2286 /* bit-vector type */
2288 /* floating-point type */
2292 /* ----------------------------------------------------------------------- */
2293 /* marks the upper-bound of this enumeration */
2298 * Get the string representation of a given kind.
2300 * @return the string representation of kind k
2302 std::string
kindToString(Kind k
) CVC4_PUBLIC
;
2305 * Serialize a kind to given stream.
2306 * @param out the output stream
2307 * @param k the kind to be serialized to the given output stream
2308 * @return the output stream
2310 std::ostream
& operator<<(std::ostream
& out
, Kind k
) CVC4_PUBLIC
;
2313 * Hash function for Kinds.
2315 struct CVC4_PUBLIC KindHashFunction
2317 size_t operator()(Kind k
) const;