Ниже решения я не могу реализовать в java. Пожалуйста, помогите мне. Ниже приведен фрагмент кода, который я пытаюсь реализовать.Z3: Поиск всей удовлетворяющей модели в java
я нашел тот же вопрос: Z3: finding all satisfying models
(Z3Py) checking all solutions for equation
BitVecExpr a = ctx.mkBVConst("a",8);
BitVecExpr b = ctx.mkBVConst("b",8);
BitVecExpr c = ctx.mkBVConst("c",8);
Solver s = ctx.mkSolver();
//s.add(ctx.mkEq(c,ctx.mkBVXOR(a,b))); // I am able to get distinct value for a and b for XOR.
//s.add(ctx.mkEq(c,ctx.mkBVOR(b,a))); // If i swap the position of the a and b then i was able to generate distinct pattern. For example for this add method of OR my code was working.
s.add(ctx.mkEq(c,ctx.mkBVOR(a,b))); // Not working getting same model.
s.add(ctx.mkEq(c,ctx.mkBV(11,8)));
if (s.check() == Status.SATISFIABLE)
{
System.out.println("status :"+ s.check());
Model m = s.getModel();
System.out.println("Model :"+ m);
}
BitVecExpr test1[] = {a,b};
s.add(ctx.mkDistinct(test1)); // If i use this line then only i get distinct pattern
if (s.check() == Status.SATISFIABLE)
{
System.out.println("status :"+ s.check());
Model m = s.getModel();
System.out.println("Model :"+ m);
}
Также я не есть модель() [] метод в java.In Java у меня есть getModel метод() без каких-либо аргументов ,
Еще один вопрос. Как мы можем реализовать '! =' Внутри add. Например.
s.add (or (a! = S.model() [a], b! = S.model() [b])) Для == у нас есть метод mkEq(), но я не смог найти любой метод, связанный с '! ='.
Я попытался с помощью: s.add (ctx.mkOr (ctx.mkEq (а, ctx.mkNot (s.getModel())), ctx.mkEq (а, ctx.mkNot (s.getModel()))));
Для получения ошибки при компиляции. Который я должен получить, потому что его невозможно реализовать таким образом.
@usr, пожалуйста, дайте мне знать, если я сделаю что-то не так в моем ответе. Также дайте мне знать, если у вас есть какие-либо предложения. – Ajit
возможно использовать ctx.mkNot (x) вместо ctx.mkEq (x, ctx.mkFalse()) вы также можете извлекать целые числа, используя методы, определенные в выражениях, вместо использования красивой печати + синтаксический анализ. –
@NikolajBjorner Это действительно имеет смысл. спасибо, я буду сотрудничать с тем, что изменение в моем дизайне. – Ajit