Задача
Я пытаюсь сделать замену над телом выражения Lambda
, но, похоже, оно вообще не подставляется.
Мотивация
Я пытался Select
над Lambda
, но это не разрешено в Z3
.
Сломанный код
Я также попытался подставить переменную read
, но она тоже не сработала.
def test_select_over_lambdas_can_be_implemented():
solver = Solver()
read = BitVec('read', 8)
fake_array = Lambda([read], read)
print(fake_array) # Lambda(read, read)
print(fake_array.body()) # Var(0)
new_select = substitute(
fake_array.body(),
[
(Const("Var(0)", fake_array.var_sort(0)), BitVecVal(1, 8))
])
print(new_select) # Var(0) / substitution failed
solver.add(new_select == 1)
assert str(solver.check()) == "sat" # Fails with answer "unknown"