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 */
84 * -[1]..[2]: Terms with same sort
86 * mkTerm(Kind kind, Term child1, Term child2)
87 * mkTerm(Kind kind, const std::vector<Term>& children)
93 * -[1]..[n]: Terms with same sort
95 * mkTerm(Kind kind, Term child1, Term child2)
96 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
97 * mkTerm(Kind kind, const std::vector<Term>& children)
101 * First-order constant.
102 * Not permitted in bindings (forall, exists, ...).
106 * mkConst(const std::string& symbol, Sort sort)
112 * Permitted in bindings and in the lambda and quantifier bodies only.
116 * mkVar(const std::string& symbol, Sort sort)
121 /* Skolem variable (internal only) */
123 /* Symbolic expression (any arity) */
129 * -[1]: BOUND_VAR_LIST
132 * mkTerm(Kind kind, Term child1, Term child2)
133 * mkTerm(Kind kind, const std::vector<Term>& children)
137 * Hilbert choice (epsilon) expression.
139 * -[1]: BOUND_VAR_LIST
140 * -[2]: Hilbert choice body
142 * mkTerm(Kind kind, Term child1, Term child2)
143 * mkTerm(Kind kind, const std::vector<Term>& children)
149 * -[1]: Term of kind CHAIN_OP (represents a binary op)
150 * -[2]..[n]: Arguments to that operator
152 * mkTerm(Kind kind, Term child1, Term child2)
153 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
154 * mkTerm(Kind kind, const std::vector<Term>& children)
155 * Turned into a conjunction of binary applications of the operator on
156 * adjoining parameters.
162 * -[1]: Kind of the binary operation
164 * mkOpTerm(Kind opkind, Kind kind)
168 /* Boolean --------------------------------------------------------------- */
173 * -[1]: Boolean value of the constant
177 * mkBoolean(bool val)
182 * -[1]: Boolean Term to negate
184 * mkTerm(Kind kind, Term child)
189 * -[1]..[n]: Boolean Term of the conjunction
191 * mkTerm(Kind kind, Term child1, Term child2)
192 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
193 * mkTerm(Kind kind, const std::vector<Term>& children)
197 * Logical implication.
199 * -[1]..[2]: Boolean Terms, [1] implies [2]
201 * mkTerm(Kind kind, Term child1, Term child2)
202 * mkTerm(Kind kind, const std::vector<Term>& children)
207 * -[1]..[n]: Boolean Term of the disjunction
209 * mkTerm(Kind kind, Term child1, Term child2)
210 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
211 * mkTerm(Kind kind, const std::vector<Term>& children)
214 /* Logical exclusive or.
216 * -[1]..[2]: Boolean Terms, [1] xor [2]
218 * mkTerm(Kind kind, Term child1, Term child2)
219 * mkTerm(Kind kind, const std::vector<Term>& children)
224 * -[1] is a Boolean condition Term
225 * -[2] the 'then' Term
226 * -[3] the 'else' Term
227 * 'then' and 'else' term must have same base sort.
229 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
230 * mkTerm(Kind kind, const std::vector<Term>& children)
234 /* UF -------------------------------------------------------------------- */
236 /* Application of an uninterpreted function.
238 * -[1]: Function Term
239 * -[2]..[n]: Function argument instantiation Terms
241 * mkTerm(Kind kind, Term child1, Term child2)
242 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
243 * mkTerm(Kind kind, const std::vector<Term>& children)
247 /* Boolean term variable */
248 BOOLEAN_TERM_VARIABLE
,
251 * Cardinality constraint on sort S.
253 * -[1]: Term of sort S
254 * -[2]: Positive integer constant that bounds the cardinality of sort S
256 * mkTerm(Kind kind, Term child1, Term child2)
257 * mkTerm(Kind kind, const std::vector<Term>& children)
259 CARDINALITY_CONSTRAINT
,
261 /* Combined cardinality constraint. */
262 COMBINED_CARDINALITY_CONSTRAINT
,
263 /* Partial uninterpreted function application. */
265 /* cardinality value of sort S:
266 * first parameter is (any) term of sort S */
270 * Higher-order applicative encoding of function application.
272 * -[1]: Function to apply
273 * -[2]: Argument of the function
275 * mkTerm(Kind kind, Term child1, Term child2)
276 * mkTerm(Kind kind, const std::vector<Term>& children)
280 /* Arithmetic ------------------------------------------------------------ */
283 * Arithmetic addition.
285 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
287 * mkTerm(Kind kind, Term child1, Term child2)
288 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
289 * mkTerm(Kind kind, const std::vector<Term>& children)
293 * Arithmetic multiplication.
295 * -[1]..[n]: Terms of sort Integer, Real (sorts must match)
297 * mkTerm(Kind kind, Term child1, Term child2)
298 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
299 * mkTerm(Kind kind, const std::vector<Term>& children)
303 /* Synonym for MULT. */
307 * Arithmetic subtraction.
309 * -[1]..[2]: Terms of sort Integer, Real (sorts must match)
311 * mkTerm(Kind kind, Term child1, Term child2)
312 * mkTerm(Kind kind, const std::vector<Term>& children)
316 * Arithmetic negation.
318 * -[1]: Term of sort Integer, Real
320 * mkTerm(Kind kind, Term child)
324 * Real division, division by 0 undefined
326 * -[1]..[2]: Terms of sort Integer, Real
328 * mkTerm(Kind kind, Term child1, Term child2)
329 * mkTerm(Kind kind, const std::vector<Term>& children)
333 * Real division with interpreted division by 0
335 * -[1]..[2]: Terms of sort Integer, Real
337 * mkTerm(Kind kind, Term child1, Term child2)
338 * mkTerm(Kind kind, const std::vector<Term>& children)
342 * Integer division, division by 0 undefined.
344 * -[1]..[2]: Terms of sort Integer
346 * mkTerm(Kind kind, Term child1, Term child2)
347 * mkTerm(Kind kind, const std::vector<Term>& children)
351 * Integer division with interpreted division by 0.
353 * -[1]..[2]: Terms of sort Integer
355 * mkTerm(Kind kind, Term child1, Term child2)
356 * mkTerm(Kind kind, const std::vector<Term>& children)
360 * Integer modulus, division by 0 undefined.
362 * -[1]..[2]: Terms of sort Integer
364 * mkTerm(Kind kind, Term child1, Term child2)
365 * mkTerm(Kind kind, const std::vector<Term>& children)
369 * Integer modulus with interpreted division by 0.
371 * -[1]..[2]: Terms of sort Integer
373 * mkTerm(Kind kind, Term child1, Term child2)
374 * mkTerm(Kind kind, const std::vector<Term>& children)
380 * -[1]: Term of sort Integer
382 * mkTerm(Kind kind, Term child)
386 * Divisibility-by-k predicate.
388 * -[1]: DIVISIBLE_OP Term
391 * mkTerm(Kind kind, Term child1, Term child2)
392 * mkTerm(Kind kind, const std::vector<Term>& children)
398 * -[1]..[2]: Terms of sort Integer, Real
400 * mkTerm(Kind kind, Term child1, Term child2)
401 * mkTerm(Kind kind, const std::vector<Term>& children)
407 * -[1]: Term of sort Integer, Real
409 * mkTerm(Kind kind, Term child)
415 * -[1]: Term of sort Integer, Real
417 * mkTerm(Kind kind, Term child)
423 * -[1]: Term of sort Integer, Real
425 * mkTerm(Kind kind, Term child)
431 * -[1]: Term of sort Integer, Real
433 * mkTerm(Kind kind, Term child)
439 * -[1]: Term of sort Integer, Real
441 * mkTerm(Kind kind, Term child)
447 * -[1]: Term of sort Integer, Real
449 * mkTerm(Kind kind, Term child)
455 * -[1]: Term of sort Integer, Real
457 * mkTerm(Kind kind, Term child)
463 * -[1]: Term of sort Integer, Real
465 * mkTerm(Kind kind, Term child)
471 * -[1]: Term of sort Integer, Real
473 * mkTerm(Kind kind, Term child)
479 * -[1]: Term of sort Integer, Real
481 * mkTerm(Kind kind, Term child)
487 * -[1]: Term of sort Integer, Real
489 * mkTerm(Kind kind, Term child)
495 * -[1]: Term of sort Integer, Real
497 * mkTerm(Kind kind, Term child)
503 * -[1]: Term of sort Integer, Real
505 * mkTerm(Kind kind, Term child)
511 * -[1]: Term of sort Integer, Real
513 * mkTerm(Kind kind, Term child)
517 * Operator for the divisibility-by-k predicate.
519 * -[1]: The k to divide by (sort Integer)
521 * mkOpTerm(Kind kind, uint32_t param)
525 * Multiple-precision rational constant.
527 * See mkInteger(), mkReal(), mkRational()
529 * mkInteger(const char* s, uint32_t base = 10)
530 * mkInteger(const std::string& s, uint32_t base = 10)
531 * mkInteger(int32_t val)
532 * mkInteger(uint32_t val)
533 * mkInteger(int64_t val)
534 * mkInteger(uint64_t val)
535 * mkReal(const char* s, uint32_t base = 10)
536 * mkReal(const std::string& s, uint32_t base = 10)
537 * mkReal(int32_t val)
538 * mkReal(int64_t val)
539 * mkReal(uint32_t val)
540 * mkReal(uint64_t val)
541 * mkReal(int32_t num, int32_t den)
542 * mkReal(int64_t num, int64_t den)
543 * mkReal(uint32_t num, uint32_t den)
544 * mkReal(uint64_t num, uint64_t den)
550 * -[1]..[2]: Terms of sort Integer, Real; [1] < [2]
552 * mkTerm(Kind kind, Term child1, Term child2)
553 * mkTerm(Kind kind, const std::vector<Term>& children)
557 * Less than or equal.
559 * -[1]..[2]: Terms of sort Integer, Real; [1] <= [2]
561 * mkTerm(Kind kind, Term child1, Term child2)
562 * mkTerm(Kind kind, const std::vector<Term>& children)
568 * -[1]..[2]: Terms of sort Integer, Real, [1] > [2]
570 * mkTerm(Kind kind, Term child1, Term child2)
571 * mkTerm(Kind kind, const std::vector<Term>& children)
575 * Greater than or equal.
577 * -[1]..[2]: Terms of sort Integer, Real; [1] >= [2]
579 * mkTerm(Kind kind, Term child1, Term child2)
580 * mkTerm(Kind kind, const std::vector<Term>& children)
584 * Is-integer predicate.
586 * -[1]: Term of sort Integer, Real
588 * mkTerm(Kind kind, Term child)
592 * Convert Term to Integer by the floor function.
594 * -[1]: Term of sort Integer, Real
596 * mkTerm(Kind kind, Term child)
600 * Convert Term to Real.
602 * -[1]: Term of sort Integer, Real
603 * This is a no-op in CVC4, as Integer is a subtype of Real.
614 /* BV -------------------------------------------------------------------- */
617 * Fixed-size bit-vector constant.
621 * mkBitVector(uint32_t size, uint64_t val)
622 * mkBitVector(const char* s, uint32_t base = 2)
623 * mkBitVector(std::string& s, uint32_t base = 2)
627 * Concatenation of two or more bit-vectors.
629 * -[1]..[n]: Terms of bit-vector sort
631 * mkTerm(Kind kind, Term child1, Term child2)
632 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
633 * mkTerm(Kind kind, const std::vector<Term>& children)
639 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
641 * mkTerm(Kind kind, Term child1, Term child2)
642 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
643 * mkTerm(Kind kind, const std::vector<Term>& children)
649 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
651 * mkTerm(Kind kind, Term child1, Term child2)
652 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
653 * mkTerm(Kind kind, const std::vector<Term>& children)
659 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
661 * mkTerm(Kind kind, Term child1, Term child2)
662 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
663 * mkTerm(Kind kind, const std::vector<Term>& children)
669 * -[1]: Term of bit-vector sort
671 * mkTerm(Kind kind, Term child)
677 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
679 * mkTerm(Kind kind, Term child1, Term child2)
680 * mkTerm(Kind kind, const std::vector<Term>& children)
686 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
688 * mkTerm(Kind kind, Term child1, Term child2)
689 * mkTerm(Kind kind, const std::vector<Term>& children)
695 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
697 * mkTerm(Kind kind, Term child1, Term child2)
698 * mkTerm(Kind kind, const std::vector<Term>& children)
702 * Equality comparison (returns bit-vector of size 1).
704 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
706 * mkTerm(Kind kind, Term child1, Term child2)
707 * mkTerm(Kind kind, const std::vector<Term>& children)
711 * Multiplication of two or more bit-vectors.
713 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
715 * mkTerm(Kind kind, Term child1, Term child2)
716 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
717 * mkTerm(Kind kind, const std::vector<Term>& children)
721 * Addition of two or more bit-vectors.
723 * -[1]..[n]: Terms of bit-vector sort (sorts must match)
725 * mkTerm(Kind kind, Term child1, Term child2)
726 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
727 * mkTerm(Kind kind, const std::vector<Term>& children)
731 * Subtraction of two bit-vectors.
733 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
735 * mkTerm(Kind kind, Term child1, Term child2)
736 * mkTerm(Kind kind, const std::vector<Term>& children)
740 * Negation of a bit-vector (two's complement).
742 * -[1]: Term of bit-vector sort
744 * mkTerm(Kind kind, Term child)
748 * Unsigned division of two bit-vectors, truncating towards 0.
750 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
752 * mkTerm(Kind kind, Term child1, Term child2)
753 * mkTerm(Kind kind, const std::vector<Term>& children)
757 * Unsigned remainder from truncating division of two bit-vectors.
759 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
761 * mkTerm(Kind kind, Term child1, Term child2)
762 * mkTerm(Kind kind, const std::vector<Term>& children)
766 * Two's complement signed division of two bit-vectors.
768 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
770 * mkTerm(Kind kind, Term child1, Term child2)
771 * mkTerm(Kind kind, const std::vector<Term>& children)
775 * Two's complement signed remainder of two bit-vectors
776 * (sign follows dividend).
778 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
780 * mkTerm(Kind kind, Term child1, Term child2)
781 * mkTerm(Kind kind, const std::vector<Term>& children)
785 * Two's complement signed remainder
786 * (sign follows divisor).
788 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
790 * mkTerm(Kind kind, Term child1, Term child2)
791 * mkTerm(Kind kind, const std::vector<Term>& children)
795 * Unsigned division of two bit-vectors, truncating towards 0
796 * (defined to be the all-ones bit pattern, if divisor is 0).
798 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
800 * mkTerm(Kind kind, Term child1, Term child2)
801 * mkTerm(Kind kind, const std::vector<Term>& children)
803 BITVECTOR_UDIV_TOTAL
,
805 * Unsigned remainder from truncating division of two bit-vectors
806 * (defined to be equal to the dividend, if divisor is 0).
808 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
810 * mkTerm(Kind kind, Term child1, Term child2)
811 * mkTerm(Kind kind, const std::vector<Term>& children)
813 BITVECTOR_UREM_TOTAL
,
815 * Bit-vector shift left.
816 * The two bit-vector parameters must have same width.
818 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
820 * mkTerm(Kind kind, Term child1, Term child2)
821 * mkTerm(Kind kind, const std::vector<Term>& children)
825 * Bit-vector logical shift right.
826 * The two bit-vector parameters must have same width.
828 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
830 * mkTerm(Kind kind, Term child1, Term child2)
831 * mkTerm(Kind kind, const std::vector<Term>& children)
835 * Bit-vector arithmetic shift right.
836 * The two bit-vector parameters must have same width.
838 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
840 * mkTerm(Kind kind, Term child1, Term child2)
841 * mkTerm(Kind kind, const std::vector<Term>& children)
845 * Bit-vector unsigned less than.
846 * The two bit-vector parameters must have same width.
848 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
850 * mkTerm(Kind kind, Term child1, Term child2)
851 * mkTerm(Kind kind, const std::vector<Term>& children)
855 * Bit-vector unsigned less than or equal.
856 * The two bit-vector parameters must have same width.
858 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
860 * mkTerm(Kind kind, Term child1, Term child2)
861 * mkTerm(Kind kind, const std::vector<Term>& children)
865 * Bit-vector unsigned greater than.
866 * The two bit-vector parameters must have same width.
868 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
870 * mkTerm(Kind kind, Term child1, Term child2)
871 * mkTerm(Kind kind, const std::vector<Term>& children)
875 * Bit-vector unsigned greater than or equal.
876 * The two bit-vector parameters must have same width.
879 * mkTerm(Kind kind, Term child1, Term child2)
880 * mkTerm(Kind kind, const std::vector<Term>& children)
883 /* Bit-vector signed less than.
884 * The two bit-vector parameters must have same width.
887 * mkTerm(Kind kind, Term child1, Term child2)
888 * mkTerm(Kind kind, const std::vector<Term>& children)
892 * Bit-vector signed less than or equal.
893 * The two bit-vector parameters must have same width.
895 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
897 * mkTerm(Kind kind, Term child1, Term child2)
898 * mkTerm(Kind kind, const std::vector<Term>& children)
902 * Bit-vector signed greater than.
903 * The two bit-vector parameters must have same width.
905 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
907 * mkTerm(Kind kind, Term child1, Term child2)
908 * mkTerm(Kind kind, const std::vector<Term>& children)
912 * Bit-vector signed greater than or equal.
913 * The two bit-vector parameters must have same width.
915 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
917 * mkTerm(Kind kind, Term child1, Term child2)
918 * mkTerm(Kind kind, const std::vector<Term>& children)
922 * Bit-vector unsigned less than, returns bit-vector of size 1.
924 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
926 * mkTerm(Kind kind, Term child1, Term child2)
927 * mkTerm(Kind kind, const std::vector<Term>& children)
931 * Bit-vector signed less than. returns bit-vector of size 1.
933 * -[1]..[2]: Terms of bit-vector sort (sorts must match)
935 * mkTerm(Kind kind, Term child1, Term child2)
936 * mkTerm(Kind kind, const std::vector<Term>& children)
940 * Same semantics as regular ITE, but condition is bit-vector of size 1.
942 * -[1]: Term of bit-vector sort of size 1, representing the condition
943 * -[2]: Term reprsenting the 'then' branch
944 * -[3]: Term representing the 'else' branch
945 * 'then' and 'else' term must have same base sort.
947 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
948 * mkTerm(Kind kind, const std::vector<Term>& children)
954 * -[1]: Term of bit-vector sort
956 * mkTerm(Kind kind, Term child)
962 * -[1]: Term of bit-vector sort
964 * mkTerm(Kind kind, Term child)
968 /* formula to be treated as a bv atom via eager bit-blasting
969 * (internal-only symbol) */
970 BITVECTOR_EAGER_ATOM
,
971 /* term to be treated as a variable. used for eager bit-blasting Ackermann
972 * expansion of bvudiv (internal-only symbol) */
973 BITVECTOR_ACKERMANIZE_UDIV
,
974 /* term to be treated as a variable. used for eager bit-blasting Ackermann
975 * expansion of bvurem (internal-only symbol) */
976 BITVECTOR_ACKERMANIZE_UREM
,
977 /* operator for the bit-vector boolean bit extract.
978 * One parameter, parameter is the index of the bit to extract */
982 * Operator for bit-vector extract (from index 'high' to 'low').
984 * -[1]: The 'high' index
985 * -[2]: The 'low' index
987 * mkOpTerm(Kind kind, uint32_t param, uint32_t param)
989 BITVECTOR_EXTRACT_OP
,
991 * Operator for bit-vector repeat.
993 * -[1]: Number of times to repeat a given bit-vector
995 * mkOpTerm(Kind kind, uint32_t param).
999 * Operator for bit-vector zero-extend.
1001 * -[1]: Number of bits by which a given bit-vector is to be extended
1003 * mkOpTerm(Kind kind, uint32_t param).
1005 BITVECTOR_ZERO_EXTEND_OP
,
1007 * Operator for bit-vector sign-extend.
1009 * -[1]: Number of bits by which a given bit-vector is to be extended
1011 * mkOpTerm(Kind kind, uint32_t param).
1013 BITVECTOR_SIGN_EXTEND_OP
,
1015 * Operator for bit-vector rotate left.
1017 * -[1]: Number of bits by which a given bit-vector is to be rotated
1019 * mkOpTerm(Kind kind, uint32_t param).
1021 BITVECTOR_ROTATE_LEFT_OP
,
1023 * Operator for bit-vector rotate right.
1025 * -[1]: Number of bits by which a given bit-vector is to be rotated
1027 * mkOpTerm(Kind kind, uint32_t param).
1029 BITVECTOR_ROTATE_RIGHT_OP
,
1031 /* bit-vector boolean bit extract.
1032 * first parameter is a BITVECTOR_BITOF_OP, second is a bit-vector term */
1035 /* Bit-vector extract.
1037 * -[1]: BITVECTOR_EXTRACT_OP Term
1038 * -[2]: Term of bit-vector sort
1040 * mkTerm(Term opTerm, Term child)
1041 * mkTerm(Term opTerm, const std::vector<Term>& children)
1044 /* Bit-vector repeat.
1046 * -[1]: BITVECTOR_REPEAT_OP Term
1047 * -[2]: Term of bit-vector sort
1049 * mkTerm(Term opTerm, Term child)
1050 * mkTerm(Term opTerm, const std::vector<Term>& children)
1053 /* Bit-vector zero-extend.
1055 * -[1]: BITVECTOR_ZERO_EXTEND_OP Term
1056 * -[2]: Term of bit-vector sort
1058 * mkTerm(Term opTerm, Term child)
1059 * mkTerm(Term opTerm, const std::vector<Term>& children)
1061 BITVECTOR_ZERO_EXTEND
,
1062 /* Bit-vector sign-extend.
1064 * -[1]: BITVECTOR_SIGN_EXTEND_OP Term
1065 * -[2]: Term of bit-vector sort
1067 * mkTerm(Term opTerm, Term child)
1068 * mkTerm(Term opTerm, const std::vector<Term>& children)
1070 BITVECTOR_SIGN_EXTEND
,
1071 /* Bit-vector rotate left.
1073 * -[1]: BITVECTOR_ROTATE_LEFT_OP Term
1074 * -[2]: Term of bit-vector sort
1076 * mkTerm(Term opTerm, Term child)
1077 * mkTerm(Term opTerm, const std::vector<Term>& children)
1079 BITVECTOR_ROTATE_LEFT
,
1081 * Bit-vector rotate right.
1083 * -[1]: BITVECTOR_ROTATE_RIGHT_OP Term
1084 * -[2]: Term of bit-vector sort
1086 * mkTerm(Term opTerm, Term child)
1087 * mkTerm(Term opTerm, const std::vector<Term>& children)
1089 BITVECTOR_ROTATE_RIGHT
,
1091 * Operator for the conversion from Integer to bit-vector.
1093 * -[1]: Size of the bit-vector to convert to
1095 * mkOpTerm(Kind kind, uint32_t param).
1097 INT_TO_BITVECTOR_OP
,
1099 * Integer conversion to bit-vector.
1101 * -[1]: INT_TO_BITVECTOR_OP Term
1102 * -[2]: Integer term
1104 * mkTerm(Kind kind, Term child1, Term child2)
1105 * mkTerm(Kind kind, const std::vector<Term>& children)
1109 * Bit-vector conversion to (nonnegative) integer.
1111 * -[1]: Term of bit-vector sort
1113 * mkTerm(Kind kind, Term child)
1117 /* FP -------------------------------------------------------------------- */
1120 * Floating-point constant, constructed from a double or string.
1122 * -[1]: Size of the exponent
1123 * -[2]: Size of the significand
1124 * -[3]: Value of the floating-point constant as a bit-vector term
1126 * mkFloatingPoint(uint32_t sig, uint32_t exp, Term val)
1128 CONST_FLOATINGPOINT
,
1130 * Floating-point rounding mode term.
1132 * mkRoundingMode(RoundingMode rm)
1136 * Create floating-point literal from bit-vector triple.
1138 * -[1]: Sign bit as a bit-vector term
1139 * -[2]: Exponent bits as a bit-vector term
1140 * -[3]: Significand bits as a bit-vector term (without hidden bit)
1142 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1143 * mkTerm(Kind kind, const std::vector<Term>& children)
1147 * Floating-point equality.
1149 * -[1]..[2]: Terms of floating point sort
1151 * mkTerm(Kind kind, Term child1, Term child2)
1152 * mkTerm(Kind kind, const std::vector<Term>& children)
1156 * Floating-point absolute value.
1158 * -[1]: Term of floating point sort
1160 * mkTerm(Kind kind, Term child)
1164 * Floating-point negation.
1166 * -[1]: Term of floating point sort
1168 * mkTerm(Kind kind, Term child)
1172 * Floating-point addition.
1174 * -[1]: CONST_ROUNDINGMODE
1175 * -[2]: Term of sort FloatingPoint
1176 * -[3]: Term of sort FloatingPoint
1178 * mkTerm(Kind kind, Term child1, Term child2, child3)
1179 * mkTerm(Kind kind, const std::vector<Term>& children)
1183 * Floating-point sutraction.
1185 * -[1]: CONST_ROUNDINGMODE
1186 * -[2]: Term of sort FloatingPoint
1187 * -[3]: Term of sort FloatingPoint
1189 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1190 * mkTerm(Kind kind, const std::vector<Term>& children)
1194 * Floating-point multiply.
1196 * -[1]: CONST_ROUNDINGMODE
1197 * -[2]: Term of sort FloatingPoint
1198 * -[3]: Term of sort FloatingPoint
1200 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1201 * mkTerm(Kind kind, const std::vector<Term>& children)
1205 * Floating-point division.
1207 * -[1]: CONST_ROUNDINGMODE
1208 * -[2]: Term of sort FloatingPoint
1209 * -[3]: Term of sort FloatingPoint
1211 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1212 * mkTerm(Kind kind, const std::vector<Term>& children)
1216 * Floating-point fused multiply and add.
1218 * -[1]: CONST_ROUNDINGMODE
1219 * -[2]: Term of sort FloatingPoint
1220 * -[3]: Term of sort FloatingPoint
1221 * -[4]: Term of sort FloatingPoint
1223 * mkTerm(Kind kind, const std::vector<Term>& children)
1227 * Floating-point square root.
1229 * -[1]: CONST_ROUNDINGMODE
1230 * -[2]: Term of sort FloatingPoint
1232 * mkTerm(Kind kind, Term child1, Term child2)
1233 * mkTerm(Kind kind, const std::vector<Term>& children)
1237 * Floating-point remainder.
1239 * -[1]..[2]: Terms of floating point sort
1241 * mkTerm(Kind kind, Term child1, Term child2)
1242 * mkTerm(Kind kind, const std::vector<Term>& children)
1246 * Floating-point round to integral.
1248 * -[1]..[2]: Terms of floating point sort
1250 * mkTerm(Kind kind, Term child1, Term child2)
1251 * mkTerm(Kind kind, const std::vector<Term>& children)
1255 * Floating-point minimum.
1257 * -[1]..[2]: Terms of floating point sort
1259 * mkTerm(Kind kind, Term child1, Term child2)
1260 * mkTerm(Kind kind, const std::vector<Term>& children)
1264 * Floating-point maximum.
1266 * -[1]..[2]: Terms of floating point sort
1268 * mkTerm(Kind kind, Term child1, Term child2)
1269 * mkTerm(Kind kind, const std::vector<Term>& children)
1273 /* floating-point minimum (defined for all inputs) */
1274 FLOATINGPOINT_MIN_TOTAL
,
1275 /* floating-point maximum (defined for all inputs) */
1276 FLOATINGPOINT_MAX_TOTAL
,
1279 * Floating-point less than or equal.
1281 * -[1]..[2]: Terms of floating point sort
1283 * mkTerm(Kind kind, Term child1, Term child2)
1284 * mkTerm(Kind kind, const std::vector<Term>& children)
1288 * Floating-point less than.
1290 * -[1]..[2]: Terms of floating point sort
1292 * mkTerm(Kind kind, Term child1, Term child2)
1293 * mkTerm(Kind kind, const std::vector<Term>& children)
1297 * Floating-point greater than or equal.
1299 * -[1]..[2]: Terms of floating point sort
1301 * mkTerm(Kind kind, Term child1, Term child2)
1302 * mkTerm(Kind kind, const std::vector<Term>& children)
1306 * Floating-point greater than.
1309 * mkTerm(Kind kind, Term child1, Term child2)
1310 * mkTerm(Kind kind, const std::vector<Term>& children)
1314 * Floating-point is normal.
1316 * -[1]: Term of floating point sort
1318 * mkTerm(Kind kind, Term child)
1322 * Floating-point is sub-normal.
1324 * -[1]: Term of floating point sort
1326 * mkTerm(Kind kind, Term child)
1330 * Floating-point is zero.
1332 * -[1]: Term of floating point sort
1334 * mkTerm(Kind kind, Term child)
1338 * Floating-point is infinite.
1340 * -[1]: Term of floating point sort
1342 * mkTerm(Kind kind, Term child)
1344 FLOATINGPOINT_ISINF
,
1346 * Floating-point is NaN.
1348 * -[1]: Term of floating point sort
1350 * mkTerm(Kind kind, Term child)
1352 FLOATINGPOINT_ISNAN
,
1354 * Floating-point is negative.
1356 * -[1]: Term of floating point sort
1358 * mkTerm(Kind kind, Term child)
1360 FLOATINGPOINT_ISNEG
,
1362 * Floating-point is positive.
1364 * -[1]: Term of floating point sort
1366 * mkTerm(Kind kind, Term child)
1368 FLOATINGPOINT_ISPOS
,
1370 * Operator for to_fp from bit vector.
1372 * -[1]: Exponent size
1373 * -[2]: Significand size
1375 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1377 FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP
,
1379 * Conversion from an IEEE-754 bit vector to floating-point.
1381 * -[1]: FLOATINGPOINT_TO_FP_IEEE_BITVECTOR_OP Term
1382 * -[2]: Term of sort FloatingPoint
1384 * mkTerm(Term opTerm, Term child)
1385 * mkTerm(Term opTerm, const std::vector<Term>& children)
1387 FLOATINGPOINT_TO_FP_IEEE_BITVECTOR
,
1389 * Operator for to_fp from floating point.
1391 * -[1]: Exponent size
1392 * -[2]: Significand size
1394 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1396 FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP
,
1398 * Conversion between floating-point sorts.
1400 * -[1]: FLOATINGPOINT_TO_FP_FLOATINGPOINT_OP Term
1401 * -[2]: Term of sort FloatingPoint
1403 * mkTerm(Term opTerm, Term child)
1404 * mkTerm(Term opTerm, const std::vector<Term>& children)
1406 FLOATINGPOINT_TO_FP_FLOATINGPOINT
,
1408 * Operator for to_fp from real.
1410 * -[1]: Exponent size
1411 * -[2]: Significand size
1413 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1415 FLOATINGPOINT_TO_FP_REAL_OP
,
1417 * Conversion from a real to floating-point.
1419 * -[1]: FLOATINGPOINT_TO_FP_REAL_OP Term
1420 * -[2]: Term of sort FloatingPoint
1422 * mkTerm(Term opTerm, Term child)
1423 * mkTerm(Term opTerm, const std::vector<Term>& children)
1425 FLOATINGPOINT_TO_FP_REAL
,
1427 * Operator for to_fp from signed bit vector.
1429 * -[1]: Exponent size
1430 * -[2]: Significand size
1432 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1434 FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP
,
1436 * Conversion from a signed bit vector to floating-point.
1438 * -[1]: FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR_OP Term
1439 * -[2]: Term of sort FloatingPoint
1441 * mkTerm(Term opTerm, Term child)
1442 * mkTerm(Term opTerm, const std::vector<Term>& children)
1444 FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR
,
1446 * Operator for to_fp from unsigned bit vector.
1448 * -[1]: Exponent size
1449 * -[2]: Significand size
1451 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1453 FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP
,
1455 * Operator for converting an unsigned bit vector to floating-point.
1457 * -[1]: FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR_OP Term
1458 * -[2]: Term of sort FloatingPoint
1460 * mkTerm(Term opTerm, Term child)
1461 * mkTerm(Term opTerm, const std::vector<Term>& children)
1463 FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR
,
1465 * Operator for a generic to_fp.
1467 * -[1]: exponent size
1468 * -[2]: Significand size
1470 * mkOpTerm(Kind kind, uint32_t param1, uint32_t param2)
1472 FLOATINGPOINT_TO_FP_GENERIC_OP
,
1474 * Generic conversion to floating-point, used in parsing only.
1476 * -[1]: FLOATINGPOINT_TO_FP_GENERIC_OP Term
1477 * -[2]: Term of sort FloatingPoint
1479 * mkTerm(Term opTerm, Term child)
1480 * mkTerm(Term opTerm, const std::vector<Term>& children)
1482 FLOATINGPOINT_TO_FP_GENERIC
,
1484 * Operator for to_ubv.
1486 * -[1]: Size of the bit-vector to convert to
1488 * mkOpTerm(Kind kind, uint32_t param)
1490 FLOATINGPOINT_TO_UBV_OP
,
1492 * Conversion from a floating-point value to an unsigned bit vector.
1494 * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_OP Term
1495 * -[2]: Term of sort FloatingPoint
1497 * mkTerm(Term opTerm, Term child)
1498 * mkTerm(Term opTerm, const std::vector<Term>& children)
1500 FLOATINGPOINT_TO_UBV
,
1502 * Operator for to_ubv_total.
1504 * -[1]: Size of the bit-vector to convert to
1506 * mkOpTerm(Kind kind, uint32_t param)
1508 FLOATINGPOINT_TO_UBV_TOTAL_OP
,
1510 * Conversion from a floating-point value to an unsigned bit vector
1511 * (defined for all inputs).
1513 * -[1]: FLOATINGPOINT_TO_FP_TO_UBV_TOTAL_OP Term
1514 * -[2]: Term of sort FloatingPoint
1516 * mkTerm(Term opTerm, Term child)
1517 * mkTerm(Term opTerm, const std::vector<Term>& children)
1519 FLOATINGPOINT_TO_UBV_TOTAL
,
1521 * Operator for to_sbv.
1523 * -[1]: Size of the bit-vector to convert to
1525 * mkOpTerm(Kind kind, uint32_t param)
1527 FLOATINGPOINT_TO_SBV_OP
,
1529 * Conversion from a floating-point value to a signed bit vector.
1531 * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_OP Term
1532 * -[2]: Term of sort FloatingPoint
1534 * mkTerm(Term opTerm, Term child)
1535 * mkTerm(Term opTerm, const std::vector<Term>& children)
1537 FLOATINGPOINT_TO_SBV
,
1539 * Operator for to_sbv_total.
1541 * -[1]: Size of the bit-vector to convert to
1543 * mkOpTerm(Kind kind, uint32_t param)
1545 FLOATINGPOINT_TO_SBV_TOTAL_OP
,
1547 * Conversion from a floating-point value to a signed bit vector
1548 * (defined for all inputs).
1550 * -[1]: FLOATINGPOINT_TO_FP_TO_SBV_TOTAL_OP Term
1551 * -[2]: Term of sort FloatingPoint
1553 * mkTerm(Term opTerm, Term child)
1554 * mkTerm(Term opTerm, const std::vector<Term>& children)
1556 FLOATINGPOINT_TO_SBV_TOTAL
,
1558 * Floating-point to real.
1560 * -[1]: Term of sort FloatingPoint
1562 * mkTerm(Kind kind, Term child)
1564 FLOATINGPOINT_TO_REAL
,
1566 * Floating-point to real (defined for all inputs).
1568 * -[1]: Term of sort FloatingPoint
1570 * mkTerm(Kind kind, Term child)
1572 FLOATINGPOINT_TO_REAL_TOTAL
,
1574 /* Arrays ---------------------------------------------------------------- */
1579 * -[1]: Term of array sort
1580 * -[2]: Selection index
1582 * mkTerm(Term opTerm, Term child1, Term child2)
1583 * mkTerm(Term opTerm, const std::vector<Term>& children)
1589 * -[1]: Term of array sort
1591 * -[3]: Term to store at the index
1593 * mkTerm(Term opTerm, Term child1, Term child2, Term child3)
1594 * mkTerm(Term opTerm, const std::vector<Term>& children)
1601 * -[2]: Term representing a constant
1603 * mkTerm(Term opTerm, Term child1, Term child2)
1604 * mkTerm(Term opTerm, const std::vector<Term>& children)
1606 * Note: We currently support the creation of constant arrays, but under some
1607 * conditions when there is a chain of equalities connecting two constant
1608 * arrays, the solver doesn't know what to do and aborts (Issue #1667).
1612 /* array table function (internal-only symbol) */
1614 /* array lambda (internal-only symbol) */
1616 /* partial array select, for internal use only */
1618 /* partial array select, for internal use only */
1622 /* Datatypes ------------------------------------------------------------- */
1625 * Constructor application.
1627 * -[1]: Constructor (operator term)
1628 * -[2]..[n]: Parameters to the constructor
1630 * mkTerm(Kind kind, OpTerm opTerm)
1631 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1632 * mkTerm(Kind kind, OpTerm opTerm, Term child1, Term child2)
1633 * mkTerm(Kind kind, OpTerm opTerm, Term child1, Term child2, Term child3)
1634 * mkTerm(Kind kind, OpTerm opTerm, const std::vector<Term>& children)
1638 * Datatype selector application.
1640 * -[1]: Selector (operator term)
1641 * -[2]: Datatype term (undefined if mis-applied)
1643 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1647 * Datatype selector application.
1649 * -[1]: Selector (operator term)
1650 * -[2]: Datatype term (defined rigidly if mis-applied)
1652 * mkTerm(Kind kind, OpTerm opTerm, Term child)
1654 APPLY_SELECTOR_TOTAL
,
1656 * Datatype tester application.
1659 * -[2]: Datatype term
1661 * mkTerm(Kind kind, Term child1, Term child2)
1662 * mkTerm(Kind kind, const std::vector<Term>& children)
1666 /* Parametric datatype term. */
1667 PARAMETRIC_DATATYPE
,
1668 /* type ascription, for datatype constructor applications;
1669 * first parameter is an ASCRIPTION_TYPE, second is the datatype constructor
1670 * application being ascribed */
1671 APPLY_TYPE_ASCRIPTION
,
1674 * Operator for a tuple update.
1676 * -[1]: Index of the tuple to be updated
1678 * mkOpTerm(Kind kind, uint32_t param)
1684 * -[1]: TUPLE_UPDATE_OP (which references an index)
1686 * -[3]: Element to store in the tuple at the given index
1688 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1689 * mkTerm(Kind kind, const std::vector<Term>& children)
1693 * Operator for a record update.
1695 * -[1]: Name of the field to be updated
1697 * mkOpTerm(Kind kind, const std::string& param)
1703 * -[1]: RECORD_UPDATE_OP Term (which references a field)
1704 * -[2]: Record term to update
1705 * -[3]: Element to store in the record in the given field
1707 * mkTerm(Kind kind, Term child1, Term child2)
1708 * mkTerm(Kind kind, const std::vector<Term>& children)
1712 /* datatypes size */
1714 /* datatypes height bound */
1716 /* datatypes height bound */
1718 /* datatypes sygus bound */
1720 /* datatypes sygus term order */
1721 DT_SYGUS_TERM_ORDER
,
1722 /* datatypes sygus is constant */
1726 /* Separation Logic ------------------------------------------------------ */
1729 * Separation logic nil term.
1732 * mkSepNil(Sort sort)
1736 * Separation logic empty heap.
1738 * -[1]: Term of the same sort as the sort of the location of the heap
1739 * that is constrained to be empty
1740 * -[2]: Term of the same sort as the data sort of the heap that is
1741 * that is constrained to be empty
1743 * mkTerm(Kind kind, Term child1, Term child2)
1744 * mkTerm(Kind kind, const std::vector<Term>& children)
1748 * Separation logic points-to relation.
1750 * -[1]: Location of the points-to constraint
1751 * -[2]: Data of the points-to constraint
1753 * mkTerm(Kind kind, Term child1, Term child2)
1754 * mkTerm(Kind kind, const std::vector<Term>& children)
1758 * Separation logic star.
1759 * Parameters: n >= 2
1760 * -[1]..[n]: Child constraints that hold in disjoint (separated) heaps
1762 * mkTerm(Kind kind, Term child1, Term child2)
1763 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1764 * mkTerm(Kind kind, const std::vector<Term>& children)
1768 * Separation logic magic wand.
1770 * -[1]: Antecendant of the magic wand constraint
1771 * -[2]: Conclusion of the magic wand constraint, which is asserted to
1772 * hold in all heaps that are disjoint extensions of the antecedent.
1774 * mkTerm(Kind kind, Term child1, Term child2)
1775 * mkTerm(Kind kind, const std::vector<Term>& children)
1779 /* separation label (internal use only) */
1783 /* Sets ------------------------------------------------------------------ */
1786 * Empty set constant.
1788 * -[1]: Sort of the set elements
1790 * mkEmptySet(Sort sort)
1796 * -[1]..[2]: Terms of set sort
1798 * mkTerm(Kind kind, Term child1, Term child2)
1799 * mkTerm(Kind kind, const std::vector<Term>& children)
1805 * -[1]..[2]: Terms of set sort
1807 * mkTerm(Kind kind, Term child1, Term child2)
1808 * mkTerm(Kind kind, const std::vector<Term>& children)
1814 * -[1]..[2]: Terms of set sort
1816 * mkTerm(Kind kind, Term child1, Term child2)
1817 * mkTerm(Kind kind, const std::vector<Term>& children)
1823 * -[1]..[2]: Terms of set sort, [1] a subset of set [2]?
1825 * mkTerm(Kind kind, Term child1, Term child2)
1826 * mkTerm(Kind kind, const std::vector<Term>& children)
1830 * Set membership predicate.
1832 * -[1]..[2]: Terms of set sort, [1] a member of set [2]?
1834 * mkTerm(Kind kind, Term child1, Term child2)
1835 * mkTerm(Kind kind, const std::vector<Term>& children)
1839 * The set of the single element given as a parameter.
1841 * -[1]: Single element
1843 * mkTerm(Kind kind, Term child)
1847 * The set obtained by inserting elements;
1849 * -[1]..[n-1]: Elements inserted into set [n]
1852 * mkTerm(Kind kind, Term child)
1853 * mkTerm(Kind kind, Term child1, Term child2)
1854 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1855 * mkTerm(Kind kind, const std::vector<Term>& children)
1861 * -[1]: Set to determine the cardinality of
1863 * mkTerm(Kind kind, Term child)
1867 * Set complement with respect to finite universe.
1869 * -[1]: Set to complement
1871 * mkTerm(Kind kind, Term child)
1875 * Finite universe set.
1876 * All set variables must be interpreted as subsets of it.
1878 * mkUniverseSet(Sort sort)
1884 * -[1]..[2]: Terms of set sort
1886 * mkTerm(Kind kind, Term child1, Term child2)
1887 * mkTerm(Kind kind, const std::vector<Term>& children)
1891 * Set cartesian product.
1893 * -[1]..[2]: Terms of set sort
1895 * mkTerm(Kind kind, Term child1, Term child2)
1896 * mkTerm(Kind kind, const std::vector<Term>& children)
1902 * -[1]: Term of set sort
1904 * mkTerm(Kind kind, Term child)
1908 * Set transitive closure.
1910 * -[1]: Term of set sort
1912 * mkTerm(Kind kind, Term child)
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 /* Strings --------------------------------------------------------------- */
1938 * -[1]..[n]: Terms of String sort
1940 * mkTerm(Kind kind, Term child1, Term child2)
1941 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1942 * mkTerm(Kind kind, const std::vector<Term>& children)
1946 * String membership.
1948 * -[1]..[2]: Terms of String sort
1950 * mkTerm(Kind kind, Term child1, Term child2)
1951 * mkTerm(Kind kind, const std::vector<Term>& children)
1957 * -[1]: Term of String sort
1959 * mkTerm(Kind kind, Term child)
1964 * Extracts a substring, starting at index i and of length l, from a string
1965 * s. If the start index is negative, the start index is greater than the
1966 * length of the string, or the length is negative, the result is the empty
1969 * -[1]: Term of sort String
1970 * -[2]: Term of sort Integer (index i)
1971 * -[3]: Term of sort Integer (length l)
1973 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
1974 * mkTerm(Kind kind, const std::vector<Term>& children)
1978 * String character at.
1979 * Returns the character at index i from a string s. If the index is negative
1980 * or the index is greater than the length of the string, the result is the
1981 * empty string. Otherwise the result is a string of length 1.
1983 * -[1]: Term of sort String (string s)
1984 * -[2]: Term of sort Integer (index i)
1986 * mkTerm(Kind kind, Term child1, Term child2)
1987 * mkTerm(Kind kind, const std::vector<Term>& children)
1992 * Checks whether a string s1 contains another string s2. If s2 is empty, the
1993 * result is always true.
1995 * -[1]: Term of sort String (the string s1)
1996 * -[2]: Term of sort String (the string s2)
1998 * mkTerm(Kind kind, Term child1, Term child2)
1999 * mkTerm(Kind kind, const std::vector<Term>& children)
2004 * Returns the index of a substring s2 in a string s1 starting at index i. If
2005 * the index is negative or greater than the length of string s1 or the
2006 * substring s2 does not appear in string s1 after index i, the result is -1.
2008 * -[1]: Term of sort String (substring s1)
2009 * -[2]: Term of sort String (substring s2)
2010 * -[3]: Term of sort Integer (index i)
2012 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2013 * mkTerm(Kind kind, const std::vector<Term>& children)
2018 * Replaces a string s2 in a string s1 with string s3. If s2 does not appear
2019 * in s1, s1 is returned unmodified.
2021 * -[1]: Term of sort String (string s1)
2022 * -[2]: Term of sort String (string s2)
2023 * -[3]: Term of sort String (string s3)
2025 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2026 * mkTerm(Kind kind, const std::vector<Term>& children)
2031 * Checks whether a string s1 is a prefix of string s2. If string s1 is
2032 * empty, this operator returns true.
2034 * -[1]: Term of sort String (string s1)
2035 * -[2]: Term of sort String (string s2)
2037 * mkTerm(Kind kind, Term child1, Term child2)
2038 * mkTerm(Kind kind, const std::vector<Term>& children)
2043 * Checks whether a string s1 is a suffix of string 2. If string s1 is empty,
2044 * this operator returns true.
2046 * -[1]: Term of sort String (string s1)
2047 * -[2]: Term of sort String (string s2)
2049 * mkTerm(Kind kind, Term child1, Term child2)
2050 * mkTerm(Kind kind, const std::vector<Term>& children)
2054 * Integer to string.
2055 * If the integer is negative this operator returns the empty string.
2057 * -[1]: Term of sort Integer
2059 * mkTerm(Kind kind, Term child)
2063 * String to integer (total function).
2064 * If the string does not contain an integer or the integer is negative, the
2065 * operator returns -1.
2067 * -[1]: Term of sort String
2069 * mkTerm(Kind kind, Term child)
2077 * mkString(const char* s)
2078 * mkString(const std::string& s)
2079 * mkString(const unsigned char c)
2080 * mkString(const std::vector<unsigned>& s)
2084 * Conversion from string to regexp.
2086 * -[1]: Term of sort String
2088 * mkTerm(Kind kind, Term child)
2092 * Regexp Concatenation .
2094 * -[1]..[2]: Terms of Regexp sort
2096 * mkTerm(Kind kind, Term child1, Term child2)
2097 * mkTerm(Kind kind, const std::vector<Term>& children)
2103 * -[1]..[2]: Terms of Regexp sort
2105 * mkTerm(Kind kind, Term child1, Term child2)
2106 * mkTerm(Kind kind, const std::vector<Term>& children)
2110 * Regexp intersection.
2112 * -[1]..[2]: Terms of Regexp sort
2114 * mkTerm(Kind kind, Term child1, Term child2)
2115 * mkTerm(Kind kind, const std::vector<Term>& children)
2121 * -[1]: Term of sort Regexp
2123 * mkTerm(Kind kind, Term child)
2129 * -[1]: Term of sort Regexp
2131 * mkTerm(Kind kind, Term child)
2137 * -[1]: Term of sort Regexp
2139 * mkTerm(Kind kind, Term child)
2145 * -[1]: Lower bound character for the range
2146 * -[2]: Upper bound character for the range
2148 * mkTerm(Kind kind, Term child1, Term child2)
2149 * mkTerm(Kind kind, const std::vector<Term>& children)
2155 * -[1]: Term of sort RegExp
2156 * -[2]: Lower bound for the number of repetitions of the first argument
2157 * -[3]: Upper bound for the number of repetitions of the first argument
2159 * mkTerm(Kind kind, Term child1, Term child2)
2160 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2161 * mkTerm(Kind kind, const std::vector<Term>& children)
2173 * Regexp all characters.
2181 /* regexp rv (internal use only) */
2185 /* Quantifiers ----------------------------------------------------------- */
2188 * Universally quantified formula.
2190 * -[1]: BOUND_VAR_LIST Term
2191 * -[2]: Quantifier body
2192 * -[3]: (optional) INST_PATTERN_LIST Term
2194 * mkTerm(Kind kind, Term child1, Term child2)
2195 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2196 * mkTerm(Kind kind, const std::vector<Term>& children)
2200 * Existentially quantified formula.
2202 * -[1]: BOUND_VAR_LIST Term
2203 * -[2]: Quantifier body
2204 * -[3]: (optional) INST_PATTERN_LIST Term
2206 * mkTerm(Kind kind, Term child1, Term child2)
2207 * mkTerm(Kind kind, Term child1, Term child2, Term child3)
2208 * mkTerm(Kind kind, const std::vector<Term>& children)
2212 /* instantiation constant */
2214 /* instantiation pattern */
2216 /* a list of bound variables (used to bind variables under a quantifier) */
2218 /* instantiation no-pattern */
2220 /* instantiation attribute */
2222 /* a list of instantiation patterns */
2224 /* predicate for specifying term in instantiation closure. */
2226 /* general rewrite rule (for rewrite-rules theory) */
2228 /* actual rewrite rule (for rewrite-rules theory) */
2230 /* actual reduction rule (for rewrite-rules theory) */
2232 /* actual deduction rule (for rewrite-rules theory) */
2235 /* Sort Kinds ------------------------------------------------------------ */
2239 /* a type parameter for type ascription */
2243 /* a datatype type index */
2247 /* set type, takes as parameter the type of the elements */
2251 /* specifies types of user-declared 'uninterpreted' sorts */
2255 /* a representation for basic types */
2257 /* a function type */
2259 /* the type of a symbolic expression */
2261 /* bit-vector type */
2263 /* floating-point type */
2267 /* ----------------------------------------------------------------------- */
2268 /* marks the upper-bound of this enumeration */
2273 * Get the string representation of a given kind.
2275 * @return the string representation of kind k
2277 std::string
kindToString(Kind k
) CVC4_PUBLIC
;
2280 * Serialize a kind to given stream.
2281 * @param out the output stream
2282 * @param k the kind to be serialized to the given output stream
2283 * @return the output stream
2285 std::ostream
& operator<<(std::ostream
& out
, Kind k
) CVC4_PUBLIC
;
2288 * Hash function for Kinds.
2290 struct CVC4_PUBLIC KindHashFunction
2292 size_t operator()(Kind k
) const;