use of kodkod.ast.Decls in project org.alloytools.alloy by AlloyTools.
the class BugTests method testFelix_02212008.
public final void testFelix_02212008() {
Relation x0 = Relation.unary("Int/min");
Relation x1 = Relation.unary("Int/zero");
Relation x2 = Relation.unary("Int/max");
Relation x3 = Relation.nary("Int/next", 2);
Relation x4 = Relation.unary("seq/Int");
List<String> atomlist = Arrays.asList("-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "0", "1", "2", "3", "4", "5", "6", "7");
Universe universe = new Universe(atomlist);
TupleFactory factory = universe.factory();
Bounds bounds = new Bounds(universe);
TupleSet x0_upper = factory.noneOf(1);
x0_upper.add(factory.tuple("-8"));
bounds.boundExactly(x0, x0_upper);
TupleSet x1_upper = factory.noneOf(1);
x1_upper.add(factory.tuple("0"));
bounds.boundExactly(x1, x1_upper);
TupleSet x2_upper = factory.noneOf(1);
x2_upper.add(factory.tuple("7"));
bounds.boundExactly(x2, x2_upper);
TupleSet x3_upper = factory.noneOf(2);
x3_upper.add(factory.tuple("-8").product(factory.tuple("-7")));
x3_upper.add(factory.tuple("-7").product(factory.tuple("-6")));
x3_upper.add(factory.tuple("-6").product(factory.tuple("-5")));
x3_upper.add(factory.tuple("-5").product(factory.tuple("-4")));
x3_upper.add(factory.tuple("-4").product(factory.tuple("-3")));
x3_upper.add(factory.tuple("-3").product(factory.tuple("-2")));
x3_upper.add(factory.tuple("-2").product(factory.tuple("-1")));
x3_upper.add(factory.tuple("-1").product(factory.tuple("0")));
x3_upper.add(factory.tuple("0").product(factory.tuple("1")));
x3_upper.add(factory.tuple("1").product(factory.tuple("2")));
x3_upper.add(factory.tuple("2").product(factory.tuple("3")));
x3_upper.add(factory.tuple("3").product(factory.tuple("4")));
x3_upper.add(factory.tuple("4").product(factory.tuple("5")));
x3_upper.add(factory.tuple("5").product(factory.tuple("6")));
x3_upper.add(factory.tuple("6").product(factory.tuple("7")));
bounds.boundExactly(x3, x3_upper);
TupleSet x4_upper = factory.noneOf(1);
x4_upper.add(factory.tuple("0"));
x4_upper.add(factory.tuple("1"));
x4_upper.add(factory.tuple("2"));
x4_upper.add(factory.tuple("3"));
bounds.boundExactly(x4, x4_upper);
bounds.boundExactly(-8, factory.range(factory.tuple("-8"), factory.tuple("-8")));
bounds.boundExactly(-7, factory.range(factory.tuple("-7"), factory.tuple("-7")));
bounds.boundExactly(-6, factory.range(factory.tuple("-6"), factory.tuple("-6")));
bounds.boundExactly(-5, factory.range(factory.tuple("-5"), factory.tuple("-5")));
bounds.boundExactly(-4, factory.range(factory.tuple("-4"), factory.tuple("-4")));
bounds.boundExactly(-3, factory.range(factory.tuple("-3"), factory.tuple("-3")));
bounds.boundExactly(-2, factory.range(factory.tuple("-2"), factory.tuple("-2")));
bounds.boundExactly(-1, factory.range(factory.tuple("-1"), factory.tuple("-1")));
bounds.boundExactly(0, factory.range(factory.tuple("0"), factory.tuple("0")));
bounds.boundExactly(1, factory.range(factory.tuple("1"), factory.tuple("1")));
bounds.boundExactly(2, factory.range(factory.tuple("2"), factory.tuple("2")));
bounds.boundExactly(3, factory.range(factory.tuple("3"), factory.tuple("3")));
bounds.boundExactly(4, factory.range(factory.tuple("4"), factory.tuple("4")));
bounds.boundExactly(5, factory.range(factory.tuple("5"), factory.tuple("5")));
bounds.boundExactly(6, factory.range(factory.tuple("6"), factory.tuple("6")));
bounds.boundExactly(7, factory.range(factory.tuple("7"), factory.tuple("7")));
Variable x9 = Variable.nary("isTree_r", 2);
Expression x10 = Expression.INTS.product(Expression.INTS);
Decls x8 = x9.setOf(x10);
Expression x15 = Expression.INTS.product(Expression.INTS);
Formula x14 = x9.in(x15);
Formula x13 = x14.and(Formula.TRUE);
Formula x12 = x13.and(Formula.TRUE);
Formula x7 = x12.forSome(x8);
Formula x19 = x0.eq(x0);
Formula x20 = x2.eq(x2);
Formula x18 = x19.and(x20);
Formula x21 = x3.eq(x3);
Formula x17 = x18.and(x21);
Formula x6 = x7.and(x17);
Formula x23 = x1.eq(x1);
Formula x24 = x4.eq(x4);
Formula x22 = x23.and(x24);
Formula x5 = x6.and(x22);
Solver solver = new Solver();
solver.options().setSolver(SATFactory.DefaultSAT4J);
solver.options().setBitwidth(4);
solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT);
solver.options().setSymmetryBreaking(20);
solver.options().setSkolemDepth(0);
Iterator<Solution> sols = solver.solveAll(x5, bounds);
assertTrue(sols.hasNext());
Solution a = sols.next();
assertEquals(Solution.Outcome.TRIVIALLY_SATISFIABLE, a.outcome());
assertTrue(sols.hasNext());
a = sols.next();
assertEquals(Solution.Outcome.SATISFIABLE, a.outcome());
}
use of kodkod.ast.Decls in project org.alloytools.alloy by AlloyTools.
the class BugTests method testFelix_03062008.
public final void testFelix_03062008() {
Relation x0 = Relation.unary("Int/min");
Relation x1 = Relation.unary("Int/zero");
Relation x2 = Relation.unary("Int/max");
Relation x3 = Relation.nary("Int/next", 2);
Relation x4 = Relation.unary("seq/Int");
List<String> atomlist = Arrays.asList("-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "0", "1", "2", "3", "4", "5", "6", "7");
Universe universe = new Universe(atomlist);
TupleFactory factory = universe.factory();
Bounds bounds = new Bounds(universe);
TupleSet x0_upper = factory.noneOf(1);
x0_upper.add(factory.tuple("-8"));
bounds.boundExactly(x0, x0_upper);
TupleSet x1_upper = factory.noneOf(1);
x1_upper.add(factory.tuple("0"));
bounds.boundExactly(x1, x1_upper);
TupleSet x2_upper = factory.noneOf(1);
x2_upper.add(factory.tuple("7"));
bounds.boundExactly(x2, x2_upper);
TupleSet x3_upper = factory.noneOf(2);
x3_upper.add(factory.tuple("-8").product(factory.tuple("-7")));
x3_upper.add(factory.tuple("-7").product(factory.tuple("-6")));
x3_upper.add(factory.tuple("-6").product(factory.tuple("-5")));
x3_upper.add(factory.tuple("-5").product(factory.tuple("-4")));
x3_upper.add(factory.tuple("-4").product(factory.tuple("-3")));
x3_upper.add(factory.tuple("-3").product(factory.tuple("-2")));
x3_upper.add(factory.tuple("-2").product(factory.tuple("-1")));
x3_upper.add(factory.tuple("-1").product(factory.tuple("0")));
x3_upper.add(factory.tuple("0").product(factory.tuple("1")));
x3_upper.add(factory.tuple("1").product(factory.tuple("2")));
x3_upper.add(factory.tuple("2").product(factory.tuple("3")));
x3_upper.add(factory.tuple("3").product(factory.tuple("4")));
x3_upper.add(factory.tuple("4").product(factory.tuple("5")));
x3_upper.add(factory.tuple("5").product(factory.tuple("6")));
x3_upper.add(factory.tuple("6").product(factory.tuple("7")));
bounds.boundExactly(x3, x3_upper);
TupleSet x4_upper = factory.noneOf(1);
x4_upper.add(factory.tuple("0"));
bounds.boundExactly(x4, x4_upper);
bounds.boundExactly(-8, factory.range(factory.tuple("-8"), factory.tuple("-8")));
bounds.boundExactly(-7, factory.range(factory.tuple("-7"), factory.tuple("-7")));
bounds.boundExactly(-6, factory.range(factory.tuple("-6"), factory.tuple("-6")));
bounds.boundExactly(-5, factory.range(factory.tuple("-5"), factory.tuple("-5")));
bounds.boundExactly(-4, factory.range(factory.tuple("-4"), factory.tuple("-4")));
bounds.boundExactly(-3, factory.range(factory.tuple("-3"), factory.tuple("-3")));
bounds.boundExactly(-2, factory.range(factory.tuple("-2"), factory.tuple("-2")));
bounds.boundExactly(-1, factory.range(factory.tuple("-1"), factory.tuple("-1")));
bounds.boundExactly(0, factory.range(factory.tuple("0"), factory.tuple("0")));
bounds.boundExactly(1, factory.range(factory.tuple("1"), factory.tuple("1")));
bounds.boundExactly(2, factory.range(factory.tuple("2"), factory.tuple("2")));
bounds.boundExactly(3, factory.range(factory.tuple("3"), factory.tuple("3")));
bounds.boundExactly(4, factory.range(factory.tuple("4"), factory.tuple("4")));
bounds.boundExactly(5, factory.range(factory.tuple("5"), factory.tuple("5")));
bounds.boundExactly(6, factory.range(factory.tuple("6"), factory.tuple("6")));
bounds.boundExactly(7, factory.range(factory.tuple("7"), factory.tuple("7")));
Variable x9 = Variable.unary("x");
Decls x8 = x9.oneOf(Expression.INTS);
Variable x14 = Variable.unary("p_t'");
Expression x15 = Expression.INTS.difference(x9);
Decls x13 = x14.oneOf(x15);
Variable x20 = Variable.unary("p_v");
Decls x19 = x20.oneOf(Expression.INTS);
Formula x21 = x14.in(x9);
Expression x18 = x21.comprehension(x19);
IntExpression x17 = x18.count();
IntExpression x22 = IntConstant.constant(0);
Formula x16 = x17.gt(x22);
Formula x12 = x16.forAll(x13);
Formula x11 = x12.not();
Formula x7 = x11.forAll(x8);
Formula x25 = x0.eq(x0);
Formula x26 = x2.eq(x2);
Formula x24 = x25.and(x26);
Formula x27 = x3.eq(x3);
Formula x23 = x24.and(x27);
Formula x6 = x7.and(x23);
Formula x29 = x1.eq(x1);
Formula x30 = x4.eq(x4);
Formula x28 = x29.and(x30);
Formula x5 = x6.and(x28);
Solver solver = new Solver();
solver.options().setSolver(SATFactory.DefaultSAT4J);
solver.options().setBitwidth(4);
// solver.options().setFlatten(false);
solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT);
solver.options().setSymmetryBreaking(20);
// System.out.println(PrettyPrinter.print(x5, 2));
solver.options().setSkolemDepth(0);
Solution sol1 = solver.solve(x5, bounds);
assertNotNull(sol1.instance());
solver.options().setSkolemDepth(1);
Solution sol2 = solver.solve(x5, bounds);
assertNotNull(sol2.instance());
}
use of kodkod.ast.Decls in project org.alloytools.alloy by AlloyTools.
the class EvaluatorTest method testQuantifiedFormula.
public final void testQuantifiedFormula() {
final Variable p = Variable.unary("p"), q = Variable.unary("q");
final Decl pdecl = p.oneOf(person), qdecl = q.oneOf(person);
final Decls pqdecls = pdecl.and(qdecl);
// all p: Person | some p.spouse = true
assertTrue(eval(p.join(spouse).some().forAll(pdecl)));
// all p, q: Person | (p.spouse = q) => ! (q in p.shaken) = true
assertTrue(eval((p.join(spouse).eq(q).implies(q.in(p.join(shaken)).not()).forAll(pqdecls))));
// some p: Person | no p.shaken = true
assertTrue(eval(p.join(shaken).no().forSome(pdecl)));
// all p: Person | some q: Person | p.shaken = q = false
assertFalse(eval((p.join(shaken).eq(q).forSome(qdecl)).forAll(pdecl)));
// some p, q: Person | !(p = q) && (p.shaken = q.shaken) = true
assertTrue(eval(p.eq(q).not().and(p.join(shaken).eq(q.join(shaken))).forSome(pqdecls)));
// some p: Person | all q: Person-p | p in q.shaken = false
assertFalse(eval((p.in(q.join(shaken)).forAll(q.oneOf(person.difference(p)))).forSome(pdecl)));
}
use of kodkod.ast.Decls in project org.alloytools.alloy by AlloyTools.
the class OverflowTheoremTest method testCardinality4.
/**
* all a, b: set univ | no a & b && some a => #(a + b) > #b
*/
@Test
public void testCardinality4() {
Variable a = Variable.unary("a");
Variable b = Variable.unary("b");
Decls dcls = a.setOf(Expression.UNIV).and(b.setOf(Expression.UNIV));
Formula pre = a.some().and(a.intersection(b).no());
Formula post = a.union(b).count().gt(b.count());
checkTrue(pre, post, dcls);
}
use of kodkod.ast.Decls in project org.alloytools.alloy by AlloyTools.
the class BugTests method testFelix_11262007.
public final void testFelix_11262007() {
Relation x6 = Relation.unary("R2");
List<String> atomlist = Arrays.asList("X", "Y", "Z");
Universe universe = new Universe(atomlist);
TupleFactory factory = universe.factory();
Bounds bounds = new Bounds(universe);
bounds.bound(x6, factory.allOf(1));
final Variable x32 = Variable.unary("a");
final Decls x31 = x32.oneOf(x6);
final Variable x36 = Variable.unary("b");
final Decls x35 = x36.oneOf(x32.join(x6.product(x6)));
final Formula x29 = x36.some().forSome(x35).forSome(x31);
Solver solver = new Solver();
solver.options().setSolver(SATFactory.DefaultSAT4J);
solver.options().setBitwidth(4);
solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT);
solver.options().setSymmetryBreaking(20);
solver.options().setSkolemDepth(0);
final Set<Decl> decls = new LinkedHashSet<Decl>();
solver.options().setReporter(new AbstractReporter() {
@Override
public void skolemizing(Decl decl, Relation skolem, List<Decl> predecl) {
decls.add(decl);
}
});
Solution sol = solver.solve(x29, bounds);
assertEquals(2, decls.size());
assertTrue(decls.contains(x31));
assertTrue(decls.contains(x35));
assertNotNull(sol.instance());
}
Aggregations