use of com.sri.ai.util.console.ConsoleIterator 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.util.console.ConsoleIterator in project aic-expresso by aic-sri-international.
the class SymbolicShell method getConsole.
private static ConsoleIterator getConsole(String[] args) {
ConsoleIterator result = null;
OptionParser parser = new OptionParser();
OptionSpec<String> consoleType = parser.accepts("console", "Console type <gui or default>").withRequiredArg().ofType(String.class);
OptionSet options = parser.parse(args);
if (options.has(consoleType)) {
if ("gui".equalsIgnoreCase(options.valueOf(consoleType))) {
result = new GUIConsoleIterator();
}
}
if (result == null) {
result = new DefaultConsoleIterator();
}
return result;
}
Aggregations