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 (NodeValue::NBITS_KIND, currently 10 bits, see expr/node_value.h).
38 enum CVC4_PUBLIC 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 */
83 * -[1]..[2]: Terms with same sort
85 * mkTerm(Kind kind, Term child1, Term child2)
86 * mkTerm(Kind kind, const std::vector<Term>& children)
92 * -[1]..[n]: Terms with same sort
94 * mkTerm(Kind kind, Term child1, Term child2)
95 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
96 * mkTerm(Kind kind, const std::vector<Term>& children)
100 * First-order constant.
101 * Not permitted in bindings (forall, exists, ...).
105 * mkConst(const std::string& symbol, Sort sort)
111 * Permitted in bindings and in the lambda and quantifier bodies only.
115 * mkVar(const std::string& symbol, Sort sort)
120 /* Skolem variable (internal only) */
122 /* Symbolic expression (any arity) */
128 * -[1]: BOUND_VAR_LIST
131 * mkTerm(Kind kind, Term child1, Term child2)
132 * mkTerm(Kind kind, const std::vector<Term>& children)
136 * Hilbert choice (epsilon) expression.
138 * -[1]: BOUND_VAR_LIST
139 * -[2]: Hilbert choice body
141 * mkTerm(Kind kind, Term child1, Term child2)
142 * mkTerm(Kind kind, const std::vector<Term>& children)
148 * -[1]: Term of kind CHAIN_OP (represents a binary op)
149 * -[2]..[n]: Arguments to that operator
151 * mkTerm(Kind kind, Term child1, Term child2)
152 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
153 * mkTerm(Kind kind, const std::vector<Term>& children)
154 * Turned into a conjunction of binary applications of the operator on
155 * adjoining parameters.
161 * -[1]: Kind of the binary operation
163 * mkOpTerm(Kind opkind, Kind kind)
167 /* Boolean --------------------------------------------------------------- */
172 * -[1]: Boolean value of the constant
176 * mkBoolean(bool val)
181 * -[1]: Boolean Term to negate
183 * mkTerm(Kind kind, Term child)
188 * -[1]..[n]: Boolean Term of the conjunction
190 * mkTerm(Kind kind, Term child1, Term child2)
191 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
192 * mkTerm(Kind kind, const std::vector<Term>& children)
196 * Logical implication.
198 * -[1]..[2]: Boolean Terms, [1] implies [2]
200 * mkTerm(Kind kind, Term child1, Term child2)
201 * mkTerm(Kind kind, const std::vector<Term>& children)
206 * -[1]..[n]: Boolean Term of the disjunction
208 * mkTerm(Kind kind, Term child1, Term child2)
209 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
210 * mkTerm(Kind kind, const std::vector<Term>& children)
213 /* Logical exclusive or.
215 * -[1]..[2]: Boolean Terms, [1] xor [2]
217 * mkTerm(Kind kind, Term child1, Term child2)
218 * mkTerm(Kind kind, const std::vector<Term>& children)
223 * -[1] is a Boolean condition Term
224 * -[2] the 'then' Term
225 * -[3] the 'else' Term
226 * 'then' and 'else' term must have same base sort.
228 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
229 * mkTerm(Kind kind, const std::vector<Term>& children)
233 /* UF -------------------------------------------------------------------- */
235 /* Application of an uninterpreted function.
237 * -[1]: Function Term
238 * -[2]..[n]: Function argument instantiation Terms
240 * mkTerm(Kind kind, Term child1, Term child2)
241 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
242 * mkTerm(Kind kind, const std::vector<Term>& children)
246 /* Boolean term variable */
247 BOOLEAN_TERM_VARIABLE
,
250 * Cardinality constraint on sort S.
252 * -[1]: Term of sort S
253 * -[2]: Positive integer constant that bounds the cardinality of sort S
255 * mkTerm(Kind kind, Term child1, Term child2)
256 * mkTerm(Kind kind, const std::vector<Term>& children)
258 CARDINALITY_CONSTRAINT
,
260 /* Combined cardinality constraint. */
261 COMBINED_CARDINALITY_CONSTRAINT
,
262 /* Partial uninterpreted function application. */
264 /* cardinality value of sort S:
265 * first parameter is (any) term of sort S */
269 * Higher-order applicative encoding of function application.
271 * -[1]: Function to apply
272 * -[2]: Argument of the function
274 * mkTerm(Kind kind, Term child1, Term child2)
275 * mkTerm(Kind kind, const std::vector<Term>& children)
279 /* Arithmetic ------------------------------------------------------------ */
282 * Arithmetic addition.
284 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
286 * mkTerm(Kind kind, Term child1, Term child2)
287 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
288 * mkTerm(Kind kind, const std::vector<Term>& children)
292 * Arithmetic multiplication.
294 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
296 * mkTerm(Kind kind, Term child1, Term child2)
297 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
298 * mkTerm(Kind kind, const std::vector<Term>& children)
302 /* Synonym for MULT. */
306 * Arithmetic subtraction.
308 * -[1]..[2]: Terms of sort Integer, Real (sorts must match)
310 * mkTerm(Kind kind, Term child1, Term child2)
311 * mkTerm(Kind kind, const std::vector<Term>& children)
315 * Arithmetic negation.
317 * -[1]: Term of sort Integer, Real
319 * mkTerm(Kind kind, Term child)
323 * Real division, division by 0 undefined
325 * -[1]..[2]: Terms of sort Integer, Real
327 * mkTerm(Kind kind, Term child1, Term child2)
328 * mkTerm(Kind kind, const std::vector<Term>& children)
332 * Real division with interpreted division by 0
334 * -[1]..[2]: Terms of sort Integer, Real
336 * mkTerm(Kind kind, Term child1, Term child2)
337 * mkTerm(Kind kind, const std::vector<Term>& children)
341 * Integer division, division by 0 undefined.
343 * -[1]..[2]: Terms of sort Integer
345 * mkTerm(Kind kind, Term child1, Term child2)
346 * mkTerm(Kind kind, const std::vector<Term>& children)
350 * Integer division with interpreted division by 0.
352 * -[1]..[2]: Terms of sort Integer
354 * mkTerm(Kind kind, Term child1, Term child2)
355 * mkTerm(Kind kind, const std::vector<Term>& children)
359 * Integer modulus, division by 0 undefined.
361 * -[1]..[2]: Terms of sort Integer
363 * mkTerm(Kind kind, Term child1, Term child2)
364 * mkTerm(Kind kind, const std::vector<Term>& children)
368 * Integer modulus with interpreted division by 0.
370 * -[1]..[2]: Terms of sort Integer
372 * mkTerm(Kind kind, Term child1, Term child2)
373 * mkTerm(Kind kind, const std::vector<Term>& children)
379 * -[1]: Term of sort Integer
381 * mkTerm(Kind kind, Term child)
385 * Divisibility-by-k predicate.
387 * -[1]: DIVISIBLE_OP Term
390 * mkTerm(Kind kind, Term child1, Term child2)
391 * mkTerm(Kind kind, const std::vector<Term>& children)
397 * -[1]..[2]: Terms of sort Integer, Real
399 * mkTerm(Kind kind, Term child1, Term child2)
400 * mkTerm(Kind kind, const std::vector<Term>& children)
406 * -[1]: Term of sort Integer, Real
408 * mkTerm(Kind kind, Term child)
414 * -[1]: Term of sort Integer, Real
416 * mkTerm(Kind kind, Term child)
422 * -[1]: Term of sort Integer, Real
424 * mkTerm(Kind kind, Term child)
430 * -[1]: Term of sort Integer, Real
432 * mkTerm(Kind kind, Term child)
438 * -[1]: Term of sort Integer, Real
440 * mkTerm(Kind kind, Term child)
446 * -[1]: Term of sort Integer, Real
448 * mkTerm(Kind kind, Term child)
454 * -[1]: Term of sort Integer, Real
456 * mkTerm(Kind kind, Term child)
462 * -[1]: Term of sort Integer, Real
464 * mkTerm(Kind kind, Term child)
470 * -[1]: Term of sort Integer, Real
472 * mkTerm(Kind kind, Term child)
478 * -[1]: Term of sort Integer, Real
480 * mkTerm(Kind kind, Term child)
486 * -[1]: Term of sort Integer, Real
488 * mkTerm(Kind kind, Term child)
494 * -[1]: Term of sort Integer, Real
496 * mkTerm(Kind kind, Term child)
502 * -[1]: Term of sort Integer, Real
504 * mkTerm(Kind kind, Term child)
510 * -[1]: Term of sort Integer, Real
512 * mkTerm(Kind kind, Term child)
516 * Operator for the divisibility-by-k predicate.
518 * -[1]: The k to divide by (sort Integer)
520 * mkOpTerm(Kind kind, uint32_t param)
524 * Multiple-precision rational constant.
526 * See mkInteger(), mkReal(), mkRational()
528 * mkInteger(const char* s, uint32_t base = 10)
529 * mkInteger(const std::string& s, uint32_t base = 10)
530 * mkInteger(int32_t val)
531 * mkInteger(uint32_t val)
532 * mkInteger(int64_t val)
533 * mkInteger(uint64_t val)
534 * mkReal(const char* s, uint32_t base = 10)
535 * mkReal(const std::string& s, uint32_t base = 10)
536 * mkReal(int32_t val)
537 * mkReal(int64_t val)
538 * mkReal(uint32_t val)
539 * mkReal(uint64_t val)
540 * mkReal(int32_t num, int32_t den)
541 * mkReal(int64_t num, int64_t den)
542 * mkReal(uint32_t num, uint32_t den)
543 * mkReal(uint64_t num, uint64_t den)
549 * -[1]..[2]: Terms of sort Integer, Real; [1] < [2]
551 * mkTerm(Kind kind, Term child1, Term child2)
552 * mkTerm(Kind kind, const std::vector<Term>& children)
556 * Less than or equal.
558 * -[1]..[2]: Terms of sort Integer, Real; [1] <= [2]
560 * mkTerm(Kind kind, Term child1, Term child2)
561 * mkTerm(Kind kind, const std::vector<Term>& children)
567 * -[1]..[2]: Terms of sort Integer, Real, [1] > [2]
569 * mkTerm(Kind kind, Term child1, Term child2)
570 * mkTerm(Kind kind, const std::vector<Term>& children)
574 * Greater than or equal.
576 * -[1]..[2]: Terms of sort Integer, Real; [1] >= [2]
578 * mkTerm(Kind kind, Term child1, Term child2)
579 * mkTerm(Kind kind, const std::vector<Term>& children)
583 * Is-integer predicate.
585 * -[1]: Term of sort Integer, Real
587 * mkTerm(Kind kind, Term child)
591 * Convert Term to Integer by the floor function.
593 * -[1]: Term of sort Integer, Real
595 * mkTerm(Kind kind, Term child)
599 * Convert Term to Real.
601 * -[1]: Term of sort Integer, Real
602 * This is a no-op in CVC4, as Integer is a subtype of Real.
613 /* BV -------------------------------------------------------------------- */
616 * Fixed-size bit-vector constant.
620 * mkBitVector(uint32_t size, uint64_t val)
621 * mkBitVector(const char* s, uint32_t base = 2)
622 * mkBitVector(std::string& s, uint32_t base = 2)
626 * Concatenation of two or more bit-vectors.
628 * -[1]..[n]: Terms of bit-vector sort
630 * mkTerm(Kind kind, Term child1, Term child2)
631 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
632 * mkTerm(Kind kind, const std::vector<Term>& children)
638 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
640 * mkTerm(Kind kind, Term child1, Term child2)
641 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
642 * mkTerm(Kind kind, const std::vector<Term>& children)
648 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
650 * mkTerm(Kind kind, Term child1, Term child2)
651 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
652 * mkTerm(Kind kind, const std::vector<Term>& children)
658 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
660 * mkTerm(Kind kind, Term child1, Term child2)
661 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
662 * mkTerm(Kind kind, const std::vector<Term>& children)
668 * -[1]: Term of bit-vector sort
670 * mkTerm(Kind kind, Term child)
676 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
678 * mkTerm(Kind kind, Term child1, Term child2)
679 * mkTerm(Kind kind, const std::vector<Term>& children)
685 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
687 * mkTerm(Kind kind, Term child1, Term child2)
688 * mkTerm(Kind kind, const std::vector<Term>& children)
694 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
696 * mkTerm(Kind kind, Term child1, Term child2)
697 * mkTerm(Kind kind, const std::vector<Term>& children)
701 * Equality comparison (returns bit-vector of size 1).
703 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
705 * mkTerm(Kind kind, Term child1, Term child2)
706 * mkTerm(Kind kind, const std::vector<Term>& children)
710 * Multiplication of two or more bit-vectors.
712 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
714 * mkTerm(Kind kind, Term child1, Term child2)
715 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
716 * mkTerm(Kind kind, const std::vector<Term>& children)
720 * Addition of two or more bit-vectors.
722 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
724 * mkTerm(Kind kind, Term child1, Term child2)
725 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
726 * mkTerm(Kind kind, const std::vector<Term>& children)
730 * Subtraction of two bit-vectors.
732 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
734 * mkTerm(Kind kind, Term child1, Term child2)
735 * mkTerm(Kind kind, const std::vector<Term>& children)
739 * Negation of a bit-vector (two's complement).
741 * -[1]: Term of bit-vector sort
743 * mkTerm(Kind kind, Term child)
747 * Unsigned division of two bit-vectors, truncating towards 0.
749 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
751 * mkTerm(Kind kind, Term child1, Term child2)
752 * mkTerm(Kind kind, const std::vector<Term>& children)
756 * Unsigned remainder from truncating division 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 * Two's complement signed division of two bit-vectors.
767 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
769 * mkTerm(Kind kind, Term child1, Term child2)
770 * mkTerm(Kind kind, const std::vector<Term>& children)
774 * Two's complement signed remainder of two bit-vectors
775 * (sign follows dividend).
777 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
779 * mkTerm(Kind kind, Term child1, Term child2)
780 * mkTerm(Kind kind, const std::vector<Term>& children)
784 * Two's complement signed remainder
785 * (sign follows divisor).
787 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
789 * mkTerm(Kind kind, Term child1, Term child2)
790 * mkTerm(Kind kind, const std::vector<Term>& children)
794 * Unsigned division of two bit-vectors, truncating towards 0
795 * (defined to be the all-ones bit pattern, if divisor is 0).
797 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
799 * mkTerm(Kind kind, Term child1, Term child2)
800 * mkTerm(Kind kind, const std::vector<Term>& children)
802 BITVECTOR_UDIV_TOTAL
,
804 * Unsigned remainder from truncating division of two bit-vectors
805 * (defined to be equal to the dividend, if divisor is 0).
807 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
809 * mkTerm(Kind kind, Term child1, Term child2)
810 * mkTerm(Kind kind, const std::vector<Term>& children)
812 BITVECTOR_UREM_TOTAL
,
814 * Bit-vector shift left.
815 * The two bit-vector parameters must have same width.
817 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
819 * mkTerm(Kind kind, Term child1, Term child2)
820 * mkTerm(Kind kind, const std::vector<Term>& children)
824 * Bit-vector logical shift right.
825 * The two bit-vector parameters must have same width.
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 * Bit-vector arithmetic shift right.
835 * The two bit-vector parameters must have same width.
837 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
839 * mkTerm(Kind kind, Term child1, Term child2)
840 * mkTerm(Kind kind, const std::vector<Term>& children)
844 * Bit-vector unsigned less than.
845 * The two bit-vector parameters must have same width.
847 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
849 * mkTerm(Kind kind, Term child1, Term child2)
850 * mkTerm(Kind kind, const std::vector<Term>& children)
854 * Bit-vector unsigned less than or equal.
855 * The two bit-vector parameters must have same width.
857 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
859 * mkTerm(Kind kind, Term child1, Term child2)
860 * mkTerm(Kind kind, const std::vector<Term>& children)
864 * Bit-vector unsigned greater than.
865 * The two bit-vector parameters must have same width.
867 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
869 * mkTerm(Kind kind, Term child1, Term child2)
870 * mkTerm(Kind kind, const std::vector<Term>& children)
874 * Bit-vector unsigned greater than or equal.
875 * The two bit-vector parameters must have same width.
878 * mkTerm(Kind kind, Term child1, Term child2)
879 * mkTerm(Kind kind, const std::vector<Term>& children)
882 /* Bit-vector signed less than.
883 * The two bit-vector parameters must have same width.
886 * mkTerm(Kind kind, Term child1, Term child2)
887 * mkTerm(Kind kind, const std::vector<Term>& children)
891 * Bit-vector signed less than or equal.
892 * The two bit-vector parameters must have same width.
894 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
896 * mkTerm(Kind kind, Term child1, Term child2)
897 * mkTerm(Kind kind, const std::vector<Term>& children)
901 * Bit-vector signed greater than.
902 * The two bit-vector parameters must have same width.
904 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
906 * mkTerm(Kind kind, Term child1, Term child2)
907 * mkTerm(Kind kind, const std::vector<Term>& children)
911 * Bit-vector signed greater than or equal.
912 * The two bit-vector parameters must have same width.
914 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
916 * mkTerm(Kind kind, Term child1, Term child2)
917 * mkTerm(Kind kind, const std::vector<Term>& children)
921 * Bit-vector unsigned less than, returns bit-vector of size 1.
923 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
925 * mkTerm(Kind kind, Term child1, Term child2)
926 * mkTerm(Kind kind, const std::vector<Term>& children)
930 * Bit-vector signed less than. returns bit-vector of size 1.
932 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
934 * mkTerm(Kind kind, Term child1, Term child2)
935 * mkTerm(Kind kind, const std::vector<Term>& children)
939 * Same semantics as regular ITE, but condition is bit-vector of size 1.
941 * -[1]: Term of bit-vector sort of size 1, representing the condition
942 * -[2]: Term reprsenting the 'then' branch
943 * -[3]: Term representing the 'else' branch
944 * 'then' and 'else' term must have same base sort.
946 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
947 * mkTerm(Kind kind, const std::vector<Term>& children)
953 * -[1]: Term of bit-vector sort
955 * mkTerm(Kind kind, Term child)
961 * -[1]: Term of bit-vector sort
963 * mkTerm(Kind kind, Term child)
967 /* formula to be treated as a bv atom via eager bit-blasting
968 * (internal-only symbol) */
969 BITVECTOR_EAGER_ATOM
,
970 /* term to be treated as a variable. used for eager bit-blasting Ackermann
971 * expansion of bvudiv (internal-only symbol) */
972 BITVECTOR_ACKERMANIZE_UDIV
,
973 /* term to be treated as a variable. used for eager bit-blasting Ackermann
974 * expansion of bvurem (internal-only symbol) */
975 BITVECTOR_ACKERMANIZE_UREM
,
976 /* operator for the bit-vector boolean bit extract.
977 * One parameter, parameter is the index of the bit to extract */
981 * Operator for bit-vector extract (from index 'high' to 'low').
983 * -[1]: The 'high' index
984 * -[2]: The 'low' index
986 * mkOpTerm(Kind kind, uint32_t param, uint32_t param)
988 BITVECTOR_EXTRACT_OP
,
990 * Operator for bit-vector repeat.
992 * -[1]: Number of times to repeat a given bit-vector
994 * mkOpTerm(Kind kind, uint32_t param).
998 * Operator for bit-vector zero-extend.
1000 * -[1]: Number of bits by which a given bit-vector is to be extended
1002 * mkOpTerm(Kind kind, uint32_t param).
1004 BITVECTOR_ZERO_EXTEND_OP
,
1006 * Operator for bit-vector sign-extend.
1008 * -[1]: Number of bits by which a given bit-vector is to be extended
1010 * mkOpTerm(Kind kind, uint32_t param).
1012 BITVECTOR_SIGN_EXTEND_OP
,
1014 * Operator for bit-vector rotate left.
1016 * -[1]: Number of bits by which a given bit-vector is to be rotated
1018 * mkOpTerm(Kind kind, uint32_t param).
1020 BITVECTOR_ROTATE_LEFT_OP
,
1022 * Operator for bit-vector rotate right.
1024 * -[1]: Number of bits by which a given bit-vector is to be rotated
1026 * mkOpTerm(Kind kind, uint32_t param).
1028 BITVECTOR_ROTATE_RIGHT_OP
,
1030 /* bit-vector boolean bit extract.
1031 * first parameter is a BITVECTOR_BITOF_OP, second is a bit-vector term */
1034 /* Bit-vector extract.
1036 * -[1]: BITVECTOR_EXTRACT_OP Term
1037 * -[2]: Term of bit-vector sort
1039 * mkTerm(Term opTerm, Term child)
1040 * mkTerm(Term opTerm, const std::vector<Term>& children)
1043 /* Bit-vector repeat.
1045 * -[1]: BITVECTOR_REPEAT_OP Term
1046 * -[2]: Term of bit-vector sort
1048 * mkTerm(Term opTerm, Term child)
1049 * mkTerm(Term opTerm, const std::vector<Term>& children)
1052 /* Bit-vector zero-extend.
1054 * -[1]: BITVECTOR_ZERO_EXTEND_OP Term
1055 * -[2]: Term of bit-vector sort
1057 * mkTerm(Term opTerm, Term child)
1058 * mkTerm(Term opTerm, const std::vector<Term>& children)
1060 BITVECTOR_ZERO_EXTEND
,
1061 /* Bit-vector sign-extend.
1063 * -[1]: BITVECTOR_SIGN_EXTEND_OP Term
1064 * -[2]: Term of bit-vector sort
1066 * mkTerm(Term opTerm, Term child)
1067 * mkTerm(Term opTerm, const std::vector<Term>& children)
1069 BITVECTOR_SIGN_EXTEND
,
1070 /* Bit-vector rotate left.
1072 * -[1]: BITVECTOR_ROTATE_LEFT_OP Term
1073 * -[2]: Term of bit-vector sort
1075 * mkTerm(Term opTerm, Term child)
1076 * mkTerm(Term opTerm, const std::vector<Term>& children)
1078 BITVECTOR_ROTATE_LEFT
,
1080 * Bit-vector rotate right.
1082 * -[1]: BITVECTOR_ROTATE_RIGHT_OP Term
1083 * -[2]: Term of bit-vector sort
1085 * mkTerm(Term opTerm, Term child)
1086 * mkTerm(Term opTerm, const std::vector<Term>& children)
1088 BITVECTOR_ROTATE_RIGHT
,
1090 * Operator for the conversion from Integer to bit-vector.
1092 * -[1]: Size of the bit-vector to convert to
1094 * mkOpTerm(Kind kind, uint32_t param).
1096 INT_TO_BITVECTOR_OP
,
1098 * Integer conversion to bit-vector.
1100 * -[1]: INT_TO_BITVECTOR_OP Term
1101 * -[2]: Integer term
1103 * mkTerm(Kind kind, Term child1, Term child2)
1104 * mkTerm(Kind kind, const std::vector<Term>& children)
1108 * Bit-vector conversion to (nonnegative) integer.
1110 * -[1]: Term of bit-vector sort
1112 * mkTerm(Kind kind, Term child)
1116 /* FP -------------------------------------------------------------------- */
1119 * Floating-point constant, constructed from a double or string.
1121 * -[1]: Size of the exponent
1122 * -[2]: Size of the significand
1123 * -[3]: Value of the floating-point constant as a bit-vector term
1125 * mkFloatingPoint(uint32_t sig, uint32_t exp, Term val)
1127 CONST_FLOATINGPOINT
,
1129 * Floating-point rounding mode term.
1131 * mkRoundingMode(RoundingMode rm)
1135 * Create floating-point literal from bit-vector triple.
1137 * -[1]: Sign bit as a bit-vector term
1138 * -[2]: Exponent bits as a bit-vector term
1139 * -[3]: Significand bits as a bit-vector term (without hidden bit)
1141 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1142 * mkTerm(Kind kind, const std::vector<Term>& children)
1146 * Floating-point equality.
1148 * -[1]..[2]: Terms of floating point sort
1150 * mkTerm(Kind kind, Term child1, Term child2)
1151 * mkTerm(Kind kind, const std::vector<Term>& children)
1155 * Floating-point absolute value.
1157 * -[1]: Term of floating point sort
1159 * mkTerm(Kind kind, Term child)
1163 * Floating-point negation.
1165 * -[1]: Term of floating point sort
1167 * mkTerm(Kind kind, Term child)
1171 * Floating-point addition.
1173 * -[1]: CONST_ROUNDINGMODE
1174 * -[2]: Term of sort FloatingPoint
1175 * -[3]: Term of sort FloatingPoint
1177 * mkTerm(Kind kind, Term child1, Term child2, child3)
1178 * mkTerm(Kind kind, const std::vector<Term>& children)
1182 * Floating-point sutraction.
1184 * -[1]: CONST_ROUNDINGMODE
1185 * -[2]: Term of sort FloatingPoint
1186 * -[3]: Term of sort FloatingPoint
1188 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1189 * mkTerm(Kind kind, const std::vector<Term>& children)
1193 * Floating-point multiply.
1195 * -[1]: CONST_ROUNDINGMODE
1196 * -[2]: Term of sort FloatingPoint
1197 * -[3]: Term of sort FloatingPoint
1199 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1200 * mkTerm(Kind kind, const std::vector<Term>& children)
1204 * Floating-point division.
1206 * -[1]: CONST_ROUNDINGMODE
1207 * -[2]: Term of sort FloatingPoint
1208 * -[3]: Term of sort FloatingPoint
1210 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1211 * mkTerm(Kind kind, const std::vector<Term>& children)
1215 * Floating-point fused multiply and add.
1217 * -[1]: CONST_ROUNDINGMODE
1218 * -[2]: Term of sort FloatingPoint
1219 * -[3]: Term of sort FloatingPoint
1220 * -[4]: Term of sort FloatingPoint
1222 * mkTerm(Kind kind, const std::vector<Term>& children)
1226 * Floating-point square root.
1228 * -[1]: CONST_ROUNDINGMODE
1229 * -[2]: Term of sort FloatingPoint
1231 * mkTerm(Kind kind, Term child1, Term child2)
1232 * mkTerm(Kind kind, const std::vector<Term>& children)
1236 * Floating-point remainder.
1238 * -[1]..[2]: Terms of floating point sort
1240 * mkTerm(Kind kind, Term child1, Term child2)
1241 * mkTerm(Kind kind, const std::vector<Term>& children)
1245 * Floating-point round to integral.
1247 * -[1]..[2]: Terms of floating point sort
1249 * mkTerm(Kind kind, Term child1, Term child2)
1250 * mkTerm(Kind kind, const std::vector<Term>& children)
1254 * Floating-point minimum.
1256 * -[1]..[2]: Terms of floating point sort
1258 * mkTerm(Kind kind, Term child1, Term child2)
1259 * mkTerm(Kind kind, const std::vector<Term>& children)
1263 * Floating-point maximum.
1265 * -[1]..[2]: Terms of floating point sort
1267 * mkTerm(Kind kind, Term child1, Term child2)
1268 * mkTerm(Kind kind, const std::vector<Term>& children)
1272 /* floating-point minimum (defined for all inputs) */
1273 FLOATINGPOINT_MIN_TOTAL
,
1274 /* floating-point maximum (defined for all inputs) */
1275 FLOATINGPOINT_MAX_TOTAL
,
1278 * Floating-point less than or equal.
1280 * -[1]..[2]: Terms of floating point sort
1282 * mkTerm(Kind kind, Term child1, Term child2)
1283 * mkTerm(Kind kind, const std::vector<Term>& children)
1287 * Floating-point less than.
1289 * -[1]..[2]: Terms of floating point sort
1291 * mkTerm(Kind kind, Term child1, Term child2)
1292 * mkTerm(Kind kind, const std::vector<Term>& children)
1296 * Floating-point greater than or equal.
1298 * -[1]..[2]: Terms of floating point sort
1300 * mkTerm(Kind kind, Term child1, Term child2)
1301 * mkTerm(Kind kind, const std::vector<Term>& children)
1305 * Floating-point greater than.
1308 * mkTerm(Kind kind, Term child1, Term child2)
1309 * mkTerm(Kind kind, const std::vector<Term>& children)
1313 * Floating-point is normal.
1315 * -[1]: Term of floating point sort
1317 * mkTerm(Kind kind, Term child)
1321 * Floating-point is sub-normal.
1323 * -[1]: Term of floating point sort
1325 * mkTerm(Kind kind, Term child)
1329 * Floating-point is zero.
1331 * -[1]: Term of floating point sort
1333 * mkTerm(Kind kind, Term child)
1337 * Floating-point is infinite.
1339 * -[1]: Term of floating point sort
1341 * mkTerm(Kind kind, Term child)
1343 FLOATINGPOINT_ISINF
,
1345 * Floating-point is NaN.
1347 * -[1]: Term of floating point sort
1349 * mkTerm(Kind kind, Term child)
1351 FLOATINGPOINT_ISNAN
,
1353 * Floating-point is negative.
1355 * -[1]: Term of floating point sort
1357 * mkTerm(Kind kind, Term child)
1359 FLOATINGPOINT_ISNEG
,
1361 * Floating-point is positive.
1363 * -[1]: Term of floating point sort
1365 * mkTerm(Kind kind, Term child)
1367 FLOATINGPOINT_ISPOS
,
1369 * Operator for to_fp from bit vector.
1371 * -[1]: Exponent size
1372 * -[2]: Significand size
1374 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1376 FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP
,
1378 * Conversion from an IEEE-754 bit vector to floating-point.
1380 * -[1]: FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP Term
1381 * -[2]: Term of sort FloatingPoint
1383 * mkTerm(Term opTerm, Term child)
1384 * mkTerm(Term opTerm, const std::vector<Term>& children)
1386 FLOATINGPOINT_TO_FP_IEEE_BITVECTOR
,
1388 * Operator for to_fp from floating point.
1390 * -[1]: Exponent size
1391 * -[2]: Significand size
1393 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1395 FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP
,
1397 * Conversion between floating-point sorts.
1399 * -[1]: FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP Term
1400 * -[2]: Term of sort FloatingPoint
1402 * mkTerm(Term opTerm, Term child)
1403 * mkTerm(Term opTerm, const std::vector<Term>& children)
1405 FLOATINGPOINT_TO_FP_FLOATINGPOINT
,
1407 * Operator for to_fp from real.
1409 * -[1]: Exponent size
1410 * -[2]: Significand size
1412 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1414 FLOATINGPOINT_TO_FP_REAL_OP
,
1416 * Conversion from a real to floating-point.
1418 * -[1]: FLOATINGPOINT_TO_FP_REAL_OP Term
1419 * -[2]: Term of sort FloatingPoint
1421 * mkTerm(Term opTerm, Term child)
1422 * mkTerm(Term opTerm, const std::vector<Term>& children)
1424 FLOATINGPOINT_TO_FP_REAL
,
1426 * Operator for to_fp from signed bit vector.
1428 * -[1]: Exponent size
1429 * -[2]: Significand size
1431 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1433 FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP
,
1435 * Conversion from a signed bit vector to floating-point.
1437 * -[1]: FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP Term
1438 * -[2]: Term of sort FloatingPoint
1440 * mkTerm(Term opTerm, Term child)
1441 * mkTerm(Term opTerm, const std::vector<Term>& children)
1443 FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR
,
1445 * Operator for to_fp from unsigned bit vector.
1447 * -[1]: Exponent size
1448 * -[2]: Significand size
1450 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1452 FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP
,
1454 * Operator for converting an unsigned bit vector to floating-point.
1456 * -[1]: FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP Term
1457 * -[2]: Term of sort FloatingPoint
1459 * mkTerm(Term opTerm, Term child)
1460 * mkTerm(Term opTerm, const std::vector<Term>& children)
1462 FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR
,
1464 * Operator for a generic to_fp.
1466 * -[1]: exponent size
1467 * -[2]: Significand size
1469 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1471 FLOATINGPOINT_TO_FP_GENERIC_OP
,
1473 * Generic conversion to floating-point, used in parsing only.
1475 * -[1]: FLOATINGPOINT_TO_FP_GENERIC_OP Term
1476 * -[2]: Term of sort FloatingPoint
1478 * mkTerm(Term opTerm, Term child)
1479 * mkTerm(Term opTerm, const std::vector<Term>& children)
1481 FLOATINGPOINT_TO_FP_GENERIC
,
1483 * Operator for to_ubv.
1485 * -[1]: Size of the bit-vector to convert to
1487 * mkOpTerm(Kind kind, uint32_t param)
1489 FLOATINGPOINT_TO_UBV_OP
,
1491 * Conversion from a floating-point value to an unsigned bit vector.
1493 * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_OP Term
1494 * -[2]: Term of sort FloatingPoint
1496 * mkTerm(Term opTerm, Term child)
1497 * mkTerm(Term opTerm, const std::vector<Term>& children)
1499 FLOATINGPOINT_TO_UBV
,
1501 * Operator for to_ubv_total.
1503 * -[1]: Size of the bit-vector to convert to
1505 * mkOpTerm(Kind kind, uint32_t param)
1507 FLOATINGPOINT_TO_UBV_TOTAL_OP
,
1509 * Conversion from a floating-point value to an unsigned bit vector
1510 * (defined for all inputs).
1512 * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_TOTAL_OP Term
1513 * -[2]: Term of sort FloatingPoint
1515 * mkTerm(Term opTerm, Term child)
1516 * mkTerm(Term opTerm, const std::vector<Term>& children)
1518 FLOATINGPOINT_TO_UBV_TOTAL
,
1520 * Operator for to_sbv.
1522 * -[1]: Size of the bit-vector to convert to
1524 * mkOpTerm(Kind kind, uint32_t param)
1526 FLOATINGPOINT_TO_SBV_OP
,
1528 * Conversion from a floating-point value to a signed bit vector.
1530 * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_OP Term
1531 * -[2]: Term of sort FloatingPoint
1533 * mkTerm(Term opTerm, Term child)
1534 * mkTerm(Term opTerm, const std::vector<Term>& children)
1536 FLOATINGPOINT_TO_SBV
,
1538 * Operator for to_sbv_total.
1540 * -[1]: Size of the bit-vector to convert to
1542 * mkOpTerm(Kind kind, uint32_t param)
1544 FLOATINGPOINT_TO_SBV_TOTAL_OP
,
1546 * Conversion from a floating-point value to a signed bit vector
1547 * (defined for all inputs).
1549 * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_TOTAL_OP Term
1550 * -[2]: Term of sort FloatingPoint
1552 * mkTerm(Term opTerm, Term child)
1553 * mkTerm(Term opTerm, const std::vector<Term>& children)
1555 FLOATINGPOINT_TO_SBV_TOTAL
,
1557 * Floating-point to real.
1559 * -[1]: Term of sort FloatingPoint
1561 * mkTerm(Kind kind, Term child)
1563 FLOATINGPOINT_TO_REAL
,
1565 * Floating-point to real (defined for all inputs).
1567 * -[1]: Term of sort FloatingPoint
1569 * mkTerm(Kind kind, Term child)
1571 FLOATINGPOINT_TO_REAL_TOTAL
,
1573 /* Arrays ---------------------------------------------------------------- */
1578 * -[1]: Term of array sort
1579 * -[2]: Selection index
1581 * mkTerm(Term opTerm, Term child1, Term child2)
1582 * mkTerm(Term opTerm, const std::vector<Term>& children)
1588 * -[1]: Term of array sort
1590 * -[3]: Term to store at the index
1592 * mkTerm(Term opTerm, Term child1, Term child2, Term child3)
1593 * mkTerm(Term opTerm, const std::vector<Term>& children)
1600 * -[2]: Term representing a constant
1602 * mkTerm(Term opTerm, Term child1, Term child2)
1603 * mkTerm(Term opTerm, const std::vector<Term>& children)
1605 * Note: We currently support the creation of constant arrays, but under some
1606 * conditions when there is a chain of equalities connecting two constant
1607 * arrays, the solver doesn't know what to do and aborts (Issue #1667).
1611 /* array table function (internal-only symbol) */
1613 /* array lambda (internal-only symbol) */
1615 /* partial array select, for internal use only */
1617 /* partial array select, for internal use only */
1621 /* Datatypes ------------------------------------------------------------- */
1624 * Constructor application.
1626 * -[1]: Constructor (operator term)
1627 * -[2]..[n]: Parameters to the constructor
1629 * mkTerm(Kind kind, OpTerm opTerm)
1630 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1631 * mkTerm(Kind kind, OpTerm opTerm, Term child1, Term child2)
1632 * mkTerm(Kind kind, OpTerm opTerm, Term child1, Term child2, Term child3)
1633 * mkTerm(Kind kind, OpTerm opTerm, const std::vector<Term>& children)
1637 * Datatype selector application.
1639 * -[1]: Selector (operator term)
1640 * -[2]: Datatype term (undefined if mis-applied)
1642 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1646 * Datatype selector application.
1648 * -[1]: Selector (operator term)
1649 * -[2]: Datatype term (defined rigidly if mis-applied)
1651 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1653 APPLY_SELECTOR_TOTAL
,
1655 * Datatype tester application.
1658 * -[2]: Datatype term
1660 * mkTerm(Kind kind, Term child1, Term child2)
1661 * mkTerm(Kind kind, const std::vector<Term>& children)
1665 /* Parametric datatype term. */
1666 PARAMETRIC_DATATYPE
,
1667 /* type ascription, for datatype constructor applications;
1668 * first parameter is an ASCRIPTION_TYPE, second is the datatype constructor
1669 * application being ascribed */
1670 APPLY_TYPE_ASCRIPTION
,
1673 * Operator for a tuple update.
1675 * -[1]: Index of the tuple to be updated
1677 * mkOpTerm(Kind kind, uint32_t param)
1683 * -[1]: TUPLE_UPDATE_OP (which references an index)
1685 * -[3]: Element to store in the tuple at the given index
1687 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1688 * mkTerm(Kind kind, const std::vector<Term>& children)
1692 * Operator for a record update.
1694 * -[1]: Name of the field to be updated
1696 * mkOpTerm(Kind kind, const std::string& param)
1702 * -[1]: RECORD_UPDATE_OP Term (which references a field)
1703 * -[2]: Record term to update
1704 * -[3]: Element to store in the record in the given field
1706 * mkTerm(Kind kind, Term child1, Term child2)
1707 * mkTerm(Kind kind, const std::vector<Term>& children)
1711 /* datatypes size */
1713 /* datatypes height bound */
1715 /* datatypes height bound */
1717 /* datatypes sygus bound */
1719 /* datatypes sygus term order */
1720 DT_SYGUS_TERM_ORDER
,
1721 /* datatypes sygus is constant */
1725 /* Separation Logic ------------------------------------------------------ */
1728 * Separation logic nil term.
1731 * mkSepNil(Sort sort)
1735 * Separation logic empty heap.
1737 * -[1]: Term of the same sort as the sort of the location of the heap
1738 * that is constrained to be empty
1739 * -[2]: Term of the same sort as the data sort of the heap that is
1740 * that is constrained to be empty
1742 * mkTerm(Kind kind, Term child1, Term child2)
1743 * mkTerm(Kind kind, const std::vector<Term>& children)
1747 * Separation logic points-to relation.
1749 * -[1]: Location of the points-to constraint
1750 * -[2]: Data of the points-to constraint
1752 * mkTerm(Kind kind, Term child1, Term child2)
1753 * mkTerm(Kind kind, const std::vector<Term>& children)
1757 * Separation logic star.
1758 * Parameters: n >= 2
1759 * -[1]..[n]: Child constraints that hold in disjoint (separated) heaps
1761 * mkTerm(Kind kind, Term child1, Term child2)
1762 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1763 * mkTerm(Kind kind, const std::vector<Term>& children)
1767 * Separation logic magic wand.
1769 * -[1]: Antecendant of the magic wand constraint
1770 * -[2]: Conclusion of the magic wand constraint, which is asserted to
1771 * hold in all heaps that are disjoint extensions of the antecedent.
1773 * mkTerm(Kind kind, Term child1, Term child2)
1774 * mkTerm(Kind kind, const std::vector<Term>& children)
1778 /* separation label (internal use only) */
1782 /* Sets ------------------------------------------------------------------ */
1785 * Empty set constant.
1787 * -[1]: Sort of the set elements
1789 * mkEmptySet(Sort sort)
1795 * -[1]..[2]: Terms of set sort
1797 * mkTerm(Kind kind, Term child1, Term child2)
1798 * mkTerm(Kind kind, const std::vector<Term>& children)
1804 * -[1]..[2]: Terms of set sort
1806 * mkTerm(Kind kind, Term child1, Term child2)
1807 * mkTerm(Kind kind, const std::vector<Term>& children)
1813 * -[1]..[2]: Terms of set sort
1815 * mkTerm(Kind kind, Term child1, Term child2)
1816 * mkTerm(Kind kind, const std::vector<Term>& children)
1822 * -[1]..[2]: Terms of set sort, [1] a subset of set [2]?
1824 * mkTerm(Kind kind, Term child1, Term child2)
1825 * mkTerm(Kind kind, const std::vector<Term>& children)
1829 * Set membership predicate.
1831 * -[1]..[2]: Terms of set sort, [1] a member of set [2]?
1833 * mkTerm(Kind kind, Term child1, Term child2)
1834 * mkTerm(Kind kind, const std::vector<Term>& children)
1838 * The set of the single element given as a parameter.
1840 * -[1]: Single element
1842 * mkTerm(Kind kind, Term child)
1846 * The set obtained by inserting elements;
1848 * -[1]..[n-1]: Elements inserted into set [n]
1851 * mkTerm(Kind kind, Term child)
1852 * mkTerm(Kind kind, Term child1, Term child2)
1853 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1854 * mkTerm(Kind kind, const std::vector<Term>& children)
1860 * -[1]: Set to determine the cardinality of
1862 * mkTerm(Kind kind, Term child)
1866 * Set complement with respect to finite universe.
1868 * -[1]: Set to complement
1870 * mkTerm(Kind kind, Term child)
1874 * Finite universe set.
1875 * All set variables must be interpreted as subsets of it.
1877 * mkUniverseSet(Sort sort)
1883 * -[1]..[2]: Terms of set sort
1885 * mkTerm(Kind kind, Term child1, Term child2)
1886 * mkTerm(Kind kind, const std::vector<Term>& children)
1890 * Set cartesian product.
1892 * -[1]..[2]: Terms of set sort
1894 * mkTerm(Kind kind, Term child1, Term child2)
1895 * mkTerm(Kind kind, const std::vector<Term>& children)
1901 * -[1]: Term of set sort
1903 * mkTerm(Kind kind, Term child)
1907 * Set transitive closure.
1909 * -[1]: Term of set sort
1911 * mkTerm(Kind kind, Term child)
1917 * -[1]..[2]: Terms of set sort
1919 * mkTerm(Kind kind, Term child1, Term child2)
1920 * mkTerm(Kind kind, const std::vector<Term>& children)
1926 * -[1]: Term of set sort
1928 * mkTerm(Kind kind, Term child)
1932 /* Strings --------------------------------------------------------------- */
1937 * -[1]..[n]: Terms of String sort
1939 * mkTerm(Kind kind, Term child1, Term child2)
1940 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1941 * mkTerm(Kind kind, const std::vector<Term>& children)
1945 * String membership.
1947 * -[1]..[2]: Terms of String sort
1949 * mkTerm(Kind kind, Term child1, Term child2)
1950 * mkTerm(Kind kind, const std::vector<Term>& children)
1956 * -[1]: Term of String sort
1958 * mkTerm(Kind kind, Term child)
1963 * Extracts a substring, starting at index i and of length l, from a string
1964 * s. If the start index is negative, the start index is greater than the
1965 * length of the string, or the length is negative, the result is the empty
1968 * -[1]: Term of sort String
1969 * -[2]: Term of sort Integer (index i)
1970 * -[3]: Term of sort Integer (length l)
1972 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1973 * mkTerm(Kind kind, const std::vector<Term>& children)
1977 * String character at.
1978 * Returns the character at index i from a string s. If the index is negative
1979 * or the index is greater than the length of the string, the result is the
1980 * empty string. Otherwise the result is a string of length 1.
1982 * -[1]: Term of sort String (string s)
1983 * -[2]: Term of sort Integer (index i)
1985 * mkTerm(Kind kind, Term child1, Term child2)
1986 * mkTerm(Kind kind, const std::vector<Term>& children)
1991 * Checks whether a string s1 contains another string s2. If s2 is empty, the
1992 * result is always true.
1994 * -[1]: Term of sort String (the string s1)
1995 * -[2]: Term of sort String (the string s2)
1997 * mkTerm(Kind kind, Term child1, Term child2)
1998 * mkTerm(Kind kind, const std::vector<Term>& children)
2003 * Returns the index of a substring s2 in a string s1 starting at index i. If
2004 * the index is negative or greater than the length of string s1 or the
2005 * substring s2 does not appear in string s1 after index i, the result is -1.
2007 * -[1]: Term of sort String (substring s1)
2008 * -[2]: Term of sort String (substring s2)
2009 * -[3]: Term of sort Integer (index i)
2011 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2012 * mkTerm(Kind kind, const std::vector<Term>& children)
2017 * Replaces a string s2 in a string s1 with string s3. If s2 does not appear
2018 * in s1, s1 is returned unmodified.
2020 * -[1]: Term of sort String (string s1)
2021 * -[2]: Term of sort String (string s2)
2022 * -[3]: Term of sort String (string s3)
2024 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2025 * mkTerm(Kind kind, const std::vector<Term>& children)
2030 * Checks whether a string s1 is a prefix of string s2. If string s1 is
2031 * empty, this operator returns true.
2033 * -[1]: Term of sort String (string s1)
2034 * -[2]: Term of sort String (string s2)
2036 * mkTerm(Kind kind, Term child1, Term child2)
2037 * mkTerm(Kind kind, const std::vector<Term>& children)
2042 * Checks whether a string s1 is a suffix of string 2. If string s1 is empty,
2043 * this operator returns true.
2045 * -[1]: Term of sort String (string s1)
2046 * -[2]: Term of sort String (string s2)
2048 * mkTerm(Kind kind, Term child1, Term child2)
2049 * mkTerm(Kind kind, const std::vector<Term>& children)
2053 * Integer to string.
2054 * If the integer is negative this operator returns the empty string.
2056 * -[1]: Term of sort Integer
2058 * mkTerm(Kind kind, Term child)
2062 * String to integer (total function).
2063 * If the string does not contain an integer or the integer is negative, the
2064 * operator returns -1.
2066 * -[1]: Term of sort String
2068 * mkTerm(Kind kind, Term child)
2076 * mkString(const char* s)
2077 * mkString(const std::string& s)
2078 * mkString(const unsigned char c)
2079 * mkString(const std::vector<unsigned>& s)
2083 * Conversion from string to regexp.
2085 * -[1]: Term of sort String
2087 * mkTerm(Kind kind, Term child)
2091 * Regexp Concatenation .
2093 * -[1]..[2]: Terms of Regexp sort
2095 * mkTerm(Kind kind, Term child1, Term child2)
2096 * mkTerm(Kind kind, const std::vector<Term>& children)
2102 * -[1]..[2]: Terms of Regexp sort
2104 * mkTerm(Kind kind, Term child1, Term child2)
2105 * mkTerm(Kind kind, const std::vector<Term>& children)
2109 * Regexp intersection.
2111 * -[1]..[2]: Terms of Regexp sort
2113 * mkTerm(Kind kind, Term child1, Term child2)
2114 * mkTerm(Kind kind, const std::vector<Term>& children)
2120 * -[1]: Term of sort Regexp
2122 * mkTerm(Kind kind, Term child)
2128 * -[1]: Term of sort Regexp
2130 * mkTerm(Kind kind, Term child)
2136 * -[1]: Term of sort Regexp
2138 * mkTerm(Kind kind, Term child)
2144 * -[1]: Lower bound character for the range
2145 * -[2]: Upper bound character for the range
2147 * mkTerm(Kind kind, Term child1, Term child2)
2148 * mkTerm(Kind kind, const std::vector<Term>& children)
2154 * -[1]: Term of sort RegExp
2155 * -[2]: Lower bound for the number of repetitions of the first argument
2156 * -[3]: Upper bound for the number of repetitions of the first argument
2158 * mkTerm(Kind kind, Term child1, Term child2)
2159 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2160 * mkTerm(Kind kind, const std::vector<Term>& children)
2172 * Regexp all characters.
2180 /* regexp rv (internal use only) */
2184 /* Quantifiers ----------------------------------------------------------- */
2187 * Universally quantified formula.
2189 * -[1]: BOUND_VAR_LIST Term
2190 * -[2]: Quantifier body
2191 * -[3]: (optional) INST_PATTERN_LIST Term
2193 * mkTerm(Kind kind, Term child1, Term child2)
2194 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2195 * mkTerm(Kind kind, const std::vector<Term>& children)
2199 * Existentially quantified formula.
2201 * -[1]: BOUND_VAR_LIST Term
2202 * -[2]: Quantifier body
2203 * -[3]: (optional) INST_PATTERN_LIST Term
2205 * mkTerm(Kind kind, Term child1, Term child2)
2206 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2207 * mkTerm(Kind kind, const std::vector<Term>& children)
2211 /* instantiation constant */
2213 /* instantiation pattern */
2215 /* a list of bound variables (used to bind variables under a quantifier) */
2217 /* instantiation no-pattern */
2219 /* instantiation attribute */
2221 /* a list of instantiation patterns */
2223 /* predicate for specifying term in instantiation closure. */
2225 /* general rewrite rule (for rewrite-rules theory) */
2227 /* actual rewrite rule (for rewrite-rules theory) */
2229 /* actual reduction rule (for rewrite-rules theory) */
2231 /* actual deduction rule (for rewrite-rules theory) */
2234 /* Sort Kinds ------------------------------------------------------------ */
2238 /* a type parameter for type ascription */
2242 /* a datatype type index */
2246 /* set type, takes as parameter the type of the elements */
2250 /* specifies types of user-declared 'uninterpreted' sorts */
2254 /* a representation for basic types */
2256 /* a function type */
2258 /* the type of a symbolic expression */
2260 /* bit-vector type */
2262 /* floating-point type */
2266 /* ----------------------------------------------------------------------- */
2267 /* marks the upper-bound of this enumeration */
2272 * Get the string representation of a given kind.
2274 * @return the string representation of kind k
2276 std::string
kindToString(Kind k
) CVC4_PUBLIC
;
2279 * Serialize a kind to given stream.
2280 * @param out the output stream
2281 * @param k the kind to be serialized to the given output stream
2282 * @return the output stream
2284 std::ostream
& operator<<(std::ostream
& out
, Kind k
) CVC4_PUBLIC
;
2287 * Hash function for Kinds.
2289 struct CVC4_PUBLIC KindHashFunction
2291 size_t operator()(Kind k
) const;