I'm trying to solve a problem using the Array type in z3. Because I need to use BitVec type I declared the array as :
numbers = [BitVec(chr(i), 8) for i in range(0, 4)]
And then :
s = Solver()
s.add(numbers[0] == 100)
s.add(numbers[1] == numbers[0] + 2)
s.add(numbers[3] == numbers[1] + numbers[0])
s.add(numbers[2] == numbers[1] - 4)
print(s.check())
print(s.model())
Output :
sat
[ = 98, = 202, = 102, = 100]
However it doesn't print in order the results, Is there a way to print them in order?
Example:
[ = 100, = 102, = 98, = 202 ]
I have another doubt too. Is there a way to set a limit to the frequencies of a number:
numbers = [BitVec(chr(i), 8) for i in range(0, 4)]
s = Solver()
s.add(numbers[0] == 100)
s.add(numbers[0] + numbers[1] + numbers[2] == 200)
s.add(collections.Counter(numbers)[100] == 1) # something like that
print(s.check())
print(s.model())
To set that number 100 must be present only in numbers[0].