-
Notifications
You must be signed in to change notification settings - Fork 34
Open
Description
Arrays constrained by more complex assume
statements are not always properly converted to strings in counterexamples.
Code
module main {
var arr : [bv5]bv2;
init {
assume (forall (a : bv5) :: (a > 20bv5 && a < 22bv5) ==> arr[a] == 0bv2);
}
next {
assert (arr[20bv5] == 0bv2); // should fail
assert (arr[21bv5] == 0bv2);
}
control {
v = bmc_noLTL(1);
check;
print_results;
v.print_cex(arr);
}
}
Output
$ uclid z3_array_conversion.ucl
Successfully instantiated 1 module(s).
1 assertions passed.
1 assertions failed.
0 assertions indeterminate.
PASSED -> v [Step #1] assertion @ z3_array_conversion.ucl, line 10
FAILED -> v [Step #1] assertion @ z3_array_conversion.ucl, line 9
CEX for v [Step #1] assertion @ z3_array_conversion.ucl, line 9
=================================
Step #0
arr : UCLID is unable to convert this z3 array to string: (lambda ((x!1 (_ BitVec 5)))
(let ((a!1 (ite (bvule #b10101 x!1)
(ite (bvule #b10111 x!1) #b10111 #b10101)
#b10100)))
(ite (= a!1 #b10101) #b00 (ite (= a!1 #b10100) #b01 #b10))))
=================================
=================================
Step #1
arr : UCLID is unable to convert this z3 array to string: (lambda ((x!1 (_ BitVec 5)))
(let ((a!1 (ite (bvule #b10101 x!1)
(ite (bvule #b10111 x!1) #b10111 #b10101)
#b10100)))
(ite (= a!1 #b10101) #b00 (ite (= a!1 #b10100) #b01 #b10))))
=================================
Finished execution for module: main.
Metadata
Metadata
Assignees
Labels
No labels