Я использую Java-API для Z3 версии 4.3.2 для 64-разрядной версии Windows 7, а также для Java 7 64-bit, но я не думаю, что Java - это необходимость ответить на этот вопрос.Z3: Можно ли упростить только часть утверждений?
Прямо сейчас я использую следующий Java-код, чтобы упростить подмножество моих утверждений в Z3:
Tactic simplifyTactic = ctx.mkTactic("ctx-solver-simplify");
Goal goal = ctx.mkGoal(true, false, false);
goal.add(bel.toArray(new BoolExpr[0])); // bel is List<BoolExpr>
ApplyResult applyResult = simplifyTactic.apply(goal);
До сих пор я фильтруется утверждения должны быть упрощены, прежде чем их упрощения с помощью приведенного выше кода, который работает, как ожидалось.
После некоторого тестирования я пришел к выводу, что мне нужно также вставить отфильтрованные утверждения (содержащие некоторую метаинформацию, такую как мощность) модели.
Можно ли упростить некоторое множество утверждений А, в то время как другое множество утверждений В все еще рассматривается, но не изменяется?
Следующий пример может прояснить этот вопрос немного:
(declare-const a Bool)
(declare-const b Bool)
(declare-const c Bool)
(declare-const d Bool)
(assert (=> a c)); member of set A
(assert (=> b d)); member of set A
(assert a); member of set A
; member of set B
(assert
(<=
(+ (ite (= c true) 1 0) (ite (= d true) 1 0))
1
)
)
; member of set B
(assert
(>=
(+ (ite (= c true) 1 0) (ite (= d true) 1 0))
1
)
)
(apply ctx-solver-simplify)
Если это SMT-LIB V2 код выполняется с помощью Z3 результат:
(goals
(goal
c
(not b)
a
(<= (+ (ite (= c true) 1 0) (ite (= d true) 1 0)) 1)
:precision precise :depth 1
)
)
В этом простом примере результат вполне нормально. Ограничения (первые три утверждения (мой набор А)) были упрощены, как ожидалось. Также было упрощено следующее два утверждения (с моей информацией о мощности (множество B)). Теперь я хочу, чтобы Z3 выполнял упрощения, но не смешивая результаты множества A и B. Учитывая более сложные утверждения, это произойдет (и произошло в моем случае).
Как это делается?
Можете ли вы добавить минимальный пример из множества утверждений А и В? Я сделал что-то подобное с другой тактикой (например, устранением квантификатора), а наличие A и B поможет мне понять, может ли то, что я сделал, работать. – Taylor
Я добавил простой пример. Надеюсь это поможет. –