Z3py: Решаване с цели числа и битови вектори в ограничения

Опитвам се да реша ограничения, използвайки Z3 SMT решаващ инструмент в python. Ограниченията включват както цели числа, така и битови вектори. Преобразувам BitVec в Int с помощта на Z3_mk_bv2int. Вярвам, че следните ограничения са незадоволими, но получавам SAT от Z3 Solver. Не съм сигурен дали го конвертирам правилно или не. Ако обаче заменя променливите на BitVecs с ограничени целочислени променливи, тогава преобразуването не е необходимо и получавам очакваните резултати.

Пример:

def get_int(var):

ctx = var.ctx

    return ArithRef(Z3_mk_bv2int(ctx.ref(), var.as_ast(), 0), ctx)

def main():

    var1 = BitVec('var1', 6)
    var2 = Int('var2')
    solve(var2 == get_int(var1)- var2, var2 > 32)

if __name__ == "__main__": main()

Резултати: [var1 = 0, var2 = 33]

Аз съм нов в SMT решавачите. Моля, помогнете ми да разбера грешката или алтернативно решение.


person User1219    schedule 10.03.2015    source източник


Отговори (1)


Моля, разгледайте този проблем: https://z3.codeplex.com/workitem/187

По същество проблемът е, че Z3_mk_bv2int не се импортира по подразбиране. Опитайте да добавите
от z3 import *

в началото на програмата.

person Tushar    schedule 13.05.2015