Search in sources :

Example 6 with Categorical

use of com.sri.ai.expresso.type.Categorical 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)

Example 7 with Categorical

use of com.sri.ai.expresso.type.Categorical in project aic-expresso by aic-sri-international.

the class MeasureTest method testThrowsUnsupportedGreaterThan1Index.

@Test(expected = UnsupportedOperationException.class)
public void testThrowsUnsupportedGreaterThan1Index() {
    updateContextWithIndexAndType("N", new Categorical("People", 5, parse("p1"), parse("p2"), parse("p3"), parse("p4"), parse("p5")));
    measure("{{(on I in People, J in People) (I, J) : true}}");
}
Also used : Categorical(com.sri.ai.expresso.type.Categorical) Test(org.junit.Test)

Example 8 with Categorical

use of com.sri.ai.expresso.type.Categorical in project aic-expresso by aic-sri-international.

the class MeasureTest method testCategoricalTypeDomain.

@Test
public void testCategoricalTypeDomain() {
    updateContextWithIndexAndType("N", new Categorical("People", 5, parse("p1"), parse("p2"), parse("p3"), parse("p4"), parse("p5")));
    Assert.assertEquals(new Rational(5), measure("{{(on I in People) I : true}}"));
    Assert.assertEquals(new Rational(4), measure("{{(on I in People) I : I != p1}}"));
    Assert.assertEquals(new Rational(3), measure("{{(on I in People) I : I != p1 and I != p5}}"));
}
Also used : Rational(com.sri.ai.util.math.Rational) Categorical(com.sri.ai.expresso.type.Categorical) Test(org.junit.Test)

Example 9 with Categorical

use of com.sri.ai.expresso.type.Categorical in project aic-expresso by aic-sri-international.

the class SampleCommonInterpreterTest method testCategoricalEg2.

@Test
public void testCategoricalEg2() {
    updateContextWithIndexAndType("N", new Categorical("Person", 1000000));
    String intensionalSet = "{{(on I in Person) if I != person1 then 20 else 30 : I != person2 }}";
    String[][] functionNamesAndExactValues = new String[][] { // 42sec brute, 1186ms sample
    { "sum", "19999990" }, // 26sec brute,  762ms sample
    { "max", "30" }, // 25sec brute,  703ms sample
    { "product", "7.425492171971923688023442712229336E+1301028" } };
    runSampleCompareToExact(10000, true, intensionalSet, functionNamesAndExactValues);
}
Also used : Categorical(com.sri.ai.expresso.type.Categorical) Test(org.junit.Test)

Example 10 with Categorical

use of com.sri.ai.expresso.type.Categorical in project aic-expresso by aic-sri-international.

the class LambdaBetaReductionSimplifierTest method testNoReduction.

@Test
public void testNoReduction() {
    Type peopleType = new Categorical("People", 4, arrayList(makeSymbol("ann"), makeSymbol("bob"), makeSymbol("tom")));
    Context context = new TrueContext();
    context = context.add(peopleType);
    Assert.assertEquals(parse("(lambda X in People : if X = ann then 0 else if X = bob then 0 else 0)()"), simplifier.apply(parse("(lambda X in People : if X = ann then 0 else if X = bob then 0 else 0)()"), context));
    Assert.assertEquals(parse("(lambda X in People, Y in People : if X = ann then 0 else if Y = bob then 0 else 0)(ann)"), simplifier.apply(parse("(lambda X in People, Y in People : if X = ann then 0 else if Y = bob then 0 else 0)(ann)"), context));
    Assert.assertEquals(parse("(lambda X in People, Y in People : if X = ann then 0 else if Y = bob then 0 else 0)(ann, bob, tom)"), simplifier.apply(parse("(lambda X in People, Y in People : if X = ann then 0 else if Y = bob then 0 else 0)(ann, bob, tom)"), context));
}
Also used : TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) Context(com.sri.ai.grinder.sgdpllt.api.Context) Type(com.sri.ai.expresso.api.Type) Categorical(com.sri.ai.expresso.type.Categorical) TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) Test(org.junit.Test)

Aggregations

Categorical (com.sri.ai.expresso.type.Categorical)25 Test (org.junit.Test)19 Type (com.sri.ai.expresso.api.Type)12 Expression (com.sri.ai.expresso.api.Expression)8 IntegerInterval (com.sri.ai.expresso.type.IntegerInterval)8 FunctionType (com.sri.ai.expresso.type.FunctionType)6 Expressions.makeSymbol (com.sri.ai.expresso.helper.Expressions.makeSymbol)5 RealInterval (com.sri.ai.expresso.type.RealInterval)5 TupleType (com.sri.ai.expresso.type.TupleType)5 Symbol (com.sri.ai.expresso.api.Symbol)4 IntegerExpressoType (com.sri.ai.expresso.type.IntegerExpressoType)4 RealExpressoType (com.sri.ai.expresso.type.RealExpressoType)4 Registry (com.sri.ai.grinder.api.Registry)4 Context (com.sri.ai.grinder.sgdpllt.api.Context)4 AssignmentsIterator (com.sri.ai.grinder.helper.AssignmentsIterator)3 DefaultRegistry (com.sri.ai.grinder.sgdpllt.core.DefaultRegistry)3 TrueContext (com.sri.ai.grinder.sgdpllt.core.TrueContext)3 Beta (com.google.common.annotations.Beta)2 LambdaExpression (com.sri.ai.expresso.api.LambdaExpression)2 Expressions.parse (com.sri.ai.expresso.helper.Expressions.parse)2