use of com.sri.ai.grinder.group.Disjunction in project aic-expresso by aic-sri-international.
the class AbstractTranslationBasedTheory method getSingleVariableConstraintSatisfiabilityStepSolver.
@Override
public ExpressionLiteralSplitterStepSolver getSingleVariableConstraintSatisfiabilityStepSolver(SingleVariableConstraint constraint, Context context) {
Expression index = constraint.getVariable();
Expression indexType = context.getTypeExpressionOfRegisteredSymbol(index);
DefaultSingleQuantifierEliminationProblem problem = new DefaultSingleQuantifierEliminationProblem(new Disjunction(), index, indexType, constraint, TRUE);
return getSingleQuantifierEliminatorStepSolver(problem, context);
}
use of com.sri.ai.grinder.group.Disjunction in project aic-expresso by aic-sri-international.
the class MultiQuantifierEliminationProblemTest method regularCasesTest.
@Test
public void regularCasesTest() {
MultiQuantifierEliminationProblem problem;
Expression problemExpression;
problem = new DefaultSingleQuantifierEliminationProblem(new Sum(), parse("I"), parse("Integer"), parse("I > 3 and I < 10"), parse("I"));
problemExpression = parse("sum({{ (on I in Integer) I : I > 3 and I < 10 }})");
assertEquals(problemExpression, problem.toExpression());
problem = new DefaultSingleQuantifierEliminationProblem(new Disjunction(), parse("I"), parse("Integer"), parse("I > 3 and I < 10"), parse("true"));
problemExpression = parse("there exists I in Integer : I > 3 and I < 10");
assertEquals(problemExpression, problem.toExpression());
problem = new DefaultSingleQuantifierEliminationProblem(new Conjunction(), parse("I"), parse("Integer"), parse("I > 3 and I < 10"), parse("true"));
problemExpression = parse("for all I in Integer : if I > 3 and I < 10 then true else true");
assertEquals(problemExpression, problem.toExpression());
problem = new DefaultMultiQuantifierEliminationProblem(new Sum(), list(parse("I"), parse("J")), list(parse("Integer"), parse("Boolean")), parse("I > 3 and I < 10 and not J"), parse("I"));
problemExpression = parse("sum({{ (on I in Integer, J in Boolean) I : I > 3 and I < 10 and not J }})");
assertEquals(problemExpression, problem.toExpression());
problem = new DefaultMultiQuantifierEliminationProblem(new Disjunction(), list(parse("I"), parse("J")), list(parse("Integer"), parse("Boolean")), parse("I > 3 and I < 10 and not J"), parse("true"));
problemExpression = parse("there exists I in Integer : there exists J in Boolean : I > 3 and I < 10 and not J");
assertEquals(problemExpression, problem.toExpression());
problem = new DefaultMultiQuantifierEliminationProblem(new Conjunction(), list(parse("I"), parse("J")), list(parse("Integer"), parse("Boolean")), parse("I > 3 and I < 10 and not J"), parse("true"));
problemExpression = parse("for all I in Integer : for all J in Boolean : if I > 3 and I < 10 and not J then true else true");
assertEquals(problemExpression, problem.toExpression());
}
Aggregations