Допустим, у меня есть программа z3py, подобная этой:
import z3
a = z3.Int("a")
input_0 = z3.Int("input_0")
output = z3.Int("output")
some_formula = z3.If(a < input_0, 1, z3.If(a > 1, 4, 2))
s = z3.Solver()
s.add(output == some_formula)
s.check()
m = s.model()
print(m)
Есть ли для меня элегантный способ получить условия ветвления из some_formula
? Так что получите список вроде [a < input_0, a > 1]
. Это должно работать для сколь угодно глубокой вложенности выражений if.
Я знаю, что есть какой-то способ использования кубов, но я не могу получить более двух выражений куба. Я не уверен, как настроить решатель.
Моя конечная цель состоит в том, чтобы заставить решатель выдавать мне разные выходные данные в зависимости от ограничений, которые я выбираю * pop и 101. Ограничения - это набор условий, которые я вывел из этой формулы.