Search in sources :

Example 86 with Expression

use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.

the class SelectExpressionsSatisfyingComparisonStepSolverTest method test.

@Test
public void test() {
    TheoryTestingSupport theoryTestingSupport = TheoryTestingSupport.make(makeRandom(), new DifferenceArithmeticTheory(true, true));
    Context context = theoryTestingSupport.makeContextWithTestingInformation();
    List<String> expressionStrings;
    Expression bound;
    Expression expected;
    expressionStrings = list("I", "J");
    bound = parse("J");
    expected = parse("if I < J then list(I) else list()");
    runTest(expressionStrings, bound, expected, context);
    expressionStrings = list("I", "2", "J");
    bound = parse("3");
    expected = parse("if I < 3 then if J < 3 then list(I, 2, J) else list(I, 2) else if J < 3 then list(2, J) else list(2)");
    runTest(expressionStrings, bound, expected, context);
    expressionStrings = list();
    bound = parse("3");
    expected = parse("list()");
    runTest(expressionStrings, bound, expected, context);
    expressionStrings = list("I", "2", "J");
    bound = parse("infinity");
    expected = parse("list(I, 2, J)");
    runTest(expressionStrings, bound, expected, context);
    expressionStrings = list("I", "2", "J");
    bound = parse("-infinity");
    expected = parse("list()");
    runTest(expressionStrings, bound, expected, context);
    expressionStrings = list("I", "2", "infinity");
    bound = parse("3");
    expected = parse("if I < 3 then list(I, 2) else list(2)");
    runTest(expressionStrings, bound, expected, context);
}
Also used : Context(com.sri.ai.grinder.sgdpllt.api.Context) Expression(com.sri.ai.expresso.api.Expression) TheoryTestingSupport(com.sri.ai.grinder.sgdpllt.tester.TheoryTestingSupport) DifferenceArithmeticTheory(com.sri.ai.grinder.sgdpllt.theory.differencearithmetic.DifferenceArithmeticTheory) Test(org.junit.Test)

Example 87 with Expression

use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.

the class BruteForceCommonInterpreterTest method runTest.

public void runTest(String expression, String expected, BruteForceCommonInterpreter interpreter, Context context) {
    Expression result = interpreter.apply(parse(expression), context);
    Assert.assertEquals(parse(expected), result);
}
Also used : Expression(com.sri.ai.expresso.api.Expression)

Example 88 with Expression

use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.

the class BruteForceCommonInterpreterTest method test.

@Test
public void test() {
    LinkedHashMap<Expression, Expression> assignment = map(parse("Two"), Expressions.TWO);
    BruteForceCommonInterpreter interpreter = new BruteForceCommonInterpreter();
    Context context = new TrueContext();
    context = AbstractIterativeMultiIndexQuantifierElimination.extendAssignments(assignment, context);
    String expression;
    String expected;
    expression = "max({{ (on I in 0..3) max( {{ (on J in 0..3) I + J : I != J }} ) }})";
    expected = "5";
    runTest(expression, expected, interpreter, context);
    expression = "3 * (Two + 5 - 3)*(-10)";
    expected = "-120";
    runTest(expression, expected, interpreter, context);
    expression = "3 * (2 + 5 - 3)*(-10)";
    expected = "-120";
    runTest(expression, expected, interpreter, context);
    expression = "sum({{ (on x in 0..2)  x }} )";
    expected = "3";
    runTest(expression, expected, interpreter, context);
    expression = "sum({{ (on f in 0..2 -> Boolean)  if f(0) then 2 else 3 }} )";
    expected = "20";
    runTest(expression, expected, interpreter, context);
    expression = "sum({{ (on f in 0..2 -> Boolean)  if f(0) and f(1) then 2 else 3  :  f(2) }} )";
    expected = "11";
    runTest(expression, expected, interpreter, context);
    expression = "sum({{ (on f in 0..2 -> Boolean)  " + "if f(0) and f(1) then 2 else | f in 0..2 x 0..2 -> Boolean : f(0, 0) |  " + ":  f(2) }} )";
    expected = "770";
    runTest(expression, expected, interpreter, context);
    expression = "sum({{ (on f in '->'(x(1..2), Boolean), g in '->'(x(1..2), Boolean))  if f(1) and g(2) then 2 else 3  :  f(2) }} )";
    expected = "22";
    runTest(expression, expected, interpreter, context);
    expression = "| f in '->'(x(0..2, 0..2), Boolean) : f(0, 0) |";
    expected = "256";
    runTest(expression, expected, interpreter, context);
    expression = "| f in 0..2 x 0..2 -> Boolean : f(0, 0) |";
    expected = "256";
    runTest(expression, expected, interpreter, context);
    expression = "| f in 0..2 x 0..2 -> Boolean, g in 0..2 -> Boolean : f(0, 0) |";
    expected = "2048";
    runTest(expression, expected, interpreter, context);
    expression = "sum( {{ (on p in Boolean) if p then 1 else 2 }} )";
    expected = "3";
    runTest(expression, expected, interpreter, context);
}
Also used : TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) Context(com.sri.ai.grinder.sgdpllt.api.Context) BruteForceCommonInterpreter(com.sri.ai.grinder.sgdpllt.interpreter.BruteForceCommonInterpreter) Expression(com.sri.ai.expresso.api.Expression) TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) Test(org.junit.Test)

Example 89 with Expression

use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.

the class IntensionalSetConditionSimplifierTest method testBasicCases.

@Test
public void testBasicCases() {
    Expression iSet = parse("{(on I in 1..10) (I, 2) : I != 5}");
    Assert.assertEquals(parse("{(on I in 1..10) (I, 2) : I != 5}"), simplifier.apply(iSet, context));
    iSet = parse("{{(on I in 1..10) (I, 2) : I != 5}}");
    Assert.assertEquals(parse("{{(on I in 1..10) (I, 2) : I != 5}}"), simplifier.apply(iSet, context));
    iSet = parse("{(on I in 1..10) (I, 2) : I != 5 and I = 5}");
    Assert.assertEquals(parse("{(on I in 1..10) (I, 2) : false}"), simplifier.apply(iSet, context));
    iSet = parse("{{(on I in 1..10) (I, 2) : I != 5 and I = 5}}");
    Assert.assertEquals(parse("{{(on I in 1..10) (I, 2) : false}}"), simplifier.apply(iSet, context));
}
Also used : Expression(com.sri.ai.expresso.api.Expression) Test(org.junit.Test)

Example 90 with Expression

use of com.sri.ai.expresso.api.Expression in project aic-expresso by aic-sri-international.

the class MeasureTest method measure.

private Rational measure(String testIntensionalSetString) {
    Expression testIntensionalSetExpression = parse(testIntensionalSetString);
    Expression properlyConditionedIntensionalSetExpression = testIntensionalSetExpression;
    if (Sets.isIntensionalSet(testIntensionalSetExpression)) {
        IntensionalSet intensionalSet = (IntensionalSet) testIntensionalSetExpression;
        List<Expression> indices = IndexExpressions.getIndices(intensionalSet.getIndexExpressions());
        if (indices.size() == 1) {
            Expression index = indices.get(0);
            Context intensionalSetContext = context.extendWith(intensionalSet.getIndexExpressions());
            Type type = GrinderUtil.getType(index, intensionalSetContext);
            if (type instanceof RealExpressoType || type instanceof RealInterval) {
                SingleVariableLinearRealArithmeticConstraint singleVariableConstraint = new SingleVariableLinearRealArithmeticConstraint(index, true, context.getTheory());
                singleVariableConstraint = (SingleVariableLinearRealArithmeticConstraint) singleVariableConstraint.conjoin(intensionalSet.getCondition(), intensionalSetContext);
                properlyConditionedIntensionalSetExpression = IntensionalSet.make(Sets.isMultiSet(intensionalSet) ? IntensionalSet.MULTI_SET_LABEL : IntensionalSet.UNI_SET_LABEL, intensionalSet.getIndexExpressions(), intensionalSet.getHead(), singleVariableConstraint);
            }
        }
    }
    Rational result = Measure.get(properlyConditionedIntensionalSetExpression, context);
    return result;
}
Also used : Context(com.sri.ai.grinder.sgdpllt.api.Context) TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) Type(com.sri.ai.expresso.api.Type) RealExpressoType(com.sri.ai.expresso.type.RealExpressoType) IntensionalSet(com.sri.ai.expresso.api.IntensionalSet) Rational(com.sri.ai.util.math.Rational) Expression(com.sri.ai.expresso.api.Expression) RealExpressoType(com.sri.ai.expresso.type.RealExpressoType) SingleVariableLinearRealArithmeticConstraint(com.sri.ai.grinder.sgdpllt.theory.linearrealarithmetic.SingleVariableLinearRealArithmeticConstraint) RealInterval(com.sri.ai.expresso.type.RealInterval)

Aggregations

Expression (com.sri.ai.expresso.api.Expression)1392 Test (org.junit.Test)259 ArrayList (java.util.ArrayList)196 Context (com.sri.ai.grinder.api.Context)187 Type (com.sri.ai.expresso.api.Type)124 TrueContext (com.sri.ai.grinder.core.TrueContext)113 IndexExpressionsSet (com.sri.ai.expresso.api.IndexExpressionsSet)100 ExtensionalIndexExpressionsSet (com.sri.ai.expresso.core.ExtensionalIndexExpressionsSet)91 QuantifiedExpression (com.sri.ai.expresso.api.QuantifiedExpression)90 Context (com.sri.ai.grinder.sgdpllt.api.Context)87 Theory (com.sri.ai.grinder.api.Theory)78 Map (java.util.Map)78 LambdaExpression (com.sri.ai.expresso.api.LambdaExpression)71 IntensionalSet (com.sri.ai.expresso.api.IntensionalSet)68 List (java.util.List)68 DefaultLambdaExpression (com.sri.ai.expresso.core.DefaultLambdaExpression)63 CommonTheory (com.sri.ai.grinder.application.CommonTheory)55 LinkedHashMap (java.util.LinkedHashMap)55 LinkedHashSet (java.util.LinkedHashSet)54 Pair (com.sri.ai.util.base.Pair)52