Моя проблема в том, что я должен получить все возможные модели для массива вида as-array
. Код, который я сделал для этого, следующий:
s = Solver()
check = s.check()
while (str(check) == "sat"):
mod = s.model()
block = []
for var in mod.decls():
block.append(var() != mod[var])
s.add(Or(block))
check = s.check()
var
может принимать значения типа as-array
среди других, и когда я запускаю строку s.add(Or(block))
, в следующий раз, когда я запускаю строку check = s.check
возвращает неизвестное
Есть ли другой способ сделать это?
------- Редактировать -------
У меня есть нашел способ получить все возможные модели для массива вида as-array
, который был предыдущей проблемой, способ, который я сделал, это создать переменную, которая представляет размер массива и от i = 0 до i = n (где n - размер), сделайте a[i]!= x
массивом «a», а «x» - значением, которое принимает «a [i]».
Теперь моя проблема в том, что у меня есть тип данных Форма "mk-pair", первый аргумент которой представляет собой массив в форме as-array
и целое число, указывающее размер массива.
Когда я получаю модель, она появляется в форме mk-pair(as-array, 30)
( например), размер массива равен 30.
Проблема в том, что я не могу найти способ получить все возможные модели, поскольку, если я откажу pe данных (a! = x, при условии, что «a» является типом данных, а «x» - его значением), он возвращает меня неизвестно, и если я сделаю первое (as-array [0]! = x), что я на самом деле отрицание - это as-array
, а не переменная "a" (которая имеет форму mk-pair (as-array, Int)), и когда я несколько раз запрашиваю модели, я получаю повторяющиеся результаты.
Any способ сделать это?