use of com.sri.ai.expresso.type.IntegerInterval in project aic-expresso by aic-sri-international.
the class SetOfArgumentTuplesForFunctionOccurringInExpressionTest method setUp.
@Before
public void setUp() {
fName = parse("f");
fType = new FunctionType(new IntegerInterval("1..5"), new IntegerInterval("1..10"), new IntegerInterval("11..20"));
}
use of com.sri.ai.expresso.type.IntegerInterval 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.expresso.type.IntegerInterval in project aic-expresso by aic-sri-international.
the class SymbolicShell method main.
public static void main(String[] args) {
CompoundTheory theory = new CompoundTheory(new EqualityTheory(false, true), new DifferenceArithmeticTheory(false, false), new LinearRealArithmeticTheory(false, false), new TupleTheory(), new PropositionalTheory());
Context context = new TrueContext(theory);
context = context.add(BOOLEAN_TYPE);
context = context.add(new Categorical("People", 1000000, makeSymbol("ann"), makeSymbol("bob"), makeSymbol("ciaran")));
context = context.add(new IntegerInterval("Integer"));
context = context.add(new RealInterval("Real"));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("P"), makeSymbol("Boolean")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("Q"), makeSymbol("Boolean")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("R"), makeSymbol("Boolean")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("S"), makeSymbol("Boolean")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("C"), makeSymbol("People")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("D"), makeSymbol("People")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("E"), makeSymbol("People")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("I"), makeSymbol("Integer")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("J"), makeSymbol("Integer")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("K"), makeSymbol("Integer")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("X"), makeSymbol("Real")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("Y"), makeSymbol("Real")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("Z"), makeSymbol("Real")));
context = context.registerAdditionalSymbolsAndTypes(map(makeSymbol("T"), parse("(1..5 x 1..5)")));
ConsoleIterator consoleIterator = getConsole(args);
help(consoleIterator);
Collection<String> examples = list("sum({{ (on C in People) 3 }})", "sum({{ (on C in People) 3 : C != D }})", "product({{ (on C in People) 3 : C != D }})", "| {{ (on C in People) 3 : C != D }} |", "| { (on C in People) tuple(C) : C != D } |", "max({{ (on C in People) 3 : C != D }})", "sum({{ (on C in People, D in People) 3 : C != D }})", "sum({{ (on C in People) 3 : C != D and C != ann }})", "sum({{ (on C in People, P in Boolean) 3 : C != ann }})", "sum({{ (on C in People, P in Boolean) 3 : C != ann and not P }})", "sum({{ (on C in People, D in People) if C = ann and D != bob then 2 else 0 : for all E in People : E = ann => C = E }})", "sum({{ (on I in 1..100) I }})", "sum({{ (on I in 1..100) I : I != 3 and I != 5 and I != 500 }})", "sum({{ (on I in 1..100) I : I != J and I != 5 and I != 500 }})", "sum({{ (on I in 1..100) (I - J)^2 }})", "sum({{ (on I in 1..100) if I != K then (I - J)^2 else 0 }})", "sum({{ (on I in 1..100) I : I >= 3 and I < 21 }})", "sum({{ (on I in 1..100) I : I > J and I < 5 and I < 500 }})", "sum({{ (on I in 1..100) (I - J)^2 : I < 50 }})", "sum({{ (on X in [0;100]) 1 }})", "sum({{ (on X in [0;100[) 1 }})", "sum({{ (on X in ]0;100]) 1 }})", "sum({{ (on X in [0;100]) Y }})", "sum({{ (on X in [0;100]) X }})", "sum({{ (on X in [0;100]) X^2 }})", "sum({{ (on X in [0;100]) X + Y }})", "sum({{ (on X in [0;100]) 1 : Y < X and X < Z}})", "sum({{ (on X in Real) 1 : 0 <= X and X <= 100 and Y < X and X < Z}})", "for all X in Real : X > 0 or X <= 0", "for all X in ]0;10] : X > 0", "for all X in [0;10] : X > 0", "| X in 1..10 : X < 4 or X > 8 |", "| X in 1..10, Y in 3..5 : (X < 4 or X > 8) and Y != 5 |", "sum( {{ (on T in (1..4 x 1..4)) 10 }})", "sum( {{ (on T in (1..4 x 1..4)) 10 : T != (2, 3) }})", "sum( {{ (on T in (1..4 x 1..4)) 10 : T != (I, J) }})", "sum( {{ (on T in (1..4 x 1..4)) 10 : get(T, 1) != 2 }})");
for (String example : examples) {
consoleIterator.getOutputWriter().println(consoleIterator.getPrompt() + example);
interpretedInputParsedAsExpression(consoleIterator, theory, example, context);
consoleIterator.getOutputWriter().println("\n");
}
while (consoleIterator.hasNext()) {
String input = consoleIterator.next();
if (input.equals("")) {
consoleIterator.getOutputWriter().println();
} else if (input.startsWith("show")) {
consoleIterator.getOutputWriter().println("\n" + join(mapIntoList(context.getSymbolsAndTypes().entrySet(), e -> e.getKey() + ": " + e.getValue()), ", ") + "\n");
} else if (input.equals("debug")) {
debug = !debug;
consoleIterator.getOutputWriter().println("\nDebug toggled to " + debug + "\n");
} else if (input.equals("help")) {
help(consoleIterator);
} else {
context = interpretedInputParsedAsExpression(consoleIterator, theory, input, context);
}
}
consoleIterator.getOutputWriter().println("\nGoodbye.");
}
use of com.sri.ai.expresso.type.IntegerInterval in project aic-expresso by aic-sri-international.
the class IntensionalSetConditionSimplifierTest method setUp.
@Before
public void setUp() {
context = new TrueContext(new CompoundTheory(new DifferenceArithmeticTheory(false, false), new TupleTheory()));
IntegerInterval nType = new IntegerInterval(1, 10);
context = (Context) GrinderUtil.extendRegistryWith(map("N", nType.toString()), Arrays.asList(nType), context);
simplifier = new IntensionalSetConditionSimplifier();
}
use of com.sri.ai.expresso.type.IntegerInterval in project aic-expresso by aic-sri-international.
the class IntensionalSetFalseConditionToEmptySetSimplifierTest method setUp.
@Before
public void setUp() {
context = new TrueContext(new CompoundTheory(new DifferenceArithmeticTheory(false, false), new TupleTheory()));
IntegerInterval nType = new IntegerInterval(1, 10);
context = (Context) GrinderUtil.extendRegistryWith(map("N", nType.toString()), Arrays.asList(nType), context);
simplifier = new IntensionalSetFalseConditionToEmptySetSimplifier();
}
Aggregations