package tmp;
import java.util.LinkedList;
import java.util.List;
import kodkod.ast.Formula;
import kodkod.ast.IntConstant;
import kodkod.ast.IntExpression;
import kodkod.ast.Relation;
import kodkod.engine.Evaluator;
import kodkod.engine.Solution;
import kodkod.engine.Solver;
import kodkod.engine.config.Options;
import kodkod.engine.satlab.SATFactory;
import kodkod.instance.Bounds;
import kodkod.instance.Instance;
import kodkod.instance.TupleFactory;
import kodkod.instance.TupleSet;
import kodkod.instance.Universe;
import kodkod.util.nodes.PrettyPrinter;
public final class KK {
public static void main(String[] args) throws Exception {
Relation x6 = Relation.unary("R");
int[] ints = new int[] {0, 1, 2};
List<Object> atomlist = new LinkedList<Object>();
atomlist.add("R$0");
atomlist.add("R$1");
atomlist.add("R$2");
for (int i : ints) atomlist.add(i);
Universe universe = new Universe(atomlist);
TupleFactory factory = universe.factory();
Bounds bounds = new Bounds(universe);
TupleSet x6_upper = factory.noneOf(1);
x6_upper.add(factory.tuple("R$0"));
x6_upper.add(factory.tuple("R$1"));
x6_upper.add(factory.tuple("R$2"));
bounds.bound(x6, x6_upper);
for (int i : ints) {
bounds.boundExactly(i, factory.setOf(i));
}
Formula x11 = x6.some();
IntExpression x5 = x6.count();
Formula x9 = x11.implies(x5.gt(IntConstant.constant(0)));
Formula x7 = x9.not();
Solver solver = new Solver();
solver.options().setSolver(SATFactory.DefaultSAT4J);
solver.options().setBitwidth(2);
solver.options().setFlatten(false);
solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT);
solver.options().setSymmetryBreaking(20);
solver.options().setSkolemDepth(0);
System.out.println("Solving...");
System.out.println(PrettyPrinter.print(x7, 0));
System.out.println(bounds);
Solution sol = solver.solve(x7, bounds);
System.out.println(sol.toString());
Instance inst = sol.instance();
Evaluator ev = new Evaluator(inst);
System.out.println(ev.evaluate(x6.some()));
System.out.println(ev.evaluate(x5));
System.out.println(ev.evaluate(x5.gt(IntConstant.constant(0))));
System.out.println(ev.evaluate(x6.some().implies(x5.gt(IntConstant.constant(0))).not()));
System.out.println(ev.evaluate(x7));
}
}