Я пытаюсь немного узнать о z3 и теории векторов бит. Мое намерение состоит в том, чтобы сделать функцию, чтобы получить клев от позиции bitvectorФункция получения nibbles с использованием Z3 и теории битвектора
Этот код возвращает клев:
(define-fun g_nibble(
(l (_ BitVec 12))
(idx (Int))
) (_ BitVec 4)
(ite
(= idx 1) ((_ extract 11 8) l)
(ite
(= idx 2) ((_ extract 7 4) l)
(ite
(= idx 3) ((_ extract 3 0) l)
(_ bv0 4)
)
)
))
проблема заключается в том, что я хочу избежать кратные жет звонить. Я пытался заменить ((_ экстракт 3 0) л) для Somthing как ((_ экстракт (+ 4 IDX) IDX л), но он не работает
Благодаря
PS:. Идея заключается в том используйте z3 из командной строки (без использования какой-либо библиотеки).
thx, я полагаю, что idx должен быть битовым вектором из-за обеих теорий (Int и бит-вектор), которые нельзя использовать вместе? – user4547829
Да, индекс должен быть битовым вектором. Эти теории могут использоваться вместе, но для функции bvshl требуется бит-вектор. –