Search in sources :

Example 6 with Sum

use of com.sri.ai.grinder.group.Sum in project aic-expresso by aic-sri-international.

the class DifferenceArithmeticTheory method getSingleQuantifierEliminatorStepSolver.

@Override
public ExpressionLiteralSplitterStepSolver getSingleQuantifierEliminatorStepSolver(SingleQuantifierEliminationProblem problem, Context context) {
    ExpressionStepSolver formulaSplitterStepSolver;
    if (problem.getGroup() instanceof Sum) {
        formulaSplitterStepSolver = new SummationOnDifferenceArithmeticAndPolynomialStepSolver(problem);
    } else {
        formulaSplitterStepSolver = new QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver(problem);
    }
    ExpressionLiteralSplitterStepSolver result = new ExpressionStepSolverToLiteralSplitterStepSolverAdapter(formulaSplitterStepSolver);
    return result;
}
Also used : ExpressionLiteralSplitterStepSolver(com.sri.ai.grinder.api.ExpressionLiteralSplitterStepSolver) ExpressionStepSolver(com.sri.ai.grinder.api.ExpressionStepSolver) QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver(com.sri.ai.grinder.core.solver.QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver) Sum(com.sri.ai.grinder.group.Sum) ExpressionStepSolverToLiteralSplitterStepSolverAdapter(com.sri.ai.grinder.core.solver.ExpressionStepSolverToLiteralSplitterStepSolverAdapter)

Example 7 with Sum

use of com.sri.ai.grinder.group.Sum in project aic-expresso by aic-sri-international.

the class LinearRealArithmeticTheory method getSingleQuantifierEliminatorStepSolver.

@Override
public ExpressionLiteralSplitterStepSolver getSingleQuantifierEliminatorStepSolver(SingleQuantifierEliminationProblem problem, Context context) {
    ExpressionStepSolver formulaSplitterStepSolver;
    if (problem.getGroup() instanceof Sum) {
        formulaSplitterStepSolver = new SummationOnLinearRealArithmeticAndPolynomialStepSolver(problem);
    } else {
        formulaSplitterStepSolver = new QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver(problem);
    }
    ExpressionLiteralSplitterStepSolver result = new ExpressionStepSolverToLiteralSplitterStepSolverAdapter(formulaSplitterStepSolver);
    return result;
}
Also used : ExpressionLiteralSplitterStepSolver(com.sri.ai.grinder.api.ExpressionLiteralSplitterStepSolver) ExpressionStepSolver(com.sri.ai.grinder.api.ExpressionStepSolver) QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver(com.sri.ai.grinder.core.solver.QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver) Sum(com.sri.ai.grinder.group.Sum) ExpressionStepSolverToLiteralSplitterStepSolverAdapter(com.sri.ai.grinder.core.solver.ExpressionStepSolverToLiteralSplitterStepSolverAdapter)

Example 8 with Sum

use of com.sri.ai.grinder.group.Sum 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());
}
Also used : Disjunction(com.sri.ai.grinder.group.Disjunction) Expression(com.sri.ai.expresso.api.Expression) DefaultMultiQuantifierEliminationProblem(com.sri.ai.grinder.core.solver.DefaultMultiQuantifierEliminationProblem) MultiQuantifierEliminationProblem(com.sri.ai.grinder.api.MultiQuantifierEliminationProblem) Conjunction(com.sri.ai.grinder.group.Conjunction) DefaultMultiQuantifierEliminationProblem(com.sri.ai.grinder.core.solver.DefaultMultiQuantifierEliminationProblem) DefaultSingleQuantifierEliminationProblem(com.sri.ai.grinder.core.solver.DefaultSingleQuantifierEliminationProblem) Sum(com.sri.ai.grinder.group.Sum) Test(org.junit.Test)

Aggregations

Sum (com.sri.ai.grinder.group.Sum)8 Expression (com.sri.ai.expresso.api.Expression)6 DefaultSingleQuantifierEliminationProblem (com.sri.ai.grinder.core.solver.DefaultSingleQuantifierEliminationProblem)4 ExpressionStepSolver (com.sri.ai.grinder.api.ExpressionStepSolver)3 MultiQuantifierEliminationProblem (com.sri.ai.grinder.api.MultiQuantifierEliminationProblem)3 DefaultMultiQuantifierEliminationProblem (com.sri.ai.grinder.core.solver.DefaultMultiQuantifierEliminationProblem)3 Test (org.junit.Test)3 ExpressionLiteralSplitterStepSolver (com.sri.ai.grinder.api.ExpressionLiteralSplitterStepSolver)2 ExpressionStepSolverToLiteralSplitterStepSolverAdapter (com.sri.ai.grinder.core.solver.ExpressionStepSolverToLiteralSplitterStepSolverAdapter)2 QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver (com.sri.ai.grinder.core.solver.QuantifierEliminationOnBodyInWhichIndexOnlyOccursInsideLiteralsStepSolver)2 Conjunction (com.sri.ai.grinder.group.Conjunction)2 DifferenceArithmeticTheory (com.sri.ai.grinder.theory.differencearithmetic.DifferenceArithmeticTheory)2 Context (com.sri.ai.grinder.api.Context)1 SingleQuantifierEliminationProblem (com.sri.ai.grinder.api.SingleQuantifierEliminationProblem)1 SingleVariableConstraint (com.sri.ai.grinder.api.SingleVariableConstraint)1 Theory (com.sri.ai.grinder.api.Theory)1 TrueContext (com.sri.ai.grinder.core.TrueContext)1 Disjunction (com.sri.ai.grinder.group.Disjunction)1 SamplingProceduralAttachmentSingleQuantifierEliminator (com.sri.ai.grinder.interpreter.SamplingProceduralAttachmentSingleQuantifierEliminator)1 CommonSimplifier (com.sri.ai.grinder.library.commonrewriters.CommonSimplifier)1