Search in sources :

Example 1 with BOOLEAN_TYPE

use of com.sri.ai.grinder.helper.GrinderUtil.BOOLEAN_TYPE 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.");
}
Also used : Context(com.sri.ai.grinder.sgdpllt.api.Context) TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) Arrays(java.util.Arrays) PropositionalTheory(com.sri.ai.grinder.sgdpllt.theory.propositional.PropositionalTheory) Categorical(com.sri.ai.expresso.type.Categorical) DifferenceArithmeticTheory(com.sri.ai.grinder.sgdpllt.theory.differencearithmetic.DifferenceArithmeticTheory) Expression(com.sri.ai.expresso.api.Expression) IntegerInterval(com.sri.ai.expresso.type.IntegerInterval) Util.map(com.sri.ai.util.Util.map) BOOLEAN_TYPE(com.sri.ai.grinder.helper.GrinderUtil.BOOLEAN_TYPE) Expressions.parse(com.sri.ai.expresso.helper.Expressions.parse) OptionParser(joptsimple.OptionParser) GUIConsoleIterator(com.sri.ai.util.console.gui.GUIConsoleIterator) OptionSet(joptsimple.OptionSet) ConsoleIterator(com.sri.ai.util.console.ConsoleIterator) OptionSpec(joptsimple.OptionSpec) Util.join(com.sri.ai.util.Util.join) Collection(java.util.Collection) Util.list(com.sri.ai.util.Util.list) RealInterval(com.sri.ai.expresso.type.RealInterval) Util.mapIntoList(com.sri.ai.util.Util.mapIntoList) EqualityTheory(com.sri.ai.grinder.sgdpllt.theory.equality.EqualityTheory) Context(com.sri.ai.grinder.sgdpllt.api.Context) LinearRealArithmeticTheory(com.sri.ai.grinder.sgdpllt.theory.linearrealarithmetic.LinearRealArithmeticTheory) Theory(com.sri.ai.grinder.sgdpllt.api.Theory) Beta(com.google.common.annotations.Beta) List(java.util.List) TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) CompoundTheory(com.sri.ai.grinder.sgdpllt.theory.compound.CompoundTheory) Expressions.makeSymbol(com.sri.ai.expresso.helper.Expressions.makeSymbol) DefaultConsoleIterator(com.sri.ai.util.console.DefaultConsoleIterator) TupleTheory(com.sri.ai.grinder.sgdpllt.theory.tuple.TupleTheory) EqualityTheory(com.sri.ai.grinder.sgdpllt.theory.equality.EqualityTheory) DifferenceArithmeticTheory(com.sri.ai.grinder.sgdpllt.theory.differencearithmetic.DifferenceArithmeticTheory) IntegerInterval(com.sri.ai.expresso.type.IntegerInterval) LinearRealArithmeticTheory(com.sri.ai.grinder.sgdpllt.theory.linearrealarithmetic.LinearRealArithmeticTheory) PropositionalTheory(com.sri.ai.grinder.sgdpllt.theory.propositional.PropositionalTheory) GUIConsoleIterator(com.sri.ai.util.console.gui.GUIConsoleIterator) ConsoleIterator(com.sri.ai.util.console.ConsoleIterator) DefaultConsoleIterator(com.sri.ai.util.console.DefaultConsoleIterator) Categorical(com.sri.ai.expresso.type.Categorical) CompoundTheory(com.sri.ai.grinder.sgdpllt.theory.compound.CompoundTheory) TupleTheory(com.sri.ai.grinder.sgdpllt.theory.tuple.TupleTheory) TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) RealInterval(com.sri.ai.expresso.type.RealInterval)

Aggregations

Beta (com.google.common.annotations.Beta)1 Expression (com.sri.ai.expresso.api.Expression)1 Expressions.makeSymbol (com.sri.ai.expresso.helper.Expressions.makeSymbol)1 Expressions.parse (com.sri.ai.expresso.helper.Expressions.parse)1 Categorical (com.sri.ai.expresso.type.Categorical)1 IntegerInterval (com.sri.ai.expresso.type.IntegerInterval)1 RealInterval (com.sri.ai.expresso.type.RealInterval)1 BOOLEAN_TYPE (com.sri.ai.grinder.helper.GrinderUtil.BOOLEAN_TYPE)1 Context (com.sri.ai.grinder.sgdpllt.api.Context)1 Theory (com.sri.ai.grinder.sgdpllt.api.Theory)1 TrueContext (com.sri.ai.grinder.sgdpllt.core.TrueContext)1 CompoundTheory (com.sri.ai.grinder.sgdpllt.theory.compound.CompoundTheory)1 DifferenceArithmeticTheory (com.sri.ai.grinder.sgdpllt.theory.differencearithmetic.DifferenceArithmeticTheory)1 EqualityTheory (com.sri.ai.grinder.sgdpllt.theory.equality.EqualityTheory)1 LinearRealArithmeticTheory (com.sri.ai.grinder.sgdpllt.theory.linearrealarithmetic.LinearRealArithmeticTheory)1 PropositionalTheory (com.sri.ai.grinder.sgdpllt.theory.propositional.PropositionalTheory)1 TupleTheory (com.sri.ai.grinder.sgdpllt.theory.tuple.TupleTheory)1 Util.join (com.sri.ai.util.Util.join)1 Util.list (com.sri.ai.util.Util.list)1 Util.map (com.sri.ai.util.Util.map)1