Я новичок в z3py и SMT, и я не нашел хорошего учебника о z3py.z3py: как представить массив целых чисел или символов в z3py
Вот моя постановка задачи:
Учитывая входной целочисленный массив I = [1,2,3,4,5], а выходной массив целых чисел O = [1,2,4,5].
Я хочу, чтобы вывести к для оператора Delete, которая удаляет элемент в позиции к в массиве, где
Delete(I,O) = (ForAll 0<=x<k, O[x] = I[x]) and (ForAll k<=x<length(I)-1, O[x] = I[x+1]) is true
Должен ли я использовать массив или IntVector, или что-нибудь еще, чтобы представить выходной массив/вход ?
Edit:
Мой код выглядит следующим образом:
from z3 import *
k=Int('k')
s=Solver()
x = Int('x')
y = Int('y')
s.add(k >= 0)
s.add(k < 4)
s.add(x >= 0)
s.add(x < k)
s.add(y >= k)
s.add(y < 4)
I = Array('I',IntSort(),IntSort())
O = Array('O',IntSort(),IntSort())
Store(I, 0, 1)
Store(I, 1, 2)
Store(I, 2, 3)
Store(I, 3, 4)
Store(I, 4, 5)
Store(O, 0, 1)
Store(O, 1, 2)
Store(O, 2, 4)
Store(O, 3, 5)
s.add(And(ForAll(x,Select(O,x) == Select(I,x)),ForAll(y,Select(O,y) == Select(I,y+1))))
print s.check()
print s.model()
возвращает
sat
[I = [2 -> 2, else -> 2],
O = [2 -> 2, else -> 2],
y = 1,
k = 1,
x = 0,
elem!0 = 2,
elem!1 = 2,
k!4 = [2 -> 2, else -> 2]]
Я не понимаю, что я, О, элем 0, элем! 1 и k! 4, и это явно не то, что я ожидал.
Было бы полезно если вы показали, что вы уже пробовали –
Обновлено в исходном сообщении –