34 if (term.getKind() == cvc5::Kind::CONST_FINITE_FIELD) {
35 return term.getFiniteFieldValue();
37 if (term.getKind() == cvc5::Kind::CONST_INTEGER) {
38 return term.getIntegerValue();
40 if (term.getKind() == cvc5::Kind::CONST_BITVECTOR) {
41 return term.getBitVectorValue();
43 if (term.getKind() == cvc5::Kind::CONST_BOOLEAN) {
44 return std::to_string(
static_cast<size_t>(term.getBooleanValue()));
48 throw std::length_error(
"Haven't checked yet");
51 throw std::length_error(
"There's no solution");
54 cvc5::Term
val = this->
solver.getValue(term);
56 if (
val.isIntegerValue()) {
58 }
else if (
val.isFiniteFieldValue()) {
60 }
else if (
val.isBitVectorValue()) {
62 }
else if (
val.isBooleanValue()) {
65 throw std::invalid_argument(
"Expected Integer or FiniteField sorts. Got: " +
val.getSort().toString());
170 bool is_insert = term.getKind() == cvc5::Kind::SET_INSERT;
171 bool is_set = term.getSort().isSet() && term.getKind() == cvc5::Kind::CONSTANT;
173 throw std::invalid_argument(
"Expected ARRAY or STORE. Got: " + term.toString());
176 if (term.getSort().isSet() && term.getKind() == cvc5::Kind::CONSTANT) {
177 std::string
set_name = term.toString();
181 return { term.toString(), 1 };
187 size_t to_print = term.getNumChildren() > 257 ? 128 : term.getNumChildren() - 2;
191 if (
to_print != term.getNumChildren() - 2) {
237 if (term.getKind() == cvc5::Kind::CONST_FINITE_FIELD) {
238 return term.getFiniteFieldValue();
240 if (term.getKind() == cvc5::Kind::CONST_INTEGER) {
241 return term.getIntegerValue();
243 if (term.getKind() == cvc5::Kind::CONST_BITVECTOR) {
244 return term.getBitVectorValue();
246 if (term.getKind() == cvc5::Kind::CONST_BOOLEAN) {
247 std::vector<std::string>
bool_res = {
"false",
"true" };
248 return bool_res[
static_cast<size_t>(term.getBooleanValue())];
251 if (term.getSort().isTuple() && term.getKind() == cvc5::Kind::APPLY_CONSTRUCTOR) {
252 std::string
res =
"(";
253 for (
size_t i = 1;
i < term.getNumChildren() - 1;
i++) {
259 if (term.getKind() == cvc5::Kind::SET_EMPTY) {
262 if (term.getKind() == cvc5::Kind::CONSTANT) {
263 if (term.getSort().isSet()) {
264 return "{" + term.toString() +
"}";
266 if (term.getSort().isArray()) {
267 return "[" + term.toString() +
"]";
269 return term.toString();
276 switch (term.getKind()) {
277 case cvc5::Kind::ADD:
278 case cvc5::Kind::FINITE_FIELD_ADD:
279 case cvc5::Kind::BITVECTOR_ADD:
283 case cvc5::Kind::SUB:
284 case cvc5::Kind::BITVECTOR_SUB:
287 case cvc5::Kind::NEG:
288 case cvc5::Kind::FINITE_FIELD_NEG:
289 case cvc5::Kind::BITVECTOR_NEG:
292 case cvc5::Kind::MULT:
293 case cvc5::Kind::FINITE_FIELD_MULT:
294 case cvc5::Kind::BITVECTOR_MULT:
297 case cvc5::Kind::EQUAL:
302 case cvc5::Kind::BITVECTOR_ULT:
306 case cvc5::Kind::BITVECTOR_UGT:
309 case cvc5::Kind::LEQ:
310 case cvc5::Kind::BITVECTOR_ULE:
313 case cvc5::Kind::GEQ:
314 case cvc5::Kind::BITVECTOR_UGE:
317 case cvc5::Kind::BITVECTOR_UREM:
320 case cvc5::Kind::BITVECTOR_UDIV:
323 case cvc5::Kind::XOR:
324 case cvc5::Kind::BITVECTOR_XOR:
327 case cvc5::Kind::BITVECTOR_OR:
333 case cvc5::Kind::BITVECTOR_AND:
336 case cvc5::Kind::BITVECTOR_SHL:
339 case cvc5::Kind::BITVECTOR_LSHR:
342 case cvc5::Kind::BITVECTOR_ROTATE_LEFT:
344 op =
" ><< " + term.getOp()[0].toString();
346 case cvc5::Kind::BITVECTOR_ROTATE_RIGHT:
348 op =
" >>< " + term.getOp()[0].toString();
350 case cvc5::Kind::AND:
353 case cvc5::Kind::NOT:
356 case cvc5::Kind::INTS_MODULUS:
360 case cvc5::Kind::SET_INSERT:
365 case cvc5::Kind::SET_MEMBER: {
368 if (term.getNumChildren() != 2) {
369 throw std::runtime_error(
"Expected set_member op. Got: " + term.toString());
375 return "(" +
res +
")";
379 case cvc5::Kind::STORE: {
385 case cvc5::Kind::SELECT: {
388 if (term.getNumChildren() != 2) {
389 throw std::runtime_error(
"Expected SELECT op. Got: " + term.toString());
397 info(
"\033[31m",
"Unprocessed operand :", term.getKind(),
"\033[0m");
398 info(
"\033[31m", term,
"\033[0m");
399 return "failed to process";
402 for (
size_t i = 0;
i < term.getNumChildren() - 1;
i++) {
405 cvc5::Term
child = term[term.getNumChildren() - 1];
412 return "(" +
res +
")";