Branch data Line data Source code
1 : : /******************************************************************************
2 : : * Top contributors (to current version):
3 : : * Aina Niemetz, Andrew Reynolds
4 : : *
5 : : * This file is part of the cvc5 project.
6 : : *
7 : : * Copyright (c) 2009-2025 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.
11 : : * ****************************************************************************
12 : : *
13 : : * The cvc5 C API.
14 : : */
15 : :
16 : : extern "C" {
17 : : #include <cvc5/c/cvc5.h>
18 : : }
19 : :
20 : : #include <cvc5/cvc5.h>
21 : :
22 : : #include <cstring>
23 : : #include <fstream>
24 : : #include <iostream>
25 : : #include <variant>
26 : :
27 : : #include "api/c/cvc5_c_structs.h"
28 : : #include "api/c/cvc5_checks.h"
29 : :
30 : : /* -------------------------------------------------------------------------- */
31 : : /* Cvc5Kind */
32 : : /* -------------------------------------------------------------------------- */
33 : :
34 : 0 : size_t cvc5_kind_hash(Cvc5Kind kind)
35 : : {
36 : 0 : return std::hash<cvc5::Kind>{}(static_cast<cvc5::Kind>(kind));
37 : : }
38 : :
39 : 300 : const char* cvc5_kind_to_string(Cvc5Kind kind)
40 : : {
41 [ + + ]: 300 : static thread_local std::string str;
42 : : CVC5_CAPI_TRY_CATCH_BEGIN;
43 [ + + ][ + - ]: 300 : CVC5_CAPI_CHECK_KIND(kind);
[ + + ][ + + ]
[ - - ]
44 : 298 : str = "CVC5_KIND_" + std::to_string(static_cast<cvc5::Kind>(kind));
45 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
46 : 298 : return str.c_str();
47 : : }
48 : :
49 : : /* -------------------------------------------------------------------------- */
50 : : /* Cvc5SortKind */
51 : : /* -------------------------------------------------------------------------- */
52 : :
53 : 0 : size_t cvc5_sort_kind_hash(Cvc5SortKind kind)
54 : : {
55 : 0 : return std::hash<cvc5::SortKind>{}(static_cast<cvc5::SortKind>(kind));
56 : : }
57 : :
58 : 26 : const char* cvc5_sort_kind_to_string(Cvc5SortKind kind)
59 : : {
60 [ + + ]: 26 : static thread_local std::string str;
61 : : CVC5_CAPI_TRY_CATCH_BEGIN;
62 [ + + ][ + - ]: 26 : CVC5_CAPI_CHECK_SORT_KIND(kind);
[ + + ][ + + ]
[ - - ]
63 : 24 : str = "CVC5_SORT_KIND_" + std::to_string(static_cast<cvc5::SortKind>(kind));
64 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
65 : 24 : return str.c_str();
66 : : }
67 : :
68 : : /* -------------------------------------------------------------------------- */
69 : : /* Cvc5RoundingMode */
70 : : /* -------------------------------------------------------------------------- */
71 : :
72 : 3 : const char* cvc5_rm_to_string(Cvc5RoundingMode rm)
73 : : {
74 [ + - ]: 3 : static thread_local std::string str;
75 : : CVC5_CAPI_TRY_CATCH_BEGIN;
76 [ + + ][ + - ]: 3 : CVC5_CAPI_CHECK_RM(rm);
[ + + ][ + + ]
[ - - ]
77 : 2 : str = std::to_string(static_cast<cvc5::RoundingMode>(rm));
78 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
79 : 2 : return str.c_str();
80 : : }
81 : :
82 : : /* -------------------------------------------------------------------------- */
83 : : /* Cvc5UnknownExplanation */
84 : : /* -------------------------------------------------------------------------- */
85 : :
86 : 7 : const char* cvc5_unknown_explanation_to_string(Cvc5UnknownExplanation exp)
87 : : {
88 [ + - ]: 7 : static thread_local std::string str;
89 : : CVC5_CAPI_TRY_CATCH_BEGIN;
90 [ + + ][ + - ]: 7 : CVC5_CAPI_CHECK_UNKNOWN_EXPLANATION(exp);
[ + + ][ + + ]
[ - - ]
91 : 6 : str = std::to_string(static_cast<cvc5::UnknownExplanation>(exp));
92 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
93 : 6 : return str.c_str();
94 : : }
95 : :
96 : : /* -------------------------------------------------------------------------- */
97 : : /* Cvc5LearnedLitType */
98 : : /* -------------------------------------------------------------------------- */
99 : :
100 : 3 : const char* cvc5_modes_learned_lit_type_to_string(Cvc5LearnedLitType type)
101 : : {
102 [ + - ]: 3 : static thread_local std::string str;
103 : : CVC5_CAPI_TRY_CATCH_BEGIN;
104 [ + + ][ + - ]: 3 : CVC5_CAPI_CHECK_LEARNED_LIT_TYPE(type);
[ + + ][ + + ]
[ - - ]
105 : 2 : str = std::to_string(static_cast<cvc5::modes::LearnedLitType>(type));
106 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
107 : 2 : return str.c_str();
108 : : }
109 : :
110 : : /* -------------------------------------------------------------------------- */
111 : : /* Cvc5BlockedModelsMode */
112 : : /* -------------------------------------------------------------------------- */
113 : :
114 : 3 : const char* cvc5_modes_block_models_mode_to_string(Cvc5BlockModelsMode mode)
115 : : {
116 [ + - ]: 3 : static thread_local std::string str;
117 : : CVC5_CAPI_TRY_CATCH_BEGIN;
118 [ + + ][ + - ]: 3 : CVC5_CAPI_CHECK_BLOCK_MODELS_MODE(mode);
[ + + ][ + + ]
[ - - ]
119 : 2 : str = std::to_string(static_cast<cvc5::modes::BlockModelsMode>(mode));
120 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
121 : 2 : return str.c_str();
122 : : }
123 : :
124 : : /* -------------------------------------------------------------------------- */
125 : : /* Cvc5ProofComponent */
126 : : /* -------------------------------------------------------------------------- */
127 : :
128 : 3 : const char* cvc5_modes_proof_component_to_string(Cvc5ProofComponent pc)
129 : : {
130 [ + - ]: 3 : static thread_local std::string str;
131 : : CVC5_CAPI_TRY_CATCH_BEGIN;
132 [ + + ][ + - ]: 3 : CVC5_CAPI_CHECK_PROOF_COMPONENT(pc);
[ + + ][ + + ]
[ - - ]
133 : 2 : str = std::to_string(static_cast<cvc5::modes::ProofComponent>(pc));
134 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
135 : 2 : return str.c_str();
136 : : }
137 : :
138 : : /* -------------------------------------------------------------------------- */
139 : : /* Cvc5ProofFormat */
140 : : /* -------------------------------------------------------------------------- */
141 : :
142 : 3 : const char* cvc5_modes_proof_format_to_string(Cvc5ProofFormat format)
143 : : {
144 [ + - ]: 3 : static thread_local std::string str;
145 : : CVC5_CAPI_TRY_CATCH_BEGIN;
146 [ + + ][ + - ]: 3 : CVC5_CAPI_CHECK_PROOF_FORMAT(format);
[ + + ][ + + ]
[ - - ]
147 : 2 : str = std::to_string(static_cast<cvc5::modes::ProofFormat>(format));
148 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
149 : 2 : return str.c_str();
150 : : }
151 : :
152 : : /* -------------------------------------------------------------------------- */
153 : : /* Cvc5ProofRule */
154 : : /* -------------------------------------------------------------------------- */
155 : :
156 : 156 : const char* cvc5_proof_rule_to_string(Cvc5ProofRule rule)
157 : : {
158 [ + + ]: 156 : static thread_local std::string str;
159 : : CVC5_CAPI_TRY_CATCH_BEGIN;
160 [ + - ][ + - ]: 156 : CVC5_CAPI_CHECK_PROOF_RULE(rule);
[ - + ][ - + ]
[ - - ]
161 : 156 : str = std::to_string(static_cast<cvc5::ProofRule>(rule));
162 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
163 : 156 : return str.c_str();
164 : : }
165 : :
166 : 1 : size_t cvc5_proof_rule_hash(Cvc5ProofRule rule)
167 : : {
168 : 1 : return std::hash<cvc5::ProofRule>{}(static_cast<cvc5::ProofRule>(rule));
169 : : }
170 : :
171 : : /* -------------------------------------------------------------------------- */
172 : : /* Cvc5ProofRewriteRule */
173 : : /* -------------------------------------------------------------------------- */
174 : :
175 : 509 : const char* cvc5_proof_rewrite_rule_to_string(Cvc5ProofRewriteRule rule)
176 : : {
177 [ + + ]: 509 : static thread_local std::string str;
178 : : CVC5_CAPI_TRY_CATCH_BEGIN;
179 [ + - ][ + - ]: 509 : CVC5_CAPI_CHECK_PROOF_REWRITE_RULE(rule);
[ - + ][ - + ]
[ - - ]
180 : 509 : str = std::to_string(static_cast<cvc5::ProofRewriteRule>(rule));
181 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
182 : 509 : return str.c_str();
183 : : }
184 : :
185 : 1 : size_t cvc5_proof_rewrite_rule_hash(Cvc5ProofRewriteRule rule)
186 : : {
187 : 2 : return std::hash<cvc5::ProofRewriteRule>{}(
188 : 2 : static_cast<cvc5::ProofRewriteRule>(rule));
189 : : }
190 : :
191 : : /* -------------------------------------------------------------------------- */
192 : : /* Cvc5FindSynthTarget */
193 : : /* -------------------------------------------------------------------------- */
194 : :
195 : 3 : const char* cvc5_modes_find_synth_target_to_string(Cvc5FindSynthTarget target)
196 : : {
197 [ + - ]: 3 : static thread_local std::string str;
198 : : CVC5_CAPI_TRY_CATCH_BEGIN;
199 [ + + ][ + - ]: 3 : CVC5_CAPI_CHECK_FIND_SYNTH_TARGET(target);
[ + + ][ + + ]
[ - - ]
200 : 2 : str = std::to_string(static_cast<cvc5::modes::FindSynthTarget>(target));
201 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
202 : 2 : return str.c_str();
203 : : }
204 : :
205 : : /* -------------------------------------------------------------------------- */
206 : : /* Cvc5OptionCategory */
207 : : /* -------------------------------------------------------------------------- */
208 : :
209 : 5 : const char* cvc5_modes_option_category_to_string(Cvc5OptionCategory category)
210 : : {
211 [ + + ]: 5 : static thread_local std::string str;
212 : : CVC5_CAPI_TRY_CATCH_BEGIN;
213 [ + + ][ + - ]: 5 : CVC5_CAPI_CHECK_OPTION_CATEGORY(category);
[ + + ][ + + ]
[ - - ]
214 : 4 : str = std::to_string(static_cast<cvc5::modes::OptionCategory>(category));
215 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
216 : 4 : return str.c_str();
217 : : }
218 : :
219 : : /* -------------------------------------------------------------------------- */
220 : : /* Cvc5InputLanguage */
221 : : /* -------------------------------------------------------------------------- */
222 : :
223 : 3 : const char* cvc5_modes_input_language_to_string(Cvc5InputLanguage lang)
224 : : {
225 [ + - ]: 3 : static thread_local std::string str;
226 : : CVC5_CAPI_TRY_CATCH_BEGIN;
227 [ + + ][ + - ]: 3 : CVC5_CAPI_CHECK_INPUT_LANGUAGE(lang);
[ + + ][ + + ]
[ - - ]
228 : 2 : str = std::to_string(static_cast<cvc5::modes::InputLanguage>(lang));
229 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
230 : 2 : return str.c_str();
231 : : }
232 : :
233 : : /* -------------------------------------------------------------------------- */
234 : : /* Cvc5Skolemid */
235 : : /* -------------------------------------------------------------------------- */
236 : :
237 : 61 : const char* cvc5_skolem_id_to_string(Cvc5SkolemId id)
238 : : {
239 [ + + ]: 61 : static thread_local std::string str;
240 : : CVC5_CAPI_TRY_CATCH_BEGIN;
241 [ + - ][ + - ]: 61 : CVC5_CAPI_CHECK_SKOLEM_ID(id);
[ - + ][ - + ]
[ - - ]
242 : 61 : str = std::to_string(static_cast<cvc5::SkolemId>(id));
243 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
244 : 61 : return str.c_str();
245 : : }
246 : :
247 : 4 : size_t cvc5_skolem_id_hash(Cvc5SkolemId id)
248 : : {
249 : 4 : size_t res = 0;
250 : : CVC5_CAPI_TRY_CATCH_BEGIN;
251 [ + - ][ + - ]: 4 : CVC5_CAPI_CHECK_SKOLEM_ID(id);
[ - + ][ - + ]
[ - - ]
252 : 4 : res = std::hash<cvc5::SkolemId>{}(static_cast<cvc5::SkolemId>(id));
253 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
254 : 4 : return res;
255 : : }
256 : :
257 : : /* -------------------------------------------------------------------------- */
258 : : /* Cvc5Sort */
259 : : /* -------------------------------------------------------------------------- */
260 : :
261 : 67 : Cvc5Sort cvc5_sort_copy(Cvc5Sort sort)
262 : : {
263 : 67 : Cvc5Sort res = nullptr;
264 : : CVC5_CAPI_TRY_CATCH_BEGIN;
265 [ + + ][ + + ]: 67 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
266 : 66 : res = sort->d_tm->copy(sort);
267 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
268 : 66 : return res;
269 : : }
270 : :
271 : 133 : void cvc5_sort_release(Cvc5Sort sort)
272 : : {
273 : : CVC5_CAPI_TRY_CATCH_BEGIN;
274 [ + + ][ + + ]: 133 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
275 : 132 : sort->d_tm->release(sort);
276 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
277 : 132 : }
278 : :
279 : 3953 : bool cvc5_sort_is_equal(Cvc5Sort a, Cvc5Sort b)
280 : : {
281 : 3953 : bool res = false;
282 : : CVC5_CAPI_TRY_CATCH_BEGIN;
283 [ + - ][ + + ]: 3953 : if (a == nullptr || b == nullptr)
284 : : {
285 : 64 : res = a == b;
286 : : }
287 : : else
288 : : {
289 : 3889 : res = a->d_sort == b->d_sort;
290 : : }
291 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
292 : 3953 : return res;
293 : : }
294 : :
295 : 128 : bool cvc5_sort_is_disequal(Cvc5Sort a, Cvc5Sort b)
296 : : {
297 : 128 : bool res = false;
298 : : CVC5_CAPI_TRY_CATCH_BEGIN;
299 [ + - ][ + + ]: 128 : if (a == nullptr || b == nullptr)
300 : : {
301 : 64 : printf("1\n");
302 : 64 : res = a != b;
303 : : }
304 : : else
305 : : {
306 : 64 : printf("2\n");
307 : 64 : res = a->d_sort != b->d_sort;
308 : : }
309 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
310 : 128 : return res;
311 : : }
312 : :
313 : 66 : int64_t cvc5_sort_compare(Cvc5Sort a, Cvc5Sort b)
314 : : {
315 : 66 : int64_t res = false;
316 : : CVC5_CAPI_TRY_CATCH_BEGIN;
317 [ + + ][ + + ]: 66 : CVC5_CAPI_CHECK_SORT(a);
[ - - ]
318 [ + + ][ + + ]: 65 : CVC5_CAPI_CHECK_SORT(b);
[ - - ]
319 [ - + ][ - + ]: 64 : res = a->d_sort < b->d_sort ? -1 : (a->d_sort > b->d_sort ? 1 : 0);
320 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
321 : 64 : return res;
322 : : }
323 : :
324 : 379 : Cvc5SortKind cvc5_sort_get_kind(Cvc5Sort sort)
325 : : {
326 : 379 : Cvc5SortKind res = CVC5_SORT_KIND_INTERNAL_SORT_KIND;
327 : : CVC5_CAPI_TRY_CATCH_BEGIN;
328 [ + + ][ + + ]: 379 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
329 : 378 : res = static_cast<Cvc5SortKind>(sort->d_sort.getKind());
330 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
331 : 378 : return res;
332 : : }
333 : :
334 : 398 : bool cvc5_sort_has_symbol(Cvc5Sort sort)
335 : : {
336 : 398 : bool res = false;
337 : : CVC5_CAPI_TRY_CATCH_BEGIN;
338 [ + + ]: 398 : if (sort)
339 : : {
340 : 335 : res = sort->d_sort.hasSymbol();
341 : : }
342 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
343 : 398 : return res;
344 : : }
345 : :
346 : 148 : const char* cvc5_sort_get_symbol(Cvc5Sort sort)
347 : : {
348 : 148 : const char* res = nullptr;
349 : : CVC5_CAPI_TRY_CATCH_BEGIN;
350 [ + + ][ + + ]: 148 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
351 [ + + ][ + + ]: 148 : CVC5_API_CHECK(cvc5_sort_has_symbol(sort))
[ - - ]
352 : 2 : << "cannot get symbol of sort that has no symbol";
353 [ + + ]: 144 : static thread_local std::string str;
354 [ + - ]: 144 : if (sort->d_sort.hasSymbol())
355 : : {
356 : 144 : str = sort->d_sort.getSymbol();
357 : 144 : res = str.c_str();
358 : : }
359 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
360 : 144 : return res;
361 : : }
362 : :
363 : 359 : bool cvc5_sort_is_boolean(Cvc5Sort sort)
364 : : {
365 : 359 : bool res = false;
366 : : CVC5_CAPI_TRY_CATCH_BEGIN;
367 [ + + ]: 359 : if (sort)
368 : : {
369 : 298 : res = sort->d_sort.isBoolean();
370 : : }
371 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
372 : 359 : return res;
373 : : }
374 : :
375 : 183 : bool cvc5_sort_is_integer(Cvc5Sort sort)
376 : : {
377 : 183 : bool res = false;
378 : : CVC5_CAPI_TRY_CATCH_BEGIN;
379 [ + + ]: 183 : if (sort)
380 : : {
381 : 122 : res = sort->d_sort.isInteger();
382 : : }
383 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
384 : 183 : return res;
385 : : }
386 : :
387 : 183 : bool cvc5_sort_is_real(Cvc5Sort sort)
388 : : {
389 : 183 : bool res = false;
390 : : CVC5_CAPI_TRY_CATCH_BEGIN;
391 [ + + ]: 183 : if (sort)
392 : : {
393 : 122 : res = sort->d_sort.isReal();
394 : : }
395 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
396 : 183 : return res;
397 : : }
398 : :
399 : 183 : bool cvc5_sort_is_string(Cvc5Sort sort)
400 : : {
401 : 183 : bool res = false;
402 : : CVC5_CAPI_TRY_CATCH_BEGIN;
403 [ + + ]: 183 : if (sort)
404 : : {
405 : 122 : res = sort->d_sort.isString();
406 : : }
407 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
408 : 183 : return res;
409 : : }
410 : :
411 : 183 : bool cvc5_sort_is_regexp(Cvc5Sort sort)
412 : : {
413 : 183 : bool res = false;
414 : : CVC5_CAPI_TRY_CATCH_BEGIN;
415 [ + + ]: 183 : if (sort)
416 : : {
417 : 122 : res = sort->d_sort.isRegExp();
418 : : }
419 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
420 : 183 : return res;
421 : : }
422 : :
423 : 183 : bool cvc5_sort_is_rm(Cvc5Sort sort)
424 : : {
425 : 183 : bool res = false;
426 : : CVC5_CAPI_TRY_CATCH_BEGIN;
427 [ + + ]: 183 : if (sort)
428 : : {
429 : 122 : res = sort->d_sort.isRoundingMode();
430 : : }
431 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
432 : 183 : return res;
433 : : }
434 : :
435 : 183 : bool cvc5_sort_is_bv(Cvc5Sort sort)
436 : : {
437 : 183 : bool res = false;
438 : : CVC5_CAPI_TRY_CATCH_BEGIN;
439 [ + + ]: 183 : if (sort)
440 : : {
441 : 122 : res = sort->d_sort.isBitVector();
442 : : }
443 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
444 : 183 : return res;
445 : : }
446 : :
447 : 183 : bool cvc5_sort_is_fp(Cvc5Sort sort)
448 : : {
449 : 183 : bool res = false;
450 : : CVC5_CAPI_TRY_CATCH_BEGIN;
451 [ + + ]: 183 : if (sort)
452 : : {
453 : 122 : res = sort->d_sort.isFloatingPoint();
454 : : }
455 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
456 : 183 : return res;
457 : : }
458 : :
459 : 549 : bool cvc5_sort_is_dt(Cvc5Sort sort)
460 : : {
461 : 549 : bool res = false;
462 : : CVC5_CAPI_TRY_CATCH_BEGIN;
463 [ + + ]: 549 : if (sort)
464 : : {
465 : 428 : res = sort->d_sort.isDatatype();
466 : : }
467 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
468 : 549 : return res;
469 : : }
470 : :
471 : 232 : bool cvc5_sort_is_dt_constructor(Cvc5Sort sort)
472 : : {
473 : 232 : bool res = false;
474 : : CVC5_CAPI_TRY_CATCH_BEGIN;
475 [ + - ]: 232 : if (sort)
476 : : {
477 : 232 : res = sort->d_sort.isDatatypeConstructor();
478 : : }
479 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
480 : 232 : return res;
481 : : }
482 : :
483 : 279 : bool cvc5_sort_is_dt_selector(Cvc5Sort sort)
484 : : {
485 : 279 : bool res = false;
486 : : CVC5_CAPI_TRY_CATCH_BEGIN;
487 [ + + ]: 279 : if (sort)
488 : : {
489 : 220 : res = sort->d_sort.isDatatypeSelector();
490 : : }
491 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
492 : 279 : return res;
493 : : }
494 : :
495 : 282 : bool cvc5_sort_is_dt_tester(Cvc5Sort sort)
496 : : {
497 : 282 : bool res = false;
498 : : CVC5_CAPI_TRY_CATCH_BEGIN;
499 [ + + ]: 282 : if (sort)
500 : : {
501 : 223 : res = sort->d_sort.isDatatypeTester();
502 : : }
503 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
504 : 282 : return res;
505 : : }
506 : :
507 : 177 : bool cvc5_sort_is_dt_updater(Cvc5Sort sort)
508 : : {
509 : 177 : bool res = false;
510 : : CVC5_CAPI_TRY_CATCH_BEGIN;
511 [ + + ]: 177 : if (sort)
512 : : {
513 : 118 : res = sort->d_sort.isDatatypeUpdater();
514 : : }
515 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
516 : 177 : return res;
517 : : }
518 : :
519 : 177 : bool cvc5_sort_is_fun(Cvc5Sort sort)
520 : : {
521 : 177 : bool res = false;
522 : : CVC5_CAPI_TRY_CATCH_BEGIN;
523 [ + + ]: 177 : if (sort)
524 : : {
525 : 118 : res = sort->d_sort.isFunction();
526 : : }
527 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
528 : 177 : return res;
529 : : }
530 : :
531 : 177 : bool cvc5_sort_is_predicate(Cvc5Sort sort)
532 : : {
533 : 177 : bool res = false;
534 : : CVC5_CAPI_TRY_CATCH_BEGIN;
535 [ + + ]: 177 : if (sort)
536 : : {
537 : 118 : res = sort->d_sort.isPredicate();
538 : : }
539 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
540 : 177 : return res;
541 : : }
542 : :
543 : 177 : bool cvc5_sort_is_tuple(Cvc5Sort sort)
544 : : {
545 : 177 : bool res = false;
546 : : CVC5_CAPI_TRY_CATCH_BEGIN;
547 [ + + ]: 177 : if (sort)
548 : : {
549 : 118 : res = sort->d_sort.isTuple();
550 : : }
551 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
552 : 177 : return res;
553 : : }
554 : :
555 : 177 : bool cvc5_sort_is_nullable(Cvc5Sort sort)
556 : : {
557 : 177 : bool res = false;
558 : : CVC5_CAPI_TRY_CATCH_BEGIN;
559 [ + + ]: 177 : if (sort)
560 : : {
561 : 118 : res = sort->d_sort.isNullable();
562 : : }
563 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
564 : 177 : return res;
565 : : }
566 : :
567 : 177 : bool cvc5_sort_is_record(Cvc5Sort sort)
568 : : {
569 : 177 : bool res = false;
570 : : CVC5_CAPI_TRY_CATCH_BEGIN;
571 [ + + ]: 177 : if (sort)
572 : : {
573 : 118 : res = sort->d_sort.isRecord();
574 : : }
575 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
576 : 177 : return res;
577 : : }
578 : :
579 : 179 : bool cvc5_sort_is_array(Cvc5Sort sort)
580 : : {
581 : 179 : bool res = false;
582 : : CVC5_CAPI_TRY_CATCH_BEGIN;
583 [ + + ]: 179 : if (sort)
584 : : {
585 : 120 : res = sort->d_sort.isArray();
586 : : }
587 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
588 : 179 : return res;
589 : : }
590 : :
591 : 183 : bool cvc5_sort_is_ff(Cvc5Sort sort)
592 : : {
593 : 183 : bool res = false;
594 : : CVC5_CAPI_TRY_CATCH_BEGIN;
595 [ + + ]: 183 : if (sort)
596 : : {
597 : 122 : res = sort->d_sort.isFiniteField();
598 : : }
599 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
600 : 183 : return res;
601 : : }
602 : :
603 : 177 : bool cvc5_sort_is_set(Cvc5Sort sort)
604 : : {
605 : 177 : bool res = false;
606 : : CVC5_CAPI_TRY_CATCH_BEGIN;
607 [ + + ]: 177 : if (sort)
608 : : {
609 : 118 : res = sort->d_sort.isSet();
610 : : }
611 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
612 : 177 : return res;
613 : : }
614 : :
615 : 177 : bool cvc5_sort_is_bag(Cvc5Sort sort)
616 : : {
617 : 177 : bool res = false;
618 : : CVC5_CAPI_TRY_CATCH_BEGIN;
619 [ + + ]: 177 : if (sort)
620 : : {
621 : 118 : res = sort->d_sort.isBag();
622 : : }
623 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
624 : 177 : return res;
625 : : }
626 : :
627 : 177 : bool cvc5_sort_is_sequence(Cvc5Sort sort)
628 : : {
629 : 177 : bool res = false;
630 : : CVC5_CAPI_TRY_CATCH_BEGIN;
631 [ + + ]: 177 : if (sort)
632 : : {
633 : 118 : res = sort->d_sort.isSequence();
634 : : }
635 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
636 : 177 : return res;
637 : : }
638 : :
639 : 295 : bool cvc5_sort_is_abstract(Cvc5Sort sort)
640 : : {
641 : 295 : bool res = false;
642 : : CVC5_CAPI_TRY_CATCH_BEGIN;
643 [ + + ]: 295 : if (sort)
644 : : {
645 : 236 : res = sort->d_sort.isAbstract();
646 : : }
647 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
648 : 295 : return res;
649 : : }
650 : :
651 : 177 : bool cvc5_sort_is_uninterpreted_sort(Cvc5Sort sort)
652 : : {
653 : 177 : bool res = false;
654 : : CVC5_CAPI_TRY_CATCH_BEGIN;
655 [ + + ]: 177 : if (sort)
656 : : {
657 : 118 : res = sort->d_sort.isUninterpretedSort();
658 : : }
659 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
660 : 177 : return res;
661 : : }
662 : :
663 : 177 : bool cvc5_sort_is_uninterpreted_sort_constructor(Cvc5Sort sort)
664 : : {
665 : 177 : bool res = false;
666 : : CVC5_CAPI_TRY_CATCH_BEGIN;
667 [ + + ]: 177 : if (sort)
668 : : {
669 : 118 : res = sort->d_sort.isUninterpretedSortConstructor();
670 : : }
671 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
672 : 177 : return res;
673 : : }
674 : :
675 : 235 : bool cvc5_sort_is_instantiated(Cvc5Sort sort)
676 : : {
677 : 235 : bool res = false;
678 : : CVC5_CAPI_TRY_CATCH_BEGIN;
679 [ + - ]: 235 : if (sort)
680 : : {
681 : 235 : res = sort->d_sort.isInstantiated();
682 : : }
683 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
684 : 235 : return res;
685 : : }
686 : :
687 : 42 : Cvc5Sort cvc5_sort_get_uninterpreted_sort_constructor(Cvc5Sort sort)
688 : : {
689 : 42 : Cvc5Sort res = nullptr;
690 : : CVC5_CAPI_TRY_CATCH_BEGIN;
691 [ + + ][ + + ]: 42 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
692 : 41 : res = sort->d_tm->export_sort(sort->d_sort.getUninterpretedSortConstructor());
693 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
694 : 40 : return res;
695 : : }
696 : :
697 : 2554 : Cvc5Datatype cvc5_sort_get_datatype(Cvc5Sort sort)
698 : : {
699 : 2554 : Cvc5Datatype res = nullptr;
700 : : CVC5_CAPI_TRY_CATCH_BEGIN;
701 [ - + ][ - + ]: 2554 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
702 : 2554 : res = sort->d_tm->export_dt(sort->d_sort.getDatatype());
703 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
704 : 2553 : return res;
705 : : }
706 : :
707 : 1440 : Cvc5Sort cvc5_sort_instantiate(Cvc5Sort sort,
708 : : size_t size,
709 : : const Cvc5Sort params[])
710 : : {
711 : 1440 : Cvc5Sort res = nullptr;
712 : : CVC5_CAPI_TRY_CATCH_BEGIN;
713 [ - + ][ - + ]: 1440 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
714 [ - + ][ - + ]: 1440 : CVC5_CAPI_CHECK_NOT_NULL(params);
[ - - ]
715 : 1440 : std::vector<cvc5::Sort> cparams;
716 [ + + ]: 3199 : for (uint32_t i = 0; i < size; ++i)
717 : : {
718 [ - + ][ - + ]: 1759 : CVC5_CAPI_CHECK_SORT_AT_IDX(params, i);
[ - - ]
719 : 1759 : cparams.push_back(params[i]->d_sort);
720 : : }
721 : 1440 : res = sort->d_tm->export_sort(sort->d_sort.instantiate(cparams));
722 [ - + ]: 1442 : CVC5_CAPI_TRY_CATCH_END;
723 : 1438 : return res;
724 : : }
725 : :
726 : 92 : const Cvc5Sort* cvc5_sort_get_instantiated_parameters(Cvc5Sort sort,
727 : : size_t* size)
728 : : {
729 [ + + ]: 92 : static thread_local std::vector<Cvc5Sort> res;
730 : : CVC5_CAPI_TRY_CATCH_BEGIN;
731 [ + + ][ + + ]: 92 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
732 [ + + ][ + + ]: 91 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
733 : 90 : res.clear();
734 : 90 : auto sorts = sort->d_sort.getInstantiatedParameters();
735 : 87 : auto tm = sort->d_tm;
736 [ + + ]: 347 : for (auto& s : sorts)
737 : : {
738 : 260 : res.push_back(tm->export_sort(s));
739 : : }
740 : 87 : *size = res.size();
741 [ - + ]: 92 : CVC5_CAPI_TRY_CATCH_END;
742 [ + - ]: 87 : return *size > 0 ? res.data() : nullptr;
743 : : }
744 : :
745 : 1 : Cvc5Sort cvc5_sort_substitute(Cvc5Sort sort, Cvc5Sort s, Cvc5Sort replacement)
746 : : {
747 : 1 : Cvc5Sort res = nullptr;
748 : : CVC5_CAPI_TRY_CATCH_BEGIN;
749 [ - + ][ - + ]: 1 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
750 [ - + ][ - + ]: 1 : CVC5_CAPI_CHECK_SORT(s);
[ - - ]
751 [ - + ][ - + ]: 1 : CVC5_CAPI_CHECK_SORT(replacement);
[ - - ]
752 : 1 : res = sort->d_tm->export_sort(
753 : 2 : sort->d_sort.substitute(s->d_sort, replacement->d_sort));
754 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
755 : 1 : return res;
756 : : }
757 : :
758 : 1 : Cvc5Sort cvc5_sort_substitute_sorts(Cvc5Sort sort,
759 : : size_t size,
760 : : const Cvc5Sort sorts[],
761 : : const Cvc5Sort replacements[])
762 : : {
763 : 1 : Cvc5Sort res = nullptr;
764 : : CVC5_CAPI_TRY_CATCH_BEGIN;
765 [ - + ][ - + ]: 1 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
766 [ - + ][ - + ]: 1 : CVC5_CAPI_CHECK_NOT_NULL(sorts);
[ - - ]
767 [ - + ][ - + ]: 1 : CVC5_CAPI_CHECK_NOT_NULL(replacements);
[ - - ]
768 : 1 : std::vector<cvc5::Sort> csorts;
769 [ + + ]: 3 : for (uint32_t i = 0; i < size; ++i)
770 : : {
771 [ - + ][ - + ]: 2 : CVC5_CAPI_CHECK_SORT_AT_IDX(sorts, i);
[ - - ]
772 : 2 : csorts.push_back(sorts[i]->d_sort);
773 : : }
774 : 1 : std::vector<cvc5::Sort> creplacements;
775 [ + + ]: 3 : for (uint32_t i = 0; i < size; ++i)
776 : : {
777 [ - + ][ - + ]: 2 : CVC5_CAPI_CHECK_SORT_AT_IDX(replacements, i);
[ - - ]
778 : 2 : creplacements.push_back(replacements[i]->d_sort);
779 : : }
780 : 1 : res = sort->d_tm->export_sort(sort->d_sort.substitute(csorts, creplacements));
781 [ - - ]: 1 : CVC5_CAPI_TRY_CATCH_END;
782 : 1 : return res;
783 : : }
784 : :
785 : 4 : const char* cvc5_sort_to_string(Cvc5Sort sort)
786 : : {
787 [ + + ]: 4 : static thread_local std::string str;
788 : : CVC5_CAPI_TRY_CATCH_BEGIN;
789 [ - + ][ - + ]: 4 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
790 : 4 : str = sort->d_sort.toString();
791 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
792 : 4 : return str.c_str();
793 : : }
794 : :
795 : 539 : size_t cvc5_sort_hash(Cvc5Sort sort)
796 : : {
797 : 539 : size_t res = 0;
798 : : CVC5_CAPI_TRY_CATCH_BEGIN;
799 [ + + ][ + + ]: 539 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
800 : 538 : res = std::hash<cvc5::Sort>{}(sort->d_sort);
801 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
802 : 538 : return res;
803 : : }
804 : :
805 : : /* Datatype constructor sort ------------------------------------------- */
806 : :
807 : 55 : size_t cvc5_sort_dt_constructor_get_arity(Cvc5Sort sort)
808 : : {
809 : 55 : size_t res = 0;
810 : : CVC5_CAPI_TRY_CATCH_BEGIN;
811 [ - + ][ - + ]: 55 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
812 : 55 : res = sort->d_sort.getDatatypeConstructorArity();
813 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
814 : 54 : return res;
815 : : }
816 : :
817 : 55 : const Cvc5Sort* cvc5_sort_dt_constructor_get_domain(Cvc5Sort sort, size_t* size)
818 : : {
819 [ + - ]: 55 : static thread_local std::vector<Cvc5Sort> res;
820 : : CVC5_CAPI_TRY_CATCH_BEGIN;
821 [ - + ][ - + ]: 55 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
822 [ - + ][ - + ]: 55 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
823 : 55 : res.clear();
824 : 55 : auto sorts = sort->d_sort.getDatatypeConstructorDomainSorts();
825 : 54 : auto tm = sort->d_tm;
826 [ + + ]: 162 : for (auto& s : sorts)
827 : : {
828 : 108 : res.push_back(tm->export_sort(s));
829 : : }
830 : 54 : *size = res.size();
831 [ - + ]: 55 : CVC5_CAPI_TRY_CATCH_END;
832 [ + - ]: 54 : return *size > 0 ? res.data() : nullptr;
833 : : }
834 : :
835 : 55 : Cvc5Sort cvc5_sort_dt_constructor_get_codomain(Cvc5Sort sort)
836 : : {
837 : 55 : Cvc5Sort res = nullptr;
838 : : CVC5_CAPI_TRY_CATCH_BEGIN;
839 [ - + ][ - + ]: 55 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
840 : 54 : res = sort->d_tm->export_sort(
841 : 109 : sort->d_sort.getDatatypeConstructorCodomainSort());
842 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
843 : 54 : return res;
844 : : }
845 : :
846 : : /* Dataype Selector sort ------------------------------------------------ */
847 : :
848 : 49 : Cvc5Sort cvc5_sort_dt_selector_get_domain(Cvc5Sort sort)
849 : : {
850 : 49 : Cvc5Sort res = nullptr;
851 : : CVC5_CAPI_TRY_CATCH_BEGIN;
852 [ - + ][ - + ]: 49 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
853 : 49 : res = sort->d_tm->export_sort(sort->d_sort.getDatatypeSelectorDomainSort());
854 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
855 : 48 : return res;
856 : : }
857 : :
858 : 49 : Cvc5Sort cvc5_sort_dt_selector_get_codomain(Cvc5Sort sort)
859 : : {
860 : 49 : Cvc5Sort res = nullptr;
861 : : CVC5_CAPI_TRY_CATCH_BEGIN;
862 [ - + ][ - + ]: 49 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
863 : 49 : res = sort->d_tm->export_sort(sort->d_sort.getDatatypeSelectorCodomainSort());
864 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
865 : 48 : return res;
866 : : }
867 : :
868 : : /* Datatype Tester sort ------------------------------------------------ */
869 : :
870 : 52 : Cvc5Sort cvc5_sort_dt_tester_get_domain(Cvc5Sort sort)
871 : : {
872 : 52 : Cvc5Sort res = nullptr;
873 : : CVC5_CAPI_TRY_CATCH_BEGIN;
874 [ - + ][ - + ]: 52 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
875 : 52 : res = sort->d_tm->export_sort(sort->d_sort.getDatatypeTesterDomainSort());
876 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
877 : 51 : return res;
878 : : }
879 : :
880 : 52 : Cvc5Sort cvc5_sort_dt_tester_get_codomain(Cvc5Sort sort)
881 : : {
882 : 52 : Cvc5Sort res = nullptr;
883 : : CVC5_CAPI_TRY_CATCH_BEGIN;
884 [ - + ][ - + ]: 52 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
885 : 52 : res = sort->d_tm->export_sort(sort->d_sort.getDatatypeTesterCodomainSort());
886 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
887 : 51 : return res;
888 : : }
889 : :
890 : : /* Function sort ------------------------------------------------------- */
891 : :
892 : 42 : size_t cvc5_sort_fun_get_arity(Cvc5Sort sort)
893 : : {
894 : 42 : size_t res = 0;
895 : : CVC5_CAPI_TRY_CATCH_BEGIN;
896 [ + + ][ + + ]: 42 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
897 : 41 : res = sort->d_sort.getFunctionArity();
898 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
899 : 40 : return res;
900 : : }
901 : :
902 : 41 : const Cvc5Sort* cvc5_sort_fun_get_domain(Cvc5Sort sort, size_t* size)
903 : : {
904 [ + + ]: 41 : static thread_local std::vector<Cvc5Sort> res;
905 : : CVC5_CAPI_TRY_CATCH_BEGIN;
906 [ + + ][ + + ]: 41 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
907 [ + + ][ + + ]: 40 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
908 : 39 : res.clear();
909 : 39 : auto sorts = sort->d_sort.getFunctionDomainSorts();
910 : 38 : auto tm = sort->d_tm;
911 [ + + ]: 114 : for (auto& s : sorts)
912 : : {
913 : 76 : res.push_back(tm->export_sort(s));
914 : : }
915 : 38 : *size = res.size();
916 [ - + ]: 41 : CVC5_CAPI_TRY_CATCH_END;
917 [ + - ]: 38 : return *size > 0 ? res.data() : nullptr;
918 : : }
919 : :
920 : 37 : Cvc5Sort cvc5_sort_fun_get_codomain(Cvc5Sort sort)
921 : : {
922 : 37 : Cvc5Sort res = nullptr;
923 : : CVC5_CAPI_TRY_CATCH_BEGIN;
924 [ + + ][ + + ]: 37 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
925 : 36 : res = sort->d_tm->export_sort(sort->d_sort.getFunctionCodomainSort());
926 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
927 : 35 : return res;
928 : : }
929 : :
930 : : /* Array sort ---------------------------------------------------------- */
931 : :
932 : 35 : Cvc5Sort cvc5_sort_array_get_index_sort(Cvc5Sort sort)
933 : : {
934 : 35 : Cvc5Sort res = nullptr;
935 : : CVC5_CAPI_TRY_CATCH_BEGIN;
936 [ + + ][ + + ]: 35 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
937 : 34 : res = sort->d_tm->export_sort(sort->d_sort.getArrayIndexSort());
938 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
939 : 33 : return res;
940 : : }
941 : :
942 : 37 : Cvc5Sort cvc5_sort_array_get_element_sort(Cvc5Sort sort)
943 : : {
944 : 37 : Cvc5Sort res = nullptr;
945 : : CVC5_CAPI_TRY_CATCH_BEGIN;
946 [ + + ][ + + ]: 37 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
947 : 36 : res = sort->d_tm->export_sort(sort->d_sort.getArrayElementSort());
948 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
949 : 35 : return res;
950 : : }
951 : :
952 : : /* Set sort ------------------------------------------------------------ */
953 : :
954 : 31 : Cvc5Sort cvc5_sort_set_get_element_sort(Cvc5Sort sort)
955 : : {
956 : 31 : Cvc5Sort res = nullptr;
957 : : CVC5_CAPI_TRY_CATCH_BEGIN;
958 [ + + ][ + + ]: 31 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
959 : 30 : res = sort->d_tm->export_sort(sort->d_sort.getSetElementSort());
960 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
961 : 29 : return res;
962 : : }
963 : :
964 : : /* Bag sort ------------------------------------------------------------ */
965 : :
966 : 29 : Cvc5Sort cvc5_sort_bag_get_element_sort(Cvc5Sort sort)
967 : : {
968 : 29 : Cvc5Sort res = nullptr;
969 : : CVC5_CAPI_TRY_CATCH_BEGIN;
970 [ + + ][ + + ]: 29 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
971 : 28 : res = sort->d_tm->export_sort(sort->d_sort.getBagElementSort());
972 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
973 : 27 : return res;
974 : : }
975 : :
976 : : /* Sequence sort ------------------------------------------------------- */
977 : :
978 : 27 : Cvc5Sort cvc5_sort_sequence_get_element_sort(Cvc5Sort sort)
979 : : {
980 : 27 : Cvc5Sort res = nullptr;
981 : : CVC5_CAPI_TRY_CATCH_BEGIN;
982 [ + + ][ + + ]: 27 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
983 : 26 : res = sort->d_tm->export_sort(sort->d_sort.getSequenceElementSort());
984 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
985 : 25 : return res;
986 : : }
987 : :
988 : : /* Abstract sort ------------------------------------------------------- */
989 : :
990 : 46 : Cvc5SortKind cvc5_sort_abstract_get_kind(Cvc5Sort sort)
991 : : {
992 : 46 : Cvc5SortKind res = CVC5_SORT_KIND_INTERNAL_SORT_KIND;
993 : : CVC5_CAPI_TRY_CATCH_BEGIN;
994 [ - + ][ - + ]: 46 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
995 : 46 : res = static_cast<Cvc5SortKind>(sort->d_sort.getAbstractedKind());
996 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
997 : 45 : return res;
998 : : }
999 : :
1000 : : /* Uninterpreted sort constructor sort --------------------------------- */
1001 : :
1002 : 22 : size_t cvc5_sort_uninterpreted_sort_constructor_get_arity(Cvc5Sort sort)
1003 : : {
1004 : 22 : size_t res = 0;
1005 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1006 [ + + ][ + + ]: 22 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1007 : 21 : res = sort->d_sort.getUninterpretedSortConstructorArity();
1008 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1009 : 20 : return res;
1010 : : }
1011 : :
1012 : : /* Bit-vector sort ----------------------------------------------------- */
1013 : :
1014 : 20 : uint32_t cvc5_sort_bv_get_size(Cvc5Sort sort)
1015 : : {
1016 : 20 : uint32_t res = 0;
1017 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1018 [ + + ][ + + ]: 20 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1019 : 19 : res = sort->d_sort.getBitVectorSize();
1020 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1021 : 18 : return res;
1022 : : }
1023 : :
1024 : : /* Finite field sort --------------------------------------------------- */
1025 : :
1026 : 38 : const char* cvc5_sort_ff_get_size(Cvc5Sort sort)
1027 : : {
1028 [ + + ]: 38 : static thread_local std::string str;
1029 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1030 [ + + ][ + + ]: 38 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1031 : 37 : str = sort->d_sort.getFiniteFieldSize();
1032 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1033 : 36 : return str.c_str();
1034 : : }
1035 : :
1036 : : /* Floating-point sort ------------------------------------------------- */
1037 : :
1038 : 16 : uint32_t cvc5_sort_fp_get_exp_size(Cvc5Sort sort)
1039 : : {
1040 : 16 : uint32_t res = 0;
1041 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1042 [ + + ][ + + ]: 16 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1043 : 15 : res = sort->d_sort.getFloatingPointExponentSize();
1044 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1045 : 14 : return res;
1046 : : }
1047 : :
1048 : 16 : uint32_t cvc5_sort_fp_get_sig_size(Cvc5Sort sort)
1049 : : {
1050 : 16 : uint32_t res = 0;
1051 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1052 [ + + ][ + + ]: 16 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1053 : 15 : res = sort->d_sort.getFloatingPointSignificandSize();
1054 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1055 : 14 : return res;
1056 : : }
1057 : :
1058 : : /* Datatype sort ------------------------------------------------------- */
1059 : :
1060 : 319 : size_t cvc5_sort_dt_get_arity(Cvc5Sort sort)
1061 : : {
1062 : 319 : size_t res = 0;
1063 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1064 [ + + ][ + + ]: 319 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1065 : 318 : res = sort->d_sort.getDatatypeArity();
1066 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1067 : 317 : return res;
1068 : : }
1069 : :
1070 : : /* Tuple sort ---------------------------------------------------------- */
1071 : :
1072 : 10 : size_t cvc5_sort_tuple_get_length(Cvc5Sort sort)
1073 : : {
1074 : 10 : size_t res = 0;
1075 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1076 [ + + ][ + + ]: 10 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1077 : 9 : res = sort->d_sort.getTupleLength();
1078 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1079 : 8 : return res;
1080 : : }
1081 : :
1082 : 9 : const Cvc5Sort* cvc5_sort_tuple_get_element_sorts(Cvc5Sort sort, size_t* size)
1083 : : {
1084 [ + + ]: 9 : static thread_local std::vector<Cvc5Sort> res;
1085 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1086 [ + + ][ + + ]: 9 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1087 [ + + ][ + + ]: 8 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
1088 : 7 : res.clear();
1089 : 7 : auto sorts = sort->d_sort.getTupleSorts();
1090 : 6 : auto tm = sort->d_tm;
1091 [ + + ]: 18 : for (auto& s : sorts)
1092 : : {
1093 : 12 : res.push_back(tm->export_sort(s));
1094 : : }
1095 : 6 : *size = res.size();
1096 [ - + ]: 9 : CVC5_CAPI_TRY_CATCH_END;
1097 [ + - ]: 6 : return *size > 0 ? res.data() : nullptr;
1098 : : }
1099 : :
1100 : 5 : Cvc5Sort cvc5_sort_nullable_get_element_sort(Cvc5Sort sort)
1101 : : {
1102 : 5 : Cvc5Sort res = nullptr;
1103 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1104 [ + + ][ + + ]: 5 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1105 : 4 : res = sort->d_tm->export_sort(sort->d_sort.getNullableElementSort());
1106 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1107 : 3 : return res;
1108 : : }
1109 : :
1110 : : /* -------------------------------------------------------------------------- */
1111 : : /* Cvc5Datatype */
1112 : : /* -------------------------------------------------------------------------- */
1113 : :
1114 : : /* Cvc5DatatypeConstructorDecl ----------------------------------------- */
1115 : :
1116 : 77 : Cvc5DatatypeConstructorDecl cvc5_dt_cons_decl_copy(
1117 : : Cvc5DatatypeConstructorDecl decl)
1118 : : {
1119 : 77 : Cvc5DatatypeConstructorDecl res = nullptr;
1120 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1121 [ + + ][ + + ]: 77 : CVC5_CAPI_CHECK_DT_CONS_DECL(decl);
[ - - ]
1122 : 76 : res = decl->d_tm->copy(decl);
1123 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1124 : 76 : return res;
1125 : : }
1126 : :
1127 : 153 : void cvc5_dt_cons_decl_release(Cvc5DatatypeConstructorDecl decl)
1128 : : {
1129 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1130 [ + + ][ + + ]: 153 : CVC5_CAPI_CHECK_DT_CONS_DECL(decl);
[ - - ]
1131 : 152 : decl->d_tm->release(decl);
1132 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1133 : 152 : }
1134 : :
1135 : 516 : bool cvc5_dt_cons_decl_is_equal(Cvc5DatatypeConstructorDecl a,
1136 : : Cvc5DatatypeConstructorDecl b)
1137 : : {
1138 : 516 : bool res = false;
1139 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1140 [ + + ][ + + ]: 516 : if (a == nullptr || b == nullptr)
1141 : : {
1142 : 172 : res = a == b;
1143 : : }
1144 : : else
1145 : : {
1146 : 344 : res = a->d_decl == b->d_decl;
1147 : : }
1148 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1149 : 516 : return res;
1150 : : }
1151 : :
1152 : 6257 : void cvc5_dt_cons_decl_add_selector(Cvc5DatatypeConstructorDecl decl,
1153 : : const char* name,
1154 : : Cvc5Sort sort)
1155 : : {
1156 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1157 [ + + ][ + + ]: 6257 : CVC5_CAPI_CHECK_DT_CONS_DECL(decl);
[ - - ]
1158 [ + + ][ + + ]: 6256 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
1159 [ + + ][ + + ]: 6255 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1160 : 6253 : decl->d_decl.addSelector(name, sort->d_sort);
1161 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
1162 : 6253 : }
1163 : :
1164 : 1703 : void cvc5_dt_cons_decl_add_selector_self(Cvc5DatatypeConstructorDecl decl,
1165 : : const char* name)
1166 : : {
1167 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1168 [ + + ][ + + ]: 1703 : CVC5_CAPI_CHECK_DT_CONS_DECL(decl);
[ - - ]
1169 [ + + ][ + + ]: 1702 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
1170 : 1701 : decl->d_decl.addSelectorSelf(name);
1171 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1172 : 1701 : }
1173 : :
1174 : 83 : void cvc5_dt_cons_decl_add_selector_unresolved(Cvc5DatatypeConstructorDecl decl,
1175 : : const char* name,
1176 : : const char* unres_name)
1177 : : {
1178 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1179 [ + + ][ + + ]: 83 : CVC5_CAPI_CHECK_DT_CONS_DECL(decl);
[ - - ]
1180 [ + + ][ + + ]: 82 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
1181 [ + + ][ + + ]: 81 : CVC5_CAPI_CHECK_NOT_NULL(unres_name);
[ - - ]
1182 : 80 : decl->d_decl.addSelectorUnresolved(name, unres_name);
1183 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
1184 : 80 : }
1185 : :
1186 : 68 : const char* cvc5_dt_cons_decl_to_string(Cvc5DatatypeConstructorDecl decl)
1187 : : {
1188 [ + - ]: 68 : static thread_local std::string str;
1189 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1190 [ + + ][ + + ]: 68 : CVC5_CAPI_CHECK_DT_CONS_DECL(decl);
[ - - ]
1191 : 67 : str = decl->d_decl.toString();
1192 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1193 : 67 : return str.c_str();
1194 : : }
1195 : :
1196 : 954 : size_t cvc5_dt_cons_decl_hash(Cvc5DatatypeConstructorDecl decl)
1197 : : {
1198 : 954 : size_t res = 0;
1199 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1200 [ + + ][ + + ]: 954 : CVC5_CAPI_CHECK_DT_CONS_DECL(decl);
[ - - ]
1201 : 952 : res = std::hash<cvc5::DatatypeConstructorDecl>{}(decl->d_decl);
1202 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1203 : 952 : return res;
1204 : : }
1205 : :
1206 : : /* Cvc5DatatypeDecl ---------------------------------------------------- */
1207 : :
1208 : 65 : Cvc5DatatypeDecl cvc5_dt_decl_copy(Cvc5DatatypeDecl decl)
1209 : : {
1210 : 65 : Cvc5DatatypeDecl res = nullptr;
1211 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1212 [ + + ][ + + ]: 65 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1213 : 64 : res = decl->d_tm->copy(decl);
1214 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1215 : 64 : return res;
1216 : : }
1217 : :
1218 : 129 : void cvc5_dt_decl_release(Cvc5DatatypeDecl decl)
1219 : : {
1220 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1221 [ + + ][ + + ]: 129 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1222 : 128 : decl->d_tm->release(decl);
1223 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1224 : 128 : }
1225 : :
1226 : 344 : bool cvc5_dt_decl_is_equal(Cvc5DatatypeDecl a, Cvc5DatatypeDecl b)
1227 : : {
1228 : 344 : bool res = false;
1229 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1230 [ + + ][ + + ]: 344 : if (a == nullptr || b == nullptr)
1231 : : {
1232 : 172 : res = a == b;
1233 : : }
1234 : : else
1235 : : {
1236 : 172 : res = a->d_decl == b->d_decl;
1237 : : }
1238 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1239 : 344 : return res;
1240 : : }
1241 : :
1242 : 8700 : void cvc5_dt_decl_add_constructor(Cvc5DatatypeDecl decl,
1243 : : Cvc5DatatypeConstructorDecl cdecl)
1244 : : {
1245 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1246 [ + + ][ + + ]: 8700 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1247 [ + + ][ + + ]: 8699 : CVC5_CAPI_CHECK_NOT_NULL(cdecl);
[ - - ]
1248 : 8698 : decl->d_decl.addConstructor(cdecl->d_decl);
1249 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1250 : 8698 : }
1251 : :
1252 : 62 : size_t cvc5_dt_decl_get_num_constructors(Cvc5DatatypeDecl decl)
1253 : : {
1254 : 62 : size_t res = 0;
1255 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1256 [ + + ][ + + ]: 62 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1257 : 61 : res = decl->d_decl.getNumConstructors();
1258 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1259 : 61 : return res;
1260 : : }
1261 : :
1262 : 61 : bool cvc5_dt_decl_is_parametric(Cvc5DatatypeDecl decl)
1263 : : {
1264 : 61 : size_t res = 0;
1265 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1266 [ + + ][ + + ]: 61 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1267 : 60 : res = decl->d_decl.isParametric();
1268 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1269 : 60 : return res;
1270 : : }
1271 : :
1272 : 60 : bool cvc5_dt_decl_is_resolved(Cvc5DatatypeDecl decl)
1273 : : {
1274 : 60 : bool res = false;
1275 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1276 [ + + ][ + + ]: 60 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1277 : 59 : res = decl->d_decl.isResolved();
1278 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1279 : 59 : return res;
1280 : : }
1281 : :
1282 : 1 : const char* cvc5_dt_decl_to_string(Cvc5DatatypeDecl decl)
1283 : : {
1284 [ + - ]: 1 : static thread_local std::string str;
1285 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1286 [ + - ][ + - ]: 1 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1287 : 0 : str = decl->d_decl.toString();
1288 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1289 : 0 : return str.c_str();
1290 : : }
1291 : :
1292 : 269 : const char* cvc5_dt_decl_get_name(Cvc5DatatypeDecl decl)
1293 : : {
1294 [ + + ]: 269 : static thread_local std::string str;
1295 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1296 [ + + ][ + + ]: 269 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1297 : 267 : str = decl->d_decl.getName();
1298 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1299 : 267 : return str.c_str();
1300 : : }
1301 : :
1302 : 582 : size_t cvc5_dt_decl_hash(Cvc5DatatypeDecl decl)
1303 : : {
1304 : 582 : size_t res = 0;
1305 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1306 [ + + ][ + + ]: 582 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
1307 : 580 : res = std::hash<cvc5::DatatypeDecl>{}(decl->d_decl);
1308 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1309 : 580 : return res;
1310 : : }
1311 : :
1312 : : /* Cvc5DatatypeSelector ------------------------------------------------ */
1313 : :
1314 : 55 : Cvc5DatatypeSelector cvc5_dt_sel_copy(Cvc5DatatypeSelector sel)
1315 : : {
1316 : 55 : Cvc5DatatypeSelector res = nullptr;
1317 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1318 [ + + ][ + + ]: 55 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1319 : 54 : res = sel->d_tm->copy(sel);
1320 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1321 : 54 : return res;
1322 : : }
1323 : :
1324 : 109 : void cvc5_dt_sel_release(Cvc5DatatypeSelector sel)
1325 : : {
1326 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1327 [ + + ][ + + ]: 109 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1328 : 108 : sel->d_tm->release(sel);
1329 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1330 : 108 : }
1331 : :
1332 : 344 : bool cvc5_dt_sel_is_equal(Cvc5DatatypeSelector a, Cvc5DatatypeSelector b)
1333 : : {
1334 : 344 : bool res = false;
1335 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1336 [ + + ][ + + ]: 344 : if (a == nullptr || b == nullptr)
1337 : : {
1338 : 172 : res = a == b;
1339 : : }
1340 : : else
1341 : : {
1342 : 172 : res = a->d_dt_sel == b->d_dt_sel;
1343 : : }
1344 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1345 : 344 : return res;
1346 : : }
1347 : :
1348 : 110 : const char* cvc5_dt_sel_get_name(Cvc5DatatypeSelector sel)
1349 : : {
1350 [ + + ]: 110 : static thread_local std::string str;
1351 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1352 [ + + ][ + + ]: 110 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1353 : 108 : str = sel->d_dt_sel.getName();
1354 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1355 : 108 : return str.c_str();
1356 : : }
1357 : :
1358 : 1052 : Cvc5Term cvc5_dt_sel_get_term(Cvc5DatatypeSelector sel)
1359 : : {
1360 : 1052 : Cvc5Term res = nullptr;
1361 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1362 [ + + ][ + + ]: 1052 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1363 : 1051 : res = sel->d_tm->export_term(sel->d_dt_sel.getTerm());
1364 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1365 : 1051 : return res;
1366 : : }
1367 : :
1368 : 60 : Cvc5Term cvc5_dt_sel_get_updater_term(Cvc5DatatypeSelector sel)
1369 : : {
1370 : 60 : Cvc5Term res = nullptr;
1371 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1372 [ + + ][ + + ]: 60 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1373 : 59 : res = sel->d_tm->export_term(sel->d_dt_sel.getUpdaterTerm());
1374 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1375 : 59 : return res;
1376 : : }
1377 : :
1378 : 208 : Cvc5Sort cvc5_dt_sel_get_codomain_sort(Cvc5DatatypeSelector sel)
1379 : : {
1380 : 208 : Cvc5Sort res = nullptr;
1381 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1382 [ + + ][ + + ]: 208 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1383 : 207 : res = sel->d_tm->export_sort(sel->d_dt_sel.getCodomainSort());
1384 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1385 : 207 : return res;
1386 : : }
1387 : :
1388 : 50 : const char* cvc5_dt_sel_to_string(Cvc5DatatypeSelector sel)
1389 : : {
1390 [ + - ]: 50 : static thread_local std::string str;
1391 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1392 [ + + ][ + + ]: 50 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1393 : 49 : str = sel->d_dt_sel.toString();
1394 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1395 : 49 : return str.c_str();
1396 : : }
1397 : :
1398 : 542 : size_t cvc5_dt_sel_hash(Cvc5DatatypeSelector sel)
1399 : : {
1400 : 542 : size_t res = 0;
1401 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1402 [ + + ][ + + ]: 542 : CVC5_CAPI_CHECK_DT_SEL(sel);
[ - - ]
1403 : 540 : res = std::hash<cvc5::DatatypeSelector>{}(sel->d_dt_sel);
1404 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1405 : 540 : return res;
1406 : : }
1407 : :
1408 : : /* Cvc5DatatypeConstructor --------------------------------------------- */
1409 : :
1410 : 47 : Cvc5DatatypeConstructor cvc5_dt_cons_copy(Cvc5DatatypeConstructor cons)
1411 : : {
1412 : 47 : Cvc5DatatypeConstructor res = nullptr;
1413 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1414 [ + + ][ + + ]: 47 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1415 : 46 : res = cons->d_tm->copy(cons);
1416 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1417 : 46 : return res;
1418 : : }
1419 : :
1420 : 93 : void cvc5_dt_cons_release(Cvc5DatatypeConstructor cons)
1421 : : {
1422 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1423 [ + + ][ + + ]: 93 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1424 : 92 : cons->d_tm->release(cons);
1425 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1426 : 92 : }
1427 : :
1428 : 516 : bool cvc5_dt_cons_is_equal(Cvc5DatatypeConstructor a, Cvc5DatatypeConstructor b)
1429 : : {
1430 : 516 : bool res = false;
1431 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1432 [ + + ][ + + ]: 516 : if (a == nullptr || b == nullptr)
1433 : : {
1434 : 172 : res = a == b;
1435 : : }
1436 : : else
1437 : : {
1438 : 344 : res = a->d_dt_cons == b->d_dt_cons;
1439 : : }
1440 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1441 : 516 : return res;
1442 : : }
1443 : :
1444 : 111 : const char* cvc5_dt_cons_get_name(Cvc5DatatypeConstructor cons)
1445 : : {
1446 [ + + ]: 111 : static thread_local std::string str;
1447 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1448 [ + + ][ + + ]: 111 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1449 : 109 : str = cons->d_dt_cons.getName();
1450 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1451 : 109 : return str.c_str();
1452 : : }
1453 : :
1454 : 1280 : Cvc5Term cvc5_dt_cons_get_term(Cvc5DatatypeConstructor cons)
1455 : : {
1456 : 1280 : Cvc5Term res = nullptr;
1457 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1458 [ + + ][ + + ]: 1280 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1459 : 1279 : res = cons->d_tm->export_term(cons->d_dt_cons.getTerm());
1460 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1461 : 1279 : return res;
1462 : : }
1463 : :
1464 : 5 : Cvc5Term cvc5_dt_cons_get_instantiated_term(Cvc5DatatypeConstructor cons,
1465 : : Cvc5Sort sort)
1466 : : {
1467 : 5 : Cvc5Term res = nullptr;
1468 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1469 [ + + ][ + + ]: 5 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1470 [ + + ][ + + ]: 4 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
1471 : 2 : res = cons->d_tm->export_term(
1472 : 5 : cons->d_dt_cons.getInstantiatedTerm(sort->d_sort));
1473 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
1474 : 2 : return res;
1475 : : }
1476 : :
1477 : 112 : Cvc5Term cvc5_dt_cons_get_tester_term(Cvc5DatatypeConstructor cons)
1478 : : {
1479 : 112 : Cvc5Term res = nullptr;
1480 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1481 [ + + ][ + + ]: 112 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1482 : 110 : res = cons->d_tm->export_term(cons->d_dt_cons.getTesterTerm());
1483 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1484 : 110 : return res;
1485 : : }
1486 : :
1487 : 16 : size_t cvc5_dt_cons_get_num_selectors(Cvc5DatatypeConstructor cons)
1488 : : {
1489 : 16 : size_t res = 0;
1490 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1491 [ + + ][ + + ]: 16 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1492 : 15 : res = cons->d_dt_cons.getNumSelectors();
1493 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1494 : 15 : return res;
1495 : : }
1496 : :
1497 : 339 : Cvc5DatatypeSelector cvc5_dt_cons_get_selector(Cvc5DatatypeConstructor cons,
1498 : : size_t index)
1499 : : {
1500 : 339 : Cvc5DatatypeSelector res = nullptr;
1501 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1502 [ + + ][ + + ]: 339 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1503 : 337 : res = cons->d_tm->export_dt_sel(cons->d_dt_cons[index]);
1504 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
1505 : 336 : return res;
1506 : : }
1507 : :
1508 : 667 : Cvc5DatatypeSelector cvc5_dt_cons_get_selector_by_name(
1509 : : Cvc5DatatypeConstructor cons, const char* name)
1510 : : {
1511 : 667 : Cvc5DatatypeSelector res = nullptr;
1512 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1513 [ + + ][ + + ]: 667 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1514 [ + + ][ + + ]: 666 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
1515 : 667 : res = cons->d_tm->export_dt_sel(cons->d_dt_cons.getSelector(name));
1516 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
1517 : 664 : return res;
1518 : : }
1519 : :
1520 : 35 : const char* cvc5_dt_cons_to_string(Cvc5DatatypeConstructor cons)
1521 : : {
1522 [ + - ]: 35 : static thread_local std::string str;
1523 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1524 [ + + ][ + + ]: 35 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1525 : 34 : str = cons->d_dt_cons.toString();
1526 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1527 : 34 : return str.c_str();
1528 : : }
1529 : :
1530 : 510 : size_t cvc5_dt_cons_hash(Cvc5DatatypeConstructor cons)
1531 : : {
1532 : 510 : size_t res = 0;
1533 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1534 [ + + ][ + + ]: 510 : CVC5_CAPI_CHECK_DT_CONS(cons);
[ - - ]
1535 : 508 : res = std::hash<cvc5::DatatypeConstructor>{}(cons->d_dt_cons);
1536 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1537 : 508 : return res;
1538 : : }
1539 : :
1540 : : /* Cvc5Datatype -------------------------------------------------------- */
1541 : :
1542 : 36 : Cvc5Datatype cvc5_dt_copy(Cvc5Datatype dt)
1543 : : {
1544 : 36 : Cvc5Datatype res = nullptr;
1545 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1546 [ + + ][ + + ]: 36 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1547 : 35 : res = dt->d_tm->copy(dt);
1548 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1549 : 35 : return res;
1550 : : }
1551 : :
1552 : 71 : void cvc5_dt_release(Cvc5Datatype dt)
1553 : : {
1554 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1555 [ + + ][ + + ]: 71 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1556 : 70 : dt->d_tm->release(dt);
1557 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1558 : 70 : }
1559 : :
1560 : 344 : bool cvc5_dt_is_equal(Cvc5Datatype a, Cvc5Datatype b)
1561 : : {
1562 : 344 : bool res = false;
1563 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1564 [ + + ][ + + ]: 344 : if (a == nullptr || b == nullptr)
1565 : : {
1566 : 172 : res = a == b;
1567 : : }
1568 : : else
1569 : : {
1570 : 172 : res = a->d_dt == b->d_dt;
1571 : : }
1572 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1573 : 344 : return res;
1574 : : }
1575 : :
1576 : 1164 : Cvc5DatatypeConstructor cvc5_dt_get_constructor(Cvc5Datatype dt, size_t idx)
1577 : : {
1578 : 1164 : Cvc5DatatypeConstructor res = nullptr;
1579 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1580 [ + + ][ + + ]: 1164 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1581 : 1162 : res = dt->d_tm->export_dt_cons(dt->d_dt[idx]);
1582 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
1583 : 1160 : return res;
1584 : : }
1585 : :
1586 : 1331 : Cvc5DatatypeConstructor cvc5_dt_get_constructor_by_name(Cvc5Datatype dt,
1587 : : const char* name)
1588 : : {
1589 : 1331 : Cvc5DatatypeConstructor res = nullptr;
1590 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1591 [ + + ][ + + ]: 1331 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1592 [ + + ][ + + ]: 1330 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
1593 : 1333 : res = dt->d_tm->export_dt_cons(dt->d_dt.getConstructor(name));
1594 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
1595 : 1327 : return res;
1596 : : }
1597 : :
1598 : 533 : Cvc5DatatypeSelector cvc5_dt_get_selector(Cvc5Datatype dt, const char* name)
1599 : : {
1600 : 533 : Cvc5DatatypeSelector res = nullptr;
1601 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1602 [ + + ][ + + ]: 533 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1603 [ + + ][ + + ]: 532 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
1604 : 533 : res = dt->d_tm->export_dt_sel(dt->d_dt.getSelector(name));
1605 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
1606 : 530 : return res;
1607 : : }
1608 : :
1609 : 210 : const char* cvc5_dt_get_name(Cvc5Datatype dt)
1610 : : {
1611 [ + + ]: 210 : static thread_local std::string str;
1612 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1613 [ + + ][ + + ]: 210 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1614 : 208 : str = dt->d_dt.getName();
1615 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1616 : 208 : return str.c_str();
1617 : : }
1618 : :
1619 : 1 : size_t cvc5_dt_get_num_constructors(Cvc5Datatype dt)
1620 : : {
1621 : 1 : size_t res = 0;
1622 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1623 [ + - ][ + - ]: 1 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1624 : 0 : res = dt->d_dt.getNumConstructors();
1625 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1626 : 0 : return res;
1627 : : }
1628 : :
1629 : 11 : const Cvc5Sort* cvc5_dt_get_parameters(Cvc5Datatype dt, size_t* size)
1630 : : {
1631 [ + + ]: 11 : static thread_local std::vector<Cvc5Sort> res;
1632 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1633 [ + + ][ + + ]: 11 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1634 [ + + ][ + + ]: 10 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
1635 : 9 : res.clear();
1636 : 9 : auto sorts = dt->d_dt.getParameters();
1637 : 8 : auto tm = dt->d_tm;
1638 [ + + ]: 22 : for (auto& s : sorts)
1639 : : {
1640 : 14 : res.push_back(tm->export_sort(s));
1641 : : }
1642 : 8 : *size = res.size();
1643 [ - + ]: 11 : CVC5_CAPI_TRY_CATCH_END;
1644 [ + - ]: 8 : return *size > 0 ? res.data() : nullptr;
1645 : : }
1646 : :
1647 : 7 : bool cvc5_dt_is_parametric(Cvc5Datatype dt)
1648 : : {
1649 : 7 : bool res = false;
1650 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1651 [ + + ][ + + ]: 7 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1652 : 6 : res = dt->d_dt.isParametric();
1653 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1654 : 6 : return res;
1655 : : }
1656 : :
1657 : 31 : bool cvc5_dt_is_codatatype(Cvc5Datatype dt)
1658 : : {
1659 : 31 : bool res = false;
1660 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1661 [ + + ][ + + ]: 31 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1662 : 30 : res = dt->d_dt.isCodatatype();
1663 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1664 : 30 : return res;
1665 : : }
1666 : :
1667 : 46 : bool cvc5_dt_is_tuple(Cvc5Datatype dt)
1668 : : {
1669 : 46 : bool res = false;
1670 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1671 [ + + ][ + + ]: 46 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1672 : 45 : res = dt->d_dt.isTuple();
1673 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1674 : 45 : return res;
1675 : : }
1676 : :
1677 : 61 : bool cvc5_dt_is_record(Cvc5Datatype dt)
1678 : : {
1679 : 61 : bool res = false;
1680 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1681 [ + + ][ + + ]: 61 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1682 : 60 : res = dt->d_dt.isRecord();
1683 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1684 : 60 : return res;
1685 : : }
1686 : :
1687 : 276 : bool cvc5_dt_is_finite(Cvc5Datatype dt)
1688 : : {
1689 : 276 : bool res = false;
1690 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1691 [ + + ][ + + ]: 276 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1692 : 274 : res = dt->d_dt.isFinite();
1693 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
1694 : 273 : return res;
1695 : : }
1696 : :
1697 : 79 : bool cvc5_dt_is_well_founded(Cvc5Datatype dt)
1698 : : {
1699 : 79 : bool res = false;
1700 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1701 [ + + ][ + + ]: 79 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1702 : 78 : res = dt->d_dt.isWellFounded();
1703 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1704 : 78 : return res;
1705 : : }
1706 : :
1707 : 1 : const char* cvc5_dt_to_string(Cvc5Datatype dt)
1708 : : {
1709 [ + - ]: 1 : static thread_local std::string str;
1710 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1711 [ + - ][ + - ]: 1 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1712 : 0 : str = dt->d_dt.toString();
1713 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1714 : 0 : return str.c_str();
1715 : : }
1716 : :
1717 : 466 : size_t cvc5_dt_hash(Cvc5Datatype dt)
1718 : : {
1719 : 466 : size_t res = 0;
1720 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1721 [ + + ][ + + ]: 466 : CVC5_CAPI_CHECK_DT(dt);
[ - - ]
1722 : 464 : res = std::hash<cvc5::Datatype>{}(dt->d_dt);
1723 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1724 : 464 : return res;
1725 : : }
1726 : :
1727 : : /* -------------------------------------------------------------------------- */
1728 : : /* Cvc5Term */
1729 : : /* -------------------------------------------------------------------------- */
1730 : :
1731 : 364 : Cvc5Term cvc5_term_copy(Cvc5Term term)
1732 : : {
1733 : 364 : Cvc5Term res = nullptr;
1734 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1735 [ + + ][ + + ]: 364 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1736 : 363 : res = term->d_tm->copy(term);
1737 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1738 : 363 : return res;
1739 : : }
1740 : :
1741 : 490 : void cvc5_term_release(Cvc5Term term)
1742 : : {
1743 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1744 [ + + ][ + + ]: 490 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1745 : 489 : term->d_tm->release(term);
1746 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1747 : 489 : }
1748 : :
1749 : 8252 : bool cvc5_term_is_equal(Cvc5Term a, Cvc5Term b)
1750 : : {
1751 : 8252 : bool res = false;
1752 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1753 [ + - ][ + + ]: 8252 : if (a == nullptr || b == nullptr)
1754 : : {
1755 : 124 : res = a == b;
1756 : : }
1757 : : else
1758 : : {
1759 : 8128 : res = a->d_term == b->d_term;
1760 : : }
1761 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1762 : 8252 : return res;
1763 : : }
1764 : :
1765 : 2337 : bool cvc5_term_is_disequal(Cvc5Term a, Cvc5Term b)
1766 : : {
1767 : 2337 : bool res = false;
1768 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1769 [ + - ][ + + ]: 2337 : if (a == nullptr || b == nullptr)
1770 : : {
1771 : 124 : res = a != b;
1772 : : }
1773 : : else
1774 : : {
1775 : 2213 : res = a->d_term != b->d_term;
1776 : : }
1777 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1778 : 2337 : return res;
1779 : : }
1780 : :
1781 : 250 : int64_t cvc5_term_compare(Cvc5Term a, Cvc5Term b)
1782 : : {
1783 : 250 : int64_t res = false;
1784 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1785 [ + + ][ + + ]: 250 : CVC5_CAPI_CHECK_TERM(a);
[ - - ]
1786 [ + + ][ + + ]: 249 : CVC5_CAPI_CHECK_TERM(b);
[ - - ]
1787 [ + + ][ - + ]: 248 : res = a->d_term < b->d_term ? -1 : (a->d_term > b->d_term ? 1 : 0);
1788 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1789 : 248 : return res;
1790 : : }
1791 : :
1792 : 455 : size_t cvc5_term_get_num_children(Cvc5Term term)
1793 : : {
1794 : 455 : size_t res = 0;
1795 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1796 [ + + ][ + + ]: 455 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1797 : 454 : res = term->d_term.getNumChildren();
1798 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1799 : 454 : return res;
1800 : : }
1801 : :
1802 : 802 : Cvc5Term cvc5_term_get_child(Cvc5Term term, size_t index)
1803 : : {
1804 : 802 : Cvc5Term res = nullptr;
1805 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1806 [ + + ][ + + ]: 802 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1807 : 801 : res = term->d_tm->export_term(term->d_term[index]);
1808 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1809 : 801 : return res;
1810 : : }
1811 : :
1812 : 616 : uint64_t cvc5_term_get_id(Cvc5Term term)
1813 : : {
1814 : 616 : uint64_t res = 0;
1815 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1816 [ + + ][ + + ]: 616 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1817 : 615 : res = term->d_term.getId();
1818 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1819 : 615 : return res;
1820 : : }
1821 : :
1822 : 2201 : Cvc5Kind cvc5_term_get_kind(Cvc5Term term)
1823 : : {
1824 : 2201 : Cvc5Kind res = CVC5_KIND_INTERNAL_KIND;
1825 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1826 [ + + ][ + + ]: 2201 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1827 : 2200 : res = static_cast<Cvc5Kind>(term->d_term.getKind());
1828 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1829 : 2200 : return res;
1830 : : }
1831 : :
1832 : 2550 : Cvc5Sort cvc5_term_get_sort(Cvc5Term term)
1833 : : {
1834 : 2550 : Cvc5Sort res = nullptr;
1835 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1836 [ + + ][ + + ]: 2550 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1837 : 2549 : res = term->d_tm->export_sort(term->d_term.getSort());
1838 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1839 : 2549 : return res;
1840 : : }
1841 : :
1842 : 37 : Cvc5Term cvc5_term_substitute_term(Cvc5Term term,
1843 : : Cvc5Term t,
1844 : : Cvc5Term replacement)
1845 : : {
1846 : 37 : Cvc5Term res = nullptr;
1847 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1848 [ + + ][ + + ]: 37 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1849 [ + + ][ + + ]: 36 : CVC5_CAPI_CHECK_TERM(t);
[ - - ]
1850 [ + + ][ + + ]: 35 : CVC5_CAPI_CHECK_TERM(replacement);
[ - - ]
1851 : 33 : res = term->d_tm->export_term(
1852 : 67 : term->d_term.substitute(t->d_term, replacement->d_term));
1853 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
1854 : 33 : return res;
1855 : : }
1856 : :
1857 : 37 : Cvc5Term cvc5_term_substitute_terms(Cvc5Term term,
1858 : : size_t size,
1859 : : const Cvc5Term terms[],
1860 : : const Cvc5Term replacements[])
1861 : : {
1862 : 37 : Cvc5Term res = nullptr;
1863 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1864 [ - + ][ - + ]: 37 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1865 [ - + ][ - + ]: 37 : CVC5_CAPI_CHECK_NOT_NULL(terms);
[ - - ]
1866 [ - + ][ - + ]: 37 : CVC5_CAPI_CHECK_NOT_NULL(replacements);
[ - - ]
1867 : 37 : std::vector<cvc5::Term> cterms;
1868 [ + + ]: 108 : for (uint32_t i = 0; i < size; ++i)
1869 : : {
1870 [ + + ][ + + ]: 73 : CVC5_CAPI_CHECK_TERM_AT_IDX(terms, i);
[ - - ]
1871 : 71 : cterms.push_back(terms[i]->d_term);
1872 : : }
1873 : 35 : std::vector<cvc5::Term> creplacements;
1874 [ + + ]: 102 : for (uint32_t i = 0; i < size; ++i)
1875 : : {
1876 [ + + ][ + + ]: 69 : CVC5_CAPI_CHECK_TERM_AT_IDX(replacements, i);
[ - - ]
1877 : 67 : creplacements.push_back(replacements[i]->d_term);
1878 : : }
1879 : 33 : res = term->d_tm->export_term(term->d_term.substitute(cterms, creplacements));
1880 [ - + ]: 45 : CVC5_CAPI_TRY_CATCH_END;
1881 : 32 : return res;
1882 : : }
1883 : :
1884 : 1294 : bool cvc5_term_has_op(Cvc5Term term)
1885 : : {
1886 : 1294 : bool res = false;
1887 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1888 [ + + ][ + + ]: 1294 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1889 : 1293 : res = term->d_term.hasOp();
1890 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1891 : 1293 : return res;
1892 : : }
1893 : :
1894 : 827 : Cvc5Op cvc5_term_get_op(Cvc5Term term)
1895 : : {
1896 : 827 : Cvc5Op res = nullptr;
1897 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1898 [ + + ][ + + ]: 827 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1899 : 826 : res = term->d_tm->export_op(term->d_term.getOp());
1900 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
1901 : 824 : return res;
1902 : : }
1903 : :
1904 : 346 : bool cvc5_term_has_symbol(Cvc5Term term)
1905 : : {
1906 : 346 : bool res = false;
1907 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1908 [ + + ][ + + ]: 346 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1909 : 345 : res = term->d_term.hasSymbol();
1910 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1911 : 345 : return res;
1912 : : }
1913 : :
1914 : 116 : const char* cvc5_term_get_symbol(Cvc5Term term)
1915 : : {
1916 : 116 : const char* res = nullptr;
1917 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1918 [ + + ][ + + ]: 116 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1919 [ + + ][ + + ]: 116 : CVC5_API_CHECK(cvc5_term_has_symbol(term))
[ - - ]
1920 : 1 : << "cannot get symbol of term that has no symbol";
1921 [ + - ]: 114 : static thread_local std::string str;
1922 [ + - ]: 114 : if (term->d_term.hasSymbol())
1923 : : {
1924 : 114 : str = term->d_term.getSymbol();
1925 : 114 : res = str.c_str();
1926 : : }
1927 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1928 : 114 : return res;
1929 : : }
1930 : :
1931 : 1286 : const char* cvc5_term_to_string(Cvc5Term term)
1932 : : {
1933 [ + + ]: 1286 : static thread_local std::string str;
1934 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1935 [ - + ][ - + ]: 1286 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1936 : 1286 : str = term->d_term.toString();
1937 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
1938 : 1286 : return str.c_str();
1939 : : }
1940 : :
1941 : 1082 : int32_t cvc5_term_get_real_or_integer_value_sign(Cvc5Term term)
1942 : : {
1943 : 1082 : int32_t res = 0;
1944 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1945 [ + + ][ + + ]: 1082 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1946 : 1080 : res = term->d_term.getRealOrIntegerValueSign();
1947 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
1948 : 1080 : return res;
1949 : : }
1950 : :
1951 : 1081 : bool cvc5_term_is_int32_value(Cvc5Term term)
1952 : : {
1953 : 1081 : bool res = false;
1954 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1955 [ + + ][ + + ]: 1081 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1956 : 1080 : res = term->d_term.isInt32Value();
1957 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1958 : 1080 : return res;
1959 : : }
1960 : :
1961 : 361 : int32_t cvc5_term_get_int32_value(Cvc5Term term)
1962 : : {
1963 : 361 : int32_t res = 0;
1964 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1965 [ + + ][ + + ]: 361 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1966 : 360 : res = term->d_term.getInt32Value();
1967 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1968 : 360 : return res;
1969 : : }
1970 : :
1971 : 2145 : bool cvc5_term_is_uint32_value(Cvc5Term term)
1972 : : {
1973 : 2145 : bool res = false;
1974 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1975 [ + + ][ + + ]: 2145 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1976 : 2144 : res = term->d_term.isUInt32Value();
1977 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1978 : 2144 : return res;
1979 : : }
1980 : :
1981 : 1468 : uint32_t cvc5_term_get_uint32_value(Cvc5Term term)
1982 : : {
1983 : 1468 : uint32_t res = 0;
1984 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1985 [ + + ][ + + ]: 1468 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1986 : 1467 : res = term->d_term.getUInt32Value();
1987 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1988 : 1467 : return res;
1989 : : }
1990 : :
1991 : 1081 : bool cvc5_term_is_int64_value(Cvc5Term term)
1992 : : {
1993 : 1081 : bool res = false;
1994 : : CVC5_CAPI_TRY_CATCH_BEGIN;
1995 [ + + ][ + + ]: 1081 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
1996 : 1080 : res = term->d_term.isInt64Value();
1997 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
1998 : 1080 : return res;
1999 : : }
2000 : :
2001 : 763 : int64_t cvc5_term_get_int64_value(Cvc5Term term)
2002 : : {
2003 : 763 : int64_t res = 0;
2004 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2005 [ + + ][ + + ]: 763 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2006 : 762 : res = term->d_term.getInt64Value();
2007 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2008 : 762 : return res;
2009 : : }
2010 : :
2011 : 1081 : bool cvc5_term_is_uint64_value(Cvc5Term term)
2012 : : {
2013 : 1081 : bool res = false;
2014 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2015 [ + + ][ + + ]: 1081 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2016 : 1080 : res = term->d_term.isUInt64Value();
2017 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2018 : 1080 : return res;
2019 : : }
2020 : :
2021 : 541 : uint64_t cvc5_term_get_uint64_value(Cvc5Term term)
2022 : : {
2023 : 541 : uint64_t res = 0;
2024 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2025 [ + + ][ + + ]: 541 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2026 : 540 : res = term->d_term.getUInt64Value();
2027 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2028 : 540 : return res;
2029 : : }
2030 : :
2031 : 1081 : bool cvc5_term_is_integer_value(Cvc5Term term)
2032 : : {
2033 : 1081 : bool res = false;
2034 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2035 [ + + ][ + + ]: 1081 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2036 : 1080 : res = term->d_term.isIntegerValue();
2037 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2038 : 1080 : return res;
2039 : : }
2040 : :
2041 : 1081 : const char* cvc5_term_get_integer_value(Cvc5Term term)
2042 : : {
2043 [ + + ]: 1081 : static thread_local std::string res;
2044 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2045 [ + + ][ + + ]: 1081 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2046 : 1080 : res = term->d_term.getIntegerValue();
2047 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2048 : 1080 : return res.c_str();
2049 : : }
2050 : :
2051 : 87 : bool cvc5_term_is_string_value(Cvc5Term term)
2052 : : {
2053 : 87 : bool res = false;
2054 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2055 [ + + ][ + + ]: 87 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2056 : 86 : res = term->d_term.isStringValue();
2057 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2058 : 86 : return res;
2059 : : }
2060 : :
2061 : 0 : const wchar_t* cvc5_term_get_string_value(Cvc5Term term)
2062 : : {
2063 [ - - ]: 0 : static thread_local std::wstring res;
2064 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2065 : 0 : CVC5_CAPI_CHECK_TERM(term);
2066 : 0 : res = term->d_term.getStringValue();
2067 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2068 : 0 : return res.c_str();
2069 : : }
2070 : :
2071 : 158 : const char32_t* cvc5_term_get_u32string_value(Cvc5Term term)
2072 : : {
2073 [ + - ]: 158 : static thread_local std::u32string res;
2074 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2075 [ + + ][ + + ]: 158 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2076 : 157 : res = term->d_term.getU32StringValue();
2077 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2078 : 157 : return res.c_str();
2079 : : }
2080 : :
2081 : 366 : bool cvc5_term_is_real32_value(Cvc5Term term)
2082 : : {
2083 : 366 : bool res = false;
2084 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2085 [ + + ][ + + ]: 366 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2086 : 365 : res = term->d_term.isReal32Value();
2087 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2088 : 365 : return res;
2089 : : }
2090 : :
2091 : 368 : void cvc5_term_get_real32_value(Cvc5Term term, int32_t* num, uint32_t* den)
2092 : : {
2093 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2094 [ + + ][ + + ]: 368 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2095 [ + + ][ + + ]: 367 : CVC5_CAPI_CHECK_NOT_NULL(num);
[ - - ]
2096 [ + + ][ + + ]: 366 : CVC5_CAPI_CHECK_NOT_NULL(den);
[ - - ]
2097 : 365 : std::tie(*num, *den) = term->d_term.getReal32Value();
2098 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
2099 : 365 : }
2100 : :
2101 : 512 : bool cvc5_term_is_real64_value(Cvc5Term term)
2102 : : {
2103 : 512 : bool res = false;
2104 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2105 [ + + ][ + + ]: 512 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2106 : 511 : res = term->d_term.isReal64Value();
2107 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2108 : 511 : return res;
2109 : : }
2110 : :
2111 : 514 : void cvc5_term_get_real64_value(Cvc5Term term, int64_t* num, uint64_t* den)
2112 : : {
2113 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2114 [ + + ][ + + ]: 514 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2115 [ + + ][ + + ]: 513 : CVC5_CAPI_CHECK_NOT_NULL(num);
[ - - ]
2116 [ + + ][ + + ]: 512 : CVC5_CAPI_CHECK_NOT_NULL(den);
[ - - ]
2117 : 511 : std::tie(*num, *den) = term->d_term.getReal64Value();
2118 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
2119 : 511 : }
2120 : :
2121 : 747 : bool cvc5_term_is_real_value(Cvc5Term term)
2122 : : {
2123 : 747 : bool res = false;
2124 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2125 [ + + ][ + + ]: 747 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2126 : 746 : res = term->d_term.isRealValue();
2127 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2128 : 746 : return res;
2129 : : }
2130 : :
2131 : 731 : const char* cvc5_term_get_real_value(Cvc5Term term)
2132 : : {
2133 [ + + ]: 731 : static thread_local std::string res;
2134 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2135 [ + + ][ + + ]: 731 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2136 : 730 : res = term->d_term.getRealValue();
2137 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2138 : 730 : return res.c_str();
2139 : : }
2140 : :
2141 : 72 : bool cvc5_term_is_const_array(Cvc5Term term)
2142 : : {
2143 : 72 : bool res = false;
2144 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2145 [ + + ][ + + ]: 72 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2146 : 71 : res = term->d_term.isConstArray();
2147 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2148 : 71 : return res;
2149 : : }
2150 : :
2151 : 97 : Cvc5Term cvc5_term_get_const_array_base(Cvc5Term term)
2152 : : {
2153 : 97 : Cvc5Term res = nullptr;
2154 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2155 [ + + ][ + + ]: 97 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2156 : 95 : res = term->d_tm->export_term(term->d_term.getConstArrayBase());
2157 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
2158 : 92 : return res;
2159 : : }
2160 : :
2161 : 135 : bool cvc5_term_is_boolean_value(Cvc5Term term)
2162 : : {
2163 : 135 : bool res = false;
2164 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2165 [ + + ][ + + ]: 135 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2166 : 134 : res = term->d_term.isBooleanValue();
2167 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2168 : 134 : return res;
2169 : : }
2170 : :
2171 : 195 : bool cvc5_term_get_boolean_value(Cvc5Term term)
2172 : : {
2173 : 195 : bool res = false;
2174 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2175 [ + + ][ + + ]: 195 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2176 : 194 : res = term->d_term.getBooleanValue();
2177 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2178 : 194 : return res;
2179 : : }
2180 : :
2181 : 456 : bool cvc5_term_is_bv_value(Cvc5Term term)
2182 : : {
2183 : 456 : bool res = false;
2184 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2185 [ + + ][ + + ]: 456 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2186 : 455 : res = term->d_term.isBitVectorValue();
2187 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2188 : 455 : return res;
2189 : : }
2190 : :
2191 : 1365 : const char* cvc5_term_get_bv_value(Cvc5Term term, uint32_t base)
2192 : : {
2193 [ + + ]: 1365 : static thread_local std::string res;
2194 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2195 [ - + ][ - + ]: 1365 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2196 : 1365 : res = term->d_term.getBitVectorValue(base);
2197 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2198 : 1365 : return res.c_str();
2199 : : }
2200 : :
2201 : 129 : bool cvc5_term_is_ff_value(Cvc5Term term)
2202 : : {
2203 : 129 : bool res = false;
2204 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2205 [ + + ][ + + ]: 129 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2206 : 128 : res = term->d_term.isFiniteFieldValue();
2207 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2208 : 128 : return res;
2209 : : }
2210 : :
2211 : 105 : const char* cvc5_term_get_ff_value(Cvc5Term term)
2212 : : {
2213 [ + + ]: 105 : static thread_local std::string res;
2214 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2215 [ + + ][ + + ]: 105 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2216 : 104 : res = term->d_term.getFiniteFieldValue();
2217 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
2218 : 103 : return res.c_str();
2219 : : }
2220 : :
2221 : 122 : bool cvc5_term_is_uninterpreted_sort_value(Cvc5Term term)
2222 : : {
2223 : 122 : bool res = false;
2224 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2225 [ - + ][ - + ]: 122 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2226 : 122 : res = term->d_term.isUninterpretedSortValue();
2227 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2228 : 122 : return res;
2229 : : }
2230 : :
2231 : 123 : const char* cvc5_term_get_uninterpreted_sort_value(Cvc5Term term)
2232 : : {
2233 [ + + ]: 123 : static thread_local std::string res;
2234 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2235 [ + + ][ + + ]: 123 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2236 : 122 : res = term->d_term.getUninterpretedSortValue();
2237 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2238 : 122 : return res.c_str();
2239 : : }
2240 : :
2241 : 56 : bool cvc5_term_is_tuple_value(Cvc5Term term)
2242 : : {
2243 : 56 : bool res = false;
2244 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2245 [ + + ][ + + ]: 56 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2246 : 55 : res = term->d_term.isTupleValue();
2247 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2248 : 55 : return res;
2249 : : }
2250 : :
2251 : 57 : const Cvc5Term* cvc5_term_get_tuple_value(Cvc5Term term, size_t* size)
2252 : : {
2253 [ + - ]: 57 : static thread_local std::vector<Cvc5Term> res;
2254 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2255 [ + + ][ + + ]: 57 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2256 [ + + ][ + + ]: 56 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
2257 : 55 : res.clear();
2258 : 55 : auto terms = term->d_term.getTupleValue();
2259 [ + + ]: 220 : for (auto& t : terms)
2260 : : {
2261 : 165 : res.push_back(term->d_tm->export_term(t));
2262 : : }
2263 : 55 : *size = res.size();
2264 [ - + ]: 57 : CVC5_CAPI_TRY_CATCH_END;
2265 : 55 : return res.data();
2266 : : }
2267 : :
2268 : 181 : bool cvc5_term_is_rm_value(Cvc5Term term)
2269 : : {
2270 : 181 : bool res = false;
2271 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2272 [ + + ][ + + ]: 181 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2273 : 180 : res = term->d_term.isRoundingModeValue();
2274 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2275 : 180 : return res;
2276 : : }
2277 : :
2278 : 292 : Cvc5RoundingMode cvc5_term_get_rm_value(Cvc5Term term)
2279 : : {
2280 : 292 : Cvc5RoundingMode res = CVC5_RM_ROUND_NEAREST_TIES_TO_AWAY;
2281 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2282 [ + + ][ + + ]: 292 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2283 : 291 : res = static_cast<Cvc5RoundingMode>(term->d_term.getRoundingModeValue());
2284 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
2285 : 290 : return res;
2286 : : }
2287 : :
2288 : 91 : bool cvc5_term_is_fp_pos_zero(Cvc5Term term)
2289 : : {
2290 : 91 : bool res = false;
2291 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2292 [ + + ][ + + ]: 91 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2293 : 90 : res = term->d_term.isFloatingPointPosZero();
2294 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2295 : 90 : return res;
2296 : : }
2297 : :
2298 : 91 : bool cvc5_term_is_fp_neg_zero(Cvc5Term term)
2299 : : {
2300 : 91 : bool res = false;
2301 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2302 [ + + ][ + + ]: 91 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2303 : 90 : res = term->d_term.isFloatingPointNegZero();
2304 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2305 : 90 : return res;
2306 : : }
2307 : :
2308 : 91 : bool cvc5_term_is_fp_pos_inf(Cvc5Term term)
2309 : : {
2310 : 91 : bool res = false;
2311 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2312 [ + + ][ + + ]: 91 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2313 : 90 : res = term->d_term.isFloatingPointPosInf();
2314 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2315 : 90 : return res;
2316 : : }
2317 : :
2318 : 91 : bool cvc5_term_is_fp_neg_inf(Cvc5Term term)
2319 : : {
2320 : 91 : bool res = false;
2321 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2322 [ + + ][ + + ]: 91 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2323 : 90 : res = term->d_term.isFloatingPointNegInf();
2324 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2325 : 90 : return res;
2326 : : }
2327 : :
2328 : 91 : bool cvc5_term_is_fp_nan(Cvc5Term term)
2329 : : {
2330 : 91 : bool res = false;
2331 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2332 [ + + ][ + + ]: 91 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2333 : 90 : res = term->d_term.isFloatingPointNaN();
2334 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2335 : 90 : return res;
2336 : : }
2337 : :
2338 : 46 : bool cvc5_term_is_fp_value(Cvc5Term term)
2339 : : {
2340 : 46 : bool res = false;
2341 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2342 [ + + ][ + + ]: 46 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2343 : 45 : res = term->d_term.isFloatingPointValue();
2344 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2345 : 45 : return res;
2346 : : }
2347 : :
2348 : 49 : void cvc5_term_get_fp_value(Cvc5Term term,
2349 : : uint32_t* ew,
2350 : : uint32_t* sw,
2351 : : Cvc5Term* val)
2352 : : {
2353 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2354 [ + + ][ + + ]: 49 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2355 [ + + ][ + + ]: 48 : CVC5_CAPI_CHECK_NOT_NULL(ew);
[ - - ]
2356 [ + + ][ + + ]: 47 : CVC5_CAPI_CHECK_NOT_NULL(sw);
[ - - ]
2357 [ + + ][ + + ]: 46 : CVC5_CAPI_CHECK_NOT_NULL(val);
[ - - ]
2358 : 45 : cvc5::Term res;
2359 : 45 : std::tie(*ew, *sw, res) = term->d_term.getFloatingPointValue();
2360 : 45 : *val = term->d_tm->export_term(res);
2361 [ - + ]: 49 : CVC5_CAPI_TRY_CATCH_END;
2362 : 45 : }
2363 : :
2364 : 265 : bool cvc5_term_is_set_value(Cvc5Term term)
2365 : : {
2366 : 265 : bool res = false;
2367 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2368 [ + + ][ + + ]: 265 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2369 : 264 : res = term->d_term.isSetValue();
2370 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2371 : 264 : return res;
2372 : : }
2373 : :
2374 : 212 : const Cvc5Term* cvc5_term_get_set_value(Cvc5Term term, size_t* size)
2375 : : {
2376 [ + + ]: 212 : static thread_local std::vector<Cvc5Term> res;
2377 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2378 [ + + ][ + + ]: 212 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2379 [ + + ][ + + ]: 211 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
2380 : 210 : res.clear();
2381 : 210 : auto terms = term->d_term.getSetValue();
2382 [ + + ]: 420 : for (auto& t : terms)
2383 : : {
2384 : 210 : res.push_back(term->d_tm->export_term(t));
2385 : : }
2386 : 210 : *size = res.size();
2387 [ - + ]: 212 : CVC5_CAPI_TRY_CATCH_END;
2388 : 210 : return res.data();
2389 : : }
2390 : :
2391 : 352 : bool cvc5_term_is_sequence_value(Cvc5Term term)
2392 : : {
2393 : 352 : bool res = false;
2394 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2395 [ + + ][ + + ]: 352 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2396 : 351 : res = term->d_term.isSequenceValue();
2397 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2398 : 351 : return res;
2399 : : }
2400 : :
2401 : 225 : const Cvc5Term* cvc5_term_get_sequence_value(Cvc5Term term, size_t* size)
2402 : : {
2403 [ + + ]: 225 : static thread_local std::vector<Cvc5Term> res;
2404 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2405 [ + + ][ + + ]: 225 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2406 [ + + ][ + + ]: 224 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
2407 : 223 : res.clear();
2408 : 223 : auto terms = term->d_term.getSequenceValue();
2409 [ + + ]: 444 : for (auto& t : terms)
2410 : : {
2411 : 222 : res.push_back(term->d_tm->export_term(t));
2412 : : }
2413 : 222 : *size = res.size();
2414 [ - + ]: 225 : CVC5_CAPI_TRY_CATCH_END;
2415 : 222 : return res.data();
2416 : : }
2417 : :
2418 : 32 : bool cvc5_term_is_cardinality_constraint(Cvc5Term term)
2419 : : {
2420 : 32 : bool res = false;
2421 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2422 [ + + ][ + + ]: 32 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2423 : 31 : res = term->d_term.isCardinalityConstraint();
2424 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2425 : 31 : return res;
2426 : : }
2427 : :
2428 : 18 : void cvc5_term_get_cardinality_constraint(Cvc5Term term,
2429 : : Cvc5Sort* sort,
2430 : : uint32_t* upper)
2431 : : {
2432 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2433 [ + + ][ + + ]: 18 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2434 [ + + ][ + + ]: 17 : CVC5_CAPI_CHECK_NOT_NULL(sort);
[ - - ]
2435 [ + + ][ + + ]: 16 : CVC5_CAPI_CHECK_NOT_NULL(upper);
[ - - ]
2436 : 15 : cvc5::Sort res;
2437 : 15 : std::tie(res, *upper) = term->d_term.getCardinalityConstraint();
2438 : 14 : *sort = term->d_tm->export_sort(res);
2439 [ - + ]: 19 : CVC5_CAPI_TRY_CATCH_END;
2440 : 14 : }
2441 : :
2442 : 9 : bool cvc5_term_is_real_algebraic_number(Cvc5Term term)
2443 : : {
2444 : 9 : bool res = false;
2445 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2446 [ + + ][ + + ]: 9 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2447 : 8 : res = term->d_term.isRealAlgebraicNumber();
2448 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2449 : 8 : return res;
2450 : : }
2451 : :
2452 : 11 : Cvc5Term cvc5_term_get_real_algebraic_number_defining_polynomial(Cvc5Term term,
2453 : : Cvc5Term v)
2454 : : {
2455 : 11 : Cvc5Term res = nullptr;
2456 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2457 [ + + ][ + + ]: 11 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2458 [ + + ][ + + ]: 10 : CVC5_CAPI_CHECK_TERM(v);
[ - - ]
2459 : 8 : res = term->d_tm->export_term(
2460 : 17 : term->d_term.getRealAlgebraicNumberDefiningPolynomial(v->d_term));
2461 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
2462 : 8 : return res;
2463 : : }
2464 : :
2465 : 9 : Cvc5Term cvc5_term_get_real_algebraic_number_lower_bound(Cvc5Term term)
2466 : : {
2467 : 9 : Cvc5Term res = nullptr;
2468 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2469 [ + + ][ + + ]: 9 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2470 : : res =
2471 : 8 : term->d_tm->export_term(term->d_term.getRealAlgebraicNumberLowerBound());
2472 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2473 : 8 : return res;
2474 : : }
2475 : :
2476 : 9 : Cvc5Term cvc5_term_get_real_algebraic_number_upper_bound(Cvc5Term term)
2477 : : {
2478 : 9 : Cvc5Term res = nullptr;
2479 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2480 [ + + ][ + + ]: 9 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2481 : : res =
2482 : 8 : term->d_tm->export_term(term->d_term.getRealAlgebraicNumberUpperBound());
2483 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2484 : 8 : return res;
2485 : : }
2486 : :
2487 : 16 : bool cvc5_term_is_skolem(Cvc5Term term)
2488 : : {
2489 : 16 : bool res = false;
2490 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2491 [ + + ][ + + ]: 16 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2492 : 15 : res = term->d_term.isSkolem();
2493 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2494 : 15 : return res;
2495 : : }
2496 : :
2497 : 12 : Cvc5SkolemId cvc5_term_get_skolem_id(Cvc5Term term)
2498 : : {
2499 : 12 : Cvc5SkolemId res = CVC5_SKOLEM_ID_NONE;
2500 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2501 [ + + ][ + + ]: 12 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2502 : 11 : res = static_cast<Cvc5SkolemId>(term->d_term.getSkolemId());
2503 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
2504 : 10 : return res;
2505 : : }
2506 : :
2507 : 13 : const Cvc5Term* cvc5_term_get_skolem_indices(Cvc5Term term, size_t* size)
2508 : : {
2509 [ + + ]: 13 : static thread_local std::vector<Cvc5Term> res;
2510 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2511 [ + + ][ + + ]: 13 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2512 [ + + ][ + + ]: 12 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
2513 : 11 : res.clear();
2514 : 11 : auto terms = term->d_term.getSkolemIndices();
2515 [ + + ]: 30 : for (auto& t : terms)
2516 : : {
2517 : 20 : res.push_back(term->d_tm->export_term(t));
2518 : : }
2519 : 10 : *size = res.size();
2520 [ - + ]: 13 : CVC5_CAPI_TRY_CATCH_END;
2521 : 10 : return res.data();
2522 : : }
2523 : :
2524 : 1145 : size_t cvc5_term_hash(Cvc5Term term)
2525 : : {
2526 : 1145 : size_t res = 0;
2527 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2528 [ + + ][ + + ]: 1145 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
2529 : 1144 : res = std::hash<cvc5::Term>{}(term->d_term);
2530 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2531 : 1144 : return res;
2532 : : }
2533 : :
2534 : : /* -------------------------------------------------------------------------- */
2535 : : /* Cvc5Op */
2536 : : /* -------------------------------------------------------------------------- */
2537 : :
2538 : 258 : bool cvc5_op_is_equal(Cvc5Op a, Cvc5Op b)
2539 : : {
2540 : 258 : bool res = false;
2541 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2542 [ + - ][ + + ]: 258 : if (a == nullptr || b == nullptr)
2543 : : {
2544 : 11 : res = a == b;
2545 : : }
2546 : : else
2547 : : {
2548 : 247 : res = a->d_op == b->d_op;
2549 : : }
2550 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2551 : 258 : return res;
2552 : : }
2553 : :
2554 : 22 : bool cvc5_op_is_disequal(Cvc5Op a, Cvc5Op b)
2555 : : {
2556 : 22 : bool res = false;
2557 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2558 [ + - ][ + + ]: 22 : if (a == nullptr || b == nullptr)
2559 : : {
2560 : 11 : res = a != b;
2561 : : }
2562 : : else
2563 : : {
2564 : 11 : res = a->d_op != b->d_op;
2565 : : }
2566 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2567 : 22 : return res;
2568 : : }
2569 : :
2570 : 8 : Cvc5Kind cvc5_op_get_kind(Cvc5Op op)
2571 : : {
2572 : 8 : Cvc5Kind res = CVC5_KIND_INTERNAL_KIND;
2573 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2574 [ + + ][ + + ]: 8 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2575 : 7 : res = static_cast<Cvc5Kind>(op->d_op.getKind());
2576 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2577 : 7 : return res;
2578 : : }
2579 : :
2580 : 354 : bool cvc5_op_is_indexed(Cvc5Op op)
2581 : : {
2582 : 354 : bool res = false;
2583 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2584 [ - + ][ - + ]: 354 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2585 : 354 : res = op->d_op.isIndexed();
2586 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2587 : 354 : return res;
2588 : : }
2589 : :
2590 : 185 : size_t cvc5_op_get_num_indices(Cvc5Op op)
2591 : : {
2592 : 185 : size_t res = 0;
2593 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2594 [ + + ][ + + ]: 185 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2595 : 184 : res = op->d_op.getNumIndices();
2596 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2597 : 184 : return res;
2598 : : }
2599 : :
2600 : 163 : Cvc5Term cvc5_op_get_index(Cvc5Op op, size_t i)
2601 : : {
2602 : 163 : Cvc5Term res = nullptr;
2603 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2604 [ + + ][ + + ]: 163 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2605 : 162 : res = op->d_tm->export_term(op->d_op[i]);
2606 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
2607 : 161 : return res;
2608 : : }
2609 : :
2610 : 2 : const char* cvc5_op_to_string(Cvc5Op op)
2611 : : {
2612 [ + + ]: 2 : static thread_local std::string str;
2613 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2614 [ - + ][ - + ]: 2 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2615 : 2 : str = op->d_op.toString();
2616 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2617 : 2 : return str.c_str();
2618 : : }
2619 : :
2620 : 73 : size_t cvc5_op_hash(Cvc5Op op)
2621 : : {
2622 : 73 : size_t res = 0;
2623 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2624 [ + + ][ + + ]: 73 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2625 : 72 : res = std::hash<cvc5::Op>{}(op->d_op);
2626 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2627 : 72 : return res;
2628 : : }
2629 : :
2630 : 9 : Cvc5Op cvc5_op_copy(Cvc5Op op)
2631 : : {
2632 : 9 : Cvc5Op res = nullptr;
2633 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2634 [ + + ][ + + ]: 9 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2635 : 8 : res = op->d_tm->copy(op);
2636 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2637 : 8 : return res;
2638 : : }
2639 : :
2640 : 17 : void cvc5_op_release(Cvc5Op op)
2641 : : {
2642 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2643 [ + + ][ + + ]: 17 : CVC5_CAPI_CHECK_OP(op);
[ - - ]
2644 : 16 : op->d_tm->release(op);
2645 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2646 : 16 : }
2647 : :
2648 : : /* -------------------------------------------------------------------------- */
2649 : : /* Cvc5TermManager */
2650 : : /* -------------------------------------------------------------------------- */
2651 : :
2652 : 48687 : Cvc5TermManager* cvc5_term_manager_new()
2653 : : {
2654 : 48687 : Cvc5TermManager* res = nullptr;
2655 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2656 : 48687 : res = new Cvc5TermManager();
2657 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2658 : 48687 : return res;
2659 : : }
2660 : :
2661 : 47594 : void cvc5_term_manager_delete(Cvc5TermManager* tm)
2662 : : {
2663 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2664 [ + + ][ + + ]: 47594 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2665 [ + - ]: 47593 : delete tm;
2666 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2667 : 47593 : }
2668 : :
2669 : 268 : void cvc5_term_manager_release(Cvc5TermManager* tm)
2670 : : {
2671 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2672 [ + + ][ + + ]: 268 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2673 : 267 : tm->release();
2674 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2675 : 267 : }
2676 : :
2677 : 2 : Cvc5Statistics cvc5_term_manager_get_statistics(Cvc5TermManager* tm)
2678 : : {
2679 : 2 : Cvc5Statistics res = nullptr;
2680 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2681 : 2 : CVC5_CAPI_CHECK_NOT_NULL(tm);
2682 : 1 : res = tm->export_stats(tm->d_tm.getStatistics());
2683 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2684 : 1 : return res;
2685 : : }
2686 : :
2687 : 1 : void cvc5_term_manager_print_stats_safe(Cvc5TermManager* tm, int fd)
2688 : : {
2689 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2690 [ - + ][ - + ]: 1 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2691 : 1 : tm->d_tm.printStatisticsSafe(fd);
2692 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
2693 : 1 : }
2694 : :
2695 : : /* Sorts Handling ----------------------------------------------------------- */
2696 : :
2697 : 41905 : Cvc5Sort cvc5_get_boolean_sort(Cvc5TermManager* tm)
2698 : : {
2699 : 41905 : Cvc5Sort res = nullptr;
2700 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2701 [ + + ][ + + ]: 41905 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2702 : 41904 : res = tm->export_sort(tm->d_tm.getBooleanSort());
2703 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2704 : 41904 : return res;
2705 : : }
2706 : :
2707 : 43691 : Cvc5Sort cvc5_get_integer_sort(Cvc5TermManager* tm)
2708 : : {
2709 : 43691 : Cvc5Sort res = nullptr;
2710 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2711 [ + + ][ + + ]: 43691 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2712 : 43690 : res = tm->export_sort(tm->d_tm.getIntegerSort());
2713 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2714 : 43690 : return res;
2715 : : }
2716 : :
2717 : 39752 : Cvc5Sort cvc5_get_real_sort(Cvc5TermManager* tm)
2718 : : {
2719 : 39752 : Cvc5Sort res = nullptr;
2720 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2721 [ + + ][ + + ]: 39752 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2722 : 39751 : res = tm->export_sort(tm->d_tm.getRealSort());
2723 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2724 : 39751 : return res;
2725 : : }
2726 : :
2727 : 380 : Cvc5Sort cvc5_get_regexp_sort(Cvc5TermManager* tm)
2728 : : {
2729 : 380 : Cvc5Sort res = nullptr;
2730 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2731 [ + + ][ + + ]: 380 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2732 : 379 : res = tm->export_sort(tm->d_tm.getRegExpSort());
2733 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2734 : 379 : return res;
2735 : : }
2736 : :
2737 : 384 : Cvc5Sort cvc5_get_rm_sort(Cvc5TermManager* tm)
2738 : : {
2739 : 384 : Cvc5Sort res = nullptr;
2740 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2741 [ + + ][ + + ]: 384 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2742 : 383 : res = tm->export_sort(tm->d_tm.getRoundingModeSort());
2743 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2744 : 383 : return res;
2745 : : }
2746 : :
2747 : 22330 : Cvc5Sort cvc5_get_string_sort(Cvc5TermManager* tm)
2748 : : {
2749 : 22330 : Cvc5Sort res = nullptr;
2750 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2751 [ + + ][ + + ]: 22330 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2752 : 22329 : res = tm->export_sort(tm->d_tm.getStringSort());
2753 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2754 : 22329 : return res;
2755 : : }
2756 : :
2757 : 3491 : Cvc5Sort cvc5_mk_array_sort(Cvc5TermManager* tm, Cvc5Sort index, Cvc5Sort elem)
2758 : : {
2759 : 3491 : Cvc5Sort res = nullptr;
2760 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2761 [ + + ][ + + ]: 3491 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2762 [ + + ][ + + ]: 3490 : CVC5_CAPI_CHECK_SORT(index);
[ - - ]
2763 [ + + ][ + + ]: 3489 : CVC5_CAPI_CHECK_SORT(elem);
[ - - ]
2764 : 3488 : res = tm->export_sort(tm->d_tm.mkArraySort(index->d_sort, elem->d_sort));
2765 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
2766 : 3487 : return res;
2767 : : }
2768 : :
2769 : 6179 : Cvc5Sort cvc5_mk_bv_sort(Cvc5TermManager* tm, uint32_t size)
2770 : : {
2771 : 6179 : Cvc5Sort res = nullptr;
2772 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2773 [ + + ][ + + ]: 6179 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2774 : 6178 : res = tm->export_sort(tm->d_tm.mkBitVectorSort(size));
2775 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
2776 : 6177 : return res;
2777 : : }
2778 : :
2779 : 649 : Cvc5Sort cvc5_mk_fp_sort(Cvc5TermManager* tm, uint32_t exp, uint32_t sig)
2780 : : {
2781 : 649 : Cvc5Sort res = nullptr;
2782 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2783 [ + + ][ + + ]: 649 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2784 : 648 : res = tm->export_sort(tm->d_tm.mkFloatingPointSort(exp, sig));
2785 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
2786 : 644 : return res;
2787 : : }
2788 : :
2789 : 2163 : Cvc5Sort cvc5_mk_ff_sort(Cvc5TermManager* tm, const char* size, uint32_t base)
2790 : : {
2791 : 2163 : Cvc5Sort res = nullptr;
2792 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2793 [ + + ][ + + ]: 2163 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2794 [ + + ][ + + ]: 2162 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
2795 : 2177 : res = tm->export_sort(tm->d_tm.mkFiniteFieldSort(size, base));
2796 [ - + ]: 10 : CVC5_CAPI_TRY_CATCH_END;
2797 : 2153 : return res;
2798 : : }
2799 : :
2800 : 2137 : Cvc5Sort cvc5_mk_dt_sort(Cvc5TermManager* tm, Cvc5DatatypeDecl decl)
2801 : : {
2802 : 2137 : Cvc5Sort res = nullptr;
2803 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2804 [ + + ][ + + ]: 2137 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2805 [ + + ][ + + ]: 2135 : CVC5_CAPI_CHECK_DT_DECL(decl);
[ - - ]
2806 : 2134 : res = tm->export_sort(tm->d_tm.mkDatatypeSort(decl->d_decl));
2807 [ - + ]: 6 : CVC5_CAPI_TRY_CATCH_END;
2808 : 2131 : return res;
2809 : : }
2810 : :
2811 : 817 : const Cvc5Sort* cvc5_mk_dt_sorts(Cvc5TermManager* tm,
2812 : : size_t size,
2813 : : const Cvc5DatatypeDecl decls[])
2814 : : {
2815 [ + + ]: 817 : static thread_local std::vector<Cvc5Sort> res;
2816 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2817 [ + + ][ + + ]: 817 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2818 [ + + ][ + + ]: 815 : CVC5_CAPI_CHECK_NOT_NULL(decls);
[ - - ]
2819 : 813 : res.clear();
2820 : 813 : std::vector<cvc5::DatatypeDecl> cdecls;
2821 [ + + ]: 2200 : for (size_t i = 0; i < size; ++i)
2822 : : {
2823 [ - + ][ - + ]: 1387 : CVC5_CAPI_CHECK_DT_DECL_AT_IDX(decls, i);
[ - - ]
2824 : 1387 : cdecls.push_back(decls[i]->d_decl);
2825 : : }
2826 : 813 : auto sorts = tm->d_tm.mkDatatypeSorts(cdecls);
2827 [ + + ]: 2188 : for (auto& s : sorts)
2828 : : {
2829 : 1380 : res.push_back(tm->export_sort(s));
2830 : : }
2831 [ - + ]: 822 : CVC5_CAPI_TRY_CATCH_END;
2832 : 808 : return res.data();
2833 : : }
2834 : :
2835 : 9643 : Cvc5Sort cvc5_mk_fun_sort(Cvc5TermManager* tm,
2836 : : size_t size,
2837 : : const Cvc5Sort sorts[],
2838 : : Cvc5Sort codomain)
2839 : : {
2840 : 9643 : Cvc5Sort res = nullptr;
2841 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2842 [ + + ][ + + ]: 9643 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2843 [ + + ][ + + ]: 9642 : CVC5_CAPI_CHECK_NOT_NULL(sorts);
[ - - ]
2844 : 9641 : std::vector<cvc5::Sort> csorts;
2845 [ + + ]: 22491 : for (size_t i = 0; i < size; ++i)
2846 : : {
2847 [ + + ][ + + ]: 12851 : CVC5_CAPI_CHECK_SORT_AT_IDX(sorts, i);
[ - - ]
2848 : 12850 : csorts.push_back(sorts[i]->d_sort);
2849 : : }
2850 : 9640 : res = tm->export_sort(tm->d_tm.mkFunctionSort(csorts, codomain->d_sort));
2851 [ - + ]: 9648 : CVC5_CAPI_TRY_CATCH_END;
2852 : 9636 : return res;
2853 : : }
2854 : :
2855 : 1420 : Cvc5Sort cvc5_mk_param_sort(Cvc5TermManager* tm, const char* symbol)
2856 : : {
2857 : 1420 : Cvc5Sort res = nullptr;
2858 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2859 [ + + ][ + + ]: 1420 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2860 [ + + ][ + + ]: 1419 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
2861 : 1418 : res = tm->export_sort(tm->d_tm.mkParamSort(symbol));
2862 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
2863 : 1418 : return res;
2864 : : }
2865 : :
2866 : 502 : Cvc5Sort cvc5_mk_predicate_sort(Cvc5TermManager* tm,
2867 : : size_t size,
2868 : : const Cvc5Sort sorts[])
2869 : : {
2870 : 502 : Cvc5Sort res = nullptr;
2871 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2872 [ + + ][ + + ]: 502 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2873 [ + + ][ + + ]: 501 : CVC5_CAPI_CHECK_NOT_NULL(sorts);
[ - - ]
2874 : 500 : std::vector<cvc5::Sort> csorts;
2875 [ + + ]: 1213 : for (size_t i = 0; i < size; ++i)
2876 : : {
2877 [ + + ][ + + ]: 715 : CVC5_CAPI_CHECK_SORT_AT_IDX(sorts, i);
[ - - ]
2878 : 713 : csorts.push_back(sorts[i]->d_sort);
2879 : : }
2880 : 498 : res = tm->export_sort(tm->d_tm.mkPredicateSort(csorts));
2881 [ - + ]: 506 : CVC5_CAPI_TRY_CATCH_END;
2882 : 496 : return res;
2883 : : }
2884 : :
2885 : 717 : Cvc5Sort cvc5_mk_record_sort(Cvc5TermManager* tm,
2886 : : size_t size,
2887 : : const char* names[],
2888 : : const Cvc5Sort sorts[])
2889 : : {
2890 : 717 : Cvc5Sort res = nullptr;
2891 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2892 [ + + ][ + + ]: 717 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2893 [ + + ]: 716 : if (names != NULL)
2894 : : {
2895 [ + + ][ + + ]: 501 : CVC5_CAPI_CHECK_NOT_NULL(sorts);
[ - - ]
2896 : 500 : std::vector<std::pair<std::string, cvc5::Sort>> cfields;
2897 [ + + ]: 1864 : for (size_t i = 0; i < size; ++i)
2898 : : {
2899 [ - + ][ - + ]: 1365 : CVC5_CAPI_CHECK_NOT_NULL_AT_IDX(names, i);
[ - - ]
2900 [ + + ][ + + ]: 1365 : CVC5_CAPI_CHECK_SORT_AT_IDX(sorts, i);
[ - - ]
2901 : 1364 : cfields.emplace_back(names[i], sorts[i]->d_sort);
2902 : : }
2903 : 499 : res = tm->export_sort(tm->d_tm.mkRecordSort(cfields));
2904 : 500 : }
2905 : : else
2906 : : {
2907 : 215 : res = tm->export_sort(tm->d_tm.mkRecordSort({}));
2908 : : }
2909 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
2910 : 713 : return res;
2911 : : }
2912 : :
2913 : 1233 : Cvc5Sort cvc5_mk_set_sort(Cvc5TermManager* tm, Cvc5Sort sort)
2914 : : {
2915 : 1233 : Cvc5Sort res = nullptr;
2916 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2917 [ + + ][ + + ]: 1233 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2918 [ + + ][ + + ]: 1232 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
2919 : 1231 : res = tm->export_sort(tm->d_tm.mkSetSort(sort->d_sort));
2920 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
2921 : 1230 : return res;
2922 : : }
2923 : :
2924 : 1046 : Cvc5Sort cvc5_mk_bag_sort(Cvc5TermManager* tm, Cvc5Sort sort)
2925 : : {
2926 : 1046 : Cvc5Sort res = nullptr;
2927 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2928 [ + + ][ + + ]: 1046 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2929 [ + + ][ + + ]: 1045 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
2930 : 1044 : res = tm->export_sort(tm->d_tm.mkBagSort(sort->d_sort));
2931 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
2932 : 1043 : return res;
2933 : : }
2934 : :
2935 : 1229 : Cvc5Sort cvc5_mk_sequence_sort(Cvc5TermManager* tm, Cvc5Sort sort)
2936 : : {
2937 : 1229 : Cvc5Sort res = nullptr;
2938 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2939 [ + + ][ + + ]: 1229 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2940 [ + + ][ + + ]: 1228 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
2941 : 1227 : res = tm->export_sort(tm->d_tm.mkSequenceSort(sort->d_sort));
2942 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
2943 : 1226 : return res;
2944 : : }
2945 : :
2946 : 1119 : Cvc5Sort cvc5_mk_abstract_sort(Cvc5TermManager* tm, Cvc5SortKind k)
2947 : : {
2948 : 1119 : Cvc5Sort res = nullptr;
2949 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2950 [ + + ][ + + ]: 1119 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2951 : : res =
2952 : 1118 : tm->export_sort(tm->d_tm.mkAbstractSort(static_cast<cvc5::SortKind>(k)));
2953 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
2954 : 1116 : return res;
2955 : : }
2956 : :
2957 : 28239 : Cvc5Sort cvc5_mk_uninterpreted_sort(Cvc5TermManager* tm, const char* symbol)
2958 : : {
2959 : 28239 : Cvc5Sort res = nullptr;
2960 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2961 [ + + ][ + + ]: 28239 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2962 [ + + ]: 28238 : if (symbol)
2963 : : {
2964 : 28179 : res = tm->export_sort(tm->d_tm.mkUninterpretedSort(symbol));
2965 : : }
2966 : : else
2967 : : {
2968 : 59 : res = tm->export_sort(tm->d_tm.mkUninterpretedSort());
2969 : : }
2970 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
2971 : 28238 : return res;
2972 : : }
2973 : :
2974 : 1664 : Cvc5Sort cvc5_mk_unresolved_dt_sort(Cvc5TermManager* tm,
2975 : : const char* symbol,
2976 : : size_t arity)
2977 : : {
2978 : 1664 : Cvc5Sort res = nullptr;
2979 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2980 [ + + ][ + + ]: 1664 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2981 [ + + ][ + + ]: 1663 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
2982 : 1662 : res = tm->export_sort(tm->d_tm.mkUnresolvedDatatypeSort(symbol, arity));
2983 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
2984 : 1662 : return res;
2985 : : }
2986 : :
2987 : 1131 : Cvc5Sort cvc5_mk_uninterpreted_sort_constructor_sort(Cvc5TermManager* tm,
2988 : : size_t arity,
2989 : : const char* symbol)
2990 : : {
2991 : 1131 : Cvc5Sort res = nullptr;
2992 : : CVC5_CAPI_TRY_CATCH_BEGIN;
2993 [ + + ][ + + ]: 1131 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
2994 [ + + ]: 1130 : if (symbol)
2995 : : {
2996 : 679 : res = tm->export_sort(
2997 : 1360 : tm->d_tm.mkUninterpretedSortConstructorSort(arity, symbol));
2998 : : }
2999 : : else
3000 : : {
3001 : 450 : res = tm->export_sort(tm->d_tm.mkUninterpretedSortConstructorSort(arity));
3002 : : }
3003 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
3004 : 1129 : return res;
3005 : : }
3006 : :
3007 : 859 : Cvc5Sort cvc5_mk_tuple_sort(Cvc5TermManager* tm,
3008 : : size_t size,
3009 : : const Cvc5Sort sorts[])
3010 : : {
3011 : 859 : Cvc5Sort res = nullptr;
3012 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3013 [ + + ][ + + ]: 859 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3014 [ - + ][ - + ]: 857 : CVC5_CAPI_CHECK_NOT_NULL(sorts);
[ - - ]
3015 : 857 : std::vector<cvc5::Sort> csorts;
3016 [ + + ]: 2110 : for (size_t i = 0; i < size; ++i)
3017 : : {
3018 [ + + ][ + + ]: 1254 : CVC5_CAPI_CHECK_SORT_AT_IDX(sorts, i);
[ - - ]
3019 : 1253 : csorts.push_back(sorts[i]->d_sort);
3020 : : }
3021 : 856 : res = tm->export_sort(tm->d_tm.mkTupleSort(csorts));
3022 [ - + ]: 861 : CVC5_CAPI_TRY_CATCH_END;
3023 : 855 : return res;
3024 : : }
3025 : :
3026 : 462 : Cvc5Sort cvc5_mk_nullable_sort(Cvc5TermManager* tm, Cvc5Sort sort)
3027 : : {
3028 : 462 : Cvc5Sort res = nullptr;
3029 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3030 [ + + ][ + + ]: 462 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3031 [ + + ][ + + ]: 461 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3032 : 460 : res = tm->export_sort(tm->d_tm.mkNullableSort(sort->d_sort));
3033 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3034 : 459 : return res;
3035 : : }
3036 : :
3037 : : /* Datatype constructor declaration ------------------------------------ */
3038 : :
3039 : 13818 : Cvc5DatatypeConstructorDecl cvc5_mk_dt_cons_decl(Cvc5TermManager* tm,
3040 : : const char* name)
3041 : : {
3042 : 13818 : Cvc5DatatypeConstructorDecl res = nullptr;
3043 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3044 [ - + ][ - + ]: 13818 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3045 [ - + ][ - + ]: 13818 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
3046 : 13818 : res = tm->export_dt_cons_decl(tm->d_tm.mkDatatypeConstructorDecl(name));
3047 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3048 : 13818 : return res;
3049 : : }
3050 : :
3051 : : /* Datatype declaration ------------------------------------------------ */
3052 : :
3053 : 4343 : Cvc5DatatypeDecl cvc5_mk_dt_decl(Cvc5TermManager* tm,
3054 : : const char* name,
3055 : : bool is_codt)
3056 : : {
3057 : 4343 : Cvc5DatatypeDecl res = nullptr;
3058 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3059 [ - + ][ - + ]: 4343 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3060 [ - + ][ - + ]: 4343 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
3061 : 4343 : res = tm->export_dt_decl(tm->d_tm.mkDatatypeDecl(name, is_codt));
3062 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3063 : 4343 : return res;
3064 : : }
3065 : :
3066 : 805 : Cvc5DatatypeDecl cvc5_mk_dt_decl_with_params(Cvc5TermManager* tm,
3067 : : const char* name,
3068 : : size_t size,
3069 : : const Cvc5Sort* params,
3070 : : bool is_codt)
3071 : : {
3072 : 805 : Cvc5DatatypeDecl res = nullptr;
3073 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3074 [ + + ][ + + ]: 805 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3075 [ + + ][ + + ]: 803 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
3076 : 802 : std::vector<cvc5::Sort> cparams;
3077 [ + + ]: 802 : if (params)
3078 : : {
3079 [ + + ]: 1629 : for (size_t i = 0; i < size; ++i)
3080 : : {
3081 [ + + ][ + + ]: 839 : CVC5_CAPI_CHECK_SORT_AT_IDX(params, i);
[ - - ]
3082 : 838 : cparams.push_back(params[i]->d_sort);
3083 : : }
3084 : : }
3085 : 801 : res = tm->export_dt_decl(tm->d_tm.mkDatatypeDecl(name, cparams, is_codt));
3086 [ - + ]: 806 : CVC5_CAPI_TRY_CATCH_END;
3087 : 801 : return res;
3088 : : }
3089 : :
3090 : : /* Create Terms --------------------------------------------------------- */
3091 : :
3092 : 36723 : Cvc5Term cvc5_mk_term(Cvc5TermManager* tm,
3093 : : Cvc5Kind kind,
3094 : : size_t size,
3095 : : const Cvc5Term children[])
3096 : : {
3097 : 36723 : Cvc5Term res = nullptr;
3098 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3099 [ + + ][ + + ]: 36723 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3100 [ + - ][ + - ]: 36720 : CVC5_CAPI_CHECK_KIND(kind);
[ - + ][ - + ]
[ - - ]
3101 [ + + ][ + + ]: 36723 : CVC5_API_CHECK(children || size == 0)
[ + + ][ + + ]
[ - - ]
3102 : 3 : << "unexpected NULL argument for 'children'";
3103 : 36717 : std::vector<cvc5::Term> cchildren;
3104 [ + + ]: 105154 : for (size_t i = 0; i < size; ++i)
3105 : : {
3106 [ + + ][ + + ]: 68443 : CVC5_CAPI_CHECK_TERM_AT_IDX(children, i);
[ - - ]
3107 : 68437 : cchildren.push_back(children[i]->d_term);
3108 : : }
3109 : 36698 : res = tm->export_term(
3110 : 73409 : tm->d_tm.mkTerm(static_cast<cvc5::Kind>(kind), cchildren));
3111 [ - + ]: 36742 : CVC5_CAPI_TRY_CATCH_END;
3112 : 36698 : return res;
3113 : : }
3114 : :
3115 : 2339 : Cvc5Term cvc5_mk_term_from_op(Cvc5TermManager* tm,
3116 : : Cvc5Op op,
3117 : : size_t size,
3118 : : const Cvc5Term children[])
3119 : : {
3120 : 2339 : Cvc5Term res = nullptr;
3121 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3122 [ - + ][ - + ]: 2339 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3123 [ - + ][ - + ]: 2339 : CVC5_CAPI_CHECK_NOT_NULL(op);
[ - - ]
3124 [ + + ][ + - ]: 2339 : CVC5_API_CHECK(children || size == 0)
[ - + ][ - + ]
[ - - ]
3125 : 0 : << "unexpected NULL argument for 'children'";
3126 : 2339 : std::vector<cvc5::Term> cchildren;
3127 [ + + ]: 6167 : for (size_t i = 0; i < size; ++i)
3128 : : {
3129 [ + + ][ + + ]: 3832 : CVC5_CAPI_CHECK_TERM_AT_IDX(children, i);
[ - - ]
3130 : 3828 : cchildren.push_back(children[i]->d_term);
3131 : : }
3132 : 2335 : res = tm->export_term(tm->d_tm.mkTerm(op->d_op, cchildren));
3133 [ - + ]: 2351 : CVC5_CAPI_TRY_CATCH_END;
3134 : 2327 : return res;
3135 : : }
3136 : :
3137 : 169 : Cvc5Term cvc5_mk_tuple(Cvc5TermManager* tm, size_t size, const Cvc5Term terms[])
3138 : : {
3139 : 169 : Cvc5Term res = nullptr;
3140 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3141 [ + + ][ + + ]: 169 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3142 [ - + ][ - + ]: 167 : CVC5_CAPI_CHECK_NOT_NULL(terms);
[ - - ]
3143 : 167 : std::vector<cvc5::Term> cterms;
3144 [ + + ]: 486 : for (size_t i = 0; i < size; ++i)
3145 : : {
3146 [ - + ][ - + ]: 319 : CVC5_CAPI_CHECK_TERM_AT_IDX(terms, i);
[ - - ]
3147 : 319 : cterms.push_back(terms[i]->d_term);
3148 : : }
3149 : 167 : res = tm->export_term(tm->d_tm.mkTuple(cterms));
3150 [ - + ]: 170 : CVC5_CAPI_TRY_CATCH_END;
3151 : 166 : return res;
3152 : : }
3153 : :
3154 : 193 : Cvc5Term cvc5_mk_nullable_some(Cvc5TermManager* tm, Cvc5Term term)
3155 : : {
3156 : 193 : Cvc5Term res = nullptr;
3157 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3158 [ + + ][ + + ]: 193 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3159 [ + + ][ + + ]: 192 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
3160 : 191 : res = tm->export_term(tm->d_tm.mkNullableSome(term->d_term));
3161 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3162 : 190 : return res;
3163 : : }
3164 : :
3165 : 43 : Cvc5Term cvc5_mk_nullable_val(Cvc5TermManager* tm, Cvc5Term term)
3166 : : {
3167 : 43 : Cvc5Term res = nullptr;
3168 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3169 [ + + ][ + + ]: 43 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3170 [ + + ][ + + ]: 42 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
3171 : 41 : res = tm->export_term(tm->d_tm.mkNullableVal(term->d_term));
3172 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3173 : 40 : return res;
3174 : : }
3175 : :
3176 : 43 : Cvc5Term cvc5_mk_nullable_is_null(Cvc5TermManager* tm, Cvc5Term term)
3177 : : {
3178 : 43 : Cvc5Term res = nullptr;
3179 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3180 [ + + ][ + + ]: 43 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3181 [ + + ][ + + ]: 42 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
3182 : 41 : res = tm->export_term(tm->d_tm.mkNullableIsNull(term->d_term));
3183 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3184 : 40 : return res;
3185 : : }
3186 : :
3187 : 23 : Cvc5Term cvc5_mk_nullable_is_some(Cvc5TermManager* tm, Cvc5Term term)
3188 : : {
3189 : 23 : Cvc5Term res = nullptr;
3190 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3191 [ + + ][ + + ]: 23 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3192 [ + + ][ + + ]: 22 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
3193 : 21 : res = tm->export_term(tm->d_tm.mkNullableIsSome(term->d_term));
3194 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3195 : 20 : return res;
3196 : : }
3197 : :
3198 : 20 : Cvc5Term cvc5_mk_nullable_null(Cvc5TermManager* tm, Cvc5Sort sort)
3199 : : {
3200 : 20 : Cvc5Term res = nullptr;
3201 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3202 [ + + ][ + + ]: 20 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3203 [ + + ][ + + ]: 19 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3204 : 18 : res = tm->export_term(tm->d_tm.mkNullableNull(sort->d_sort));
3205 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3206 : 17 : return res;
3207 : : }
3208 : :
3209 : 17 : Cvc5Term cvc5_mk_nullable_lift(Cvc5TermManager* tm,
3210 : : Cvc5Kind kind,
3211 : : size_t size,
3212 : : const Cvc5Term args[])
3213 : : {
3214 : 17 : Cvc5Term res = nullptr;
3215 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3216 [ + + ][ + + ]: 17 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3217 [ + - ][ + - ]: 16 : CVC5_CAPI_CHECK_KIND(kind);
[ - + ][ - + ]
[ - - ]
3218 [ + + ][ + + ]: 16 : CVC5_CAPI_CHECK_NOT_NULL(args);
[ - - ]
3219 : 15 : std::vector<cvc5::Term> cargs;
3220 [ + + ]: 45 : for (size_t i = 0; i < size; ++i)
3221 : : {
3222 [ - + ][ - + ]: 30 : CVC5_CAPI_CHECK_TERM_AT_IDX(args, i);
[ - - ]
3223 : 30 : cargs.push_back(args[i]->d_term);
3224 : : }
3225 : 14 : res = tm->export_term(
3226 : 29 : tm->d_tm.mkNullableLift(static_cast<cvc5::Kind>(kind), cargs));
3227 [ - + ]: 18 : CVC5_CAPI_TRY_CATCH_END;
3228 : 14 : return res;
3229 : : }
3230 : :
3231 : 12 : Cvc5Term cvc5_mk_skolem(Cvc5TermManager* tm,
3232 : : Cvc5SkolemId id,
3233 : : size_t size,
3234 : : const Cvc5Term indices[])
3235 : : {
3236 : 12 : Cvc5Term res = nullptr;
3237 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3238 [ + + ][ + + ]: 12 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3239 [ + - ][ + - ]: 11 : CVC5_CAPI_CHECK_SKOLEM_ID(id);
[ - + ][ - + ]
[ - - ]
3240 : 11 : std::vector<cvc5::Term> cindices;
3241 [ + + ]: 11 : if (indices)
3242 : : {
3243 [ + + ]: 30 : for (size_t i = 0; i < size; ++i)
3244 : : {
3245 [ - + ][ - + ]: 20 : CVC5_CAPI_CHECK_TERM_AT_IDX(indices, i);
[ - - ]
3246 : 20 : cindices.push_back(indices[i]->d_term);
3247 : : }
3248 : : }
3249 : 10 : res = tm->export_term(
3250 : 21 : tm->d_tm.mkSkolem(static_cast<cvc5::SkolemId>(id), cindices));
3251 [ - + ]: 13 : CVC5_CAPI_TRY_CATCH_END;
3252 : 10 : return res;
3253 : : }
3254 : :
3255 : 4 : size_t cvc5_get_num_idxs_for_skolem_id(Cvc5TermManager* tm, Cvc5SkolemId id)
3256 : : {
3257 : 4 : size_t res = 0;
3258 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3259 [ + + ][ + + ]: 4 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3260 [ + - ][ + - ]: 3 : CVC5_CAPI_CHECK_SKOLEM_ID(id);
[ - + ][ - + ]
[ - - ]
3261 : 3 : res = tm->d_tm.getNumIndicesForSkolemId(static_cast<cvc5::SkolemId>(id));
3262 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3263 : 3 : return res;
3264 : : }
3265 : :
3266 : : /* Create Operators ---------------------------------------------------- */
3267 : :
3268 : 2828 : Cvc5Op cvc5_mk_op(Cvc5TermManager* tm,
3269 : : Cvc5Kind kind,
3270 : : size_t size,
3271 : : const uint32_t idxs[])
3272 : : {
3273 : 2828 : Cvc5Op res = nullptr;
3274 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3275 [ + + ][ + + ]: 2828 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3276 [ + - ][ + - ]: 2824 : CVC5_CAPI_CHECK_KIND(kind);
[ - + ][ - + ]
[ - - ]
3277 [ + + ][ + + ]: 2824 : CVC5_API_CHECK(idxs || size == 0) << "unexpected NULL argument for 'idxs'";
[ + + ][ + + ]
[ - - ]
3278 : 2822 : std::vector<uint32_t> cidxs;
3279 [ + + ]: 5019 : for (size_t i = 0; i < size; ++i)
3280 : : {
3281 : 2197 : cidxs.push_back(idxs[i]);
3282 : : }
3283 : 2822 : res = tm->export_op(tm->d_tm.mkOp(static_cast<cvc5::Kind>(kind), cidxs));
3284 [ - + ]: 2831 : CVC5_CAPI_TRY_CATCH_END;
3285 : 2819 : return res;
3286 : : }
3287 : :
3288 : 116 : Cvc5Op cvc5_mk_op_from_str(Cvc5TermManager* tm, Cvc5Kind kind, const char* arg)
3289 : : {
3290 : 116 : Cvc5Op res = nullptr;
3291 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3292 [ + + ][ + + ]: 116 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3293 [ + - ][ + - ]: 115 : CVC5_CAPI_CHECK_KIND(kind);
[ - + ][ - + ]
[ - - ]
3294 [ + + ][ + + ]: 115 : CVC5_CAPI_CHECK_NOT_NULL(arg);
[ - - ]
3295 : 116 : res = tm->export_op(tm->d_tm.mkOp(static_cast<cvc5::Kind>(kind), arg));
3296 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3297 : 113 : return res;
3298 : : }
3299 : :
3300 : : /* Create Constants ---------------------------------------------------- */
3301 : :
3302 : 7489 : Cvc5Term cvc5_mk_true(Cvc5TermManager* tm)
3303 : : {
3304 : 7489 : Cvc5Term res = nullptr;
3305 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3306 [ + + ][ + + ]: 7489 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3307 : 7488 : res = tm->export_term(tm->d_tm.mkTrue());
3308 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3309 : 7488 : return res;
3310 : : }
3311 : :
3312 : 3864 : Cvc5Term cvc5_mk_false(Cvc5TermManager* tm)
3313 : : {
3314 : 3864 : Cvc5Term res = nullptr;
3315 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3316 [ - + ][ - + ]: 3864 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3317 : 3864 : res = tm->export_term(tm->d_tm.mkFalse());
3318 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3319 : 3864 : return res;
3320 : : }
3321 : :
3322 : 523 : Cvc5Term cvc5_mk_boolean(Cvc5TermManager* tm, bool val)
3323 : : {
3324 : 523 : Cvc5Term res = nullptr;
3325 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3326 [ + + ][ + + ]: 523 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3327 : 522 : res = tm->export_term(tm->d_tm.mkBoolean(val));
3328 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3329 : 522 : return res;
3330 : : }
3331 : :
3332 : 107 : Cvc5Term cvc5_mk_pi(Cvc5TermManager* tm)
3333 : : {
3334 : 107 : Cvc5Term res = nullptr;
3335 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3336 [ + + ][ + + ]: 107 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3337 : 106 : res = tm->export_term(tm->d_tm.mkPi());
3338 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3339 : 106 : return res;
3340 : : }
3341 : :
3342 : 3677 : Cvc5Term cvc5_mk_integer(Cvc5TermManager* tm, const char* s)
3343 : : {
3344 : 3677 : Cvc5Term res = nullptr;
3345 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3346 [ + + ][ + + ]: 3677 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3347 [ + + ][ + + ]: 3675 : CVC5_CAPI_CHECK_NOT_NULL(s);
[ - - ]
3348 : 3715 : res = tm->export_term(tm->d_tm.mkInteger(s));
3349 [ - + ]: 25 : CVC5_CAPI_TRY_CATCH_END;
3350 : 3652 : return res;
3351 : : }
3352 : :
3353 : 10690 : Cvc5Term cvc5_mk_integer_int64(Cvc5TermManager* tm, int64_t val)
3354 : : {
3355 : 10690 : Cvc5Term res = nullptr;
3356 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3357 [ - + ][ - + ]: 10690 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3358 : 10690 : res = tm->export_term(tm->d_tm.mkInteger(val));
3359 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3360 : 10690 : return res;
3361 : : }
3362 : :
3363 : 1832 : Cvc5Term cvc5_mk_real(Cvc5TermManager* tm, const char* s)
3364 : : {
3365 : 1832 : Cvc5Term res = nullptr;
3366 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3367 [ + + ][ + + ]: 1832 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3368 [ + + ][ + + ]: 1830 : CVC5_CAPI_CHECK_NOT_NULL(s);
[ - - ]
3369 : 1844 : res = tm->export_term(tm->d_tm.mkReal(s));
3370 [ - + ]: 12 : CVC5_CAPI_TRY_CATCH_END;
3371 : 1820 : return res;
3372 : : }
3373 : :
3374 : 422 : Cvc5Term cvc5_mk_real_int64(Cvc5TermManager* tm, int64_t val)
3375 : : {
3376 : 422 : Cvc5Term res = nullptr;
3377 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3378 [ + + ][ + + ]: 422 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3379 : 421 : res = tm->export_term(tm->d_tm.mkReal(val));
3380 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3381 : 421 : return res;
3382 : : }
3383 : :
3384 : 473 : Cvc5Term cvc5_mk_real_num_den(Cvc5TermManager* tm, int64_t num, int64_t den)
3385 : : {
3386 : 473 : Cvc5Term res = nullptr;
3387 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3388 [ + + ][ + + ]: 473 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3389 : 472 : res = tm->export_term(tm->d_tm.mkReal(num, den));
3390 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
3391 : 471 : return res;
3392 : : }
3393 : :
3394 : 79 : Cvc5Term cvc5_mk_regexp_all(Cvc5TermManager* tm)
3395 : : {
3396 : 79 : Cvc5Term res = nullptr;
3397 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3398 [ + + ][ + + ]: 79 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3399 : 78 : res = tm->export_term(tm->d_tm.mkRegexpAll());
3400 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3401 : 78 : return res;
3402 : : }
3403 : :
3404 : 78 : Cvc5Term cvc5_mk_regexp_allchar(Cvc5TermManager* tm)
3405 : : {
3406 : 78 : Cvc5Term res = nullptr;
3407 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3408 [ + + ][ + + ]: 78 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3409 : 77 : res = tm->export_term(tm->d_tm.mkRegexpAllchar());
3410 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3411 : 77 : return res;
3412 : : }
3413 : :
3414 : 77 : Cvc5Term cvc5_mk_regexp_none(Cvc5TermManager* tm)
3415 : : {
3416 : 77 : Cvc5Term res = nullptr;
3417 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3418 [ + + ][ + + ]: 77 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3419 : 76 : res = tm->export_term(tm->d_tm.mkRegexpNone());
3420 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3421 : 76 : return res;
3422 : : }
3423 : :
3424 : 178 : Cvc5Term cvc5_mk_empty_set(Cvc5TermManager* tm, Cvc5Sort sort)
3425 : : {
3426 : 178 : Cvc5Term res = nullptr;
3427 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3428 [ + + ][ + + ]: 178 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3429 [ + + ][ + + ]: 177 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3430 : 176 : res = tm->export_term(tm->d_tm.mkEmptySet(sort->d_sort));
3431 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
3432 : 174 : return res;
3433 : : }
3434 : :
3435 : 129 : Cvc5Term cvc5_mk_empty_bag(Cvc5TermManager* tm, Cvc5Sort sort)
3436 : : {
3437 : 129 : Cvc5Term res = nullptr;
3438 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3439 [ + + ][ + + ]: 129 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3440 [ + + ][ + + ]: 128 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3441 : 127 : res = tm->export_term(tm->d_tm.mkEmptyBag(sort->d_sort));
3442 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
3443 : 125 : return res;
3444 : : }
3445 : :
3446 : 76 : Cvc5Term cvc5_mk_sep_emp(Cvc5TermManager* tm)
3447 : : {
3448 : 76 : Cvc5Term res = nullptr;
3449 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3450 [ + + ][ + + ]: 76 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3451 : 75 : res = tm->export_term(tm->d_tm.mkSepEmp());
3452 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3453 : 75 : return res;
3454 : : }
3455 : :
3456 : 827 : Cvc5Term cvc5_mk_sep_nil(Cvc5TermManager* tm, Cvc5Sort sort)
3457 : : {
3458 : 827 : Cvc5Term res = nullptr;
3459 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3460 [ + + ][ + + ]: 827 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3461 [ + + ][ + + ]: 826 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3462 : 825 : res = tm->export_term(tm->d_tm.mkSepNil(sort->d_sort));
3463 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
3464 : 823 : return res;
3465 : : }
3466 : :
3467 : 454 : Cvc5Term cvc5_mk_string(Cvc5TermManager* tm, const char* s, bool use_esc_seq)
3468 : : {
3469 : 454 : Cvc5Term res = nullptr;
3470 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3471 [ + + ][ + + ]: 454 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3472 [ + + ][ + + ]: 453 : CVC5_CAPI_CHECK_NOT_NULL(s);
[ - - ]
3473 : 452 : res = tm->export_term(tm->d_tm.mkString(s, use_esc_seq));
3474 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
3475 : 452 : return res;
3476 : : }
3477 : :
3478 : 0 : Cvc5Term cvc5_mk_string_from_wchar(Cvc5TermManager* tm, const wchar_t* s)
3479 : : {
3480 : 0 : Cvc5Term res = nullptr;
3481 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3482 : 0 : CVC5_CAPI_CHECK_NOT_NULL(tm);
3483 : 0 : CVC5_CAPI_CHECK_NOT_NULL(s);
3484 : 0 : res = tm->export_term(tm->d_tm.mkString(s));
3485 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3486 : 0 : return res;
3487 : : }
3488 : :
3489 : 71 : Cvc5Term cvc5_mk_string_from_char32(Cvc5TermManager* tm, const char32_t* s)
3490 : : {
3491 : 71 : Cvc5Term res = nullptr;
3492 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3493 [ - + ][ - + ]: 71 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3494 [ - + ][ - + ]: 71 : CVC5_CAPI_CHECK_NOT_NULL(s);
[ - - ]
3495 : 71 : res = tm->export_term(tm->d_tm.mkString(s));
3496 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3497 : 71 : return res;
3498 : : }
3499 : :
3500 : 326 : Cvc5Term cvc5_mk_empty_sequence(Cvc5TermManager* tm, Cvc5Sort sort)
3501 : : {
3502 : 326 : Cvc5Term res = nullptr;
3503 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3504 [ + + ][ + + ]: 326 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3505 [ + + ][ + + ]: 324 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3506 : 322 : res = tm->export_term(tm->d_tm.mkEmptySequence(sort->d_sort));
3507 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
3508 : 321 : return res;
3509 : : }
3510 : :
3511 : 14 : Cvc5Term cvc5_mk_universe_set(Cvc5TermManager* tm, Cvc5Sort sort)
3512 : : {
3513 : 14 : Cvc5Term res = nullptr;
3514 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3515 [ + + ][ + + ]: 14 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3516 [ + + ][ + + ]: 13 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3517 : 12 : res = tm->export_term(tm->d_tm.mkUniverseSet(sort->d_sort));
3518 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3519 : 11 : return res;
3520 : : }
3521 : :
3522 : 1923 : Cvc5Term cvc5_mk_bv_uint64(Cvc5TermManager* tm, uint32_t size, uint64_t val)
3523 : : {
3524 : 1923 : Cvc5Term res = nullptr;
3525 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3526 [ + + ][ + + ]: 1923 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3527 : 1921 : res = tm->export_term(tm->d_tm.mkBitVector(size, val));
3528 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3529 : 1920 : return res;
3530 : : }
3531 : :
3532 : 3903 : Cvc5Term cvc5_mk_bv(Cvc5TermManager* tm,
3533 : : uint32_t size,
3534 : : const char* s,
3535 : : uint32_t base)
3536 : : {
3537 : 3903 : Cvc5Term res = nullptr;
3538 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3539 [ + + ][ + + ]: 3903 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3540 [ - + ][ - + ]: 3902 : CVC5_CAPI_CHECK_NOT_NULL(s);
[ - - ]
3541 : 3934 : res = tm->export_term(tm->d_tm.mkBitVector(size, s, base));
3542 [ - + ]: 17 : CVC5_CAPI_TRY_CATCH_END;
3543 : 3886 : return res;
3544 : : }
3545 : :
3546 : 3670 : Cvc5Term cvc5_mk_ff_elem(Cvc5TermManager* tm,
3547 : : const char* value,
3548 : : Cvc5Sort sort,
3549 : : uint32_t base)
3550 : : {
3551 : 3670 : Cvc5Term res = nullptr;
3552 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3553 [ + + ][ + + ]: 3670 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3554 [ - + ][ - + ]: 3669 : CVC5_CAPI_CHECK_NOT_NULL(value);
[ - - ]
3555 [ - + ][ - + ]: 3669 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3556 : 3673 : res = tm->export_term(tm->d_tm.mkFiniteFieldElem(value, sort->d_sort, base));
3557 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3558 : 3667 : return res;
3559 : : }
3560 : :
3561 : 617 : Cvc5Term cvc5_mk_const_array(Cvc5TermManager* tm, Cvc5Sort sort, Cvc5Term val)
3562 : : {
3563 : 617 : Cvc5Term res = nullptr;
3564 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3565 [ + + ][ + + ]: 617 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3566 [ + + ][ + + ]: 615 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3567 [ + + ][ + + ]: 613 : CVC5_CAPI_CHECK_TERM(val);
[ - - ]
3568 : 611 : res = tm->export_term(tm->d_tm.mkConstArray(sort->d_sort, val->d_term));
3569 [ - + ]: 12 : CVC5_CAPI_TRY_CATCH_END;
3570 : 605 : return res;
3571 : : }
3572 : :
3573 : 160 : Cvc5Term cvc5_mk_fp_pos_inf(Cvc5TermManager* tm, uint32_t exp, uint32_t sig)
3574 : : {
3575 : 160 : Cvc5Term res = nullptr;
3576 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3577 [ + + ][ + + ]: 160 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3578 : 159 : res = tm->export_term(tm->d_tm.mkFloatingPointPosInf(exp, sig));
3579 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3580 : 159 : return res;
3581 : : }
3582 : :
3583 : 161 : Cvc5Term cvc5_mk_fp_neg_inf(Cvc5TermManager* tm, uint32_t exp, uint32_t sig)
3584 : : {
3585 : 161 : Cvc5Term res = nullptr;
3586 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3587 [ + + ][ + + ]: 161 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3588 : 160 : res = tm->export_term(tm->d_tm.mkFloatingPointNegInf(exp, sig));
3589 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3590 : 160 : return res;
3591 : : }
3592 : :
3593 : 164 : Cvc5Term cvc5_mk_fp_nan(Cvc5TermManager* tm, uint32_t exp, uint32_t sig)
3594 : : {
3595 : 164 : Cvc5Term res = nullptr;
3596 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3597 [ + + ][ + + ]: 164 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3598 : 163 : res = tm->export_term(tm->d_tm.mkFloatingPointNaN(exp, sig));
3599 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3600 : 163 : return res;
3601 : : }
3602 : :
3603 : 162 : Cvc5Term cvc5_mk_fp_pos_zero(Cvc5TermManager* tm, uint32_t exp, uint32_t sig)
3604 : : {
3605 : 162 : Cvc5Term res = nullptr;
3606 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3607 [ + + ][ + + ]: 162 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3608 : 161 : res = tm->export_term(tm->d_tm.mkFloatingPointPosZero(exp, sig));
3609 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3610 : 161 : return res;
3611 : : }
3612 : :
3613 : 163 : Cvc5Term cvc5_mk_fp_neg_zero(Cvc5TermManager* tm, uint32_t exp, uint32_t sig)
3614 : : {
3615 : 163 : Cvc5Term res = nullptr;
3616 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3617 [ + + ][ + + ]: 163 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3618 : 162 : res = tm->export_term(tm->d_tm.mkFloatingPointNegZero(exp, sig));
3619 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3620 : 162 : return res;
3621 : : }
3622 : :
3623 : 1121 : Cvc5Term cvc5_mk_rm(Cvc5TermManager* tm, Cvc5RoundingMode rm)
3624 : : {
3625 : 1121 : Cvc5Term res = nullptr;
3626 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3627 [ + + ][ + + ]: 1121 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3628 : 1120 : res = tm->export_term(
3629 : 2240 : tm->d_tm.mkRoundingMode(static_cast<cvc5::RoundingMode>(rm)));
3630 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3631 : 1120 : return res;
3632 : : }
3633 : :
3634 : 362 : Cvc5Term cvc5_mk_fp(Cvc5TermManager* tm,
3635 : : uint32_t exp,
3636 : : uint32_t sig,
3637 : : Cvc5Term val)
3638 : : {
3639 : 362 : Cvc5Term res = nullptr;
3640 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3641 [ + + ][ + + ]: 362 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3642 [ + + ][ + + ]: 361 : CVC5_CAPI_CHECK_TERM(val);
[ - - ]
3643 : 360 : res = tm->export_term(tm->d_tm.mkFloatingPoint(exp, sig, val->d_term));
3644 [ - + ]: 8 : CVC5_CAPI_TRY_CATCH_END;
3645 : 354 : return res;
3646 : : }
3647 : :
3648 : 157 : Cvc5Term cvc5_mk_fp_from_ieee(Cvc5TermManager* tm,
3649 : : Cvc5Term sign,
3650 : : Cvc5Term exp,
3651 : : Cvc5Term sig)
3652 : : {
3653 : 157 : Cvc5Term res = nullptr;
3654 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3655 [ + + ][ + + ]: 157 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3656 [ + + ][ + + ]: 156 : CVC5_CAPI_CHECK_TERM(sign);
[ - - ]
3657 [ + + ][ + + ]: 155 : CVC5_CAPI_CHECK_TERM(exp);
[ - - ]
3658 [ + + ][ + + ]: 154 : CVC5_CAPI_CHECK_TERM(sig);
[ - - ]
3659 : 146 : res = tm->export_term(
3660 : 299 : tm->d_tm.mkFloatingPoint(sign->d_term, exp->d_term, sig->d_term));
3661 [ - + ]: 11 : CVC5_CAPI_TRY_CATCH_END;
3662 : 146 : return res;
3663 : : }
3664 : :
3665 : 158 : Cvc5Term cvc5_mk_cardinality_constraint(Cvc5TermManager* tm,
3666 : : Cvc5Sort sort,
3667 : : uint32_t upperBound)
3668 : : {
3669 : 158 : Cvc5Term res = nullptr;
3670 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3671 [ + + ][ + + ]: 158 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3672 [ + + ][ + + ]: 156 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3673 : 151 : res = tm->export_term(
3674 : 305 : tm->d_tm.mkCardinalityConstraint(sort->d_sort, upperBound));
3675 [ - + ]: 7 : CVC5_CAPI_TRY_CATCH_END;
3676 : 151 : return res;
3677 : : }
3678 : :
3679 : : /* Create Variables ----------------------------------------------------- */
3680 : :
3681 : 26183 : Cvc5Term cvc5_mk_const(Cvc5TermManager* tm, Cvc5Sort sort, const char* symbol)
3682 : : {
3683 : 26183 : Cvc5Term res = nullptr;
3684 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3685 [ + + ][ + + ]: 26183 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3686 [ + + ][ + + ]: 26182 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3687 [ + + ]: 26181 : if (symbol)
3688 : : {
3689 : 26164 : res = tm->export_term(tm->d_tm.mkConst(sort->d_sort, symbol));
3690 : : }
3691 : : else
3692 : : {
3693 : 18 : res = tm->export_term(tm->d_tm.mkConst(sort->d_sort));
3694 : : }
3695 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3696 : 26180 : return res;
3697 : : }
3698 : :
3699 : 12839 : Cvc5Term cvc5_mk_var(Cvc5TermManager* tm, Cvc5Sort sort, const char* symbol)
3700 : : {
3701 : 12839 : Cvc5Term res = nullptr;
3702 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3703 [ + + ][ + + ]: 12839 : CVC5_CAPI_CHECK_NOT_NULL(tm);
[ - - ]
3704 [ + + ][ + + ]: 12838 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
3705 [ + + ]: 12837 : if (symbol)
3706 : : {
3707 : 12522 : res = tm->export_term(tm->d_tm.mkVar(sort->d_sort, symbol));
3708 : : }
3709 : : else
3710 : : {
3711 : 316 : res = tm->export_term(tm->d_tm.mkVar(sort->d_sort));
3712 : : }
3713 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
3714 : 12836 : return res;
3715 : : }
3716 : :
3717 : : /* -------------------------------------------------------------------------- */
3718 : : /* Cvc5Result */
3719 : : /* -------------------------------------------------------------------------- */
3720 : :
3721 : 2 : Cvc5Result cvc5_result_copy(Cvc5Result result)
3722 : : {
3723 : 2 : Cvc5Result res = nullptr;
3724 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3725 : 2 : CVC5_CAPI_CHECK_RESULT(result);
3726 : 1 : res = result->d_cvc5->copy(result);
3727 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3728 : 1 : return res;
3729 : : }
3730 : :
3731 : 288 : void cvc5_result_release(Cvc5Result result)
3732 : : {
3733 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3734 [ + + ][ + + ]: 288 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3735 : 287 : result->d_cvc5->release(result);
3736 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3737 : 287 : }
3738 : :
3739 : 8 : bool cvc5_result_is_null(const Cvc5Result result)
3740 : : {
3741 : 8 : bool res = false;
3742 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3743 [ + + ][ + + ]: 8 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3744 : 7 : res = result->d_result.isNull();
3745 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3746 : 7 : return res;
3747 : : }
3748 : :
3749 : 557 : bool cvc5_result_is_sat(const Cvc5Result result)
3750 : : {
3751 : 557 : bool res = false;
3752 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3753 [ + + ][ + + ]: 557 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3754 : 556 : res = result->d_result.isSat();
3755 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3756 : 556 : return res;
3757 : : }
3758 : :
3759 : 3545 : bool cvc5_result_is_unsat(const Cvc5Result result)
3760 : : {
3761 : 3545 : bool res = false;
3762 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3763 [ + + ][ + + ]: 3545 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3764 : 3544 : res = result->d_result.isUnsat();
3765 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3766 : 3544 : return res;
3767 : : }
3768 : :
3769 : 234 : bool cvc5_result_is_unknown(const Cvc5Result result)
3770 : : {
3771 : 234 : bool res = false;
3772 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3773 [ + + ][ + + ]: 234 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3774 : 233 : res = result->d_result.isUnknown();
3775 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3776 : 233 : return res;
3777 : : }
3778 : :
3779 : 28 : bool cvc5_result_is_equal(const Cvc5Result a, const Cvc5Result b)
3780 : : {
3781 : 28 : bool res = false;
3782 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3783 [ + + ][ + + ]: 28 : if (a == nullptr || b == nullptr)
3784 : : {
3785 : 14 : res = a == b;
3786 : : }
3787 : : else
3788 : : {
3789 : 14 : res = a->d_result == b->d_result;
3790 : : }
3791 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3792 : 28 : return res;
3793 : : }
3794 : :
3795 : 28 : bool cvc5_result_is_disequal(const Cvc5Result a, const Cvc5Result b)
3796 : : {
3797 : 28 : bool res = false;
3798 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3799 [ + + ][ + + ]: 28 : if (a == nullptr || b == nullptr)
3800 : : {
3801 : 14 : res = a != b;
3802 : : }
3803 : : else
3804 : : {
3805 : 14 : res = a->d_result != b->d_result;
3806 : : }
3807 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3808 : 28 : return res;
3809 : : }
3810 : :
3811 : 4 : Cvc5UnknownExplanation cvc5_result_get_unknown_explanation(
3812 : : const Cvc5Result result)
3813 : : {
3814 : 4 : Cvc5UnknownExplanation res = CVC5_UNKNOWN_EXPLANATION_LAST;
3815 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3816 [ - + ][ - + ]: 4 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3817 : 4 : res = static_cast<Cvc5UnknownExplanation>(
3818 : 4 : result->d_result.getUnknownExplanation());
3819 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3820 : 4 : return res;
3821 : : }
3822 : :
3823 : 4 : const char* cvc5_result_to_string(const Cvc5Result result)
3824 : : {
3825 [ + + ]: 4 : static thread_local std::string str;
3826 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3827 [ - + ][ - + ]: 4 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3828 : 4 : str = result->d_result.toString();
3829 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3830 : 4 : return str.c_str();
3831 : : }
3832 : :
3833 : 21 : size_t cvc5_result_hash(Cvc5Result result)
3834 : : {
3835 : 21 : size_t res = 0;
3836 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3837 [ + + ][ + + ]: 21 : CVC5_CAPI_CHECK_RESULT(result);
[ - - ]
3838 : 20 : res = std::hash<cvc5::Result>{}(result->d_result);
3839 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3840 : 20 : return res;
3841 : : }
3842 : :
3843 : : /* -------------------------------------------------------------------------- */
3844 : : /* Cvc5SynthResult */
3845 : : /* -------------------------------------------------------------------------- */
3846 : :
3847 : 2 : Cvc5SynthResult cvc5_synth_result_copy(Cvc5SynthResult result)
3848 : : {
3849 : 2 : Cvc5SynthResult res = nullptr;
3850 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3851 : 2 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
3852 : 1 : res = result->d_cvc5->copy(result);
3853 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3854 : 1 : return res;
3855 : : }
3856 : :
3857 : 3 : void cvc5_synth_result_release(Cvc5SynthResult result)
3858 : : {
3859 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3860 [ + + ][ + + ]: 3 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
[ - - ]
3861 : 2 : result->d_cvc5->release(result);
3862 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3863 : 2 : }
3864 : :
3865 : 11 : bool cvc5_synth_result_is_null(const Cvc5SynthResult result)
3866 : : {
3867 : 11 : bool res = false;
3868 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3869 [ + + ][ + + ]: 11 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
[ - - ]
3870 : 10 : res = result->d_result.isNull();
3871 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3872 : 10 : return res;
3873 : : }
3874 : :
3875 : 90 : bool cvc5_synth_result_has_solution(const Cvc5SynthResult result)
3876 : : {
3877 : 90 : bool res = false;
3878 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3879 [ + + ][ + + ]: 90 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
[ - - ]
3880 : 89 : res = result->d_result.hasSolution();
3881 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3882 : 89 : return res;
3883 : : }
3884 : :
3885 : 11 : bool cvc5_synth_result_has_no_solution(const Cvc5SynthResult result)
3886 : : {
3887 : 11 : bool res = false;
3888 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3889 [ + + ][ + + ]: 11 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
[ - - ]
3890 : 10 : res = result->d_result.hasNoSolution();
3891 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3892 : 10 : return res;
3893 : : }
3894 : :
3895 : 11 : bool cvc5_synth_result_is_unknown(const Cvc5SynthResult result)
3896 : : {
3897 : 11 : bool res = false;
3898 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3899 [ + + ][ + + ]: 11 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
[ - - ]
3900 : 10 : res = result->d_result.isUnknown();
3901 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3902 : 10 : return res;
3903 : : }
3904 : :
3905 : 16 : bool cvc5_synth_result_is_equal(const Cvc5SynthResult a,
3906 : : const Cvc5SynthResult b)
3907 : : {
3908 : 16 : bool res = false;
3909 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3910 [ + + ][ + + ]: 16 : if (a == nullptr || b == nullptr)
3911 : : {
3912 : 8 : res = a == b;
3913 : : }
3914 : : else
3915 : : {
3916 : 8 : res = a->d_result == b->d_result;
3917 : : }
3918 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3919 : 16 : return res;
3920 : : }
3921 : :
3922 : 16 : bool cvc5_synth_result_is_disequal(const Cvc5SynthResult a,
3923 : : const Cvc5SynthResult b)
3924 : : {
3925 : 16 : bool res = false;
3926 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3927 [ + + ][ + + ]: 16 : if (a == nullptr || b == nullptr)
3928 : : {
3929 : 8 : res = a != b;
3930 : : }
3931 : : else
3932 : : {
3933 : 8 : res = a->d_result != b->d_result;
3934 : : }
3935 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3936 : 16 : return res;
3937 : : }
3938 : :
3939 : 6 : const char* cvc5_synth_result_to_string(const Cvc5SynthResult result)
3940 : : {
3941 [ + - ]: 6 : static thread_local std::string str;
3942 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3943 [ - + ][ - + ]: 6 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
[ - - ]
3944 : 6 : str = result->d_result.toString();
3945 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
3946 : 6 : return str.c_str();
3947 : : }
3948 : :
3949 : 21 : size_t cvc5_synth_result_hash(Cvc5SynthResult result)
3950 : : {
3951 : 21 : size_t res = 0;
3952 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3953 [ + + ][ + + ]: 21 : CVC5_CAPI_CHECK_SYNTH_RESULT(result);
[ - - ]
3954 : 20 : res = std::hash<cvc5::SynthResult>{}(result->d_result);
3955 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3956 : 20 : return res;
3957 : : }
3958 : :
3959 : : /* -------------------------------------------------------------------------- */
3960 : : /* Cvc5Proof */
3961 : : /* -------------------------------------------------------------------------- */
3962 : :
3963 : 98 : Cvc5ProofRule cvc5_proof_get_rule(Cvc5Proof proof)
3964 : : {
3965 : 98 : Cvc5ProofRule res = CVC5_PROOF_RULE_LAST;
3966 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3967 [ + + ][ + + ]: 98 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
3968 : 97 : res = static_cast<Cvc5ProofRule>(proof->d_proof.getRule());
3969 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3970 : 97 : return res;
3971 : : }
3972 : :
3973 : 11 : Cvc5ProofRewriteRule cvc5_proof_get_rewrite_rule(Cvc5Proof proof)
3974 : : {
3975 : 11 : Cvc5ProofRewriteRule res = CVC5_PROOF_REWRITE_RULE_LAST;
3976 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3977 [ + + ][ + + ]: 11 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
3978 : 10 : res = static_cast<Cvc5ProofRewriteRule>(proof->d_proof.getRewriteRule());
3979 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
3980 : 9 : return res;
3981 : : }
3982 : :
3983 : 9 : Cvc5Term cvc5_proof_get_result(Cvc5Proof proof)
3984 : : {
3985 : 9 : Cvc5Term res = nullptr;
3986 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3987 [ + + ][ + + ]: 9 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
3988 : 8 : res = proof->d_cvc5->d_tm->export_term(proof->d_proof.getResult());
3989 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
3990 : 8 : return res;
3991 : : }
3992 : :
3993 : 99 : const Cvc5Proof* cvc5_proof_get_children(Cvc5Proof proof, size_t* size)
3994 : : {
3995 [ + + ]: 99 : static thread_local std::vector<Cvc5Proof> res;
3996 : : CVC5_CAPI_TRY_CATCH_BEGIN;
3997 [ + + ][ + + ]: 99 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
3998 [ + + ][ + + ]: 98 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
3999 : 97 : res.clear();
4000 : 97 : auto children = proof->d_proof.getChildren();
4001 [ + + ]: 212 : for (auto& p : children)
4002 : : {
4003 : 115 : res.push_back(proof->d_cvc5->export_proof(p));
4004 : : }
4005 : 97 : *size = res.size();
4006 [ - + ]: 99 : CVC5_CAPI_TRY_CATCH_END;
4007 : 97 : return res.data();
4008 : : }
4009 : :
4010 : 8 : const Cvc5Term* cvc5_proof_get_arguments(Cvc5Proof proof, size_t* size)
4011 : : {
4012 [ + + ]: 8 : static thread_local std::vector<Cvc5Term> res;
4013 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4014 [ + + ][ + + ]: 8 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
4015 [ + + ][ + + ]: 7 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
4016 : 6 : res.clear();
4017 : 6 : auto args = proof->d_proof.getArguments();
4018 [ - + ]: 6 : for (auto& t : args)
4019 : : {
4020 : 0 : res.push_back(proof->d_cvc5->d_tm->export_term(t));
4021 : : }
4022 : 6 : *size = res.size();
4023 [ - + ]: 8 : CVC5_CAPI_TRY_CATCH_END;
4024 : 6 : return res.data();
4025 : : }
4026 : :
4027 : 21 : bool cvc5_proof_is_equal(Cvc5Proof a, Cvc5Proof b)
4028 : : {
4029 : 21 : bool res = false;
4030 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4031 [ + + ][ + + ]: 21 : if (a == nullptr || b == nullptr)
4032 : : {
4033 : 12 : res = a == b;
4034 : : }
4035 : : else
4036 : : {
4037 : 9 : res = a->d_proof == b->d_proof;
4038 : : }
4039 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4040 : 21 : return res;
4041 : : }
4042 : :
4043 : 16 : bool cvc5_proof_is_disequal(Cvc5Proof a, Cvc5Proof b)
4044 : : {
4045 : 16 : bool res = false;
4046 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4047 [ + + ][ + + ]: 16 : if (a == nullptr || b == nullptr)
4048 : : {
4049 : 8 : res = a != b;
4050 : : }
4051 : : else
4052 : : {
4053 : 8 : res = a->d_proof != b->d_proof;
4054 : : }
4055 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4056 : 16 : return res;
4057 : : }
4058 : :
4059 : 17 : size_t cvc5_proof_hash(Cvc5Proof proof)
4060 : : {
4061 : 17 : size_t res = 0;
4062 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4063 [ + + ][ + + ]: 17 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
4064 : 16 : res = std::hash<cvc5::Proof>{}(proof->d_proof);
4065 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4066 : 16 : return res;
4067 : : }
4068 : :
4069 : 2 : Cvc5Proof cvc5_proof_copy(Cvc5Proof proof)
4070 : : {
4071 : 2 : Cvc5Proof res = nullptr;
4072 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4073 : 2 : CVC5_CAPI_CHECK_PROOF(proof);
4074 : 1 : res = proof->d_cvc5->copy(proof);
4075 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4076 : 1 : return res;
4077 : : }
4078 : :
4079 : 3 : void cvc5_proof_release(Cvc5Proof proof)
4080 : : {
4081 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4082 [ + + ][ + + ]: 3 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
4083 : 2 : proof->d_cvc5->release(proof);
4084 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4085 : 2 : }
4086 : :
4087 : : /* -------------------------------------------------------------------------- */
4088 : : /* Cvc5Grammar */
4089 : : /* -------------------------------------------------------------------------- */
4090 : :
4091 : 733 : void cvc5_grammar_add_rule(Cvc5Grammar grammar, Cvc5Term symbol, Cvc5Term rule)
4092 : : {
4093 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4094 [ + + ][ + + ]: 733 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
4095 [ + + ][ + + ]: 732 : CVC5_CAPI_CHECK_TERM(symbol);
[ - - ]
4096 [ + + ][ + + ]: 731 : CVC5_CAPI_CHECK_TERM(rule);
[ - - ]
4097 : 730 : grammar->d_grammar.addRule(symbol->d_term, rule->d_term);
4098 [ - + ]: 6 : CVC5_CAPI_TRY_CATCH_END;
4099 : 727 : }
4100 : :
4101 : 48 : void cvc5_grammar_add_rules(Cvc5Grammar grammar,
4102 : : Cvc5Term symbol,
4103 : : size_t size,
4104 : : const Cvc5Term rules[])
4105 : : {
4106 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4107 [ + + ][ + + ]: 48 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
4108 [ + + ][ + + ]: 47 : CVC5_CAPI_CHECK_TERM(symbol);
[ - - ]
4109 [ + + ][ + + ]: 46 : CVC5_CAPI_CHECK_NOT_NULL(rules);
[ - - ]
4110 : 45 : std::vector<cvc5::Term> crules;
4111 [ + + ]: 90 : for (size_t i = 0; i < size; ++i)
4112 : : {
4113 [ + + ][ + + ]: 46 : CVC5_CAPI_CHECK_TERM_AT_IDX(rules, i);
[ - - ]
4114 : 45 : crules.push_back(rules[i]->d_term);
4115 : : }
4116 : 44 : grammar->d_grammar.addRules(symbol->d_term, crules);
4117 [ - + ]: 53 : CVC5_CAPI_TRY_CATCH_END;
4118 : 40 : }
4119 : :
4120 : 28 : void cvc5_grammar_add_any_constant(Cvc5Grammar grammar, Cvc5Term symbol)
4121 : : {
4122 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4123 [ + + ][ + + ]: 28 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
4124 [ + + ][ + + ]: 27 : CVC5_CAPI_CHECK_TERM(symbol);
[ - - ]
4125 : 26 : grammar->d_grammar.addAnyConstant(symbol->d_term);
4126 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
4127 : 24 : }
4128 : :
4129 : 32 : void cvc5_grammar_add_any_variable(Cvc5Grammar grammar, Cvc5Term symbol)
4130 : : {
4131 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4132 [ + + ][ + + ]: 32 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
4133 [ + + ][ + + ]: 31 : CVC5_CAPI_CHECK_TERM(symbol);
[ - - ]
4134 : 30 : grammar->d_grammar.addAnyVariable(symbol->d_term);
4135 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
4136 : 28 : }
4137 : :
4138 : 54 : const char* cvc5_grammar_to_string(const Cvc5Grammar grammar)
4139 : : {
4140 [ + + ]: 54 : static thread_local std::string str;
4141 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4142 [ + + ][ + + ]: 54 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
4143 : 53 : str = grammar->d_grammar.toString();
4144 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4145 : 53 : return str.c_str();
4146 : : }
4147 : :
4148 : 56 : bool cvc5_grammar_is_equal(Cvc5Grammar a, Cvc5Grammar b)
4149 : : {
4150 : 56 : bool res = false;
4151 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4152 [ + - ][ - + ]: 56 : if (a == nullptr || b == nullptr)
4153 : : {
4154 : 0 : res = a == b;
4155 : : }
4156 : : else
4157 : : {
4158 : 56 : res = a->d_grammar == b->d_grammar;
4159 : : }
4160 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4161 : 56 : return res;
4162 : : }
4163 : :
4164 : 28 : bool cvc5_grammar_is_disequal(Cvc5Grammar a, Cvc5Grammar b)
4165 : : {
4166 : 28 : bool res = false;
4167 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4168 [ + - ][ - + ]: 28 : if (a == nullptr || b == nullptr)
4169 : : {
4170 : 0 : res = a != b;
4171 : : }
4172 : : else
4173 : : {
4174 : 28 : res = a->d_grammar != b->d_grammar;
4175 : : }
4176 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4177 : 28 : return res;
4178 : : }
4179 : :
4180 : 69 : size_t cvc5_grammar_hash(Cvc5Grammar grammar)
4181 : : {
4182 : 69 : size_t res = 0;
4183 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4184 [ + + ][ + + ]: 69 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
4185 : 68 : res = std::hash<cvc5::Grammar>{}(grammar->d_grammar);
4186 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4187 : 68 : return res;
4188 : : }
4189 : :
4190 : 2 : Cvc5Grammar cvc5_grammar_copy(Cvc5Grammar grammar)
4191 : : {
4192 : 2 : Cvc5Grammar res = nullptr;
4193 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4194 : 2 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
4195 : 1 : res = grammar->d_cvc5->copy(grammar);
4196 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4197 : 1 : return res;
4198 : : }
4199 : :
4200 : 3 : void cvc5_grammar_release(Cvc5Grammar grammar)
4201 : : {
4202 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4203 [ + + ][ + + ]: 3 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
4204 : 2 : grammar->d_cvc5->release(grammar);
4205 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4206 : 2 : }
4207 : :
4208 : : /* -------------------------------------------------------------------------- */
4209 : : /* Cvc5Stat */
4210 : : /* -------------------------------------------------------------------------- */
4211 : :
4212 : 63 : bool cvc5_stat_is_internal(Cvc5Stat stat)
4213 : : {
4214 : 63 : bool res = false;
4215 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4216 [ + + ][ + + ]: 63 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4217 : 62 : res = stat->d_stat.isInternal();
4218 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4219 : 62 : return res;
4220 : : }
4221 : :
4222 : 50 : bool cvc5_stat_is_default(Cvc5Stat stat)
4223 : : {
4224 : 50 : bool res = false;
4225 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4226 [ + + ][ + + ]: 50 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4227 : 49 : res = stat->d_stat.isDefault();
4228 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4229 : 49 : return res;
4230 : : }
4231 : :
4232 : 107 : bool cvc5_stat_is_int(Cvc5Stat stat)
4233 : : {
4234 : 107 : bool res = false;
4235 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4236 [ + + ][ + + ]: 107 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4237 : 106 : res = stat->d_stat.isInt();
4238 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4239 : 106 : return res;
4240 : : }
4241 : :
4242 : 36 : int64_t cvc5_stat_get_int(Cvc5Stat stat)
4243 : : {
4244 : 36 : int64_t res = 0;
4245 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4246 [ + + ][ + + ]: 36 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4247 : 35 : res = stat->d_stat.getInt();
4248 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4249 : 34 : return res;
4250 : : }
4251 : :
4252 : 64 : bool cvc5_stat_is_double(Cvc5Stat stat)
4253 : : {
4254 : 64 : bool res = false;
4255 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4256 [ + + ][ + + ]: 64 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4257 : 63 : res = stat->d_stat.isDouble();
4258 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4259 : 63 : return res;
4260 : : }
4261 : :
4262 : 14 : double cvc5_stat_get_double(Cvc5Stat stat)
4263 : : {
4264 : 14 : double res = 0.0;
4265 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4266 [ + + ][ + + ]: 14 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4267 : 13 : res = stat->d_stat.getDouble();
4268 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4269 : 12 : return res;
4270 : : }
4271 : :
4272 : 84 : bool cvc5_stat_is_string(Cvc5Stat stat)
4273 : : {
4274 : 84 : bool res = false;
4275 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4276 [ + + ][ + + ]: 84 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4277 : 83 : res = stat->d_stat.isString();
4278 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4279 : 83 : return res;
4280 : : }
4281 : :
4282 : 30 : const char* cvc5_stat_get_string(Cvc5Stat stat)
4283 : : {
4284 [ + + ]: 30 : static thread_local std::string str;
4285 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4286 [ + + ][ + + ]: 30 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4287 : 29 : str = stat->d_stat.getString();
4288 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4289 : 28 : return str.c_str();
4290 : : }
4291 : :
4292 : 40 : bool cvc5_stat_is_histogram(Cvc5Stat stat)
4293 : : {
4294 : 40 : bool res = false;
4295 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4296 [ + + ][ + + ]: 40 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4297 : 39 : res = stat->d_stat.isHistogram();
4298 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4299 : 39 : return res;
4300 : : }
4301 : :
4302 : 20 : void cvc5_stat_get_histogram(Cvc5Stat stat,
4303 : : const char** keys[],
4304 : : uint64_t* values[],
4305 : : size_t* size)
4306 : : {
4307 [ + + ]: 20 : static thread_local std::vector<const char*> rkeys;
4308 [ + + ]: 20 : static thread_local std::vector<uint64_t> rvalues;
4309 [ + + ]: 20 : static thread_local cvc5::Stat::HistogramData histo;
4310 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4311 [ + + ][ + + ]: 20 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4312 [ + + ][ + + ]: 19 : CVC5_CAPI_CHECK_NOT_NULL(keys);
[ - - ]
4313 [ + + ][ + + ]: 18 : CVC5_CAPI_CHECK_NOT_NULL(values);
[ - - ]
4314 [ + + ][ + + ]: 17 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
4315 : 16 : rkeys.clear();
4316 : 16 : rvalues.clear();
4317 : 16 : histo = stat->d_stat.getHistogram();
4318 [ + + ]: 17 : for (auto& h : histo)
4319 : : {
4320 : 2 : rkeys.push_back(h.first.c_str());
4321 : 2 : rvalues.push_back(h.second);
4322 : : }
4323 : 15 : *size = rkeys.size();
4324 : 15 : *keys = rkeys.data();
4325 : 15 : *values = rvalues.data();
4326 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
4327 : 15 : }
4328 : :
4329 : 6237 : const char* cvc5_stat_to_string(Cvc5Stat stat)
4330 : : {
4331 [ + + ]: 6237 : static thread_local std::string str;
4332 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4333 [ + + ][ + + ]: 6237 : CVC5_CAPI_CHECK_STAT(stat);
[ - - ]
4334 : 6236 : str = stat->d_stat.toString();
4335 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4336 : 6236 : return str.c_str();
4337 : : }
4338 : :
4339 : : /* -------------------------------------------------------------------------- */
4340 : : /* Cvc5Statistics */
4341 : : /* -------------------------------------------------------------------------- */
4342 : :
4343 : 30 : void cvc5_stats_iter_init(Cvc5Statistics stat, bool internal, bool dflt)
4344 : : {
4345 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4346 [ + + ][ + + ]: 30 : CVC5_CAPI_CHECK_STATS(stat);
[ - - ]
4347 : 29 : stat->d_iter.reset(
4348 : 29 : new cvc5::Statistics::iterator(stat->d_stat.begin(internal, dflt)));
4349 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4350 : 29 : }
4351 : :
4352 : 6227 : bool cvc5_stats_iter_has_next(Cvc5Statistics stat)
4353 : : {
4354 : 6227 : bool res = false;
4355 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4356 [ + + ][ + + ]: 6227 : CVC5_CAPI_CHECK_STATS(stat);
[ - - ]
4357 [ + + ][ + + ]: 6226 : CVC5_API_CHECK(stat->d_iter != nullptr) << "iterator not initialized";
[ - - ]
4358 : 6225 : res = *stat->d_iter != stat->d_stat.end();
4359 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4360 : 6225 : return res;
4361 : : }
4362 : :
4363 : 6208 : Cvc5Stat cvc5_stats_iter_next(Cvc5Statistics stat, const char** name)
4364 : : {
4365 [ + + ]: 6208 : static thread_local std::string str;
4366 : 6208 : Cvc5Stat res = nullptr;
4367 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4368 [ + + ][ + + ]: 6208 : CVC5_CAPI_CHECK_STATS(stat);
[ - - ]
4369 [ - + ][ - + ]: 6207 : CVC5_API_CHECK(stat->d_iter != nullptr) << "iterator not initialized";
[ - - ]
4370 : 6207 : cvc5::Stat rstat;
4371 : 6207 : std::tie(str, rstat) = **stat->d_iter;
4372 [ + + ]: 6207 : if (name)
4373 : : {
4374 : 6203 : *name = str.c_str();
4375 : : }
4376 : 6207 : res = stat->d_tm->export_stat(rstat);
4377 : 6207 : (*stat->d_iter)++;
4378 [ - + ]: 6208 : CVC5_CAPI_TRY_CATCH_END;
4379 : 6207 : return res;
4380 : : }
4381 : :
4382 : 278 : Cvc5Stat cvc5_stats_get(Cvc5Statistics stat, const char* name)
4383 : : {
4384 : 278 : Cvc5Stat res = nullptr;
4385 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4386 [ + + ][ + + ]: 278 : CVC5_CAPI_CHECK_STATS(stat);
[ - - ]
4387 [ + + ][ + + ]: 277 : CVC5_CAPI_CHECK_NOT_NULL(name);
[ - - ]
4388 : 276 : res = stat->d_tm->export_stat(stat->d_stat.get(name));
4389 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4390 : 276 : return res;
4391 : : }
4392 : :
4393 : 15 : const char* cvc5_stats_to_string(Cvc5Statistics stat)
4394 : : {
4395 [ + - ]: 15 : static thread_local std::string str;
4396 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4397 [ + + ][ + + ]: 15 : CVC5_CAPI_CHECK_STATS(stat);
[ - - ]
4398 : 14 : str = stat->d_stat.toString();
4399 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4400 : 14 : return str.c_str();
4401 : : }
4402 : :
4403 : : /* -------------------------------------------------------------------------- */
4404 : : /* Cvc5 */
4405 : : /* -------------------------------------------------------------------------- */
4406 : :
4407 : 30944 : Cvc5* cvc5_new(Cvc5TermManager* tm)
4408 : : {
4409 : 30944 : Cvc5* res = nullptr;
4410 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4411 : 30944 : res = new Cvc5(tm);
4412 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4413 : 30944 : return res;
4414 : : }
4415 : :
4416 : 30319 : void cvc5_delete(Cvc5* cvc5)
4417 : : {
4418 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4419 [ + - ]: 30319 : delete cvc5;
4420 : : CVC5_CAPI_TRY_CATCH_END;
4421 : 30319 : }
4422 : :
4423 : 127 : Cvc5TermManager* cvc5_get_tm(Cvc5* cvc5)
4424 : : {
4425 : 127 : Cvc5TermManager* tm = nullptr;
4426 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4427 [ - + ][ - + ]: 127 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4428 : 127 : tm = cvc5->d_tm;
4429 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4430 : 127 : return tm;
4431 : : }
4432 : :
4433 : 2119 : void cvc5_set_info(Cvc5* cvc5, const char* keyword, const char* value)
4434 : : {
4435 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4436 [ + + ][ + + ]: 2119 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4437 [ + + ][ + + ]: 2118 : CVC5_CAPI_CHECK_NOT_NULL(keyword);
[ - - ]
4438 [ + + ][ + + ]: 2117 : CVC5_CAPI_CHECK_NOT_NULL(value);
[ - - ]
4439 : 2136 : cvc5->d_solver.setInfo(keyword, value);
4440 [ - + ]: 8 : CVC5_CAPI_TRY_CATCH_END;
4441 : 2111 : }
4442 : :
4443 : 3664 : void cvc5_set_logic(Cvc5* cvc5, const char* logic)
4444 : : {
4445 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4446 [ + + ][ + + ]: 3664 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4447 [ + + ][ + + ]: 3663 : CVC5_CAPI_CHECK_NOT_NULL(logic);
[ - - ]
4448 : 3668 : cvc5->d_solver.setLogic(logic);
4449 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
4450 : 3659 : }
4451 : :
4452 : 294 : bool cvc5_is_logic_set(Cvc5* cvc5)
4453 : : {
4454 : 294 : bool res = false;
4455 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4456 [ + + ][ + + ]: 294 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4457 : 293 : res = cvc5->d_solver.isLogicSet();
4458 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4459 : 293 : return res;
4460 : : }
4461 : :
4462 : 149 : const char* cvc5_get_logic(Cvc5* cvc5)
4463 : : {
4464 [ + + ]: 149 : static thread_local std::string str;
4465 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4466 [ + + ][ + + ]: 149 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4467 : 148 : str = cvc5->d_solver.getLogic();
4468 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4469 : 147 : return str.c_str();
4470 : : }
4471 : :
4472 : 19975 : void cvc5_set_option(Cvc5* cvc5, const char* option, const char* value)
4473 : : {
4474 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4475 [ + + ][ + + ]: 19975 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4476 [ + + ][ + + ]: 19974 : CVC5_CAPI_CHECK_NOT_NULL(option);
[ - - ]
4477 [ + + ][ + + ]: 19973 : CVC5_CAPI_CHECK_NOT_NULL(value);
[ - - ]
4478 : 19988 : cvc5->d_solver.setOption(option, value);
4479 [ - + ]: 7 : CVC5_CAPI_TRY_CATCH_END;
4480 : 19968 : }
4481 : :
4482 : 285 : Cvc5Statistics cvc5_get_statistics(Cvc5* cvc5)
4483 : : {
4484 : 285 : Cvc5Statistics res = nullptr;
4485 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4486 [ + + ][ + + ]: 285 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4487 : 284 : res = cvc5->d_tm->export_stats(cvc5->d_solver.getStatistics());
4488 [ - + ]: 1 : CVC5_CAPI_TRY_CATCH_END;
4489 : 284 : return res;
4490 : : }
4491 : :
4492 : 12 : void cvc5_print_stats_safe(Cvc5* cvc5, int fd)
4493 : : {
4494 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4495 [ - + ][ - + ]: 12 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4496 : 12 : cvc5->d_solver.printStatisticsSafe(fd);
4497 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4498 : 12 : }
4499 : :
4500 : 5 : bool cvc5_is_output_on(Cvc5* cvc5, const char* tag)
4501 : : {
4502 : 5 : bool res = false;
4503 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4504 [ + + ][ + + ]: 5 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4505 [ + + ][ + + ]: 4 : CVC5_CAPI_CHECK_NOT_NULL(tag);
[ - - ]
4506 : 5 : res = cvc5->d_solver.isOutputOn(tag);
4507 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
4508 : 2 : return res;
4509 : : }
4510 : :
4511 : 8 : void cvc5_get_output(Cvc5* cvc5, const char* tag, const char* filename)
4512 : : {
4513 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4514 [ + + ][ + + ]: 8 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4515 [ + + ][ + + ]: 7 : CVC5_CAPI_CHECK_NOT_NULL(tag);
[ - - ]
4516 [ + + ][ + + ]: 6 : CVC5_CAPI_CHECK_NOT_NULL(filename);
[ - - ]
4517 [ + + ]: 7 : if (cvc5->d_solver.isOutputOn(tag))
4518 : : {
4519 : : std::ostream* out;
4520 [ + + ]: 3 : if (filename != std::string("<stdout>"))
4521 : : {
4522 [ - + ]: 1 : if (cvc5->d_output_tag_file_stream.is_open())
4523 : : {
4524 : 0 : cvc5->d_output_tag_file_stream.close();
4525 : : }
4526 : 1 : cvc5->d_output_tag_file_stream.open(filename);
4527 : 1 : out = &cvc5->d_output_tag_file_stream;
4528 : : }
4529 : : else
4530 : : {
4531 : 2 : out = &std::cout;
4532 : : }
4533 : 3 : cvc5->d_output_tag_stream = &cvc5->d_solver.getOutput(tag);
4534 : 3 : cvc5->d_output_tag_streambuf = cvc5->d_output_tag_stream->rdbuf();
4535 : 3 : cvc5->d_output_tag_stream->rdbuf(out->rdbuf());
4536 : : }
4537 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
4538 : 4 : }
4539 : :
4540 : 4 : void cvc5_close_output(Cvc5* cvc5, const char* filename)
4541 : : {
4542 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4543 [ + + ][ + + ]: 4 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4544 [ + + ][ + + ]: 3 : CVC5_CAPI_CHECK_NOT_NULL(filename);
[ - - ]
4545 [ + + ]: 2 : if (cvc5->d_output_tag_file_stream.is_open())
4546 : : {
4547 : 1 : cvc5->d_output_tag_file_stream.close();
4548 : : }
4549 : : // reset redirected output stream returned by Solver::getOutput()
4550 [ + + ]: 2 : if (cvc5->d_output_tag_stream)
4551 : : {
4552 [ - + ][ - + ]: 1 : Assert(cvc5->d_output_tag_streambuf);
[ - - ]
4553 : 1 : cvc5->d_output_tag_stream->rdbuf(cvc5->d_output_tag_streambuf);
4554 : : }
4555 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4556 : 2 : }
4557 : :
4558 : 10 : const char* cvc5_get_version(Cvc5* cvc5)
4559 : : {
4560 [ + - ]: 10 : static thread_local std::string str;
4561 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4562 [ - + ][ - + ]: 10 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4563 : 10 : str = cvc5->d_solver.getVersion();
4564 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
4565 : 10 : return str.c_str();
4566 : : }
4567 : :
4568 : : /* .................................................................... */
4569 : : /* SMT-LIB-style Term/Sort Creation */
4570 : : /* .................................................................... */
4571 : :
4572 : 2196 : Cvc5Sort cvc5_declare_dt(Cvc5* cvc5,
4573 : : const char* symbol,
4574 : : size_t size,
4575 : : const Cvc5DatatypeConstructorDecl ctors[])
4576 : : {
4577 : 2196 : Cvc5Sort res = nullptr;
4578 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4579 [ + + ][ + + ]: 2196 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4580 [ - + ][ - + ]: 2195 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
4581 [ - + ][ - + ]: 2195 : CVC5_CAPI_CHECK_NOT_NULL(ctors);
[ - - ]
4582 : 2195 : std::vector<cvc5::DatatypeConstructorDecl> cctors;
4583 [ + + ]: 5956 : for (size_t i = 0; i < size; ++i)
4584 : : {
4585 [ + + ][ + + ]: 3762 : CVC5_CAPI_CHECK_DT_CONS_DECL_AT_IDX(ctors, i);
[ - - ]
4586 : 3761 : cctors.push_back(ctors[i]->d_decl);
4587 : : }
4588 : 2200 : res = cvc5->d_tm->export_sort(cvc5->d_solver.declareDatatype(symbol, cctors));
4589 [ - + ]: 2200 : CVC5_CAPI_TRY_CATCH_END;
4590 : 2191 : return res;
4591 : : }
4592 : :
4593 : 3129 : Cvc5Term cvc5_declare_fun(Cvc5* cvc5,
4594 : : const char* symbol,
4595 : : size_t size,
4596 : : const Cvc5Sort sorts[],
4597 : : Cvc5Sort sort,
4598 : : bool fresh)
4599 : : {
4600 : 3129 : Cvc5Term res = nullptr;
4601 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4602 [ + + ][ + + ]: 3129 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4603 [ - + ][ - + ]: 3128 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
4604 [ + + ][ + + ]: 3128 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
4605 : 3127 : std::vector<cvc5::Sort> csorts;
4606 [ + + ]: 3127 : if (sorts != nullptr)
4607 : : {
4608 [ + + ]: 3404 : for (size_t i = 0; i < size; ++i)
4609 : : {
4610 [ - + ][ - + ]: 2135 : CVC5_CAPI_CHECK_SORT_AT_IDX(sorts, i);
[ - - ]
4611 : 2135 : csorts.push_back(sorts[i]->d_sort);
4612 : : }
4613 : : }
4614 : 3123 : res = cvc5->d_tm->export_term(
4615 : 6258 : cvc5->d_solver.declareFun(symbol, csorts, sort->d_sort, fresh));
4616 [ - + ]: 3133 : CVC5_CAPI_TRY_CATCH_END;
4617 : 3123 : return res;
4618 : : }
4619 : :
4620 : 2386 : Cvc5Sort cvc5_declare_sort(Cvc5* cvc5,
4621 : : const char* symbol,
4622 : : uint32_t arity,
4623 : : bool fresh)
4624 : : {
4625 : 2386 : Cvc5Sort res = nullptr;
4626 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4627 [ + + ][ + + ]: 2386 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4628 [ + + ][ + + ]: 2384 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
4629 : : res =
4630 : 2382 : cvc5->d_tm->export_sort(cvc5->d_solver.declareSort(symbol, arity, fresh));
4631 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
4632 : 2382 : return res;
4633 : : }
4634 : :
4635 : : /* .................................................................... */
4636 : : /* Formula Handling */
4637 : : /* .................................................................... */
4638 : :
4639 : 1475 : Cvc5Term cvc5_define_fun(Cvc5* cvc5,
4640 : : const char* symbol,
4641 : : size_t size,
4642 : : const Cvc5Term vars[],
4643 : : const Cvc5Sort sort,
4644 : : const Cvc5Term term,
4645 : : bool global)
4646 : : {
4647 : 1475 : Cvc5Term res = nullptr;
4648 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4649 [ + + ][ + + ]: 1475 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4650 [ - + ][ - + ]: 1474 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
4651 [ + + ][ + + ]: 1474 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
4652 [ + + ][ + + ]: 1473 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
4653 : 1472 : std::vector<cvc5::Term> cvars;
4654 [ + + ]: 1472 : if (vars != nullptr)
4655 : : {
4656 [ + + ]: 2370 : for (size_t i = 0; i < size; ++i)
4657 : : {
4658 [ - + ][ - + ]: 1479 : CVC5_CAPI_CHECK_TERM_AT_IDX(vars, i);
[ - - ]
4659 : 1479 : cvars.push_back(vars[i]->d_term);
4660 : : }
4661 : : }
4662 : 1490 : res = cvc5->d_tm->export_term(cvc5->d_solver.defineFun(
4663 : 1472 : symbol, cvars, sort->d_sort, term->d_term, global));
4664 [ - + ]: 1484 : CVC5_CAPI_TRY_CATCH_END;
4665 : 1463 : return res;
4666 : : }
4667 : :
4668 : 1398 : Cvc5Term cvc5_define_fun_rec(Cvc5* cvc5,
4669 : : const char* symbol,
4670 : : size_t size,
4671 : : const Cvc5Term vars[],
4672 : : const Cvc5Sort sort,
4673 : : const Cvc5Term term,
4674 : : bool global)
4675 : : {
4676 : 1398 : Cvc5Term res = nullptr;
4677 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4678 [ + + ][ + + ]: 1398 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4679 [ + + ][ + + ]: 1397 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
4680 [ + + ][ + + ]: 1396 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
4681 [ + + ][ + + ]: 1395 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
4682 : 1394 : std::vector<cvc5::Term> cvars;
4683 [ + + ]: 1394 : if (vars != nullptr)
4684 : : {
4685 [ + + ]: 2527 : for (size_t i = 0; i < size; ++i)
4686 : : {
4687 [ - + ][ - + ]: 1682 : CVC5_CAPI_CHECK_TERM_AT_IDX(vars, i);
[ - - ]
4688 : 1682 : cvars.push_back(vars[i]->d_term);
4689 : : }
4690 : : }
4691 : 1412 : res = cvc5->d_tm->export_term(cvc5->d_solver.defineFunRec(
4692 : 1394 : symbol, cvars, sort->d_sort, term->d_term, global));
4693 [ - + ]: 1407 : CVC5_CAPI_TRY_CATCH_END;
4694 : 1385 : return res;
4695 : : }
4696 : :
4697 : 559 : Cvc5Term cvc5_define_fun_rec_from_const(Cvc5* cvc5,
4698 : : Cvc5Term fun,
4699 : : size_t size,
4700 : : const Cvc5Term vars[],
4701 : : const Cvc5Term term,
4702 : : bool global)
4703 : : {
4704 : 559 : Cvc5Term res = nullptr;
4705 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4706 [ + + ][ + + ]: 559 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4707 [ + + ][ + + ]: 558 : CVC5_CAPI_CHECK_TERM(fun);
[ - - ]
4708 [ + + ][ + + ]: 557 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
4709 : 556 : std::vector<cvc5::Term> cvars;
4710 [ + - ]: 556 : if (vars != nullptr)
4711 : : {
4712 [ + + ]: 1400 : for (size_t i = 0; i < size; ++i)
4713 : : {
4714 [ - + ][ - + ]: 844 : CVC5_CAPI_CHECK_TERM_AT_IDX(vars, i);
[ - - ]
4715 : 844 : cvars.push_back(vars[i]->d_term);
4716 : : }
4717 : : }
4718 : 548 : res = cvc5->d_tm->export_term(
4719 : 1104 : cvc5->d_solver.defineFunRec(fun->d_term, cvars, term->d_term, global));
4720 [ - + ]: 567 : CVC5_CAPI_TRY_CATCH_END;
4721 : 548 : return res;
4722 : : }
4723 : :
4724 : 1101 : void cvc5_define_funs_rec(Cvc5* cvc5,
4725 : : size_t nfuns,
4726 : : const Cvc5Term funs[],
4727 : : size_t nvars[],
4728 : : const Cvc5Term* vars[],
4729 : : const Cvc5Term terms[],
4730 : : bool global)
4731 : : {
4732 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4733 [ - + ][ - + ]: 1101 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4734 [ - + ][ - + ]: 1101 : CVC5_CAPI_CHECK_NOT_NULL(funs);
[ - - ]
4735 [ - + ][ - + ]: 1101 : CVC5_CAPI_CHECK_NOT_NULL(nvars);
[ - - ]
4736 [ - + ][ - + ]: 1101 : CVC5_CAPI_CHECK_NOT_NULL(vars);
[ - - ]
4737 [ - + ][ - + ]: 1101 : CVC5_CAPI_CHECK_NOT_NULL(terms);
[ - - ]
4738 : 1101 : std::vector<cvc5::Term> cfuns;
4739 [ + + ]: 3053 : for (size_t i = 0; i < nfuns; ++i)
4740 : : {
4741 [ - + ][ - + ]: 1952 : CVC5_CAPI_CHECK_TERM_AT_IDX(funs, i);
[ - - ]
4742 : 1952 : cfuns.push_back(funs[i]->d_term);
4743 : : }
4744 : 1101 : std::vector<std::vector<cvc5::Term>> cvars;
4745 [ + + ]: 3053 : for (size_t i = 0; i < nfuns; ++i)
4746 : : {
4747 : 1952 : std::vector<cvc5::Term> cv;
4748 [ + + ]: 4754 : for (size_t j = 0; j < nvars[i]; ++j)
4749 : : {
4750 [ - + ][ - + ]: 2802 : CVC5_CAPI_CHECK_TERM_AT_IDX(vars[i], j);
[ - - ]
4751 : 2802 : cv.push_back(vars[i][j]->d_term);
4752 : : }
4753 : 1952 : cvars.push_back(cv);
4754 : 1952 : }
4755 : 1101 : std::vector<cvc5::Term> cterms;
4756 [ + + ]: 3053 : for (size_t i = 0; i < nfuns; ++i)
4757 : : {
4758 [ - + ][ - + ]: 1952 : CVC5_CAPI_CHECK_TERM_AT_IDX(terms, i);
[ - - ]
4759 : 1952 : cterms.push_back(terms[i]->d_term);
4760 : : }
4761 : 1101 : cvc5->d_solver.defineFunsRec(cfuns, cvars, cterms, global);
4762 [ - + ]: 1134 : CVC5_CAPI_TRY_CATCH_END;
4763 : 1090 : }
4764 : :
4765 : 8764 : Cvc5Term cvc5_simplify(Cvc5* cvc5, Cvc5Term term, bool apply_subs)
4766 : : {
4767 : 8764 : Cvc5Term res = nullptr;
4768 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4769 [ + + ][ + + ]: 8764 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4770 [ + + ][ + + ]: 8763 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
4771 : 8760 : res = cvc5->d_tm->export_term(
4772 : 17522 : cvc5->d_solver.simplify(term->d_term, apply_subs));
4773 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
4774 : 8760 : return res;
4775 : : }
4776 : :
4777 : 18275 : void cvc5_assert_formula(Cvc5* cvc5, Cvc5Term term)
4778 : : {
4779 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4780 [ + + ][ + + ]: 18275 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4781 [ + + ][ + + ]: 18274 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
4782 : 18273 : cvc5->d_solver.assertFormula(term->d_term);
4783 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
4784 : 18272 : }
4785 : :
4786 : 10816 : Cvc5Result cvc5_check_sat(Cvc5* cvc5)
4787 : : {
4788 : 10816 : Cvc5Result res = nullptr;
4789 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4790 [ + + ][ + + ]: 10816 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4791 : 10815 : res = cvc5->export_result(cvc5->d_solver.checkSat());
4792 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
4793 : 10813 : return res;
4794 : : }
4795 : :
4796 : 2953 : Cvc5Result cvc5_check_sat_assuming(Cvc5* cvc5,
4797 : : size_t size,
4798 : : const Cvc5Term assumptions[])
4799 : : {
4800 : 2953 : Cvc5Result res = nullptr;
4801 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4802 [ + + ][ + + ]: 2953 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4803 [ + + ][ + + ]: 2952 : CVC5_CAPI_CHECK_NOT_NULL(assumptions);
[ - - ]
4804 : 2951 : std::vector<cvc5::Term> cassumptions;
4805 [ + + ]: 6038 : for (size_t i = 0; i < size; ++i)
4806 : : {
4807 [ + + ][ + + ]: 3088 : CVC5_CAPI_CHECK_TERM_AT_IDX(assumptions, i);
[ - - ]
4808 : 3087 : cassumptions.push_back(assumptions[i]->d_term);
4809 : : }
4810 : 2950 : res = cvc5->export_result(cvc5->d_solver.checkSatAssuming(cassumptions));
4811 [ - + ]: 2957 : CVC5_CAPI_TRY_CATCH_END;
4812 : 2947 : return res;
4813 : : }
4814 : :
4815 : 252 : const Cvc5Term* cvc5_get_assertions(Cvc5* cvc5, size_t* size)
4816 : : {
4817 [ + + ]: 252 : static thread_local std::vector<Cvc5Term> res;
4818 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4819 [ + + ][ + + ]: 252 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4820 [ + + ][ + + ]: 251 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
4821 : 250 : res.clear();
4822 : 250 : auto assertions = cvc5->d_solver.getAssertions();
4823 [ + + ]: 750 : for (auto& t : assertions)
4824 : : {
4825 : 500 : res.push_back(cvc5->d_tm->export_term(t));
4826 : : }
4827 : 250 : *size = res.size();
4828 [ - + ]: 252 : CVC5_CAPI_TRY_CATCH_END;
4829 : 250 : return res.data();
4830 : : }
4831 : :
4832 : 251 : const char* cvc5_get_info(Cvc5* cvc5, const char* flag)
4833 : : {
4834 [ + + ]: 251 : static thread_local std::string str;
4835 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4836 [ + + ][ + + ]: 251 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4837 [ + + ][ + + ]: 250 : CVC5_CAPI_CHECK_NOT_NULL(flag);
[ - - ]
4838 : 251 : str = cvc5->d_solver.getInfo(flag);
4839 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
4840 : 248 : return str.c_str();
4841 : : }
4842 : :
4843 : 248 : const char* cvc5_get_option(Cvc5* cvc5, const char* option)
4844 : : {
4845 [ + + ]: 248 : static thread_local std::string str;
4846 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4847 [ + + ][ + + ]: 248 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4848 [ + + ][ + + ]: 247 : CVC5_CAPI_CHECK_NOT_NULL(option);
[ - - ]
4849 : 248 : str = cvc5->d_solver.getOption(option);
4850 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
4851 : 245 : return str.c_str();
4852 : : }
4853 : :
4854 : 244 : const char** cvc5_get_option_names(Cvc5* cvc5, size_t* size)
4855 : : {
4856 [ + + ]: 244 : static thread_local std::vector<const char*> res;
4857 [ + + ]: 244 : static thread_local std::vector<std::string> names;
4858 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4859 [ + + ][ + + ]: 244 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4860 [ + + ][ + + ]: 243 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
4861 : 242 : res.clear();
4862 : 242 : names = cvc5->d_solver.getOptionNames();
4863 [ + + ]: 128260 : for (auto& s : names)
4864 : : {
4865 : 128018 : res.push_back(s.c_str());
4866 : : }
4867 : 242 : *size = res.size();
4868 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
4869 : 242 : return res.data();
4870 : : }
4871 : :
4872 : : static thread_local std::vector<const char*> c_modes;
4873 : :
4874 : : template <class... Ts>
4875 : : struct overloaded : Ts...
4876 : : {
4877 : : using Ts::operator()...;
4878 : : };
4879 : : template <class... Ts>
4880 : : overloaded(Ts...) -> overloaded<Ts...>;
4881 : :
4882 : 1656 : void cvc5_get_option_info(Cvc5* cvc5, const char* option, Cvc5OptionInfo* info)
4883 : : {
4884 : : CVC5_CAPI_TRY_CATCH_BEGIN;
4885 [ + + ][ + + ]: 1656 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
4886 [ + + ][ + + ]: 1655 : CVC5_CAPI_CHECK_NOT_NULL(option);
[ - - ]
4887 [ + + ][ + + ]: 1654 : CVC5_CAPI_CHECK_NOT_NULL(info);
[ - - ]
4888 : :
4889 [ + + ]: 1653 : static thread_local cvc5::OptionInfo cpp_info;
4890 : 1655 : cpp_info = cvc5->d_solver.getOptionInfo(option);
4891 : :
4892 : 1652 : std::memset(info, 0, sizeof(*info));
4893 : :
4894 : 1652 : info->name = cpp_info.name.c_str();
4895 : :
4896 : 1652 : info->num_aliases = cpp_info.aliases.size();
4897 [ + + ]: 1652 : static thread_local std::vector<const char*> c_aliases;
4898 : 1652 : c_aliases.clear();
4899 [ + + ]: 2124 : for (const auto& a : cpp_info.aliases)
4900 : : {
4901 : 472 : c_aliases.push_back(a.c_str());
4902 : : }
4903 : 1652 : info->aliases = c_aliases.data();
4904 : :
4905 : 1652 : info->num_no_supports = cpp_info.noSupports.size();
4906 [ + + ]: 1652 : static thread_local std::vector<const char*> c_no_supports;
4907 : 1652 : c_no_supports.clear();
4908 [ - + ]: 1652 : for (const auto& a : cpp_info.noSupports)
4909 : : {
4910 : 0 : c_no_supports.push_back(a.c_str());
4911 : : }
4912 : 1652 : info->no_supports = c_no_supports.data();
4913 : :
4914 : 1652 : info->is_set_by_user = cpp_info.setByUser;
4915 [ + + ][ + - ]: 1652 : switch (cpp_info.category)
4916 : : {
4917 : 236 : case cvc5::modes::OptionCategory::REGULAR:
4918 : 236 : info->category = CVC5_OPTION_CATEGORY_REGULAR;
4919 : 236 : break;
4920 : 236 : case cvc5::modes::OptionCategory::EXPERT:
4921 : 236 : info->category = CVC5_OPTION_CATEGORY_EXPERT;
4922 : 236 : break;
4923 : 1180 : case cvc5::modes::OptionCategory::COMMON:
4924 : 1180 : info->category = CVC5_OPTION_CATEGORY_COMMON;
4925 : 1180 : break;
4926 : 0 : default:
4927 : 0 : Assert(cpp_info.category == cvc5::modes::OptionCategory::UNDOCUMENTED);
4928 : 0 : info->category = CVC5_OPTION_CATEGORY_UNDOCUMENTED;
4929 : : }
4930 : :
4931 : 1652 : std::visit(
4932 : 1652 : overloaded{
4933 : 236 : [info](const cvc5::OptionInfo::VoidInfo& vi) {
4934 : : (void)vi;
4935 : 236 : info->kind = CVC5_OPTION_INFO_VOID;
4936 : 236 : },
4937 : 236 : [info](const cvc5::OptionInfo::ValueInfo<bool>& vi) {
4938 : 236 : info->kind = CVC5_OPTION_INFO_BOOL;
4939 : 236 : info->info_bool.dflt = vi.defaultValue;
4940 : 236 : info->info_bool.cur = vi.currentValue;
4941 : 236 : },
4942 : 472 : [info](const cvc5::OptionInfo::ValueInfo<std::string>& vi) {
4943 : 236 : info->kind = CVC5_OPTION_INFO_STR;
4944 : 236 : info->info_str.dflt = vi.defaultValue.c_str();
4945 : 236 : info->info_str.cur = vi.currentValue.c_str();
4946 : 236 : },
4947 : 236 : [info](const cvc5::OptionInfo::NumberInfo<int64_t>& vi) {
4948 : 236 : info->kind = CVC5_OPTION_INFO_INT64;
4949 : 236 : info->info_int.dflt = vi.defaultValue;
4950 : 236 : info->info_int.cur = vi.currentValue;
4951 [ - + ]: 236 : if (vi.minimum)
4952 : : {
4953 : 0 : info->info_int.min = *vi.minimum;
4954 : 0 : info->info_int.has_min = true;
4955 : : }
4956 [ - + ]: 236 : if (vi.maximum)
4957 : : {
4958 : 0 : info->info_int.max = *vi.maximum;
4959 : 0 : info->info_int.has_max = true;
4960 : : }
4961 : 236 : },
4962 : 236 : [info](const cvc5::OptionInfo::NumberInfo<uint64_t>& vi) {
4963 : 236 : info->kind = CVC5_OPTION_INFO_UINT64;
4964 : 236 : info->info_uint.dflt = vi.defaultValue;
4965 : 236 : info->info_uint.cur = vi.currentValue;
4966 [ - + ]: 236 : if (vi.minimum)
4967 : : {
4968 : 0 : info->info_uint.min = *vi.minimum;
4969 : 0 : info->info_uint.has_min = true;
4970 : : }
4971 [ - + ]: 236 : if (vi.maximum)
4972 : : {
4973 : 0 : info->info_uint.max = *vi.maximum;
4974 : 0 : info->info_uint.has_max = true;
4975 : : }
4976 : 236 : },
4977 : 708 : [info](const cvc5::OptionInfo::NumberInfo<double>& vi) {
4978 : 236 : info->kind = CVC5_OPTION_INFO_DOUBLE;
4979 : 236 : info->info_double.dflt = vi.defaultValue;
4980 : 236 : info->info_double.cur = vi.currentValue;
4981 [ + - ]: 236 : if (vi.minimum)
4982 : : {
4983 : 236 : info->info_double.min = *vi.minimum;
4984 : 236 : info->info_double.has_min = true;
4985 : : }
4986 [ + - ]: 236 : if (vi.maximum)
4987 : : {
4988 : 236 : info->info_double.max = *vi.maximum;
4989 : 236 : info->info_double.has_max = true;
4990 : : }
4991 : 236 : },
4992 : 1180 : [info](const cvc5::OptionInfo::ModeInfo& vi) {
4993 : 236 : info->kind = CVC5_OPTION_INFO_MODES;
4994 : 236 : info->info_mode.cur =
4995 : 236 : std::get<cvc5::OptionInfo::ModeInfo>(cpp_info.valueInfo)
4996 : 236 : .currentValue.c_str();
4997 : 236 : info->info_mode.dflt =
4998 : 236 : std::get<cvc5::OptionInfo::ModeInfo>(cpp_info.valueInfo)
4999 : 236 : .defaultValue.c_str();
5000 : 236 : info->info_mode.num_modes =
5001 : 236 : std::get<cvc5::OptionInfo::ModeInfo>(cpp_info.valueInfo)
5002 : 236 : .modes.size();
5003 : 236 : c_modes.clear();
5004 : 236 : for (const auto& m :
5005 [ + + ]: 944 : std::get<cvc5::OptionInfo::ModeInfo>(cpp_info.valueInfo).modes)
5006 : : {
5007 : 472 : c_modes.push_back(m.c_str());
5008 : : }
5009 : 236 : info->info_mode.modes = c_modes.data();
5010 : 236 : },
5011 : : },
5012 : : cpp_info.valueInfo);
5013 : :
5014 : 1652 : info->d_cpp_info = &cpp_info;
5015 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
5016 : 1652 : }
5017 : :
5018 : 1652 : const char* cvc5_option_info_to_string(const Cvc5OptionInfo* info)
5019 : : {
5020 [ + + ]: 1652 : static thread_local std::string str;
5021 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5022 [ - + ][ - + ]: 1652 : CVC5_CAPI_CHECK_NOT_NULL(info);
[ - - ]
5023 [ - + ][ - + ]: 1652 : Assert(info->d_cpp_info);
[ - - ]
5024 : 1652 : str = static_cast<cvc5::OptionInfo*>(info->d_cpp_info)->toString();
5025 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
5026 : 1652 : return str.c_str();
5027 : : }
5028 : :
5029 : 237 : const Cvc5Term* cvc5_get_unsat_assumptions(Cvc5* cvc5, size_t* size)
5030 : : {
5031 [ + + ]: 237 : static thread_local std::vector<Cvc5Term> res;
5032 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5033 [ + + ][ + + ]: 237 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5034 [ + + ][ + + ]: 236 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5035 : 235 : res.clear();
5036 : 235 : auto assumptions = cvc5->d_solver.getUnsatAssumptions();
5037 [ + + ]: 464 : for (auto& t : assumptions)
5038 : : {
5039 : 232 : res.push_back(cvc5->d_tm->export_term(t));
5040 : : }
5041 : 232 : *size = res.size();
5042 [ - + ]: 237 : CVC5_CAPI_TRY_CATCH_END;
5043 : 232 : return res.data();
5044 : : }
5045 : :
5046 : 231 : const Cvc5Term* cvc5_get_unsat_core(Cvc5* cvc5, size_t* size)
5047 : : {
5048 [ + - ]: 231 : static thread_local std::vector<Cvc5Term> res;
5049 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5050 [ + + ][ + + ]: 231 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5051 [ + + ][ + + ]: 230 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5052 : 229 : res.clear();
5053 : 229 : auto assertions = cvc5->d_solver.getUnsatCore();
5054 [ + + ]: 908 : for (auto& t : assertions)
5055 : : {
5056 : 681 : res.push_back(cvc5->d_tm->export_term(t));
5057 : : }
5058 : 227 : *size = res.size();
5059 [ - + ]: 231 : CVC5_CAPI_TRY_CATCH_END;
5060 : 227 : return res.data();
5061 : : }
5062 : :
5063 : 453 : const Cvc5Term* cvc5_get_unsat_core_lemmas(Cvc5* cvc5, size_t* size)
5064 : : {
5065 [ + + ]: 453 : static thread_local std::vector<Cvc5Term> res;
5066 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5067 [ + + ][ + + ]: 453 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5068 [ + + ][ + + ]: 452 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5069 : 451 : res.clear();
5070 : 451 : auto assertions = cvc5->d_solver.getUnsatCoreLemmas();
5071 [ + + ]: 674 : for (auto& t : assertions)
5072 : : {
5073 : 224 : res.push_back(cvc5->d_tm->export_term(t));
5074 : : }
5075 : 450 : *size = res.size();
5076 [ - + ]: 453 : CVC5_CAPI_TRY_CATCH_END;
5077 : 450 : return res.data();
5078 : : }
5079 : :
5080 : 443 : void cvc5_get_difficulty(Cvc5* cvc5,
5081 : : size_t* size,
5082 : : Cvc5Term* inputs[],
5083 : : Cvc5Term* values[])
5084 : : {
5085 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5086 [ + + ][ + + ]: 443 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5087 [ + + ][ + + ]: 442 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5088 [ + + ][ + + ]: 441 : CVC5_CAPI_CHECK_NOT_NULL(inputs);
[ - - ]
5089 [ + + ][ + + ]: 440 : CVC5_CAPI_CHECK_NOT_NULL(values);
[ - - ]
5090 : 439 : auto res = cvc5->d_solver.getDifficulty();
5091 [ + + ]: 437 : static thread_local std::vector<Cvc5Term> rinputs;
5092 [ + + ]: 437 : static thread_local std::vector<Cvc5Term> rvalues;
5093 : 437 : rinputs.clear();
5094 : 437 : rvalues.clear();
5095 [ + + ]: 873 : for (const auto& p : res)
5096 : : {
5097 : 436 : rinputs.push_back(cvc5->d_tm->export_term(p.first));
5098 : 436 : rvalues.push_back(cvc5->d_tm->export_term(p.second));
5099 : : }
5100 : 437 : *size = rinputs.size();
5101 : 437 : *inputs = rinputs.data();
5102 : 437 : *values = rvalues.data();
5103 [ - + ]: 443 : CVC5_CAPI_TRY_CATCH_END;
5104 : 437 : }
5105 : :
5106 : 436 : const Cvc5Term* cvc5_get_timeout_core(Cvc5* cvc5,
5107 : : Cvc5Result* result,
5108 : : size_t* size)
5109 : : {
5110 [ + + ]: 436 : static thread_local std::vector<Cvc5Term> res;
5111 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5112 [ + + ][ + + ]: 436 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5113 [ + + ][ + + ]: 435 : CVC5_CAPI_CHECK_NOT_NULL(result);
[ - - ]
5114 [ + + ][ + + ]: 434 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5115 : 433 : res.clear();
5116 : 433 : auto ccore = cvc5->d_solver.getTimeoutCore();
5117 : 433 : *result = cvc5->export_result(ccore.first);
5118 [ + + ]: 866 : for (const auto& t : ccore.second)
5119 : : {
5120 : 433 : res.push_back(cvc5->d_tm->export_term(t));
5121 : : }
5122 : 433 : *size = ccore.second.size();
5123 [ - + ]: 436 : CVC5_CAPI_TRY_CATCH_END;
5124 : 433 : return res.data();
5125 : : }
5126 : :
5127 : 216 : const Cvc5Term* cvc5_get_timeout_core_assuming(Cvc5* cvc5,
5128 : : size_t size,
5129 : : const Cvc5Term assumptions[],
5130 : : Cvc5Result* result,
5131 : : size_t* rsize)
5132 : : {
5133 [ + + ]: 216 : static thread_local std::vector<Cvc5Term> res;
5134 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5135 [ - + ][ - + ]: 216 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5136 [ + + ][ + + ]: 216 : CVC5_CAPI_CHECK_NOT_NULL(assumptions);
[ - - ]
5137 : 215 : std::vector<cvc5::Term> cassumptions;
5138 [ + + ]: 645 : for (size_t i = 0; i < size; ++i)
5139 : : {
5140 [ - + ][ - + ]: 430 : CVC5_CAPI_CHECK_TERM_AT_IDX(assumptions, i);
[ - - ]
5141 : 430 : cassumptions.push_back(assumptions[i]->d_term);
5142 : : }
5143 [ - + ][ - + ]: 215 : CVC5_CAPI_CHECK_NOT_NULL(result);
[ - - ]
5144 [ - + ][ - + ]: 215 : CVC5_CAPI_CHECK_NOT_NULL(rsize);
[ - - ]
5145 : 215 : res.clear();
5146 : 215 : auto ccore = cvc5->d_solver.getTimeoutCoreAssuming(cassumptions);
5147 : 215 : *result = cvc5->export_result(ccore.first);
5148 [ + + ]: 430 : for (const auto& t : ccore.second)
5149 : : {
5150 : 215 : res.push_back(cvc5->d_tm->export_term(t));
5151 : : }
5152 : 215 : *rsize = ccore.second.size();
5153 [ - + ]: 216 : CVC5_CAPI_TRY_CATCH_END;
5154 : 215 : return res.data();
5155 : : }
5156 : :
5157 : 1367 : const Cvc5Proof* cvc5_get_proof(Cvc5* cvc5, Cvc5ProofComponent c, size_t* size)
5158 : : {
5159 [ + + ]: 1367 : static thread_local std::vector<Cvc5Proof> res;
5160 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5161 [ + + ][ + + ]: 1367 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5162 [ + + ][ + + ]: 1366 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5163 : 1365 : res.clear();
5164 : : auto proofs =
5165 : 1365 : cvc5->d_solver.getProof(static_cast<cvc5::modes::ProofComponent>(c));
5166 [ + + ]: 2730 : for (const auto& p : proofs)
5167 : : {
5168 : 1365 : res.push_back(cvc5->export_proof(p));
5169 : : }
5170 : 1365 : *size = proofs.size();
5171 [ - + ]: 1367 : CVC5_CAPI_TRY_CATCH_END;
5172 : 1365 : return res.data();
5173 : : }
5174 : :
5175 : 634 : const Cvc5Term* cvc5_get_learned_literals(Cvc5* cvc5,
5176 : : Cvc5LearnedLitType type,
5177 : : size_t* size)
5178 : : {
5179 [ + + ]: 634 : static thread_local std::vector<Cvc5Term> res;
5180 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5181 [ + + ][ + + ]: 634 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5182 [ + + ][ + + ]: 633 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5183 : 632 : res.clear();
5184 : : auto lits = cvc5->d_solver.getLearnedLiterals(
5185 : 632 : static_cast<cvc5::modes::LearnedLitType>(type));
5186 [ + + ]: 1049 : for (const auto& t : lits)
5187 : : {
5188 : 418 : res.push_back(cvc5->d_tm->export_term(t));
5189 : : }
5190 : 631 : *size = res.size();
5191 [ - + ]: 634 : CVC5_CAPI_TRY_CATCH_END;
5192 : 631 : return res.data();
5193 : : }
5194 : :
5195 : 2382 : Cvc5Term cvc5_get_value(Cvc5* cvc5, Cvc5Term term)
5196 : : {
5197 : 2382 : Cvc5Term res = nullptr;
5198 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5199 [ + + ][ + + ]: 2382 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5200 [ + + ][ + + ]: 2381 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
5201 : 2380 : res = cvc5->d_tm->export_term(cvc5->d_solver.getValue(term->d_term));
5202 [ - + ]: 7 : CVC5_CAPI_TRY_CATCH_END;
5203 : 2375 : return res;
5204 : : }
5205 : :
5206 : 208 : const Cvc5Term* cvc5_get_values(Cvc5* cvc5,
5207 : : size_t size,
5208 : : const Cvc5Term terms[],
5209 : : size_t* rsize)
5210 : : {
5211 [ + + ]: 208 : static thread_local std::vector<Cvc5Term> res;
5212 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5213 [ + + ][ + + ]: 208 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5214 [ + + ][ + + ]: 207 : CVC5_CAPI_CHECK_NOT_NULL(terms);
[ - - ]
5215 [ + + ][ + + ]: 206 : CVC5_CAPI_CHECK_NOT_NULL(rsize);
[ - - ]
5216 : 205 : res.clear();
5217 : 205 : std::vector<cvc5::Term> cterms;
5218 [ + + ]: 820 : for (size_t i = 0; i < size; ++i)
5219 : : {
5220 : 615 : cterms.push_back(terms[i]->d_term);
5221 : : }
5222 : 205 : auto values = cvc5->d_solver.getValue(cterms);
5223 [ + + ]: 820 : for (const auto& t : values)
5224 : : {
5225 : 615 : res.push_back(cvc5->d_tm->export_term(t));
5226 : : }
5227 : 205 : *rsize = res.size();
5228 [ - + ]: 208 : CVC5_CAPI_TRY_CATCH_END;
5229 : 205 : return res.data();
5230 : : }
5231 : :
5232 : 398 : const Cvc5Term* cvc5_get_model_domain_elements(Cvc5* cvc5,
5233 : : Cvc5Sort sort,
5234 : : size_t* size)
5235 : : {
5236 [ + + ]: 398 : static thread_local std::vector<Cvc5Term> res;
5237 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5238 [ + + ][ + + ]: 398 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5239 [ + + ][ + + ]: 397 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
5240 [ + + ][ + + ]: 396 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5241 : 395 : res.clear();
5242 : 395 : auto elems = cvc5->d_solver.getModelDomainElements(sort->d_sort);
5243 [ + + ]: 1184 : for (const auto& t : elems)
5244 : : {
5245 : 791 : res.push_back(cvc5->d_tm->export_term(t));
5246 : : }
5247 : 393 : *size = res.size();
5248 [ - + ]: 398 : CVC5_CAPI_TRY_CATCH_END;
5249 : 393 : return res.data();
5250 : : }
5251 : :
5252 : 778 : bool cvc5_is_model_core_symbol(Cvc5* cvc5, Cvc5Term v)
5253 : : {
5254 : 778 : bool res = false;
5255 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5256 [ + + ][ + + ]: 778 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5257 [ + + ]: 777 : if (v)
5258 : : {
5259 : 584 : res = cvc5->d_solver.isModelCoreSymbol(v->d_term);
5260 : : }
5261 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
5262 : 775 : return res;
5263 : : }
5264 : :
5265 : 197 : const char* cvc5_get_model(Cvc5* cvc5,
5266 : : size_t nsorts,
5267 : : const Cvc5Sort sorts[],
5268 : : size_t nconsts,
5269 : : const Cvc5Term consts[])
5270 : : {
5271 [ + + ]: 197 : static thread_local std::string str;
5272 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5273 [ + + ][ + + ]: 197 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5274 [ + + ][ + + ]: 196 : CVC5_CAPI_CHECK_NOT_NULL(sorts);
[ - - ]
5275 [ + + ][ + + ]: 193 : CVC5_CAPI_CHECK_NOT_NULL(consts);
[ - - ]
5276 : 191 : std::vector<cvc5::Sort> csorts;
5277 [ + + ]: 382 : for (size_t i = 0; i < nsorts; ++i)
5278 : : {
5279 : 191 : csorts.push_back(sorts[i]->d_sort);
5280 : : }
5281 : 191 : std::vector<cvc5::Term> cconsts;
5282 [ + + ]: 573 : for (size_t i = 0; i < nconsts; ++i)
5283 : : {
5284 : 382 : cconsts.push_back(consts[i]->d_term);
5285 : : }
5286 : 191 : str = cvc5->d_solver.getModel(csorts, cconsts);
5287 [ - + ]: 197 : CVC5_CAPI_TRY_CATCH_END;
5288 : 191 : return str.c_str();
5289 : : }
5290 : :
5291 : 187 : Cvc5Term cvc5_get_quantifier_elimination(Cvc5* cvc5, Cvc5Term q)
5292 : : {
5293 : 187 : Cvc5Term res = nullptr;
5294 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5295 [ + + ][ + + ]: 187 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5296 [ + + ][ + + ]: 186 : CVC5_CAPI_CHECK_TERM(q);
[ - - ]
5297 : 182 : res = cvc5->d_tm->export_term(
5298 : 367 : cvc5->d_solver.getQuantifierElimination(q->d_term));
5299 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
5300 : 182 : return res;
5301 : : }
5302 : :
5303 : 181 : Cvc5Term cvc5_get_quantifier_elimination_disjunct(Cvc5* cvc5, Cvc5Term q)
5304 : : {
5305 : 181 : Cvc5Term res = nullptr;
5306 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5307 [ + + ][ + + ]: 181 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5308 [ + + ][ + + ]: 180 : CVC5_CAPI_CHECK_TERM(q);
[ - - ]
5309 : 178 : res = cvc5->d_tm->export_term(
5310 : 357 : cvc5->d_solver.getQuantifierEliminationDisjunct(q->d_term));
5311 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
5312 : 178 : return res;
5313 : : }
5314 : :
5315 : 856 : void cvc5_declare_sep_heap(Cvc5* cvc5, Cvc5Sort loc, Cvc5Sort data)
5316 : : {
5317 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5318 [ - + ][ - + ]: 856 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5319 [ - + ][ - + ]: 856 : CVC5_CAPI_CHECK_SORT(loc);
[ - - ]
5320 [ - + ][ - + ]: 856 : CVC5_CAPI_CHECK_SORT(data);
[ - - ]
5321 : 856 : cvc5->d_solver.declareSepHeap(loc->d_sort, data->d_sort);
5322 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
5323 : 852 : }
5324 : :
5325 : 174 : Cvc5Term cvc5_get_value_sep_heap(Cvc5* cvc5)
5326 : : {
5327 : 174 : Cvc5Term res = nullptr;
5328 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5329 [ - + ][ - + ]: 174 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5330 : 174 : res = cvc5->d_tm->export_term(cvc5->d_solver.getValueSepHeap());
5331 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
5332 : 170 : return res;
5333 : : }
5334 : :
5335 : 170 : Cvc5Term cvc5_get_value_sep_nil(Cvc5* cvc5)
5336 : : {
5337 : 170 : Cvc5Term res = nullptr;
5338 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5339 [ - + ][ - + ]: 170 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5340 : 170 : res = cvc5->d_tm->export_term(cvc5->d_solver.getValueSepNil());
5341 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
5342 : 166 : return res;
5343 : : }
5344 : :
5345 : 242 : Cvc5Term cvc5_declare_pool(Cvc5* cvc5,
5346 : : const char* symbol,
5347 : : Cvc5Sort sort,
5348 : : size_t size,
5349 : : const Cvc5Term init_value[])
5350 : : {
5351 : 242 : Cvc5Term res = nullptr;
5352 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5353 [ + + ][ + + ]: 242 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5354 [ + + ][ + + ]: 241 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
5355 [ + + ][ + + ]: 240 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
5356 : 239 : std::vector<cvc5::Term> cinit_value;
5357 [ + + ]: 239 : if (init_value != nullptr)
5358 : : {
5359 [ + + ]: 490 : for (size_t i = 0; i < size; ++i)
5360 : : {
5361 [ + + ][ + + ]: 369 : CVC5_CAPI_CHECK_TERM_AT_IDX(init_value, i);
[ - - ]
5362 : 366 : cinit_value.push_back(init_value[i]->d_term);
5363 : : }
5364 : : }
5365 : 233 : res = cvc5->d_tm->export_term(
5366 : 475 : cvc5->d_solver.declarePool(symbol, sort->d_sort, cinit_value));
5367 [ - + ]: 248 : CVC5_CAPI_TRY_CATCH_END;
5368 : 233 : return res;
5369 : : }
5370 : :
5371 : : namespace {
5372 : 1170 : cvc5::Term call_oracle(Cvc5* cvc5,
5373 : : Cvc5Term (*fun)(size_t, const Cvc5Term*, void*),
5374 : : const std::vector<cvc5::Term>& terms,
5375 : : void* state)
5376 : : {
5377 : 1170 : std::vector<Cvc5Term> cterms;
5378 [ + + ]: 2552 : for (auto& t : terms)
5379 : : {
5380 : 1382 : cterms.push_back(cvc5->d_tm->export_term(t));
5381 : : }
5382 : 2340 : return fun(cterms.size(), cterms.data(), state)->d_term;
5383 : 1170 : }
5384 : : } // namespace
5385 : :
5386 : 538 : Cvc5Term cvc5_declare_oracle_fun(Cvc5* cvc5,
5387 : : const char* symbol,
5388 : : size_t size,
5389 : : const Cvc5Sort sorts[],
5390 : : Cvc5Sort sort,
5391 : : void* state,
5392 : : Cvc5Term (*fun)(size_t,
5393 : : const Cvc5Term*,
5394 : : void*))
5395 : : {
5396 : 538 : Cvc5Term res = nullptr;
5397 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5398 [ + + ][ + + ]: 538 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5399 [ + + ][ + + ]: 537 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
5400 [ + + ][ + + ]: 536 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
5401 [ + + ][ + + ]: 535 : CVC5_CAPI_CHECK_NOT_NULL(fun);
[ - - ]
5402 : 534 : std::vector<cvc5::Sort> csorts;
5403 [ + - ]: 534 : if (sorts != nullptr)
5404 : : {
5405 [ + + ]: 1277 : for (size_t i = 0; i < size; ++i)
5406 : : {
5407 [ - + ][ - + ]: 743 : CVC5_CAPI_CHECK_SORT_AT_IDX(sorts, i);
[ - - ]
5408 : 743 : csorts.push_back(sorts[i]->d_sort);
5409 : : }
5410 : : }
5411 : : std::function<cvc5::Term(const std::vector<cvc5::Term>&)> cfun =
5412 : 1170 : [cvc5, state, fun](const std::vector<cvc5::Term>& terms) {
5413 : 1170 : cvc5::Term term = call_oracle(cvc5, fun, terms, state);
5414 : 1170 : return term;
5415 : 534 : };
5416 : 531 : res = cvc5->d_tm->export_term(
5417 : 1074 : cvc5->d_solver.declareOracleFun(symbol, csorts, sort->d_sort, cfun));
5418 [ - + ]: 544 : CVC5_CAPI_TRY_CATCH_END;
5419 : 531 : return res;
5420 : : }
5421 : :
5422 : 24 : void cvc5_add_plugin(Cvc5* cvc5, Cvc5Plugin* plugin)
5423 : : {
5424 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5425 [ - + ][ - + ]: 24 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5426 [ - + ][ - + ]: 24 : CVC5_CAPI_CHECK_NOT_NULL(plugin);
[ - - ]
5427 : 24 : cvc5->d_plugin.reset(new Cvc5::PluginCpp(cvc5->d_tm->d_tm, cvc5, plugin));
5428 : 24 : cvc5->d_solver.addPlugin(*cvc5->d_plugin);
5429 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
5430 : 24 : }
5431 : :
5432 : 198 : Cvc5Term cvc5_get_interpolant(Cvc5* cvc5, Cvc5Term conj)
5433 : : {
5434 : 198 : Cvc5Term res = nullptr;
5435 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5436 [ + + ][ + + ]: 198 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5437 [ + + ][ + + ]: 196 : CVC5_CAPI_CHECK_TERM(conj);
[ - - ]
5438 : 194 : cvc5::Term cres = cvc5->d_solver.getInterpolant(conj->d_term);
5439 [ - + ]: 193 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5440 [ - + ]: 198 : CVC5_CAPI_TRY_CATCH_END;
5441 : 193 : return res;
5442 : : }
5443 : :
5444 : 199 : Cvc5Term cvc5_get_interpolant_with_grammar(Cvc5* cvc5,
5445 : : Cvc5Term conj,
5446 : : Cvc5Grammar grammar)
5447 : : {
5448 : 199 : Cvc5Term res = nullptr;
5449 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5450 [ + + ][ + + ]: 199 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5451 [ + + ][ + + ]: 198 : CVC5_CAPI_CHECK_TERM(conj);
[ - - ]
5452 [ + + ][ + + ]: 197 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
5453 : : cvc5::Term cres =
5454 : 196 : cvc5->d_solver.getInterpolant(conj->d_term, grammar->d_grammar);
5455 [ - + ]: 193 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5456 [ - + ]: 199 : CVC5_CAPI_TRY_CATCH_END;
5457 : 193 : return res;
5458 : : }
5459 : :
5460 : 93 : Cvc5Term cvc5_get_interpolant_next(Cvc5* cvc5)
5461 : : {
5462 : 93 : Cvc5Term res = nullptr;
5463 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5464 [ + + ][ + + ]: 93 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5465 : 92 : cvc5::Term cres = cvc5->d_solver.getInterpolantNext();
5466 [ - + ]: 92 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5467 [ - + ]: 93 : CVC5_CAPI_TRY_CATCH_END;
5468 : 92 : return res;
5469 : : }
5470 : :
5471 : 174 : Cvc5Term cvc5_get_abduct(Cvc5* cvc5, Cvc5Term conj)
5472 : : {
5473 : 174 : Cvc5Term res = nullptr;
5474 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5475 [ + + ][ + + ]: 174 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5476 [ + + ][ + + ]: 172 : CVC5_CAPI_CHECK_TERM(conj);
[ - - ]
5477 : 170 : cvc5::Term cres = cvc5->d_solver.getAbduct(conj->d_term);
5478 [ - + ]: 168 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5479 [ - + ]: 174 : CVC5_CAPI_TRY_CATCH_END;
5480 : 168 : return res;
5481 : : }
5482 : :
5483 : 175 : Cvc5Term cvc5_get_abduct_with_grammar(Cvc5* cvc5,
5484 : : Cvc5Term conj,
5485 : : Cvc5Grammar grammar)
5486 : : {
5487 : 175 : Cvc5Term res = nullptr;
5488 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5489 [ + + ][ + + ]: 175 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5490 [ + + ][ + + ]: 174 : CVC5_CAPI_CHECK_TERM(conj);
[ - - ]
5491 [ + + ][ + + ]: 173 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
5492 : 172 : cvc5::Term cres = cvc5->d_solver.getAbduct(conj->d_term, grammar->d_grammar);
5493 [ - + ]: 169 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5494 [ - + ]: 175 : CVC5_CAPI_TRY_CATCH_END;
5495 : 169 : return res;
5496 : : }
5497 : :
5498 : 80 : Cvc5Term cvc5_get_abduct_next(Cvc5* cvc5)
5499 : : {
5500 : 80 : Cvc5Term res = nullptr;
5501 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5502 [ + + ][ + + ]: 80 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5503 : 79 : cvc5::Term cres = cvc5->d_solver.getAbductNext();
5504 [ - + ]: 79 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5505 [ - + ]: 80 : CVC5_CAPI_TRY_CATCH_END;
5506 : 79 : return res;
5507 : : }
5508 : :
5509 : 77 : void cvc5_block_model(Cvc5* cvc5, Cvc5BlockModelsMode mode)
5510 : : {
5511 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5512 [ + + ][ + + ]: 77 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5513 : 76 : cvc5->d_solver.blockModel(static_cast<cvc5::modes::BlockModelsMode>(mode));
5514 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
5515 : 74 : }
5516 : :
5517 : 215 : void cvc5_block_model_values(Cvc5* cvc5, size_t size, const Cvc5Term terms[])
5518 : : {
5519 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5520 [ + + ][ + + ]: 215 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5521 [ + + ][ + + ]: 214 : CVC5_CAPI_CHECK_NOT_NULL(terms);
[ - - ]
5522 : 213 : std::vector<cvc5::Term> cterms;
5523 [ + + ]: 425 : for (size_t i = 0; i < size; ++i)
5524 : : {
5525 [ + + ][ + + ]: 213 : CVC5_CAPI_CHECK_TERM_AT_IDX(terms, i);
[ - - ]
5526 : 212 : cterms.push_back(terms[i]->d_term);
5527 : : }
5528 : 212 : cvc5->d_solver.blockModelValues(cterms);
5529 [ - + ]: 219 : CVC5_CAPI_TRY_CATCH_END;
5530 : 209 : }
5531 : :
5532 : 68 : const char* cvc5_get_instantiations(Cvc5* cvc5)
5533 : : {
5534 [ + + ]: 68 : static thread_local std::string str;
5535 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5536 [ + + ][ + + ]: 68 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5537 : 67 : str = cvc5->d_solver.getInstantiations();
5538 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
5539 : 66 : return str.c_str();
5540 : : }
5541 : :
5542 : 976 : void cvc5_push(Cvc5* cvc5, uint32_t nscopes)
5543 : : {
5544 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5545 [ + + ][ + + ]: 976 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5546 : 975 : cvc5->d_solver.push(nscopes);
5547 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
5548 : 974 : }
5549 : :
5550 : 676 : void cvc5_pop(Cvc5* cvc5, uint32_t nscopes)
5551 : : {
5552 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5553 [ + + ][ + + ]: 676 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5554 : 675 : cvc5->d_solver.pop(nscopes);
5555 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
5556 : 672 : }
5557 : :
5558 : 650 : void cvc5_reset_assertions(Cvc5* cvc5)
5559 : : {
5560 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5561 [ - + ][ - + ]: 650 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5562 : 650 : cvc5->d_solver.resetAssertions();
5563 [ - - ]: 0 : CVC5_CAPI_TRY_CATCH_END;
5564 : 650 : }
5565 : :
5566 : 848 : const char* cvc5_proof_to_string(Cvc5* cvc5,
5567 : : Cvc5Proof proof,
5568 : : Cvc5ProofFormat format,
5569 : : size_t size,
5570 : : const Cvc5Term assertions[],
5571 : : const char* names[])
5572 : : {
5573 [ + + ]: 848 : static thread_local std::string str;
5574 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5575 [ - + ][ - + ]: 848 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5576 [ - + ][ - + ]: 848 : CVC5_CAPI_CHECK_PROOF(proof);
[ - - ]
5577 [ + + ][ + - ]: 848 : CVC5_API_CHECK(assertions || names == nullptr) << "unexpected NULL argument";
[ - + ][ - + ]
[ - - ]
5578 : 848 : std::map<cvc5::Term, std::string> cassertion_names;
5579 [ + + ]: 848 : if (assertions)
5580 : : {
5581 [ + + ]: 636 : for (size_t i = 0; i < size; ++i)
5582 : : {
5583 : 424 : cassertion_names.emplace(assertions[i]->d_term, names[i]);
5584 : : }
5585 : : }
5586 : 1696 : str = proof->d_cvc5->d_solver.proofToString(
5587 : 848 : proof->d_proof,
5588 : : static_cast<cvc5::modes::ProofFormat>(format),
5589 : 848 : cassertion_names);
5590 [ - - ]: 848 : CVC5_CAPI_TRY_CATCH_END;
5591 : 848 : return str.c_str();
5592 : : }
5593 : :
5594 : 416 : Cvc5Term cvc5_declare_sygus_var(Cvc5* cvc5, const char* symbol, Cvc5Sort sort)
5595 : : {
5596 : 416 : Cvc5Term res = nullptr;
5597 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5598 [ + + ][ + + ]: 416 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5599 [ + + ][ + + ]: 415 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
5600 [ + + ][ + + ]: 414 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
5601 : 411 : res = cvc5->d_tm->export_term(
5602 : 828 : cvc5->d_solver.declareSygusVar(symbol, sort->d_sort));
5603 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
5604 : 411 : return res;
5605 : : }
5606 : :
5607 : 1075 : Cvc5Grammar cvc5_mk_grammar(Cvc5* cvc5,
5608 : : size_t nbound_vars,
5609 : : const Cvc5Term bound_vars[],
5610 : : size_t nsymbols,
5611 : : const Cvc5Term symbols[])
5612 : : {
5613 : 1075 : Cvc5Grammar res = nullptr;
5614 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5615 [ + + ][ + + ]: 1075 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5616 [ + + ][ + + ]: 1074 : CVC5_CAPI_CHECK_NOT_NULL(symbols);
[ - - ]
5617 : 1069 : std::vector<cvc5::Term> cbound_vars;
5618 [ + + ]: 1069 : if (nbound_vars)
5619 : : {
5620 [ + + ]: 866 : for (size_t i = 0; i < nbound_vars; ++i)
5621 : : {
5622 : 433 : cbound_vars.push_back(bound_vars[i]->d_term);
5623 : : }
5624 : : }
5625 : 1069 : std::vector<cvc5::Term> csymbols;
5626 [ + + ]: 2138 : for (size_t i = 0; i < nsymbols; ++i)
5627 : : {
5628 : 1069 : csymbols.push_back(symbols[i]->d_term);
5629 : : }
5630 : 1069 : res = cvc5->export_grammar(cvc5->d_solver.mkGrammar(cbound_vars, csymbols));
5631 [ - + ]: 1079 : CVC5_CAPI_TRY_CATCH_END;
5632 : 1067 : return res;
5633 : : }
5634 : :
5635 : 396 : Cvc5Term cvc5_synth_fun(Cvc5* cvc5,
5636 : : const char* symbol,
5637 : : size_t size,
5638 : : const Cvc5Term bound_vars[],
5639 : : Cvc5Sort sort)
5640 : : {
5641 : 396 : Cvc5Term res = nullptr;
5642 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5643 [ - + ][ - + ]: 396 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5644 [ - + ][ - + ]: 396 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
5645 [ - + ][ - + ]: 396 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
5646 : 396 : std::vector<cvc5::Term> cbound_vars;
5647 [ + + ]: 396 : if (size)
5648 : : {
5649 [ + + ]: 248 : for (size_t i = 0; i < size; ++i)
5650 : : {
5651 : 124 : cbound_vars.push_back(bound_vars[i]->d_term);
5652 : : }
5653 : : }
5654 : 396 : res = cvc5->d_tm->export_term(
5655 : 792 : cvc5->d_solver.synthFun(symbol, cbound_vars, sort->d_sort));
5656 [ - - ]: 396 : CVC5_CAPI_TRY_CATCH_END;
5657 : 396 : return res;
5658 : : }
5659 : :
5660 : 197 : Cvc5Term cvc5_synth_fun_with_grammar(Cvc5* cvc5,
5661 : : const char* symbol,
5662 : : size_t size,
5663 : : const Cvc5Term bound_vars[],
5664 : : Cvc5Sort sort,
5665 : : Cvc5Grammar grammar)
5666 : : {
5667 : 197 : Cvc5Term res = nullptr;
5668 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5669 [ + + ][ + + ]: 197 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5670 [ - + ][ - + ]: 196 : CVC5_CAPI_CHECK_NOT_NULL(symbol);
[ - - ]
5671 [ + + ][ + + ]: 196 : CVC5_CAPI_CHECK_SORT(sort);
[ - - ]
5672 [ + + ][ + + ]: 195 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
5673 : 194 : std::vector<cvc5::Term> cbound_vars;
5674 [ + + ]: 194 : if (size)
5675 : : {
5676 [ + + ]: 252 : for (size_t i = 0; i < size; ++i)
5677 : : {
5678 : 126 : cbound_vars.push_back(bound_vars[i]->d_term);
5679 : : }
5680 : : }
5681 : 206 : res = cvc5->d_tm->export_term(cvc5->d_solver.synthFun(
5682 : 194 : symbol, cbound_vars, sort->d_sort, grammar->d_grammar));
5683 [ - + ]: 201 : CVC5_CAPI_TRY_CATCH_END;
5684 : 190 : return res;
5685 : : }
5686 : :
5687 : 219 : void cvc5_add_sygus_constraint(Cvc5* cvc5, Cvc5Term term)
5688 : : {
5689 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5690 [ + + ][ + + ]: 219 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5691 [ + + ][ + + ]: 218 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
5692 : 217 : cvc5->d_solver.addSygusConstraint(term->d_term);
5693 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
5694 : 216 : }
5695 : :
5696 : 64 : const Cvc5Term* cvc5_get_sygus_constraints(Cvc5* cvc5, size_t* size)
5697 : : {
5698 [ + + ]: 64 : static thread_local std::vector<Cvc5Term> res;
5699 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5700 [ + + ][ + + ]: 64 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5701 [ + + ][ + + ]: 63 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5702 : 62 : res.clear();
5703 : 62 : auto terms = cvc5->d_solver.getSygusConstraints();
5704 [ + + ]: 186 : for (auto& t : terms)
5705 : : {
5706 : 124 : res.push_back(cvc5->d_tm->export_term(t));
5707 : : }
5708 : 62 : *size = res.size();
5709 [ - + ]: 64 : CVC5_CAPI_TRY_CATCH_END;
5710 [ + - ]: 62 : return *size > 0 ? res.data() : nullptr;
5711 : : }
5712 : :
5713 : 288 : void cvc5_add_sygus_assume(Cvc5* cvc5, Cvc5Term term)
5714 : : {
5715 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5716 [ + + ][ + + ]: 288 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5717 [ + + ][ + + ]: 287 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
5718 : 286 : cvc5->d_solver.addSygusAssume(term->d_term);
5719 [ - + ]: 4 : CVC5_CAPI_TRY_CATCH_END;
5720 : 284 : }
5721 : :
5722 : 58 : const Cvc5Term* cvc5_get_sygus_assumptions(Cvc5* cvc5, size_t* size)
5723 : : {
5724 [ + + ]: 58 : static thread_local std::vector<Cvc5Term> res;
5725 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5726 [ + + ][ + + ]: 58 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5727 [ + + ][ + + ]: 57 : CVC5_CAPI_CHECK_NOT_NULL(size);
[ - - ]
5728 : 56 : res.clear();
5729 : 56 : auto terms = cvc5->d_solver.getSygusAssumptions();
5730 [ + + ]: 280 : for (auto& t : terms)
5731 : : {
5732 : 224 : res.push_back(cvc5->d_tm->export_term(t));
5733 : : }
5734 : 56 : *size = res.size();
5735 [ - + ]: 58 : CVC5_CAPI_TRY_CATCH_END;
5736 [ + - ]: 56 : return *size > 0 ? res.data() : nullptr;
5737 : : }
5738 : :
5739 : 112 : void cvc5_add_sygus_inv_constraint(
5740 : : Cvc5* cvc5, Cvc5Term inv, Cvc5Term pre, Cvc5Term trans, Cvc5Term post)
5741 : : {
5742 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5743 [ + + ][ + + ]: 112 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5744 [ + + ][ + + ]: 111 : CVC5_CAPI_CHECK_TERM(inv);
[ - - ]
5745 [ + + ][ + + ]: 110 : CVC5_CAPI_CHECK_TERM(pre);
[ - - ]
5746 [ + + ][ + + ]: 109 : CVC5_CAPI_CHECK_TERM(trans);
[ - - ]
5747 [ + + ][ + + ]: 108 : CVC5_CAPI_CHECK_TERM(post);
[ - - ]
5748 : 107 : cvc5->d_solver.addSygusInvConstraint(
5749 : 107 : inv->d_term, pre->d_term, trans->d_term, post->d_term);
5750 [ - + ]: 18 : CVC5_CAPI_TRY_CATCH_END;
5751 : 94 : }
5752 : :
5753 : 170 : Cvc5SynthResult cvc5_check_synth(Cvc5* cvc5)
5754 : : {
5755 : 170 : Cvc5SynthResult res = nullptr;
5756 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5757 [ + + ][ + + ]: 170 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5758 : 169 : res = cvc5->export_synth_result(cvc5->d_solver.checkSynth());
5759 [ - + ]: 2 : CVC5_CAPI_TRY_CATCH_END;
5760 : 168 : return res;
5761 : : }
5762 : :
5763 : 26 : Cvc5SynthResult cvc5_check_synth_next(Cvc5* cvc5)
5764 : : {
5765 : 26 : Cvc5SynthResult res = nullptr;
5766 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5767 [ + + ][ + + ]: 26 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5768 : 25 : res = cvc5->export_synth_result(cvc5->d_solver.checkSynthNext());
5769 [ - + ]: 3 : CVC5_CAPI_TRY_CATCH_END;
5770 : 23 : return res;
5771 : : }
5772 : :
5773 : 71 : Cvc5Term cvc5_get_synth_solution(Cvc5* cvc5, Cvc5Term term)
5774 : : {
5775 : 71 : Cvc5Term res = nullptr;
5776 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5777 [ + + ][ + + ]: 71 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5778 [ + + ][ + + ]: 70 : CVC5_CAPI_CHECK_TERM(term);
[ - - ]
5779 : 69 : res = cvc5->d_tm->export_term(cvc5->d_solver.getSynthSolution(term->d_term));
5780 [ - + ]: 5 : CVC5_CAPI_TRY_CATCH_END;
5781 : 66 : return res;
5782 : : }
5783 : :
5784 : 108 : const Cvc5Term* cvc5_get_synth_solutions(Cvc5* cvc5,
5785 : : size_t size,
5786 : : const Cvc5Term terms[])
5787 : : {
5788 [ + + ]: 108 : static thread_local std::vector<Cvc5Term> res;
5789 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5790 [ + + ][ + + ]: 108 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5791 [ + + ][ + + ]: 107 : CVC5_CAPI_CHECK_NOT_NULL(terms);
[ - - ]
5792 : 106 : res.clear();
5793 : 106 : std::vector<cvc5::Term> cterms;
5794 [ + + ]: 239 : for (size_t i = 0; i < size; ++i)
5795 : : {
5796 [ + + ][ + + ]: 134 : CVC5_CAPI_CHECK_TERM_AT_IDX(terms, i);
[ - - ]
5797 : 133 : cterms.push_back(terms[i]->d_term);
5798 : : }
5799 : 105 : auto rterms = cvc5->d_solver.getSynthSolutions(cterms);
5800 [ + + ]: 232 : for (auto& t : rterms)
5801 : : {
5802 : 130 : res.push_back(cvc5->d_tm->export_term(t));
5803 : : }
5804 [ - + ]: 112 : CVC5_CAPI_TRY_CATCH_END;
5805 : 102 : return res.data();
5806 : : }
5807 : :
5808 : 21 : Cvc5Term cvc5_find_synth(Cvc5* cvc5, Cvc5FindSynthTarget target)
5809 : : {
5810 : 21 : Cvc5Term res = nullptr;
5811 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5812 [ + + ][ + + ]: 21 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5813 [ + - ][ + + ]: 20 : CVC5_CAPI_CHECK_FIND_SYNTH_TARGET(target);
[ + + ][ + + ]
[ - - ]
5814 : : cvc5::Term cres = cvc5->d_solver.findSynth(
5815 : 19 : static_cast<cvc5::modes::FindSynthTarget>(target));
5816 [ - + ]: 19 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5817 [ - + ]: 21 : CVC5_CAPI_TRY_CATCH_END;
5818 : 19 : return res;
5819 : : }
5820 : :
5821 : 17 : Cvc5Term cvc5_find_synth_with_grammar(Cvc5* cvc5,
5822 : : Cvc5FindSynthTarget target,
5823 : : Cvc5Grammar grammar)
5824 : : {
5825 : 17 : Cvc5Term res = nullptr;
5826 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5827 [ + + ][ + + ]: 17 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5828 [ + - ][ + + ]: 16 : CVC5_CAPI_CHECK_FIND_SYNTH_TARGET(target);
[ + + ][ + + ]
[ - - ]
5829 [ + + ][ + + ]: 15 : CVC5_CAPI_CHECK_GRAMMAR(grammar);
[ - - ]
5830 : : cvc5::Term cres = cvc5->d_solver.findSynth(
5831 : 14 : static_cast<cvc5::modes::FindSynthTarget>(target), grammar->d_grammar);
5832 [ - + ]: 14 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5833 [ - + ]: 17 : CVC5_CAPI_TRY_CATCH_END;
5834 : 14 : return res;
5835 : : }
5836 : :
5837 : 15 : Cvc5Term cvc5_find_synth_next(Cvc5* cvc5)
5838 : : {
5839 : 15 : Cvc5Term res = nullptr;
5840 : : CVC5_CAPI_TRY_CATCH_BEGIN;
5841 [ + + ][ + + ]: 15 : CVC5_CAPI_CHECK_NOT_NULL(cvc5);
[ - - ]
5842 : 14 : cvc5::Term cres = cvc5->d_solver.findSynthNext();
5843 [ - + ]: 14 : res = cres.isNull() ? nullptr : cvc5->d_tm->export_term(cres);
5844 [ - + ]: 15 : CVC5_CAPI_TRY_CATCH_END;
5845 : 14 : return res;
5846 : : }
|