Я пытаюсь немного узнать о 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)
)
)
))
проблема в том, что я хочу избежать многократных вызовов ite. Я попытался заменить ((_ extract 3 0) l) чем-то вроде ((_ extract (+ 4 idx) idx l), но это не сработало.
Спасибо
P.S: Идея состоит в том, чтобы использовать z3 из командной строки (без использования какой-либо библиотеки).