1 ###############################################################################
2 # Top contributors (to current version):
3 # Yoni Zohar, Ying Sheng
5 # This file is part of the cvc5 project.
7 # Copyright (c) 2009-2021 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 # #############################################################################
18 from pycvc5
import Kind
23 return pycvc5
.Solver()
26 def test_recoverable_exception(solver
):
27 solver
.setOption("produce-models", "true")
28 x
= solver
.mkConst(solver
.getBooleanSort(), "x")
29 solver
.assertFormula(x
.eqTerm(x
).notTerm())
30 with pytest
.raises(RuntimeError):
31 c
= solver
.getValue(x
)
34 def test_supports_floating_point(solver
):
35 solver
.mkRoundingMode(pycvc5
.RoundNearestTiesToEven
)
38 def test_get_boolean_sort(solver
):
39 solver
.getBooleanSort()
42 def test_get_integer_sort(solver
):
43 solver
.getIntegerSort()
46 def test_get_null_sort(solver
):
50 def test_get_real_sort(solver
):
54 def test_get_reg_exp_sort(solver
):
55 solver
.getRegExpSort()
58 def test_get_string_sort(solver
):
59 solver
.getStringSort()
62 def test_get_rounding_mode_sort(solver
):
63 solver
.getRoundingModeSort()
66 def test_mk_array_sort(solver
):
67 boolSort
= solver
.getBooleanSort()
68 intSort
= solver
.getIntegerSort()
69 realSort
= solver
.getRealSort()
70 bvSort
= solver
.mkBitVectorSort(32)
71 solver
.mkArraySort(boolSort
, boolSort
)
72 solver
.mkArraySort(intSort
, intSort
)
73 solver
.mkArraySort(realSort
, realSort
)
74 solver
.mkArraySort(bvSort
, bvSort
)
75 solver
.mkArraySort(boolSort
, intSort
)
76 solver
.mkArraySort(realSort
, bvSort
)
78 fpSort
= solver
.mkFloatingPointSort(3, 5)
79 solver
.mkArraySort(fpSort
, fpSort
)
80 solver
.mkArraySort(bvSort
, fpSort
)
83 with pytest
.raises(RuntimeError):
84 slv
.mkArraySort(boolSort
, boolSort
)
87 def test_mk_bit_vector_sort(solver
):
88 solver
.mkBitVectorSort(32)
89 with pytest
.raises(RuntimeError):
90 solver
.mkBitVectorSort(0)
93 def test_mk_floating_point_sort(solver
):
94 solver
.mkFloatingPointSort(4, 8)
95 with pytest
.raises(RuntimeError):
96 solver
.mkFloatingPointSort(0, 8)
97 with pytest
.raises(RuntimeError):
98 solver
.mkFloatingPointSort(4, 0)
101 def test_mk_datatype_sort(solver
):
102 dtypeSpec
= solver
.mkDatatypeDecl("list")
103 cons
= solver
.mkDatatypeConstructorDecl("cons")
104 cons
.addSelector("head", solver
.getIntegerSort())
105 dtypeSpec
.addConstructor(cons
)
106 nil
= solver
.mkDatatypeConstructorDecl("nil")
107 dtypeSpec
.addConstructor(nil
)
108 solver
.mkDatatypeSort(dtypeSpec
)
110 slv
= pycvc5
.Solver()
111 with pytest
.raises(RuntimeError):
112 slv
.mkDatatypeSort(dtypeSpec
)
114 throwsDtypeSpec
= solver
.mkDatatypeDecl("list")
115 with pytest
.raises(RuntimeError):
116 solver
.mkDatatypeSort(throwsDtypeSpec
)
119 def test_mk_datatype_sorts(solver
):
120 slv
= pycvc5
.Solver()
122 dtypeSpec1
= solver
.mkDatatypeDecl("list1")
123 cons1
= solver
.mkDatatypeConstructorDecl("cons1")
124 cons1
.addSelector("head1", solver
.getIntegerSort())
125 dtypeSpec1
.addConstructor(cons1
)
126 nil1
= solver
.mkDatatypeConstructorDecl("nil1")
127 dtypeSpec1
.addConstructor(nil1
)
129 dtypeSpec2
= solver
.mkDatatypeDecl("list2")
130 cons2
= solver
.mkDatatypeConstructorDecl("cons2")
131 cons2
.addSelector("head2", solver
.getIntegerSort())
132 dtypeSpec2
.addConstructor(cons2
)
133 nil2
= solver
.mkDatatypeConstructorDecl("nil2")
134 dtypeSpec2
.addConstructor(nil2
)
136 decls
= [dtypeSpec1
, dtypeSpec2
]
137 solver
.mkDatatypeSorts(decls
, set([]))
139 with pytest
.raises(RuntimeError):
140 slv
.mkDatatypeSorts(decls
, set([]))
142 throwsDtypeSpec
= solver
.mkDatatypeDecl("list")
143 throwsDecls
= [throwsDtypeSpec
]
144 with pytest
.raises(RuntimeError):
145 solver
.mkDatatypeSorts(throwsDecls
, set([]))
147 # with unresolved sorts
148 unresList
= solver
.mkUnresolvedSort("ulist")
149 unresSorts
= set([unresList
])
150 ulist
= solver
.mkDatatypeDecl("ulist")
151 ucons
= solver
.mkDatatypeConstructorDecl("ucons")
152 ucons
.addSelector("car", unresList
)
153 ucons
.addSelector("cdr", unresList
)
154 ulist
.addConstructor(ucons
)
155 unil
= solver
.mkDatatypeConstructorDecl("unil")
156 ulist
.addConstructor(unil
)
159 solver
.mkDatatypeSorts(udecls
, unresSorts
)
160 with pytest
.raises(RuntimeError):
161 slv
.mkDatatypeSorts(udecls
, unresSorts
)
163 # mutually recursive with unresolved parameterized sorts
164 p0
= solver
.mkParamSort("p0")
165 p1
= solver
.mkParamSort("p1")
166 u0
= solver
.mkUnresolvedSort("dt0", 1)
167 u1
= solver
.mkUnresolvedSort("dt1", 1)
168 dtdecl0
= solver
.mkDatatypeDecl("dt0", p0
)
169 dtdecl1
= solver
.mkDatatypeDecl("dt1", p1
)
170 ctordecl0
= solver
.mkDatatypeConstructorDecl("c0")
171 ctordecl0
.addSelector("s0", u1
.instantiate({p0}
))
172 ctordecl1
= solver
.mkDatatypeConstructorDecl("c1")
173 ctordecl1
.addSelector("s1", u0
.instantiate({p1}
))
174 dtdecl0
.addConstructor(ctordecl0
)
175 dtdecl1
.addConstructor(ctordecl1
)
176 dt_sorts
= solver
.mkDatatypeSorts([dtdecl0
, dtdecl1
], {u0
, u1
})
177 isort1
= dt_sorts
[1].instantiate({solver
.getBooleanSort()})
178 t1
= solver
.mkConst(isort1
, "t")
181 t1
.getSort().getDatatype().getSelector("s1").getSelectorTerm(),
183 assert dt_sorts
[0].instantiate({solver
.getBooleanSort()}) == t0
.getSort()
185 def test_mk_function_sort(solver
):
186 funSort
= solver
.mkFunctionSort(solver
.mkUninterpretedSort("u"),\
187 solver
.getIntegerSort())
189 # function arguments are allowed
190 solver
.mkFunctionSort(funSort
, solver
.getIntegerSort())
192 # non-first-class arguments are not allowed
193 reSort
= solver
.getRegExpSort()
194 with pytest
.raises(RuntimeError):
195 solver
.mkFunctionSort(reSort
, solver
.getIntegerSort())
196 with pytest
.raises(RuntimeError):
197 solver
.mkFunctionSort(solver
.getIntegerSort(), funSort
)
199 solver
.mkFunctionSort([solver
.mkUninterpretedSort("u"),\
200 solver
.getIntegerSort()],\
201 solver
.getIntegerSort())
202 funSort2
= solver
.mkFunctionSort(solver
.mkUninterpretedSort("u"),\
203 solver
.getIntegerSort())
205 # function arguments are allowed
206 solver
.mkFunctionSort([funSort2
, solver
.mkUninterpretedSort("u")],\
207 solver
.getIntegerSort())
209 with pytest
.raises(RuntimeError):
210 solver
.mkFunctionSort([solver
.getIntegerSort(),\
211 solver
.mkUninterpretedSort("u")],\
214 slv
= pycvc5
.Solver()
215 with pytest
.raises(RuntimeError):
216 slv
.mkFunctionSort(solver
.mkUninterpretedSort("u"),\
217 solver
.getIntegerSort())
218 with pytest
.raises(RuntimeError):
219 slv
.mkFunctionSort(slv
.mkUninterpretedSort("u"),\
220 solver
.getIntegerSort())
221 sorts1
= [solver
.getBooleanSort(),\
222 slv
.getIntegerSort(),\
223 solver
.getIntegerSort()]
224 sorts2
= [slv
.getBooleanSort(), slv
.getIntegerSort()]
225 slv
.mkFunctionSort(sorts2
, slv
.getIntegerSort())
226 with pytest
.raises(RuntimeError):
227 slv
.mkFunctionSort(sorts1
, slv
.getIntegerSort())
228 with pytest
.raises(RuntimeError):
229 slv
.mkFunctionSort(sorts2
, solver
.getIntegerSort())
232 def test_mk_param_sort(solver
):
233 solver
.mkParamSort("T")
234 solver
.mkParamSort("")
237 def test_mk_predicate_sort(solver
):
238 solver
.mkPredicateSort([solver
.getIntegerSort()])
239 with pytest
.raises(RuntimeError):
240 solver
.mkPredicateSort([])
242 funSort
= solver
.mkFunctionSort(solver
.mkUninterpretedSort("u"),\
243 solver
.getIntegerSort())
244 # functions as arguments are allowed
245 solver
.mkPredicateSort([solver
.getIntegerSort(), funSort
])
247 slv
= pycvc5
.Solver()
248 with pytest
.raises(RuntimeError):
249 slv
.mkPredicateSort([solver
.getIntegerSort()])
252 def test_mk_record_sort(solver
):
253 fields
= [("b", solver
.getBooleanSort()),\
254 ("bv", solver
.mkBitVectorSort(8)),\
255 ("i", solver
.getIntegerSort())]
257 solver
.mkRecordSort(fields
)
258 solver
.mkRecordSort(empty
)
259 recSort
= solver
.mkRecordSort(fields
)
260 recSort
.getDatatype()
263 def test_mk_set_sort(solver
):
264 solver
.mkSetSort(solver
.getBooleanSort())
265 solver
.mkSetSort(solver
.getIntegerSort())
266 solver
.mkSetSort(solver
.mkBitVectorSort(4))
267 slv
= pycvc5
.Solver()
268 with pytest
.raises(RuntimeError):
269 slv
.mkSetSort(solver
.mkBitVectorSort(4))
272 def test_mk_bag_sort(solver
):
273 solver
.mkBagSort(solver
.getBooleanSort())
274 solver
.mkBagSort(solver
.getIntegerSort())
275 solver
.mkBagSort(solver
.mkBitVectorSort(4))
276 slv
= pycvc5
.Solver()
277 with pytest
.raises(RuntimeError):
278 slv
.mkBagSort(solver
.mkBitVectorSort(4))
281 def test_mk_sequence_sort(solver
):
282 solver
.mkSequenceSort(solver
.getBooleanSort())
283 solver
.mkSequenceSort(\
284 solver
.mkSequenceSort(solver
.getIntegerSort()))
285 slv
= pycvc5
.Solver()
286 with pytest
.raises(RuntimeError):
287 slv
.mkSequenceSort(solver
.getIntegerSort())
290 def test_mk_uninterpreted_sort(solver
):
291 solver
.mkUninterpretedSort("u")
292 solver
.mkUninterpretedSort("")
295 def test_mk_unresolved_sort(solver
):
296 solver
.mkUnresolvedSort("u")
297 solver
.mkUnresolvedSort("u", 1)
298 solver
.mkUnresolvedSort("")
299 solver
.mkUnresolvedSort("", 1)
302 def test_mk_sort_constructor_sort(solver
):
303 solver
.mkSortConstructorSort("s", 2)
304 solver
.mkSortConstructorSort("", 2)
305 with pytest
.raises(RuntimeError):
306 solver
.mkSortConstructorSort("", 0)
309 def test_mk_tuple_sort(solver
):
310 solver
.mkTupleSort([solver
.getIntegerSort()])
311 funSort
= solver
.mkFunctionSort(solver
.mkUninterpretedSort("u"),\
312 solver
.getIntegerSort())
313 with pytest
.raises(RuntimeError):
314 solver
.mkTupleSort([solver
.getIntegerSort(), funSort
])
316 slv
= pycvc5
.Solver()
317 with pytest
.raises(RuntimeError):
318 slv
.mkTupleSort([solver
.getIntegerSort()])
321 def test_mk_bit_vector(solver
):
322 solver
.mkBitVector(8, 2)
323 solver
.mkBitVector(32, 2)
325 solver
.mkBitVector(4, "1010", 2)
326 solver
.mkBitVector(8, "0101", 2)
327 solver
.mkBitVector(8, "-1111111", 2)
328 solver
.mkBitVector(8, "00000101", 2)
329 solver
.mkBitVector(8, "-127", 10)
330 solver
.mkBitVector(8, "255", 10)
331 solver
.mkBitVector(10, "1010", 10)
332 solver
.mkBitVector(11, "1234", 10)
333 solver
.mkBitVector(8, "-7f", 16)
334 solver
.mkBitVector(8, "a0", 16)
335 solver
.mkBitVector(16, "1010", 16)
336 solver
.mkBitVector(16, "a09f", 16)
338 with pytest
.raises(RuntimeError):
339 solver
.mkBitVector(0, 2)
340 with pytest
.raises(RuntimeError):
341 solver
.mkBitVector(0, "-127", 10)
342 with pytest
.raises(RuntimeError):
343 solver
.mkBitVector(0, "a0", 16)
345 with pytest
.raises(RuntimeError):
346 solver
.mkBitVector(2, "", 2)
348 with pytest
.raises(RuntimeError):
349 solver
.mkBitVector(8, "101", 5)
350 with pytest
.raises(RuntimeError):
351 solver
.mkBitVector(8, "127", 11)
352 with pytest
.raises(RuntimeError):
353 solver
.mkBitVector(8, "a0", 21)
355 with pytest
.raises(RuntimeError):
356 solver
.mkBitVector(8, "101010101", 2)
357 with pytest
.raises(RuntimeError):
358 solver
.mkBitVector(8, "-11111111", 2)
359 with pytest
.raises(RuntimeError):
360 solver
.mkBitVector(8, "-256", 10)
361 with pytest
.raises(RuntimeError):
362 solver
.mkBitVector(8, "257", 10)
363 with pytest
.raises(RuntimeError):
364 solver
.mkBitVector(8, "-a0", 16)
365 with pytest
.raises(RuntimeError):
366 solver
.mkBitVector(8, "fffff", 16)
368 with pytest
.raises(RuntimeError):
369 solver
.mkBitVector(8, "10201010", 2)
370 with pytest
.raises(RuntimeError):
371 solver
.mkBitVector(8, "-25x", 10)
372 with pytest
.raises(RuntimeError):
373 solver
.mkBitVector(8, "2x7", 10)
374 with pytest
.raises(RuntimeError):
375 solver
.mkBitVector(8, "fzff", 16)
377 assert solver
.mkBitVector(8, "0101",
378 2) == solver
.mkBitVector(8, "00000101", 2)
379 assert solver
.mkBitVector(4, "1010", 2) == solver
.mkBitVector(4, "10", 10)
380 assert solver
.mkBitVector(4, "1010", 2) == solver
.mkBitVector(4, "a", 16)
381 assert str(solver
.mkBitVector(8, "01010101", 2)) == "#b01010101"
382 assert str(solver
.mkBitVector(8, "F", 16)) == "#b00001111"
383 assert solver
.mkBitVector(8, "-1", 10) ==\
384 solver
.mkBitVector(8, "FF", 16)
387 def test_mk_var(solver
):
388 boolSort
= solver
.getBooleanSort()
389 intSort
= solver
.getIntegerSort()
390 funSort
= solver
.mkFunctionSort(intSort
, boolSort
)
391 solver
.mkVar(boolSort
)
392 solver
.mkVar(funSort
)
393 solver
.mkVar(boolSort
, "b")
394 solver
.mkVar(funSort
, "")
395 with pytest
.raises(RuntimeError):
396 solver
.mkVar(pycvc5
.Sort(solver
))
397 with pytest
.raises(RuntimeError):
398 solver
.mkVar(pycvc5
.Sort(solver
), "a")
399 slv
= pycvc5
.Solver()
400 with pytest
.raises(RuntimeError):
401 slv
.mkVar(boolSort
, "x")
404 def test_mk_boolean(solver
):
405 solver
.mkBoolean(True)
406 solver
.mkBoolean(False)
409 def test_mk_rounding_mode(solver
):
410 solver
.mkRoundingMode(pycvc5
.RoundTowardZero
)
413 def test_mk_floating_point(solver
):
414 t1
= solver
.mkBitVector(8)
415 t2
= solver
.mkBitVector(4)
416 t3
= solver
.mkInteger(2)
417 solver
.mkFloatingPoint(3, 5, t1
)
419 with pytest
.raises(RuntimeError):
420 solver
.mkFloatingPoint(0, 5, pycvc5
.Term(solver
))
421 with pytest
.raises(RuntimeError):
422 solver
.mkFloatingPoint(0, 5, t1
)
423 with pytest
.raises(RuntimeError):
424 solver
.mkFloatingPoint(3, 0, t1
)
425 with pytest
.raises(RuntimeError):
426 solver
.mkFloatingPoint(3, 5, t2
)
427 with pytest
.raises(RuntimeError):
428 solver
.mkFloatingPoint(3, 5, t2
)
430 slv
= pycvc5
.Solver()
431 with pytest
.raises(RuntimeError):
432 slv
.mkFloatingPoint(3, 5, t1
)
435 def test_mk_cardinality_constraint(solver
):
436 su
= solver
.mkUninterpretedSort("u")
437 si
= solver
.getIntegerSort()
438 solver
.mkCardinalityConstraint(su
, 3)
439 with pytest
.raises(RuntimeError):
440 solver
.mkEmptySet(solver
.mkCardinalityConstraint(si
, 3))
441 with pytest
.raises(RuntimeError):
442 solver
.mkEmptySet(solver
.mkCardinalityConstraint(su
, 0))
443 slv
= pycvc5
.Solver()
444 with pytest
.raises(RuntimeError):
445 slv
.mkCardinalityConstraint(su
, 3)
448 def test_mk_empty_set(solver
):
449 slv
= pycvc5
.Solver()
450 s
= solver
.mkSetSort(solver
.getBooleanSort())
451 solver
.mkEmptySet(pycvc5
.Sort(solver
))
453 with pytest
.raises(RuntimeError):
454 solver
.mkEmptySet(solver
.getBooleanSort())
455 with pytest
.raises(RuntimeError):
459 def test_mk_empty_bag(solver
):
460 slv
= pycvc5
.Solver()
461 s
= solver
.mkBagSort(solver
.getBooleanSort())
462 solver
.mkEmptyBag(pycvc5
.Sort(solver
))
464 with pytest
.raises(RuntimeError):
465 solver
.mkEmptyBag(solver
.getBooleanSort())
466 with pytest
.raises(RuntimeError):
470 def test_mk_empty_sequence(solver
):
471 slv
= pycvc5
.Solver()
472 s
= solver
.mkSequenceSort(solver
.getBooleanSort())
473 solver
.mkEmptySequence(s
)
474 solver
.mkEmptySequence(solver
.getBooleanSort())
475 with pytest
.raises(RuntimeError):
476 slv
.mkEmptySequence(s
)
479 def test_mk_false(solver
):
484 def test_mk_floating_point_nan(solver
):
485 solver
.mkFloatingPointNaN(3, 5)
488 def test_mk_floating_point_neg_zero(solver
):
489 solver
.mkFloatingPointNegZero(3, 5)
492 def test_mk_floating_point_neg_inf(solver
):
493 solver
.mkFloatingPointNegInf(3, 5)
496 def test_mk_floating_point_pos_inf(solver
):
497 solver
.mkFloatingPointPosInf(3, 5)
500 def test_mk_floating_point_pos_zero(solver
):
501 solver
.mkFloatingPointPosZero(3, 5)
504 def test_mk_op(solver
):
505 with pytest
.raises(ValueError):
506 solver
.mkOp(Kind
.BVExtract
, Kind
.Equal
)
508 solver
.mkOp(Kind
.Divisible
, "2147483648")
509 with pytest
.raises(RuntimeError):
510 solver
.mkOp(Kind
.BVExtract
, "asdf")
512 solver
.mkOp(Kind
.Divisible
, 1)
513 solver
.mkOp(Kind
.BVRotateLeft
, 1)
514 solver
.mkOp(Kind
.BVRotateRight
, 1)
515 with pytest
.raises(RuntimeError):
516 solver
.mkOp(Kind
.BVExtract
, 1)
518 solver
.mkOp(Kind
.BVExtract
, 1, 1)
519 with pytest
.raises(RuntimeError):
520 solver
.mkOp(Kind
.Divisible
, 1, 2)
523 solver
.mkOp(Kind
.TupleProject
, args
)
526 def test_mk_pi(solver
):
530 def test_mk_integer(solver
):
531 solver
.mkInteger("123")
532 with pytest
.raises(RuntimeError):
533 solver
.mkInteger("1.23")
534 with pytest
.raises(RuntimeError):
535 solver
.mkInteger("1/23")
536 with pytest
.raises(RuntimeError):
537 solver
.mkInteger("12/3")
538 with pytest
.raises(RuntimeError):
539 solver
.mkInteger(".2")
540 with pytest
.raises(RuntimeError):
541 solver
.mkInteger("2.")
542 with pytest
.raises(RuntimeError):
544 with pytest
.raises(RuntimeError):
545 solver
.mkInteger("asdf")
546 with pytest
.raises(RuntimeError):
547 solver
.mkInteger("1.2/3")
548 with pytest
.raises(RuntimeError):
549 solver
.mkInteger(".")
550 with pytest
.raises(RuntimeError):
551 solver
.mkInteger("/")
552 with pytest
.raises(RuntimeError):
553 solver
.mkInteger("2/")
554 with pytest
.raises(RuntimeError):
555 solver
.mkInteger("/2")
558 with pytest
.raises(RuntimeError):
559 solver
.mkInteger("1.23")
560 with pytest
.raises(RuntimeError):
561 solver
.mkInteger("1/23")
562 with pytest
.raises(RuntimeError):
563 solver
.mkInteger("12/3")
564 with pytest
.raises(RuntimeError):
565 solver
.mkInteger(".2")
566 with pytest
.raises(RuntimeError):
567 solver
.mkInteger("2.")
568 with pytest
.raises(RuntimeError):
570 with pytest
.raises(RuntimeError):
571 solver
.mkInteger("asdf")
572 with pytest
.raises(RuntimeError):
573 solver
.mkInteger("1.2/3")
574 with pytest
.raises(RuntimeError):
575 solver
.mkInteger(".")
576 with pytest
.raises(RuntimeError):
577 solver
.mkInteger("/")
578 with pytest
.raises(RuntimeError):
579 solver
.mkInteger("2/")
580 with pytest
.raises(RuntimeError):
581 solver
.mkInteger("/2")
587 solver
.mkInteger(val1
)
588 solver
.mkInteger(val2
)
589 solver
.mkInteger(val3
)
590 solver
.mkInteger(val4
)
591 solver
.mkInteger(val4
)
594 def test_mk_real(solver
):
596 solver
.mkReal("1.23")
597 solver
.mkReal("1/23")
598 solver
.mkReal("12/3")
601 with pytest
.raises(RuntimeError):
603 with pytest
.raises(RuntimeError):
604 solver
.mkReal("asdf")
605 with pytest
.raises(RuntimeError):
606 solver
.mkReal("1.2/3")
607 with pytest
.raises(RuntimeError):
609 with pytest
.raises(RuntimeError):
611 with pytest
.raises(RuntimeError):
613 with pytest
.raises(RuntimeError):
617 solver
.mkReal("1.23")
618 solver
.mkReal("1/23")
619 solver
.mkReal("12/3")
622 with pytest
.raises(RuntimeError):
624 with pytest
.raises(RuntimeError):
625 solver
.mkReal("asdf")
626 with pytest
.raises(RuntimeError):
627 solver
.mkReal("1.2/3")
628 with pytest
.raises(RuntimeError):
630 with pytest
.raises(RuntimeError):
632 with pytest
.raises(RuntimeError):
634 with pytest
.raises(RuntimeError):
646 solver
.mkReal(val1
, val1
)
647 solver
.mkReal(val2
, val2
)
648 solver
.mkReal(val3
, val3
)
649 solver
.mkReal(val4
, val4
)
652 def test_mk_regexp_none(solver
):
653 strSort
= solver
.getStringSort()
654 s
= solver
.mkConst(strSort
, "s")
655 solver
.mkTerm(Kind
.StringInRegexp
, s
, solver
.mkRegexpNone())
658 def test_mk_regexp_all(solver
):
659 strSort
= solver
.getStringSort()
660 s
= solver
.mkConst(strSort
, "s")
661 solver
.mkTerm(Kind
.StringInRegexp
, s
, solver
.mkRegexpAll())
664 def test_mk_regexp_allchar(solver
):
665 strSort
= solver
.getStringSort()
666 s
= solver
.mkConst(strSort
, "s")
667 solver
.mkTerm(Kind
.StringInRegexp
, s
, solver
.mkRegexpAllchar())
670 def test_mk_sep_emp(solver
):
674 def test_mk_sep_nil(solver
):
675 solver
.mkSepNil(solver
.getBooleanSort())
676 with pytest
.raises(RuntimeError):
677 solver
.mkSepNil(pycvc5
.Sort(solver
))
678 slv
= pycvc5
.Solver()
679 with pytest
.raises(RuntimeError):
680 slv
.mkSepNil(solver
.getIntegerSort())
683 def test_mk_string(solver
):
685 solver
.mkString("asdfasdf")
686 str(solver
.mkString("asdf\\nasdf")) == "\"asdf\\u{5c}nasdf\""
687 str(solver
.mkString("asdf\\u{005c}nasdf", True)) ==\
688 "\"asdf\\u{5c}nasdf\""
691 def test_mk_term(solver
):
692 bv32
= solver
.mkBitVectorSort(32)
693 a
= solver
.mkConst(bv32
, "a")
694 b
= solver
.mkConst(bv32
, "b")
696 v2
= [a
, pycvc5
.Term(solver
)]
697 v3
= [a
, solver
.mkTrue()]
698 v4
= [solver
.mkInteger(1), solver
.mkInteger(2)]
699 v5
= [solver
.mkInteger(1), pycvc5
.Term(solver
)]
701 slv
= pycvc5
.Solver()
703 # mkTerm(Kind kind) const
705 solver
.mkTerm(Kind
.Pi
)
706 solver
.mkTerm(Kind
.Pi
, v6
)
707 solver
.mkTerm(solver
.mkOp(Kind
.Pi
))
708 solver
.mkTerm(solver
.mkOp(Kind
.Pi
), v6
)
709 solver
.mkTerm(Kind
.RegexpNone
)
710 solver
.mkTerm(Kind
.RegexpNone
, v6
)
711 solver
.mkTerm(solver
.mkOp(Kind
.RegexpNone
))
712 solver
.mkTerm(solver
.mkOp(Kind
.RegexpNone
), v6
)
713 solver
.mkTerm(Kind
.RegexpAllchar
)
714 solver
.mkTerm(Kind
.RegexpAllchar
, v6
)
715 solver
.mkTerm(solver
.mkOp(Kind
.RegexpAllchar
))
716 solver
.mkTerm(solver
.mkOp(Kind
.RegexpAllchar
), v6
)
717 solver
.mkTerm(Kind
.SepEmp
)
718 solver
.mkTerm(Kind
.SepEmp
, v6
)
719 solver
.mkTerm(solver
.mkOp(Kind
.SepEmp
))
720 solver
.mkTerm(solver
.mkOp(Kind
.SepEmp
), v6
)
721 with pytest
.raises(RuntimeError):
722 solver
.mkTerm(Kind
.ConstBV
)
724 # mkTerm(Kind kind, Term child) const
725 solver
.mkTerm(Kind
.Not
, solver
.mkTrue())
726 with pytest
.raises(RuntimeError):
727 solver
.mkTerm(Kind
.Not
, pycvc5
.Term(solver
))
728 with pytest
.raises(RuntimeError):
729 solver
.mkTerm(Kind
.Not
, a
)
730 with pytest
.raises(RuntimeError):
731 slv
.mkTerm(Kind
.Not
, solver
.mkTrue())
733 # mkTerm(Kind kind, Term child1, Term child2) const
734 solver
.mkTerm(Kind
.Equal
, a
, b
)
735 with pytest
.raises(RuntimeError):
736 solver
.mkTerm(Kind
.Equal
, pycvc5
.Term(solver
), b
)
737 with pytest
.raises(RuntimeError):
738 solver
.mkTerm(Kind
.Equal
, a
, pycvc5
.Term(solver
))
739 with pytest
.raises(RuntimeError):
740 solver
.mkTerm(Kind
.Equal
, a
, solver
.mkTrue())
741 with pytest
.raises(RuntimeError):
742 slv
.mkTerm(Kind
.Equal
, a
, b
)
744 # mkTerm(Kind kind, Term child1, Term child2, Term child3) const
745 solver
.mkTerm(Kind
.Ite
, solver
.mkTrue(), solver
.mkTrue(), solver
.mkTrue())
746 with pytest
.raises(RuntimeError):
747 solver
.mkTerm(Kind
.Ite
, pycvc5
.Term(solver
), solver
.mkTrue(),
749 with pytest
.raises(RuntimeError):
750 solver
.mkTerm(Kind
.Ite
, solver
.mkTrue(), pycvc5
.Term(solver
),
752 with pytest
.raises(RuntimeError):
753 solver
.mkTerm(Kind
.Ite
, solver
.mkTrue(), solver
.mkTrue(),
755 with pytest
.raises(RuntimeError):
756 solver
.mkTerm(Kind
.Ite
, solver
.mkTrue(), solver
.mkTrue(), b
)
757 with pytest
.raises(RuntimeError):
758 slv
.mkTerm(Kind
.Ite
, solver
.mkTrue(), solver
.mkTrue(),
761 solver
.mkTerm(Kind
.Equal
, v1
)
762 with pytest
.raises(RuntimeError):
763 solver
.mkTerm(Kind
.Equal
, v2
)
764 with pytest
.raises(RuntimeError):
765 solver
.mkTerm(Kind
.Equal
, v3
)
766 with pytest
.raises(RuntimeError):
767 solver
.mkTerm(Kind
.Distinct
, v6
)
769 # Test cases that are nary via the API but have arity = 2 internally
770 s_bool
= solver
.getBooleanSort()
771 t_bool
= solver
.mkConst(s_bool
, "t_bool")
772 solver
.mkTerm(Kind
.Implies
, [t_bool
, t_bool
, t_bool
])
773 solver
.mkTerm(Kind
.Xor
, [t_bool
, t_bool
, t_bool
])
774 solver
.mkTerm(solver
.mkOp(Kind
.Xor
), [t_bool
, t_bool
, t_bool
])
775 t_int
= solver
.mkConst(solver
.getIntegerSort(), "t_int")
776 solver
.mkTerm(Kind
.Division
, [t_int
, t_int
, t_int
])
777 solver
.mkTerm(solver
.mkOp(Kind
.Division
), [t_int
, t_int
, t_int
])
778 solver
.mkTerm(Kind
.IntsDivision
, [t_int
, t_int
, t_int
])
779 solver
.mkTerm(solver
.mkOp(Kind
.IntsDivision
), [t_int
, t_int
, t_int
])
780 solver
.mkTerm(Kind
.Minus
, [t_int
, t_int
, t_int
])
781 solver
.mkTerm(solver
.mkOp(Kind
.Minus
), [t_int
, t_int
, t_int
])
782 solver
.mkTerm(Kind
.Equal
, [t_int
, t_int
, t_int
])
783 solver
.mkTerm(solver
.mkOp(Kind
.Equal
), [t_int
, t_int
, t_int
])
784 solver
.mkTerm(Kind
.Lt
, [t_int
, t_int
, t_int
])
785 solver
.mkTerm(solver
.mkOp(Kind
.Lt
), [t_int
, t_int
, t_int
])
786 solver
.mkTerm(Kind
.Gt
, [t_int
, t_int
, t_int
])
787 solver
.mkTerm(solver
.mkOp(Kind
.Gt
), [t_int
, t_int
, t_int
])
788 solver
.mkTerm(Kind
.Leq
, [t_int
, t_int
, t_int
])
789 solver
.mkTerm(solver
.mkOp(Kind
.Leq
), [t_int
, t_int
, t_int
])
790 solver
.mkTerm(Kind
.Geq
, [t_int
, t_int
, t_int
])
791 solver
.mkTerm(solver
.mkOp(Kind
.Geq
), [t_int
, t_int
, t_int
])
792 t_reg
= solver
.mkConst(solver
.getRegExpSort(), "t_reg")
793 solver
.mkTerm(Kind
.RegexpDiff
, [t_reg
, t_reg
, t_reg
])
794 solver
.mkTerm(solver
.mkOp(Kind
.RegexpDiff
), [t_reg
, t_reg
, t_reg
])
795 t_fun
= solver
.mkConst(solver
.mkFunctionSort(
796 [s_bool
, s_bool
, s_bool
], s_bool
))
797 solver
.mkTerm(Kind
.HoApply
, [t_fun
, t_bool
, t_bool
, t_bool
])
798 solver
.mkTerm(solver
.mkOp(Kind
.HoApply
), [t_fun
, t_bool
, t_bool
, t_bool
])
800 def test_mk_term_from_op(solver
):
801 bv32
= solver
.mkBitVectorSort(32)
802 a
= solver
.mkConst(bv32
, "a")
803 b
= solver
.mkConst(bv32
, "b")
804 v1
= [solver
.mkInteger(1), solver
.mkInteger(2)]
805 v2
= [solver
.mkInteger(1), pycvc5
.Term(solver
)]
807 v4
= [solver
.mkInteger(5)]
808 slv
= pycvc5
.Solver()
810 # simple operator terms
811 opterm1
= solver
.mkOp(Kind
.BVExtract
, 2, 1)
812 opterm2
= solver
.mkOp(Kind
.Divisible
, 1)
815 sort
= solver
.mkParamSort("T")
816 listDecl
= solver
.mkDatatypeDecl("paramlist", sort
)
817 cons
= solver
.mkDatatypeConstructorDecl("cons")
818 nil
= solver
.mkDatatypeConstructorDecl("nil")
819 cons
.addSelector("head", sort
)
820 cons
.addSelectorSelf("tail")
821 listDecl
.addConstructor(cons
)
822 listDecl
.addConstructor(nil
)
823 listSort
= solver
.mkDatatypeSort(listDecl
)
825 listSort
.instantiate([solver
.getIntegerSort()])
826 c
= solver
.mkConst(intListSort
, "c")
827 lis
= listSort
.getDatatype()
829 # list datatype constructor and selector operator terms
830 consTerm1
= lis
.getConstructorTerm("cons")
831 consTerm2
= lis
.getConstructor("cons").getConstructorTerm()
832 nilTerm1
= lis
.getConstructorTerm("nil")
833 nilTerm2
= lis
.getConstructor("nil").getConstructorTerm()
834 headTerm1
= lis
["cons"].getSelectorTerm("head")
835 headTerm2
= lis
["cons"].getSelector("head").getSelectorTerm()
836 tailTerm1
= lis
["cons"].getSelectorTerm("tail")
837 tailTerm2
= lis
["cons"]["tail"].getSelectorTerm()
839 # mkTerm(Op op, Term term) const
840 solver
.mkTerm(Kind
.ApplyConstructor
, nilTerm1
)
841 solver
.mkTerm(Kind
.ApplyConstructor
, nilTerm2
)
842 with pytest
.raises(RuntimeError):
843 solver
.mkTerm(Kind
.ApplySelector
, nilTerm1
)
844 with pytest
.raises(RuntimeError):
845 solver
.mkTerm(Kind
.ApplySelector
, consTerm1
)
846 with pytest
.raises(RuntimeError):
847 solver
.mkTerm(Kind
.ApplyConstructor
, consTerm2
)
848 with pytest
.raises(RuntimeError):
849 solver
.mkTerm(opterm1
)
850 with pytest
.raises(RuntimeError):
851 solver
.mkTerm(Kind
.ApplySelector
, headTerm1
)
852 with pytest
.raises(RuntimeError):
853 solver
.mkTerm(opterm1
)
854 with pytest
.raises(RuntimeError):
855 slv
.mkTerm(Kind
.ApplyConstructor
, nilTerm1
)
857 # mkTerm(Op op, Term child) const
858 solver
.mkTerm(opterm1
, a
)
859 solver
.mkTerm(opterm2
, solver
.mkInteger(1))
860 solver
.mkTerm(Kind
.ApplySelector
, headTerm1
, c
)
861 solver
.mkTerm(Kind
.ApplySelector
, tailTerm2
, c
)
862 with pytest
.raises(RuntimeError):
863 solver
.mkTerm(opterm2
, a
)
864 with pytest
.raises(RuntimeError):
865 solver
.mkTerm(opterm1
, pycvc5
.Term(solver
))
866 with pytest
.raises(RuntimeError):
867 solver
.mkTerm(Kind
.ApplyConstructor
, consTerm1
, solver
.mkInteger(0))
868 with pytest
.raises(RuntimeError):
869 slv
.mkTerm(opterm1
, a
)
871 # mkTerm(Op op, Term child1, Term child2) const
872 solver
.mkTerm(Kind
.ApplyConstructor
, consTerm1
, solver
.mkInteger(0),
873 solver
.mkTerm(Kind
.ApplyConstructor
, nilTerm1
))
874 with pytest
.raises(RuntimeError):
875 solver
.mkTerm(opterm2
, solver
.mkInteger(1), solver
.mkInteger(2))
876 with pytest
.raises(RuntimeError):
877 solver
.mkTerm(opterm1
, a
, b
)
878 with pytest
.raises(RuntimeError):
879 solver
.mkTerm(opterm2
, solver
.mkInteger(1), pycvc5
.Term(solver
))
880 with pytest
.raises(RuntimeError):
881 solver
.mkTerm(opterm2
, pycvc5
.Term(solver
), solver
.mkInteger(1))
882 with pytest
.raises(RuntimeError):
883 slv
.mkTerm(Kind
.ApplyConstructor
,\
885 solver
.mkInteger(0),\
886 solver
.mkTerm(Kind
.ApplyConstructor
, nilTerm1
))
888 # mkTerm(Op op, Term child1, Term child2, Term child3) const
889 with pytest
.raises(RuntimeError):
890 solver
.mkTerm(opterm1
, a
, b
, a
)
891 with pytest
.raises(RuntimeError):
892 solver
.mkTerm(opterm2
, solver
.mkInteger(1), solver
.mkInteger(1),
895 solver
.mkTerm(opterm2
, v4
)
896 with pytest
.raises(RuntimeError):
897 solver
.mkTerm(opterm2
, v1
)
898 with pytest
.raises(RuntimeError):
899 solver
.mkTerm(opterm2
, v2
)
900 with pytest
.raises(RuntimeError):
901 solver
.mkTerm(opterm2
, v3
)
902 with pytest
.raises(RuntimeError):
903 slv
.mkTerm(opterm2
, v4
)
906 def test_mk_true(solver
):
911 def test_mk_tuple(solver
):
912 solver
.mkTuple([solver
.mkBitVectorSort(3)],
913 [solver
.mkBitVector(3, "101", 2)])
914 solver
.mkTuple([solver
.getRealSort()], [solver
.mkInteger("5")])
916 with pytest
.raises(RuntimeError):
917 solver
.mkTuple([], [solver
.mkBitVector(3, "101", 2)])
918 with pytest
.raises(RuntimeError):
919 solver
.mkTuple([solver
.mkBitVectorSort(4)],
920 [solver
.mkBitVector(3, "101", 2)])
921 with pytest
.raises(RuntimeError):
922 solver
.mkTuple([solver
.getIntegerSort()], [solver
.mkReal("5.3")])
923 slv
= pycvc5
.Solver()
924 with pytest
.raises(RuntimeError):
925 slv
.mkTuple([solver
.mkBitVectorSort(3)],
926 [slv
.mkBitVector(3, "101", 2)])
927 with pytest
.raises(RuntimeError):
928 slv
.mkTuple([slv
.mkBitVectorSort(3)],
929 [solver
.mkBitVector(3, "101", 2)])
932 def test_mk_universe_set(solver
):
933 solver
.mkUniverseSet(solver
.getBooleanSort())
934 with pytest
.raises(RuntimeError):
935 solver
.mkUniverseSet(pycvc5
.Sort(solver
))
936 slv
= pycvc5
.Solver()
937 with pytest
.raises(RuntimeError):
938 slv
.mkUniverseSet(solver
.getBooleanSort())
941 def test_mk_const(solver
):
942 boolSort
= solver
.getBooleanSort()
943 intSort
= solver
.getIntegerSort()
944 funSort
= solver
.mkFunctionSort(intSort
, boolSort
)
945 solver
.mkConst(boolSort
)
946 solver
.mkConst(funSort
)
947 solver
.mkConst(boolSort
, "b")
948 solver
.mkConst(intSort
, "i")
949 solver
.mkConst(funSort
, "f")
950 solver
.mkConst(funSort
, "")
951 with pytest
.raises(RuntimeError):
952 solver
.mkConst(pycvc5
.Sort(solver
))
953 with pytest
.raises(RuntimeError):
954 solver
.mkConst(pycvc5
.Sort(solver
), "a")
956 slv
= pycvc5
.Solver()
957 with pytest
.raises(RuntimeError):
958 slv
.mkConst(boolSort
)
961 def test_mk_const_array(solver
):
962 intSort
= solver
.getIntegerSort()
963 arrSort
= solver
.mkArraySort(intSort
, intSort
)
964 zero
= solver
.mkInteger(0)
965 constArr
= solver
.mkConstArray(arrSort
, zero
)
967 solver
.mkConstArray(arrSort
, zero
)
968 with pytest
.raises(RuntimeError):
969 solver
.mkConstArray(pycvc5
.Sort(solver
), zero
)
970 with pytest
.raises(RuntimeError):
971 solver
.mkConstArray(arrSort
, pycvc5
.Term(solver
))
972 with pytest
.raises(RuntimeError):
973 solver
.mkConstArray(arrSort
, solver
.mkBitVector(1, 1))
974 with pytest
.raises(RuntimeError):
975 solver
.mkConstArray(intSort
, zero
)
976 slv
= pycvc5
.Solver()
977 zero2
= slv
.mkInteger(0)
978 arrSort2
= slv
.mkArraySort(slv
.getIntegerSort(), slv
.getIntegerSort())
979 with pytest
.raises(RuntimeError):
980 slv
.mkConstArray(arrSort2
, zero
)
981 with pytest
.raises(RuntimeError):
982 slv
.mkConstArray(arrSort
, zero2
)
985 def test_declare_fun(solver
):
986 bvSort
= solver
.mkBitVectorSort(32)
987 funSort
= solver
.mkFunctionSort(solver
.mkUninterpretedSort("u"),\
988 solver
.getIntegerSort())
989 solver
.declareFun("f1", [], bvSort
)
990 solver
.declareFun("f3", [bvSort
, solver
.getIntegerSort()], bvSort
)
991 with pytest
.raises(RuntimeError):
992 solver
.declareFun("f2", [], funSort
)
993 # functions as arguments is allowed
994 solver
.declareFun("f4", [bvSort
, funSort
], bvSort
)
995 with pytest
.raises(RuntimeError):
996 solver
.declareFun("f5", [bvSort
, bvSort
], funSort
)
997 slv
= pycvc5
.Solver()
998 with pytest
.raises(RuntimeError):
999 slv
.declareFun("f1", [], bvSort
)
1002 def test_declare_sort(solver
):
1003 solver
.declareSort("s", 0)
1004 solver
.declareSort("s", 2)
1005 solver
.declareSort("", 2)
1008 def test_define_fun(solver
):
1009 bvSort
= solver
.mkBitVectorSort(32)
1010 funSort
= solver
.mkFunctionSort(solver
.mkUninterpretedSort("u"),
1011 solver
.getIntegerSort())
1012 b1
= solver
.mkVar(bvSort
, "b1")
1013 b2
= solver
.mkVar(solver
.getIntegerSort(), "b2")
1014 b3
= solver
.mkVar(funSort
, "b3")
1015 v1
= solver
.mkConst(bvSort
, "v1")
1016 v2
= solver
.mkConst(funSort
, "v2")
1017 solver
.defineFun("f", [], bvSort
, v1
)
1018 solver
.defineFun("ff", [b1
, b2
], bvSort
, v1
)
1019 with pytest
.raises(RuntimeError):
1020 solver
.defineFun("ff", [v1
, b2
], bvSort
, v1
)
1021 with pytest
.raises(RuntimeError):
1022 solver
.defineFun("fff", [b1
], bvSort
, v2
)
1023 with pytest
.raises(RuntimeError):
1024 solver
.defineFun("ffff", [b1
], funSort
, v2
)
1025 # b3 has function sort, which is allowed as an argument
1026 solver
.defineFun("fffff", [b1
, b3
], bvSort
, v1
)
1028 slv
= pycvc5
.Solver()
1029 bvSort2
= slv
.mkBitVectorSort(32)
1030 v12
= slv
.mkConst(bvSort2
, "v1")
1031 b12
= slv
.mkVar(bvSort2
, "b1")
1032 b22
= slv
.mkVar(slv
.getIntegerSort(), "b2")
1033 with pytest
.raises(RuntimeError):
1034 slv
.defineFun("f", [], bvSort
, v12
)
1035 with pytest
.raises(RuntimeError):
1036 slv
.defineFun("f", [], bvSort2
, v1
)
1037 with pytest
.raises(RuntimeError):
1038 slv
.defineFun("ff", [b1
, b22
], bvSort2
, v12
)
1039 with pytest
.raises(RuntimeError):
1040 slv
.defineFun("ff", [b12
, b2
], bvSort2
, v12
)
1041 with pytest
.raises(RuntimeError):
1042 slv
.defineFun("ff", [b12
, b22
], bvSort
, v12
)
1043 with pytest
.raises(RuntimeError):
1044 slv
.defineFun("ff", [b12
, b22
], bvSort2
, v1
)
1047 def test_define_fun_rec(solver
):
1048 bvSort
= solver
.mkBitVectorSort(32)
1049 funSort1
= solver
.mkFunctionSort([bvSort
, bvSort
], bvSort
)
1050 funSort2
= solver
.mkFunctionSort(solver
.mkUninterpretedSort("u"),\
1051 solver
.getIntegerSort())
1052 b1
= solver
.mkVar(bvSort
, "b1")
1053 b11
= solver
.mkVar(bvSort
, "b1")
1054 b2
= solver
.mkVar(solver
.getIntegerSort(), "b2")
1055 b3
= solver
.mkVar(funSort2
, "b3")
1056 v1
= solver
.mkConst(bvSort
, "v1")
1057 v2
= solver
.mkConst(solver
.getIntegerSort(), "v2")
1058 v3
= solver
.mkConst(funSort2
, "v3")
1059 f1
= solver
.mkConst(funSort1
, "f1")
1060 f2
= solver
.mkConst(funSort2
, "f2")
1061 f3
= solver
.mkConst(bvSort
, "f3")
1062 solver
.defineFunRec("f", [], bvSort
, v1
)
1063 solver
.defineFunRec("ff", [b1
, b2
], bvSort
, v1
)
1064 solver
.defineFunRec(f1
, [b1
, b11
], v1
)
1065 with pytest
.raises(RuntimeError):
1066 solver
.defineFunRec("fff", [b1
], bvSort
, v3
)
1067 with pytest
.raises(RuntimeError):
1068 solver
.defineFunRec("ff", [b1
, v2
], bvSort
, v1
)
1069 with pytest
.raises(RuntimeError):
1070 solver
.defineFunRec("ffff", [b1
], funSort2
, v3
)
1071 # b3 has function sort, which is allowed as an argument
1072 solver
.defineFunRec("fffff", [b1
, b3
], bvSort
, v1
)
1073 with pytest
.raises(RuntimeError):
1074 solver
.defineFunRec(f1
, [b1
], v1
)
1075 with pytest
.raises(RuntimeError):
1076 solver
.defineFunRec(f1
, [b1
, b11
], v2
)
1077 with pytest
.raises(RuntimeError):
1078 solver
.defineFunRec(f1
, [b1
, b11
], v3
)
1079 with pytest
.raises(RuntimeError):
1080 solver
.defineFunRec(f2
, [b1
], v2
)
1081 with pytest
.raises(RuntimeError):
1082 solver
.defineFunRec(f3
, [b1
], v1
)
1084 slv
= pycvc5
.Solver()
1085 bvSort2
= slv
.mkBitVectorSort(32)
1086 v12
= slv
.mkConst(bvSort2
, "v1")
1087 b12
= slv
.mkVar(bvSort2
, "b1")
1088 b22
= slv
.mkVar(slv
.getIntegerSort(), "b2")
1089 slv
.defineFunRec("f", [], bvSort2
, v12
)
1090 slv
.defineFunRec("ff", [b12
, b22
], bvSort2
, v12
)
1091 with pytest
.raises(RuntimeError):
1092 slv
.defineFunRec("f", [], bvSort
, v12
)
1093 with pytest
.raises(RuntimeError):
1094 slv
.defineFunRec("f", [], bvSort2
, v1
)
1095 with pytest
.raises(RuntimeError):
1096 slv
.defineFunRec("ff", [b1
, b22
], bvSort2
, v12
)
1097 with pytest
.raises(RuntimeError):
1098 slv
.defineFunRec("ff", [b12
, b2
], bvSort2
, v12
)
1099 with pytest
.raises(RuntimeError):
1100 slv
.defineFunRec("ff", [b12
, b22
], bvSort
, v12
)
1101 with pytest
.raises(RuntimeError):
1102 slv
.defineFunRec("ff", [b12
, b22
], bvSort2
, v1
)
1105 def test_define_fun_rec_wrong_logic(solver
):
1106 solver
.setLogic("QF_BV")
1107 bvSort
= solver
.mkBitVectorSort(32)
1108 funSort
= solver
.mkFunctionSort([bvSort
, bvSort
], bvSort
)
1109 b
= solver
.mkVar(bvSort
, "b")
1110 v
= solver
.mkConst(bvSort
, "v")
1111 f
= solver
.mkConst(funSort
, "f")
1112 with pytest
.raises(RuntimeError):
1113 solver
.defineFunRec("f", [], bvSort
, v
)
1114 with pytest
.raises(RuntimeError):
1115 solver
.defineFunRec(f
, [b
, b
], v
)
1118 def test_uf_iteration(solver
):
1119 intSort
= solver
.getIntegerSort()
1120 funSort
= solver
.mkFunctionSort([intSort
, intSort
], intSort
)
1121 x
= solver
.mkConst(intSort
, "x")
1122 y
= solver
.mkConst(intSort
, "y")
1123 f
= solver
.mkConst(funSort
, "f")
1124 fxy
= solver
.mkTerm(Kind
.ApplyUf
, f
, x
, y
)
1126 # Expecting the uninterpreted function to be one of the children
1127 expected_children
= [f
, x
, y
]
1131 assert c
== expected_children
[idx
]
1135 def test_get_info(solver
):
1136 solver
.getInfo("name")
1137 with pytest
.raises(RuntimeError):
1138 solver
.getInfo("asdf")
1141 def test_get_op(solver
):
1142 bv32
= solver
.mkBitVectorSort(32)
1143 a
= solver
.mkConst(bv32
, "a")
1144 ext
= solver
.mkOp(Kind
.BVExtract
, 2, 1)
1145 exta
= solver
.mkTerm(ext
, a
)
1147 assert not a
.hasOp()
1148 with pytest
.raises(RuntimeError):
1151 assert exta
.getOp() == ext
1153 # Test Datatypes -- more complicated
1154 consListSpec
= solver
.mkDatatypeDecl("list")
1155 cons
= solver
.mkDatatypeConstructorDecl("cons")
1156 cons
.addSelector("head", solver
.getIntegerSort())
1157 cons
.addSelectorSelf("tail")
1158 consListSpec
.addConstructor(cons
)
1159 nil
= solver
.mkDatatypeConstructorDecl("nil")
1160 consListSpec
.addConstructor(nil
)
1161 consListSort
= solver
.mkDatatypeSort(consListSpec
)
1162 consList
= consListSort
.getDatatype()
1164 consTerm
= consList
.getConstructorTerm("cons")
1165 nilTerm
= consList
.getConstructorTerm("nil")
1166 headTerm
= consList
["cons"].getSelectorTerm("head")
1168 listnil
= solver
.mkTerm(Kind
.ApplyConstructor
, nilTerm
)
1169 listcons1
= solver
.mkTerm(Kind
.ApplyConstructor
, consTerm
,
1170 solver
.mkInteger(1), listnil
)
1171 listhead
= solver
.mkTerm(Kind
.ApplySelector
, headTerm
, listcons1
)
1173 assert listnil
.hasOp()
1174 assert listcons1
.hasOp()
1175 assert listhead
.hasOp()
1178 def test_get_option(solver
):
1179 solver
.getOption("incremental")
1180 with pytest
.raises(RuntimeError):
1181 solver
.getOption("asdf")
1184 def test_get_unsat_assumptions1(solver
):
1185 solver
.setOption("incremental", "false")
1186 solver
.checkSatAssuming(solver
.mkFalse())
1187 with pytest
.raises(RuntimeError):
1188 solver
.getUnsatAssumptions()
1191 def test_get_unsat_assumptions2(solver
):
1192 solver
.setOption("incremental", "true")
1193 solver
.setOption("produce-unsat-assumptions", "false")
1194 solver
.checkSatAssuming(solver
.mkFalse())
1195 with pytest
.raises(RuntimeError):
1196 solver
.getUnsatAssumptions()
1199 def test_get_unsat_assumptions3(solver
):
1200 solver
.setOption("incremental", "true")
1201 solver
.setOption("produce-unsat-assumptions", "true")
1202 solver
.checkSatAssuming(solver
.mkFalse())
1203 solver
.getUnsatAssumptions()
1204 solver
.checkSatAssuming(solver
.mkTrue())
1205 with pytest
.raises(RuntimeError):
1206 solver
.getUnsatAssumptions()
1209 def test_get_unsat_core1(solver
):
1210 solver
.setOption("incremental", "false")
1211 solver
.assertFormula(solver
.mkFalse())
1213 with pytest
.raises(RuntimeError):
1214 solver
.getUnsatCore()
1217 def test_get_unsat_core2(solver
):
1218 solver
.setOption("incremental", "false")
1219 solver
.setOption("produce-unsat-cores", "false")
1220 solver
.assertFormula(solver
.mkFalse())
1222 with pytest
.raises(RuntimeError):
1223 solver
.getUnsatCore()
1226 def test_get_unsat_core3(solver
):
1227 solver
.setOption("incremental", "true")
1228 solver
.setOption("produce-unsat-cores", "true")
1230 uSort
= solver
.mkUninterpretedSort("u")
1231 intSort
= solver
.getIntegerSort()
1232 boolSort
= solver
.getBooleanSort()
1233 uToIntSort
= solver
.mkFunctionSort(uSort
, intSort
)
1234 intPredSort
= solver
.mkFunctionSort(intSort
, boolSort
)
1236 x
= solver
.mkConst(uSort
, "x")
1237 y
= solver
.mkConst(uSort
, "y")
1238 f
= solver
.mkConst(uToIntSort
, "f")
1239 p
= solver
.mkConst(intPredSort
, "p")
1240 zero
= solver
.mkInteger(0)
1241 one
= solver
.mkInteger(1)
1242 f_x
= solver
.mkTerm(Kind
.ApplyUf
, f
, x
)
1243 f_y
= solver
.mkTerm(Kind
.ApplyUf
, f
, y
)
1244 summ
= solver
.mkTerm(Kind
.Plus
, f_x
, f_y
)
1245 p_0
= solver
.mkTerm(Kind
.ApplyUf
, p
, zero
)
1246 p_f_y
= solver
.mkTerm(Kind
.ApplyUf
, p
, f_y
)
1247 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, zero
, f_x
))
1248 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, zero
, f_y
))
1249 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, summ
, one
))
1250 solver
.assertFormula(p_0
)
1251 solver
.assertFormula(p_f_y
.notTerm())
1252 assert solver
.checkSat().isUnsat()
1254 unsat_core
= solver
.getUnsatCore()
1256 solver
.resetAssertions()
1257 for t
in unsat_core
:
1258 solver
.assertFormula(t
)
1259 res
= solver
.checkSat()
1260 assert res
.isUnsat()
1263 def test_get_value1(solver
):
1264 solver
.setOption("produce-models", "false")
1266 solver
.assertFormula(t
)
1268 with pytest
.raises(RuntimeError):
1272 def test_get_value2(solver
):
1273 solver
.setOption("produce-models", "true")
1274 t
= solver
.mkFalse()
1275 solver
.assertFormula(t
)
1277 with pytest
.raises(RuntimeError):
1281 def test_get_value3(solver
):
1282 solver
.setOption("produce-models", "true")
1283 uSort
= solver
.mkUninterpretedSort("u")
1284 intSort
= solver
.getIntegerSort()
1285 boolSort
= solver
.getBooleanSort()
1286 uToIntSort
= solver
.mkFunctionSort(uSort
, intSort
)
1287 intPredSort
= solver
.mkFunctionSort(intSort
, boolSort
)
1289 x
= solver
.mkConst(uSort
, "x")
1290 y
= solver
.mkConst(uSort
, "y")
1291 z
= solver
.mkConst(uSort
, "z")
1292 f
= solver
.mkConst(uToIntSort
, "f")
1293 p
= solver
.mkConst(intPredSort
, "p")
1294 zero
= solver
.mkInteger(0)
1295 one
= solver
.mkInteger(1)
1296 f_x
= solver
.mkTerm(Kind
.ApplyUf
, f
, x
)
1297 f_y
= solver
.mkTerm(Kind
.ApplyUf
, f
, y
)
1298 summ
= solver
.mkTerm(Kind
.Plus
, f_x
, f_y
)
1299 p_0
= solver
.mkTerm(Kind
.ApplyUf
, p
, zero
)
1300 p_f_y
= solver
.mkTerm(Kind
.ApplyUf
, p
, f_y
)
1302 solver
.assertFormula(solver
.mkTerm(Kind
.Leq
, zero
, f_x
))
1303 solver
.assertFormula(solver
.mkTerm(Kind
.Leq
, zero
, f_y
))
1304 solver
.assertFormula(solver
.mkTerm(Kind
.Leq
, summ
, one
))
1305 solver
.assertFormula(p_0
.notTerm())
1306 solver
.assertFormula(p_f_y
)
1307 assert solver
.checkSat().isSat()
1311 solver
.getValue(summ
)
1312 solver
.getValue(p_f_y
)
1314 slv
= pycvc5
.Solver()
1315 with pytest
.raises(RuntimeError):
1319 def test_declare_sep_heap(solver
):
1320 solver
.setLogic("ALL")
1321 solver
.setOption("incremental", "false")
1322 integer
= solver
.getIntegerSort()
1323 solver
.declareSepHeap(integer
, integer
)
1324 # cannot declare separation logic heap more than once
1325 with pytest
.raises(RuntimeError):
1326 solver
.declareSepHeap(integer
, integer
)
1329 # Helper function for test_get_separation_{heap,nil}_termX. Asserts and checks
1330 # some simple separation logic constraints.
1331 def checkSimpleSeparationConstraints(slv
):
1332 integer
= slv
.getIntegerSort()
1333 # declare the separation heap
1334 slv
.declareSepHeap(integer
, integer
)
1335 x
= slv
.mkConst(integer
, "x")
1336 p
= slv
.mkConst(integer
, "p")
1337 heap
= slv
.mkTerm(Kind
.SepPto
, p
, x
)
1338 slv
.assertFormula(heap
)
1339 nil
= slv
.mkSepNil(integer
)
1340 slv
.assertFormula(nil
.eqTerm(slv
.mkReal(5)))
1344 def test_get_value_sep_heap_1(solver
):
1345 solver
.setLogic("QF_BV")
1346 solver
.setOption("incremental", "false")
1347 solver
.setOption("produce-models", "true")
1349 solver
.assertFormula(t
)
1350 with pytest
.raises(RuntimeError):
1351 solver
.getValueSepHeap()
1354 def test_get_value_sep_heap_2(solver
):
1355 solver
.setLogic("ALL")
1356 solver
.setOption("incremental", "false")
1357 solver
.setOption("produce-models", "false")
1358 checkSimpleSeparationConstraints(solver
)
1359 with pytest
.raises(RuntimeError):
1360 solver
.getValueSepHeap()
1363 def test_get_value_sep_heap_3(solver
):
1364 solver
.setLogic("ALL")
1365 solver
.setOption("incremental", "false")
1366 solver
.setOption("produce-models", "true")
1367 t
= solver
.mkFalse()
1368 solver
.assertFormula(t
)
1370 with pytest
.raises(RuntimeError):
1371 solver
.getValueSepHeap()
1374 def test_get_value_sep_heap_4(solver
):
1375 solver
.setLogic("ALL")
1376 solver
.setOption("incremental", "false")
1377 solver
.setOption("produce-models", "true")
1379 solver
.assertFormula(t
)
1381 with pytest
.raises(RuntimeError):
1382 solver
.getValueSepHeap()
1385 def test_get_value_sep_heap_5(solver
):
1386 solver
.setLogic("ALL")
1387 solver
.setOption("incremental", "false")
1388 solver
.setOption("produce-models", "true")
1389 checkSimpleSeparationConstraints(solver
)
1390 solver
.getValueSepHeap()
1393 def test_get_value_sep_nil_1(solver
):
1394 solver
.setLogic("QF_BV")
1395 solver
.setOption("incremental", "false")
1396 solver
.setOption("produce-models", "true")
1398 solver
.assertFormula(t
)
1399 with pytest
.raises(RuntimeError):
1400 solver
.getValueSepNil()
1403 def test_get_value_sep_nil_2(solver
):
1404 solver
.setLogic("ALL")
1405 solver
.setOption("incremental", "false")
1406 solver
.setOption("produce-models", "false")
1407 checkSimpleSeparationConstraints(solver
)
1408 with pytest
.raises(RuntimeError):
1409 solver
.getValueSepNil()
1412 def test_get_value_sep_nil_3(solver
):
1413 solver
.setLogic("ALL")
1414 solver
.setOption("incremental", "false")
1415 solver
.setOption("produce-models", "true")
1416 t
= solver
.mkFalse()
1417 solver
.assertFormula(t
)
1419 with pytest
.raises(RuntimeError):
1420 solver
.getValueSepNil()
1423 def test_get_value_sep_nil_4(solver
):
1424 solver
.setLogic("ALL")
1425 solver
.setOption("incremental", "false")
1426 solver
.setOption("produce-models", "true")
1428 solver
.assertFormula(t
)
1430 with pytest
.raises(RuntimeError):
1431 solver
.getValueSepNil()
1434 def test_get_value_sep_nil_5(solver
):
1435 solver
.setLogic("ALL")
1436 solver
.setOption("incremental", "false")
1437 solver
.setOption("produce-models", "true")
1438 checkSimpleSeparationConstraints(solver
)
1439 solver
.getValueSepNil()
1442 def test_push1(solver
):
1443 solver
.setOption("incremental", "true")
1445 with pytest
.raises(RuntimeError):
1446 solver
.setOption("incremental", "false")
1447 with pytest
.raises(RuntimeError):
1448 solver
.setOption("incremental", "true")
1451 def test_push2(solver
):
1452 solver
.setOption("incremental", "false")
1453 with pytest
.raises(RuntimeError):
1457 def test_pop1(solver
):
1458 solver
.setOption("incremental", "false")
1459 with pytest
.raises(RuntimeError):
1463 def test_pop2(solver
):
1464 solver
.setOption("incremental", "true")
1465 with pytest
.raises(RuntimeError):
1469 def test_pop3(solver
):
1470 solver
.setOption("incremental", "true")
1473 with pytest
.raises(RuntimeError):
1477 def test_set_info(solver
):
1478 with pytest
.raises(RuntimeError):
1479 solver
.setInfo("cvc5-lagic", "QF_BV")
1480 with pytest
.raises(RuntimeError):
1481 solver
.setInfo("cvc2-logic", "QF_BV")
1482 with pytest
.raises(RuntimeError):
1483 solver
.setInfo("cvc5-logic", "asdf")
1485 solver
.setInfo("source", "asdf")
1486 solver
.setInfo("category", "asdf")
1487 solver
.setInfo("difficulty", "asdf")
1488 solver
.setInfo("filename", "asdf")
1489 solver
.setInfo("license", "asdf")
1490 solver
.setInfo("name", "asdf")
1491 solver
.setInfo("notes", "asdf")
1493 solver
.setInfo("smt-lib-version", "2")
1494 solver
.setInfo("smt-lib-version", "2.0")
1495 solver
.setInfo("smt-lib-version", "2.5")
1496 solver
.setInfo("smt-lib-version", "2.6")
1497 with pytest
.raises(RuntimeError):
1498 solver
.setInfo("smt-lib-version", ".0")
1500 solver
.setInfo("status", "sat")
1501 solver
.setInfo("status", "unsat")
1502 solver
.setInfo("status", "unknown")
1503 with pytest
.raises(RuntimeError):
1504 solver
.setInfo("status", "asdf")
1507 def test_simplify(solver
):
1508 with pytest
.raises(RuntimeError):
1509 solver
.simplify(pycvc5
.Term(solver
))
1511 bvSort
= solver
.mkBitVectorSort(32)
1512 uSort
= solver
.mkUninterpretedSort("u")
1513 funSort1
= solver
.mkFunctionSort([bvSort
, bvSort
], bvSort
)
1514 funSort2
= solver
.mkFunctionSort(uSort
, solver
.getIntegerSort())
1515 consListSpec
= solver
.mkDatatypeDecl("list")
1516 cons
= solver
.mkDatatypeConstructorDecl("cons")
1517 cons
.addSelector("head", solver
.getIntegerSort())
1518 cons
.addSelectorSelf("tail")
1519 consListSpec
.addConstructor(cons
)
1520 nil
= solver
.mkDatatypeConstructorDecl("nil")
1521 consListSpec
.addConstructor(nil
)
1522 consListSort
= solver
.mkDatatypeSort(consListSpec
)
1524 x
= solver
.mkConst(bvSort
, "x")
1526 a
= solver
.mkConst(bvSort
, "a")
1528 b
= solver
.mkConst(bvSort
, "b")
1530 x_eq_x
= solver
.mkTerm(Kind
.Equal
, x
, x
)
1531 solver
.simplify(x_eq_x
)
1532 assert solver
.mkTrue() != x_eq_x
1533 assert solver
.mkTrue() == solver
.simplify(x_eq_x
)
1534 x_eq_b
= solver
.mkTerm(Kind
.Equal
, x
, b
)
1535 solver
.simplify(x_eq_b
)
1536 assert solver
.mkTrue() != x_eq_b
1537 assert solver
.mkTrue() != solver
.simplify(x_eq_b
)
1538 slv
= pycvc5
.Solver()
1539 with pytest
.raises(RuntimeError):
1542 i1
= solver
.mkConst(solver
.getIntegerSort(), "i1")
1544 i2
= solver
.mkTerm(Kind
.Mult
, i1
, solver
.mkInteger("23"))
1547 assert i1
!= solver
.simplify(i2
)
1548 i3
= solver
.mkTerm(Kind
.Plus
, i1
, solver
.mkInteger(0))
1551 assert i1
== solver
.simplify(i3
)
1553 consList
= consListSort
.getDatatype()
1554 dt1
= solver
.mkTerm(\
1555 Kind
.ApplyConstructor
,\
1556 consList
.getConstructorTerm("cons"),\
1557 solver
.mkInteger(0),\
1558 solver
.mkTerm(Kind
.ApplyConstructor
, consList
.getConstructorTerm("nil")))
1559 solver
.simplify(dt1
)
1560 dt2
= solver
.mkTerm(\
1561 Kind
.ApplySelector
, consList
["cons"].getSelectorTerm("head"), dt1
)
1562 solver
.simplify(dt2
)
1564 b1
= solver
.mkVar(bvSort
, "b1")
1566 b2
= solver
.mkVar(bvSort
, "b1")
1568 b3
= solver
.mkVar(uSort
, "b3")
1570 v1
= solver
.mkConst(bvSort
, "v1")
1572 v2
= solver
.mkConst(solver
.getIntegerSort(), "v2")
1574 f1
= solver
.mkConst(funSort1
, "f1")
1576 f2
= solver
.mkConst(funSort2
, "f2")
1578 solver
.defineFunsRec([f1
, f2
], [[b1
, b2
], [b3
]], [v1
, v2
])
1583 def test_assert_formula(solver
):
1584 solver
.assertFormula(solver
.mkTrue())
1585 with pytest
.raises(RuntimeError):
1586 solver
.assertFormula(pycvc5
.Term(solver
))
1587 slv
= pycvc5
.Solver()
1588 with pytest
.raises(RuntimeError):
1589 slv
.assertFormula(solver
.mkTrue())
1592 def test_check_entailed(solver
):
1593 solver
.setOption("incremental", "false")
1594 solver
.checkEntailed(solver
.mkTrue())
1595 with pytest
.raises(RuntimeError):
1596 solver
.checkEntailed(solver
.mkTrue())
1597 slv
= pycvc5
.Solver()
1598 with pytest
.raises(RuntimeError):
1599 slv
.checkEntailed(solver
.mkTrue())
1602 def test_check_entailed1(solver
):
1603 boolSort
= solver
.getBooleanSort()
1604 x
= solver
.mkConst(boolSort
, "x")
1605 y
= solver
.mkConst(boolSort
, "y")
1606 z
= solver
.mkTerm(Kind
.And
, x
, y
)
1607 solver
.setOption("incremental", "true")
1608 solver
.checkEntailed(solver
.mkTrue())
1609 with pytest
.raises(RuntimeError):
1610 solver
.checkEntailed(pycvc5
.Term(solver
))
1611 solver
.checkEntailed(solver
.mkTrue())
1612 solver
.checkEntailed(z
)
1613 slv
= pycvc5
.Solver()
1614 with pytest
.raises(RuntimeError):
1615 slv
.checkEntailed(solver
.mkTrue())
1618 def test_check_entailed2(solver
):
1619 solver
.setOption("incremental", "true")
1621 uSort
= solver
.mkUninterpretedSort("u")
1622 intSort
= solver
.getIntegerSort()
1623 boolSort
= solver
.getBooleanSort()
1624 uToIntSort
= solver
.mkFunctionSort(uSort
, intSort
)
1625 intPredSort
= solver
.mkFunctionSort(intSort
, boolSort
)
1627 n
= pycvc5
.Term(solver
)
1629 x
= solver
.mkConst(uSort
, "x")
1630 y
= solver
.mkConst(uSort
, "y")
1632 f
= solver
.mkConst(uToIntSort
, "f")
1633 p
= solver
.mkConst(intPredSort
, "p")
1635 zero
= solver
.mkInteger(0)
1636 one
= solver
.mkInteger(1)
1638 f_x
= solver
.mkTerm(Kind
.ApplyUf
, f
, x
)
1639 f_y
= solver
.mkTerm(Kind
.ApplyUf
, f
, y
)
1640 summ
= solver
.mkTerm(Kind
.Plus
, f_x
, f_y
)
1641 p_0
= solver
.mkTerm(Kind
.ApplyUf
, p
, zero
)
1642 p_f_y
= solver
.mkTerm(Kind
.ApplyUf
, p
, f_y
)
1645 solver
.mkTerm(Kind
.And
,\
1646 [solver
.mkTerm(Kind
.Leq
, zero
, f_x
), # 0 <= f(x)
1647 solver
.mkTerm(Kind
.Leq
, zero
, f_y
), # 0 <= f(y)
1648 solver
.mkTerm(Kind
.Leq
, summ
, one
), # f(x) + f(y) <= 1
1649 p_0
.notTerm(), # not p(0)
1653 solver
.checkEntailed(solver
.mkTrue())
1654 solver
.assertFormula(assertions
)
1655 solver
.checkEntailed(solver
.mkTerm(Kind
.Distinct
, x
, y
))
1656 solver
.checkEntailed(\
1657 [solver
.mkFalse(), solver
.mkTerm(Kind
.Distinct
, x
, y
)])
1658 with pytest
.raises(RuntimeError):
1659 solver
.checkEntailed(n
)
1660 with pytest
.raises(RuntimeError):
1661 solver
.checkEntailed([n
, solver
.mkTerm(Kind
.Distinct
, x
, y
)])
1662 slv
= pycvc5
.Solver()
1663 with pytest
.raises(RuntimeError):
1664 slv
.checkEntailed(solver
.mkTrue())
1667 def test_check_sat(solver
):
1668 solver
.setOption("incremental", "false")
1670 with pytest
.raises(RuntimeError):
1674 def test_check_sat_assuming(solver
):
1675 solver
.setOption("incremental", "false")
1676 solver
.checkSatAssuming(solver
.mkTrue())
1677 with pytest
.raises(RuntimeError):
1678 solver
.checkSatAssuming(solver
.mkTrue())
1679 slv
= pycvc5
.Solver()
1680 with pytest
.raises(RuntimeError):
1681 slv
.checkSatAssuming(solver
.mkTrue())
1684 def test_check_sat_assuming1(solver
):
1685 boolSort
= solver
.getBooleanSort()
1686 x
= solver
.mkConst(boolSort
, "x")
1687 y
= solver
.mkConst(boolSort
, "y")
1688 z
= solver
.mkTerm(Kind
.And
, x
, y
)
1689 solver
.setOption("incremental", "true")
1690 solver
.checkSatAssuming(solver
.mkTrue())
1691 with pytest
.raises(RuntimeError):
1692 solver
.checkSatAssuming(pycvc5
.Term(solver
))
1693 solver
.checkSatAssuming(solver
.mkTrue())
1694 solver
.checkSatAssuming(z
)
1695 slv
= pycvc5
.Solver()
1696 with pytest
.raises(RuntimeError):
1697 slv
.checkSatAssuming(solver
.mkTrue())
1700 def test_check_sat_assuming2(solver
):
1701 solver
.setOption("incremental", "true")
1703 uSort
= solver
.mkUninterpretedSort("u")
1704 intSort
= solver
.getIntegerSort()
1705 boolSort
= solver
.getBooleanSort()
1706 uToIntSort
= solver
.mkFunctionSort(uSort
, intSort
)
1707 intPredSort
= solver
.mkFunctionSort(intSort
, boolSort
)
1709 n
= pycvc5
.Term(solver
)
1711 x
= solver
.mkConst(uSort
, "x")
1712 y
= solver
.mkConst(uSort
, "y")
1714 f
= solver
.mkConst(uToIntSort
, "f")
1715 p
= solver
.mkConst(intPredSort
, "p")
1717 zero
= solver
.mkInteger(0)
1718 one
= solver
.mkInteger(1)
1720 f_x
= solver
.mkTerm(Kind
.ApplyUf
, f
, x
)
1721 f_y
= solver
.mkTerm(Kind
.ApplyUf
, f
, y
)
1722 summ
= solver
.mkTerm(Kind
.Plus
, f_x
, f_y
)
1723 p_0
= solver
.mkTerm(Kind
.ApplyUf
, p
, zero
)
1724 p_f_y
= solver
.mkTerm(Kind
.ApplyUf
, p
, f_y
)
1727 solver
.mkTerm(Kind
.And
,\
1728 [solver
.mkTerm(Kind
.Leq
, zero
, f_x
), # 0 <= f(x)
1729 solver
.mkTerm(Kind
.Leq
, zero
, f_y
), # 0 <= f(y)
1730 solver
.mkTerm(Kind
.Leq
, summ
, one
), # f(x) + f(y) <= 1
1731 p_0
.notTerm(), # not p(0)
1735 solver
.checkSatAssuming(solver
.mkTrue())
1736 solver
.assertFormula(assertions
)
1737 solver
.checkSatAssuming(solver
.mkTerm(Kind
.Distinct
, x
, y
))
1738 solver
.checkSatAssuming(
1740 solver
.mkTerm(Kind
.Distinct
, x
, y
)])
1741 with pytest
.raises(RuntimeError):
1742 solver
.checkSatAssuming(n
)
1743 with pytest
.raises(RuntimeError):
1744 solver
.checkSatAssuming([n
, solver
.mkTerm(Kind
.Distinct
, x
, y
)])
1745 slv
= pycvc5
.Solver()
1746 with pytest
.raises(RuntimeError):
1747 slv
.checkSatAssuming(solver
.mkTrue())
1750 def test_set_logic(solver
):
1751 solver
.setLogic("AUFLIRA")
1752 with pytest
.raises(RuntimeError):
1753 solver
.setLogic("AF_BV")
1754 solver
.assertFormula(solver
.mkTrue())
1755 with pytest
.raises(RuntimeError):
1756 solver
.setLogic("AUFLIRA")
1759 def test_set_option(solver
):
1760 solver
.setOption("bv-sat-solver", "minisat")
1761 with pytest
.raises(RuntimeError):
1762 solver
.setOption("bv-sat-solver", "1")
1763 solver
.assertFormula(solver
.mkTrue())
1764 with pytest
.raises(RuntimeError):
1765 solver
.setOption("bv-sat-solver", "minisat")
1768 def test_reset_assertions(solver
):
1769 solver
.setOption("incremental", "true")
1771 bvSort
= solver
.mkBitVectorSort(4)
1772 one
= solver
.mkBitVector(4, 1)
1773 x
= solver
.mkConst(bvSort
, "x")
1774 ule
= solver
.mkTerm(Kind
.BVUle
, x
, one
)
1775 srem
= solver
.mkTerm(Kind
.BVSrem
, one
, x
)
1777 slt
= solver
.mkTerm(Kind
.BVSlt
, srem
, one
)
1778 solver
.resetAssertions()
1779 solver
.checkSatAssuming([slt
, ule
])
1782 def test_mk_sygus_grammar(solver
):
1783 nullTerm
= pycvc5
.Term(solver
)
1784 boolTerm
= solver
.mkBoolean(True)
1785 boolVar
= solver
.mkVar(solver
.getBooleanSort())
1786 intVar
= solver
.mkVar(solver
.getIntegerSort())
1788 solver
.mkSygusGrammar([], [intVar
])
1789 solver
.mkSygusGrammar([boolVar
], [intVar
])
1790 with pytest
.raises(RuntimeError):
1791 solver
.mkSygusGrammar([], [])
1792 with pytest
.raises(RuntimeError):
1793 solver
.mkSygusGrammar([], [nullTerm
])
1794 with pytest
.raises(RuntimeError):
1795 solver
.mkSygusGrammar([], [boolTerm
])
1796 with pytest
.raises(RuntimeError):
1797 solver
.mkSygusGrammar([boolTerm
], [intVar
])
1798 slv
= pycvc5
.Solver()
1799 boolVar2
= slv
.mkVar(slv
.getBooleanSort())
1800 intVar2
= slv
.mkVar(slv
.getIntegerSort())
1801 slv
.mkSygusGrammar([boolVar2
], [intVar2
])
1802 with pytest
.raises(RuntimeError):
1803 slv
.mkSygusGrammar([boolVar
], [intVar2
])
1804 with pytest
.raises(RuntimeError):
1805 slv
.mkSygusGrammar([boolVar2
], [intVar
])
1808 def test_synth_inv(solver
):
1809 boolean
= solver
.getBooleanSort()
1810 integer
= solver
.getIntegerSort()
1812 nullTerm
= pycvc5
.Term(solver
)
1813 x
= solver
.mkVar(boolean
)
1815 start1
= solver
.mkVar(boolean
)
1816 start2
= solver
.mkVar(integer
)
1818 g1
= solver
.mkSygusGrammar([x
], [start1
])
1819 g1
.addRule(start1
, solver
.mkBoolean(False))
1821 g2
= solver
.mkSygusGrammar([x
], [start2
])
1822 g2
.addRule(start2
, solver
.mkInteger(0))
1824 solver
.synthInv("", [])
1825 solver
.synthInv("i1", [x
])
1826 solver
.synthInv("i2", [x
], g1
)
1828 with pytest
.raises(RuntimeError):
1829 solver
.synthInv("i3", [nullTerm
])
1830 with pytest
.raises(RuntimeError):
1831 solver
.synthInv("i4", [x
], g2
)
1834 def test_add_sygus_constraint(solver
):
1835 nullTerm
= pycvc5
.Term(solver
)
1836 boolTerm
= solver
.mkBoolean(True)
1837 intTerm
= solver
.mkInteger(1)
1839 solver
.addSygusConstraint(boolTerm
)
1840 with pytest
.raises(RuntimeError):
1841 solver
.addSygusConstraint(nullTerm
)
1842 with pytest
.raises(RuntimeError):
1843 solver
.addSygusConstraint(intTerm
)
1845 slv
= pycvc5
.Solver()
1846 with pytest
.raises(RuntimeError):
1847 slv
.addSygusConstraint(boolTerm
)
1850 def test_add_sygus_inv_constraint(solver
):
1851 boolean
= solver
.getBooleanSort()
1852 real
= solver
.getRealSort()
1854 nullTerm
= pycvc5
.Term(solver
)
1855 intTerm
= solver
.mkInteger(1)
1857 inv
= solver
.declareFun("inv", [real
], boolean
)
1858 pre
= solver
.declareFun("pre", [real
], boolean
)
1859 trans
= solver
.declareFun("trans", [real
, real
], boolean
)
1860 post
= solver
.declareFun("post", [real
], boolean
)
1862 inv1
= solver
.declareFun("inv1", [real
], real
)
1864 trans1
= solver
.declareFun("trans1", [boolean
, real
], boolean
)
1865 trans2
= solver
.declareFun("trans2", [real
, boolean
], boolean
)
1866 trans3
= solver
.declareFun("trans3", [real
, real
], real
)
1868 solver
.addSygusInvConstraint(inv
, pre
, trans
, post
)
1870 with pytest
.raises(RuntimeError):
1871 solver
.addSygusInvConstraint(nullTerm
, pre
, trans
, post
)
1872 with pytest
.raises(RuntimeError):
1873 solver
.addSygusInvConstraint(inv
, nullTerm
, trans
, post
)
1874 with pytest
.raises(RuntimeError):
1875 solver
.addSygusInvConstraint(inv
, pre
, nullTerm
, post
)
1876 with pytest
.raises(RuntimeError):
1877 solver
.addSygusInvConstraint(inv
, pre
, trans
, nullTerm
)
1879 with pytest
.raises(RuntimeError):
1880 solver
.addSygusInvConstraint(intTerm
, pre
, trans
, post
)
1882 with pytest
.raises(RuntimeError):
1883 solver
.addSygusInvConstraint(inv1
, pre
, trans
, post
)
1885 with pytest
.raises(RuntimeError):
1886 solver
.addSygusInvConstraint(inv
, trans
, trans
, post
)
1888 with pytest
.raises(RuntimeError):
1889 solver
.addSygusInvConstraint(inv
, pre
, intTerm
, post
)
1890 with pytest
.raises(RuntimeError):
1891 solver
.addSygusInvConstraint(inv
, pre
, pre
, post
)
1892 with pytest
.raises(RuntimeError):
1893 solver
.addSygusInvConstraint(inv
, pre
, trans1
, post
)
1894 with pytest
.raises(RuntimeError):
1895 solver
.addSygusInvConstraint(inv
, pre
, trans2
, post
)
1896 with pytest
.raises(RuntimeError):
1897 solver
.addSygusInvConstraint(inv
, pre
, trans3
, post
)
1899 with pytest
.raises(RuntimeError):
1900 solver
.addSygusInvConstraint(inv
, pre
, trans
, trans
)
1901 slv
= pycvc5
.Solver()
1902 boolean2
= slv
.getBooleanSort()
1903 real2
= slv
.getRealSort()
1904 inv22
= slv
.declareFun("inv", [real2
], boolean2
)
1905 pre22
= slv
.declareFun("pre", [real2
], boolean2
)
1906 trans22
= slv
.declareFun("trans", [real2
, real2
], boolean2
)
1907 post22
= slv
.declareFun("post", [real2
], boolean2
)
1908 slv
.addSygusInvConstraint(inv22
, pre22
, trans22
, post22
)
1909 with pytest
.raises(RuntimeError):
1910 slv
.addSygusInvConstraint(inv
, pre22
, trans22
, post22
)
1911 with pytest
.raises(RuntimeError):
1912 slv
.addSygusInvConstraint(inv22
, pre
, trans22
, post22
)
1913 with pytest
.raises(RuntimeError):
1914 slv
.addSygusInvConstraint(inv22
, pre22
, trans
, post22
)
1915 with pytest
.raises(RuntimeError):
1916 slv
.addSygusInvConstraint(inv22
, pre22
, trans22
, post
)
1919 def test_get_synth_solution(solver
):
1920 solver
.setOption("lang", "sygus2")
1921 solver
.setOption("incremental", "false")
1923 nullTerm
= pycvc5
.Term(solver
)
1924 x
= solver
.mkBoolean(False)
1925 f
= solver
.synthFun("f", [], solver
.getBooleanSort())
1927 with pytest
.raises(RuntimeError):
1928 solver
.getSynthSolution(f
)
1932 solver
.getSynthSolution(f
)
1933 solver
.getSynthSolution(f
)
1935 with pytest
.raises(RuntimeError):
1936 solver
.getSynthSolution(nullTerm
)
1937 with pytest
.raises(RuntimeError):
1938 solver
.getSynthSolution(x
)
1940 slv
= pycvc5
.Solver()
1941 with pytest
.raises(RuntimeError):
1942 slv
.getSynthSolution(f
)
1944 def test_check_synth_next(solver
):
1945 solver
.setOption("lang", "sygus2")
1946 solver
.setOption("incremental", "true")
1947 f
= solver
.synthFun("f", [], solver
.getBooleanSort())
1950 solver
.getSynthSolutions([f
])
1952 solver
.checkSynthNext()
1953 solver
.getSynthSolutions([f
])
1955 def test_check_synth_next2(solver
):
1956 solver
.setOption("lang", "sygus2")
1957 solver
.setOption("incremental", "false")
1958 f
= solver
.synthFun("f", [], solver
.getBooleanSort())
1961 with pytest
.raises(RuntimeError):
1962 solver
.checkSynthNext()
1964 def test_check_synth_next3(solver
):
1965 solver
.setOption("lang", "sygus2")
1966 solver
.setOption("incremental", "true")
1967 f
= solver
.synthFun("f", [], solver
.getBooleanSort())
1968 with pytest
.raises(RuntimeError):
1969 solver
.checkSynthNext()
1971 def test_get_abduct(solver
):
1972 solver
.setLogic("QF_LIA")
1973 solver
.setOption("produce-abducts", "true")
1974 solver
.setOption("incremental", "false")
1976 intSort
= solver
.getIntegerSort()
1977 zero
= solver
.mkInteger(0)
1978 x
= solver
.mkConst(intSort
, "x")
1979 y
= solver
.mkConst(intSort
, "y")
1981 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, x
, zero
))
1982 conj
= solver
.mkTerm(Kind
.Gt
, y
, zero
)
1983 output
= pycvc5
.Term(solver
)
1984 assert solver
.getAbduct(conj
, output
)
1985 assert not output
.isNull() and output
.getSort().isBoolean()
1987 boolean
= solver
.getBooleanSort()
1988 truen
= solver
.mkBoolean(True)
1989 start
= solver
.mkVar(boolean
)
1990 output2
= pycvc5
.Term(solver
)
1991 g
= solver
.mkSygusGrammar([], [start
])
1992 conj2
= solver
.mkTerm(Kind
.Gt
, x
, zero
)
1993 g
.addRule(start
, truen
)
1994 assert solver
.getAbduct(conj2
, g
, output2
)
1995 assert output2
== truen
1997 def test_get_abduct2(solver
):
1998 solver
.setLogic("QF_LIA")
1999 solver
.setOption("incremental", "false")
2000 intSort
= solver
.getIntegerSort()
2001 zero
= solver
.mkInteger(0)
2002 x
= solver
.mkConst(intSort
, "x")
2003 y
= solver
.mkConst(intSort
, "y")
2004 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, x
, zero
))
2005 conj
= solver
.mkTerm(Kind
.Gt
, y
, zero
)
2006 output
= pycvc5
.Term(solver
)
2007 with pytest
.raises(RuntimeError):
2008 solver
.getAbduct(conj
, output
)
2010 def test_get_abduct_next(solver
):
2011 solver
.setLogic("QF_LIA")
2012 solver
.setOption("produce-abducts", "true")
2013 solver
.setOption("incremental", "true")
2015 intSort
= solver
.getIntegerSort()
2016 zero
= solver
.mkInteger(0)
2017 x
= solver
.mkConst(intSort
, "x")
2018 y
= solver
.mkConst(intSort
, "y")
2020 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, x
, zero
))
2021 conj
= solver
.mkTerm(Kind
.Gt
, y
, zero
)
2022 output
= pycvc5
.Term(solver
)
2023 assert solver
.getAbduct(conj
, output
)
2024 output2
= pycvc5
.Term(solver
)
2025 assert solver
.getAbductNext(output2
)
2026 assert output
!= output2
2029 def test_get_interpolant(solver
):
2030 solver
.setLogic("QF_LIA")
2031 solver
.setOption("produce-interpols", "default")
2032 solver
.setOption("incremental", "false")
2034 intSort
= solver
.getIntegerSort()
2035 zero
= solver
.mkInteger(0)
2036 x
= solver
.mkConst(intSort
, "x")
2037 y
= solver
.mkConst(intSort
, "y")
2038 z
= solver
.mkConst(intSort
, "z")
2040 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, solver
.mkTerm(Kind
.Plus
, x
, y
), zero
))
2041 solver
.assertFormula(solver
.mkTerm(Kind
.Lt
, x
, zero
))
2042 conj
= solver
.mkTerm(Kind
.Or
, solver
.mkTerm(Kind
.Gt
, solver
.mkTerm(Kind
.Plus
, y
, z
), zero
), solver
.mkTerm(Kind
.Lt
, z
, zero
))
2043 output
= pycvc5
.Term(solver
)
2044 solver
.getInterpolant(conj
, output
)
2045 assert output
.getSort().isBoolean()
2047 def test_get_interpolant_next(solver
):
2048 solver
.setLogic("QF_LIA")
2049 solver
.setOption("produce-interpols", "default")
2050 solver
.setOption("incremental", "true")
2052 intSort
= solver
.getIntegerSort()
2053 zero
= solver
.mkInteger(0)
2054 x
= solver
.mkConst(intSort
, "x")
2055 y
= solver
.mkConst(intSort
, "y")
2056 z
= solver
.mkConst(intSort
, "z")
2058 solver
.assertFormula(solver
.mkTerm(Kind
.Gt
, solver
.mkTerm(Kind
.Plus
, x
, y
), zero
))
2059 solver
.assertFormula(solver
.mkTerm(Kind
.Lt
, x
, zero
))
2060 conj
= solver
.mkTerm(Kind
.Or
, solver
.mkTerm(Kind
.Gt
, solver
.mkTerm(Kind
.Plus
, y
, z
), zero
), solver
.mkTerm(Kind
.Lt
, z
, zero
))
2061 output
= pycvc5
.Term(solver
)
2062 solver
.getInterpolant(conj
, output
)
2063 output2
= pycvc5
.Term(solver
)
2064 solver
.getInterpolantNext(output2
)
2066 assert output
!= output2
2069 def test_declare_pool(solver
):
2070 intSort
= solver
.getIntegerSort()
2071 setSort
= solver
.mkSetSort(intSort
)
2072 zero
= solver
.mkInteger(0)
2073 x
= solver
.mkConst(intSort
, "x")
2074 y
= solver
.mkConst(intSort
, "y")
2075 # declare a pool with initial value 0, x, y
2076 p
= solver
.declarePool("p", intSort
, [zero
, x
, y
])
2077 # pool should have the same sort
2078 assert p
.getSort() == setSort
2079 # cannot pass null sort
2080 nullSort
= pycvc5
.Sort(solver
)
2081 with pytest
.raises(RuntimeError):
2082 solver
.declarePool("i", nullSort
, [])
2084 def test_define_fun_global(solver
):
2085 bSort
= solver
.getBooleanSort()
2087 bTrue
= solver
.mkBoolean(True)
2088 # (define-fun f () Bool true)
2089 f
= solver
.defineFun("f", [], bSort
, bTrue
, True)
2090 b
= solver
.mkVar(bSort
, "b")
2091 # (define-fun g (b Bool) Bool b)
2092 g
= solver
.defineFun("g", [b
], bSort
, b
, True)
2094 # (assert (or (not f) (not (g true))))
2095 solver
.assertFormula(
2096 solver
.mkTerm(Kind
.Or
, f
.notTerm(),
2097 solver
.mkTerm(Kind
.ApplyUf
, g
, bTrue
).notTerm()))
2098 assert solver
.checkSat().isUnsat()
2099 solver
.resetAssertions()
2100 # (assert (or (not f) (not (g true))))
2101 solver
.assertFormula(
2102 solver
.mkTerm(Kind
.Or
, f
.notTerm(),
2103 solver
.mkTerm(Kind
.ApplyUf
, g
, bTrue
).notTerm()))
2104 assert solver
.checkSat().isUnsat()
2107 def test_define_sort(solver
):
2108 sortVar0
= solver
.mkParamSort("T0")
2109 sortVar1
= solver
.mkParamSort("T1")
2110 intSort
= solver
.getIntegerSort()
2111 realSort
= solver
.getRealSort()
2112 arraySort0
= solver
.mkArraySort(sortVar0
, sortVar0
)
2113 arraySort1
= solver
.mkArraySort(sortVar0
, sortVar1
)
2114 # Now create instantiations of the defined sorts
2115 arraySort0
.substitute(sortVar0
, intSort
)
2117 arraySort1
.substitute([sortVar0
, sortVar1
], [intSort
, realSort
])
2120 def test_get_model_domain_elements(solver
):
2121 solver
.setOption("produce-models", "true")
2122 uSort
= solver
.mkUninterpretedSort("u")
2123 intSort
= solver
.getIntegerSort()
2124 x
= solver
.mkConst(uSort
, "x")
2125 y
= solver
.mkConst(uSort
, "y")
2126 z
= solver
.mkConst(uSort
, "z")
2127 f
= solver
.mkTerm(Kind
.Distinct
, x
, y
, z
)
2128 solver
.assertFormula(f
)
2130 solver
.getModelDomainElements(uSort
)
2131 assert len(solver
.getModelDomainElements(uSort
)) >= 3
2132 with pytest
.raises(RuntimeError):
2133 solver
.getModelDomainElements(intSort
)
2136 def test_get_synth_solutions(solver
):
2137 solver
.setOption("lang", "sygus2")
2138 solver
.setOption("incremental", "false")
2140 nullTerm
= pycvc5
.Term(solver
)
2141 x
= solver
.mkBoolean(False)
2142 f
= solver
.synthFun("f", [], solver
.getBooleanSort())
2144 with pytest
.raises(RuntimeError):
2145 solver
.getSynthSolutions([])
2146 with pytest
.raises(RuntimeError):
2147 solver
.getSynthSolutions([f
])
2151 solver
.getSynthSolutions([f
])
2152 solver
.getSynthSolutions([f
, f
])
2154 with pytest
.raises(RuntimeError):
2155 solver
.getSynthSolutions([])
2156 with pytest
.raises(RuntimeError):
2157 solver
.getSynthSolutions([nullTerm
])
2158 with pytest
.raises(RuntimeError):
2159 solver
.getSynthSolutions([x
])
2161 slv
= pycvc5
.Solver()
2162 with pytest
.raises(RuntimeError):
2163 slv
.getSynthSolutions([x
])
2166 def test_get_value_sep_heap1(solver
):
2167 solver
.setLogic("QF_BV")
2168 solver
.setOption("incremental", "false")
2169 solver
.setOption("produce-models", "true")
2171 solver
.assertFormula(t
)
2172 with pytest
.raises(RuntimeError):
2173 solver
.getValueSepHeap()
2176 def test_get_value_sep_heap2(solver
):
2177 solver
.setLogic("ALL")
2178 solver
.setOption("incremental", "false")
2179 solver
.setOption("produce-models", "false")
2180 checkSimpleSeparationConstraints(solver
)
2181 with pytest
.raises(RuntimeError):
2182 solver
.getValueSepHeap()
2185 def test_get_value_sep_heap3(solver
):
2186 solver
.setLogic("ALL")
2187 solver
.setOption("incremental", "false")
2188 solver
.setOption("produce-models", "true")
2189 t
= solver
.mkFalse()
2190 solver
.assertFormula(t
)
2192 with pytest
.raises(RuntimeError):
2193 solver
.getValueSepHeap()
2196 def test_get_value_sep_heap4(solver
):
2197 solver
.setLogic("ALL")
2198 solver
.setOption("incremental", "false")
2199 solver
.setOption("produce-models", "true")
2201 solver
.assertFormula(t
)
2203 with pytest
.raises(RuntimeError):
2204 solver
.getValueSepHeap()
2207 def test_get_value_sep_heap5(solver
):
2208 solver
.setLogic("ALL")
2209 solver
.setOption("incremental", "false")
2210 solver
.setOption("produce-models", "true")
2211 checkSimpleSeparationConstraints(solver
)
2212 solver
.getValueSepHeap()
2215 def test_get_value_sep_nil1(solver
):
2216 solver
.setLogic("QF_BV")
2217 solver
.setOption("incremental", "false")
2218 solver
.setOption("produce-models", "true")
2220 solver
.assertFormula(t
)
2221 with pytest
.raises(RuntimeError):
2222 solver
.getValueSepNil()
2225 def test_get_value_sep_nil2(solver
):
2226 solver
.setLogic("ALL")
2227 solver
.setOption("incremental", "false")
2228 solver
.setOption("produce-models", "false")
2229 checkSimpleSeparationConstraints(solver
)
2230 with pytest
.raises(RuntimeError):
2231 solver
.getValueSepNil()
2234 def test_get_value_sep_nil3(solver
):
2235 solver
.setLogic("ALL")
2236 solver
.setOption("incremental", "false")
2237 solver
.setOption("produce-models", "true")
2238 t
= solver
.mkFalse()
2239 solver
.assertFormula(t
)
2241 with pytest
.raises(RuntimeError):
2242 solver
.getValueSepNil()
2245 def test_get_value_sep_nil4(solver
):
2246 solver
.setLogic("ALL")
2247 solver
.setOption("incremental", "false")
2248 solver
.setOption("produce-models", "true")
2250 solver
.assertFormula(t
)
2252 with pytest
.raises(RuntimeError):
2253 solver
.getValueSepNil()
2256 def test_get_value_sep_nil5(solver
):
2257 solver
.setLogic("ALL")
2258 solver
.setOption("incremental", "false")
2259 solver
.setOption("produce-models", "true")
2260 checkSimpleSeparationConstraints(solver
)
2261 solver
.getValueSepNil()
2264 def test_is_model_core_symbol(solver
):
2265 solver
.setOption("produce-models", "true")
2266 solver
.setOption("model-cores", "simple")
2267 uSort
= solver
.mkUninterpretedSort("u")
2268 x
= solver
.mkConst(uSort
, "x")
2269 y
= solver
.mkConst(uSort
, "y")
2270 z
= solver
.mkConst(uSort
, "z")
2271 zero
= solver
.mkInteger(0)
2272 f
= solver
.mkTerm(Kind
.Not
, solver
.mkTerm(Kind
.Equal
, x
, y
))
2273 solver
.assertFormula(f
)
2275 assert solver
.isModelCoreSymbol(x
)
2276 assert solver
.isModelCoreSymbol(y
)
2277 assert not solver
.isModelCoreSymbol(z
)
2278 with pytest
.raises(RuntimeError):
2279 solver
.isModelCoreSymbol(zero
)
2282 def test_issue5893(solver
):
2283 slv
= pycvc5
.Solver()
2284 bvsort4
= solver
.mkBitVectorSort(4)
2285 bvsort8
= solver
.mkBitVectorSort(8)
2286 arrsort
= solver
.mkArraySort(bvsort4
, bvsort8
)
2287 arr
= solver
.mkConst(arrsort
, "arr")
2288 idx
= solver
.mkConst(bvsort4
, "idx")
2289 ten
= solver
.mkBitVector(8, "10", 10)
2290 sel
= solver
.mkTerm(Kind
.Select
, arr
, idx
)
2291 distinct
= solver
.mkTerm(Kind
.Distinct
, sel
, ten
)
2295 def test_issue7000(solver
):
2296 s1
= solver
.getIntegerSort()
2297 s2
= solver
.mkFunctionSort(s1
, s1
)
2298 s3
= solver
.getRealSort()
2300 t7
= solver
.mkConst(s3
, "_x5")
2301 t37
= solver
.mkConst(s2
, "_x32")
2302 t59
= solver
.mkConst(s2
, "_x51")
2303 t72
= solver
.mkTerm(Kind
.Equal
, t37
, t59
)
2304 t74
= solver
.mkTerm(Kind
.Gt
, t4
, t7
)
2305 # throws logic exception since logic is not higher order by default
2306 with pytest
.raises(RuntimeError):
2307 solver
.checkEntailed(t72
, t74
, t72
, t72
)
2310 def test_mk_sygus_var(solver
):
2311 boolSort
= solver
.getBooleanSort()
2312 intSort
= solver
.getIntegerSort()
2313 funSort
= solver
.mkFunctionSort(intSort
, boolSort
)
2315 solver
.mkSygusVar(boolSort
)
2316 solver
.mkSygusVar(funSort
)
2317 solver
.mkSygusVar(boolSort
, "b")
2318 solver
.mkSygusVar(funSort
, "")
2319 with pytest
.raises(RuntimeError):
2320 solver
.mkSygusVar(pycvc5
.Sort(solver
))
2321 with pytest
.raises(RuntimeError):
2322 solver
.mkSygusVar(solver
.getNullSort(), "a")
2323 slv
= pycvc5
.Solver()
2324 with pytest
.raises(RuntimeError):
2325 slv
.mkSygusVar(boolSort
)
2328 def test_synth_fun(solver
):
2329 null
= solver
.getNullSort()
2330 boolean
= solver
.getBooleanSort()
2331 integer
= solver
.getIntegerSort()
2333 nullTerm
= pycvc5
.Term(solver
)
2334 x
= solver
.mkVar(boolean
)
2336 start1
= solver
.mkVar(boolean
)
2337 start2
= solver
.mkVar(integer
)
2339 g1
= solver
.mkSygusGrammar(x
, [start1
])
2340 g1
.addRule(start1
, solver
.mkBoolean(False))
2342 g2
= solver
.mkSygusGrammar(x
, [start2
])
2343 g2
.addRule(start2
, solver
.mkInteger(0))
2345 solver
.synthFun("", [], boolean
)
2346 solver
.synthFun("f1", [x
], boolean
)
2347 solver
.synthFun("f2", [x
], boolean
, g1
)
2349 with pytest
.raises(RuntimeError):
2350 solver
.synthFun("f3", [nullTerm
], boolean
)
2351 with pytest
.raises(RuntimeError):
2352 solver
.synthFun("f4", [], null
)
2353 with pytest
.raises(RuntimeError):
2354 solver
.synthFun("f6", [x
], boolean
, g2
)
2355 slv
= pycvc5
.Solver()
2356 x2
= slv
.mkVar(slv
.getBooleanSort())
2357 slv
.synthFun("f1", [x2
], slv
.getBooleanSort())
2358 with pytest
.raises(RuntimeError):
2359 slv
.synthFun("", [], solver
.getBooleanSort())
2360 with pytest
.raises(RuntimeError):
2361 slv
.synthFun("f1", [x
], solver
.getBooleanSort())
2364 def test_tuple_project(solver
):
2365 sorts
= [solver
.getBooleanSort(),\
2366 solver
.getIntegerSort(),\
2367 solver
.getStringSort(),\
2368 solver
.mkSetSort(solver
.getStringSort())]
2370 solver
.mkBoolean(True), \
2371 solver
.mkInteger(3),\
2372 solver
.mkString("C"),\
2373 solver
.mkTerm(Kind
.SetSingleton
, solver
.mkString("Z"))]
2375 tuple = solver
.mkTuple(sorts
, elements
)
2380 indices4
= [0, 0, 2, 2, 3, 3, 0]
2384 solver
.mkTerm(solver
.mkOp(Kind
.TupleProject
, indices1
), tuple)
2386 solver
.mkTerm(solver
.mkOp(Kind
.TupleProject
, indices2
), tuple)
2388 solver
.mkTerm(solver
.mkOp(Kind
.TupleProject
, indices3
), tuple)
2390 solver
.mkTerm(solver
.mkOp(Kind
.TupleProject
, indices4
), tuple)
2392 with pytest
.raises(RuntimeError):
2393 solver
.mkTerm(solver
.mkOp(Kind
.TupleProject
, indices5
), tuple)
2394 with pytest
.raises(RuntimeError):
2395 solver
.mkTerm(solver
.mkOp(Kind
.TupleProject
, indices6
), tuple)
2397 indices
= [0, 3, 2, 0, 1, 2]
2399 op
= solver
.mkOp(Kind
.TupleProject
, indices
)
2400 projection
= solver
.mkTerm(op
, tuple)
2402 datatype
= tuple.getSort().getDatatype()
2403 constructor
= datatype
[0]
2407 selectorTerm
= constructor
[i
].getSelectorTerm()
2408 selectedTerm
= solver
.mkTerm(Kind
.ApplySelector
, selectorTerm
, tuple)
2409 simplifiedTerm
= solver
.simplify(selectedTerm
)
2410 assert elements
[i
] == simplifiedTerm
2412 assert "((_ tuple_project 0 3 2 0 1 2) (tuple true 3 \"C\" (set.singleton \"Z\")))" == str(