Благодаря этот вопрос Я знаю, как проще увидеть модель. На данный момент, как я могу получить ожидаемые значения для a
и another
?
Если возможно, я бы хотел, чтобы пример кода использовал pyz3.
Пояснение:
Имеет следующий файл smt:
(set-option :produce-models true)
(set-logic QF_AUFBV )
(declare-fun a () (Array (_ BitVec 32) (_ BitVec 8) ) )
(declare-fun another () (Array (_ BitVec 32) (_ BitVec 8) ) )
(assert (and (= true (= (_ bv77 32) (concat (select a (_ bv3 32)
) (concat (select a (_ bv2 32) ) (concat (select a (_ bv1 32) )
(select a (_ bv0 32) ) ) ) ) ) ) (= true (= (_ bv12 32) (concat
(select another (_ bv3 32) ) (concat (select another (_ bv2 32) )
(concat (select another (_ bv1 32) ) (select another (_ bv0 32) ) )
) ) ) ) ) )
Я хотел бы иметь значение для a
и another
, которые 77
и 12
Какой самый лучший способ?
На данный момент мой подход:
import z3
import binascii
z3.set_param('model_compress', False)
s = z3.Solver()
s.from_file("first.smt")
s.check()
m = s.model()
print(m)
a = m[m.decls()[0]]
print(a)
b = bytearray(a.num_entries())
for x in range(a.num_entries()):
index = a.entry(x).as_list()[0]
value = a.entry(x).as_list()[1]
print(index, value)
b[a.num_entries()-index.as_long()-1] = value.as_long()
expected = int(binascii.hexlify(b),16)
print(expected)
Вывод 77
, как и ожидалось:)
Спасибо