use of com.sri.ai.grinder.core.TrueContext in project aic-expresso by aic-sri-international.
the class CompoundTheoryWithDifferenceArithmeticTest method basicTests.
@Test
public void basicTests() {
TheoryTestingSupport theoryTestingSupport = TheoryTestingSupport.make(makeRandom(), new CompoundTheory(new EqualityTheory(false, true), new DifferenceArithmeticTheory(false, true), new PropositionalTheory()));
Expression condition = parse("X = Y and Y = X and P and not Q and P and X = a and X != b");
Context context = theoryTestingSupport.makeContextWithTestingInformation();
Constraint constraint = new CompleteMultiVariableContext(theoryTestingSupport.getTheory(), context);
constraint = constraint.conjoin(condition, context);
Expression expected = parse("(Y = a) and not Q and P and (X = Y)");
assertEquals(expected, constraint);
// nested indices
Expression expression = parse("sum({{(on I in 1..2, J in 2..3) sum({{ (on I in 1..10, J in 1..2) I + J : I != J }}) }})");
context = new TrueContext(theoryTestingSupport.getTheory());
expected = parse("536");
Expression actual = theoryTestingSupport.getTheory().evaluate(expression, context);
println(actual);
assertEquals(expected, actual);
}
use of com.sri.ai.grinder.core.TrueContext in project aic-expresso by aic-sri-international.
the class BasicTest method isLiteralTests.
@Test
public void isLiteralTests() {
Expression expression;
boolean expected;
Context context = new TrueContext();
context = context.makeCloneWithAdditionalRegisteredSymbolsAndTypes(map(parse("X"), parse("Real"), parse("Y"), parse("Real"), parse("Z"), parse("Real"), parse("W"), parse("Integer")));
expression = parse("1 >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("X >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("-X >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("X - Y >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("X + Y >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("X - Y + 3 >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("X - Y + 3 + Z >= Z");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("X - X + X - Y + Y - Z + 1 - 5 >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
// Must be linear
expression = parse("X^2 >= 0");
expected = false;
runIsLiteralTest(expression, expected, context);
expression = parse("X*Y >= 0");
expected = false;
runIsLiteralTest(expression, expected, context);
expression = parse("X*X - Y >= 0");
expected = false;
runIsLiteralTest(expression, expected, context);
expression = parse("2*X -3*Y + 3 >= 0");
expected = true;
runIsLiteralTest(expression, expected, context);
// Variables must be real
expression = parse("2*X - 2*X + X - 2*W + 2*W - 2*Z + 1 - 5 >= -Z");
expected = true;
runIsLiteralTest(expression, expected, context);
expression = parse("W - X >= 0");
expected = false;
runIsLiteralTest(expression, expected, context);
// Sides should be polynomials
expression = parse("2*f() > 0");
expected = false;
runIsLiteralTest(expression, expected, context);
}
use of com.sri.ai.grinder.core.TrueContext in project aic-expresso by aic-sri-international.
the class TupleRewriterTest method testTupleValuedFreeVariablesSimplifier.
@Test
public void testTupleValuedFreeVariablesSimplifier() {
Context tupleTheoryContext = new TrueContext(new CompoundTheory(new DifferenceArithmeticTheory(false, false), new TupleTheory()));
TupleType nTupleType = new TupleType(new IntegerInterval(1, 10), new IntegerInterval(1, 10));
tupleTheoryContext = (Context) GrinderUtil.extendRegistryWith(map("N", nTupleType.toString()), Arrays.asList(nTupleType), tupleTheoryContext);
TupleValuedFreeVariablesSimplifier simplifier = new TupleValuedFreeVariablesSimplifier();
Expression expression = parse("sum( {{ (on X in 1..10) if N = (2, X) then 2 else 3 }} )");
Expression simplified = simplifier.apply(expression, tupleTheoryContext);
Assert.assertEquals(parse("if get(N, 1) = 2 then 29 else 30"), simplified);
}
use of com.sri.ai.grinder.core.TrueContext in project aic-expresso by aic-sri-international.
the class AbstractSingleVariableNumericConstraintFeasibilityRegionStepSolver method applyAndSimplifyWithoutConsideringContextualConstraint.
/**
* A method for simplifying an expression according to the context's theory, types and global objects,
* but <i>without</i> considering the contextual constraint,
* for the purpose of computing information about the step solver that is constant across contexts
* (that share the same basic information).
* Note that the context is still an argument, for the sake of providing the basic information,
* but the contextual constraint is ignored.
* @param comparison
* @param arguments
* @param context
* @return
*/
protected Expression applyAndSimplifyWithoutConsideringContextualConstraint(String comparison, ArrayList<Expression> arguments, Context context) {
Expression unsimplifiedAtom = apply(comparison, arguments);
TrueContext typeContext = new TrueContext(context);
Expression result = constraint.getTheory().simplify(unsimplifiedAtom, typeContext);
return result;
}
use of com.sri.ai.grinder.core.TrueContext in project aic-expresso by aic-sri-international.
the class GrinderUtil method makeContext.
public static Context makeContext(Map<String, String> mapFromSymbolNameToTypeName, Map<String, String> mapFromCategoricalTypeNameToSizeString, Collection<Type> additionalTypes, Predicate<Expression> isUniquelyNamedConstantPredicate, Theory theory) {
Context result = (Context) extendRegistryWith(mapFromSymbolNameToTypeName, additionalTypes, mapFromCategoricalTypeNameToSizeString, isUniquelyNamedConstantPredicate, new TrueContext(theory));
result = result.setIsUniquelyNamedConstantPredicate(isUniquelyNamedConstantPredicate);
return result;
}
Aggregations