Search in sources :

Example 6 with Symbol

use of com.sri.ai.expresso.api.Symbol in project aic-expresso by aic-sri-international.

the class Expressions method standardizeApart.

/**
 * Given a symbol, a predicate indicating what symbols are already defined in some situation,
 * and an expression possibly containing the symbol,
 * prime the symbol until it is unique,
 * and return the new symbol and the result of replacing the old symbol by the new in the expression containing it.
 * @param symbol
 * @param alreadyDefined
 * @param containingSymbol
 * @return the new symbol and the result of replacing the old symbol by the new in the expression containing it.
 */
public static PairOf<Expression> standardizeApart(Expression symbol, Predicate<Expression> alreadyDefined, Expression containingSymbol) {
    Expression newSymbol = symbol;
    while (alreadyDefined.apply(newSymbol)) {
        newSymbol = primedUntilUnique(newSymbol, s -> !alreadyDefined.apply(s));
    }
    Expression newExpressionContainingSymbol = containingSymbol.replaceSymbol(symbol, newSymbol, null);
    PairOf<Expression> result = pairOf(newSymbol, newExpressionContainingSymbol);
    return result;
}
Also used : Arrays(java.util.Arrays) CountingFormula(com.sri.ai.expresso.api.CountingFormula) AntlrGrinderParserWrapper(com.sri.ai.grinder.parser.antlr.AntlrGrinderParserWrapper) DefaultLambdaExpression(com.sri.ai.expresso.core.DefaultLambdaExpression) Rational(com.sri.ai.util.math.Rational) Expression(com.sri.ai.expresso.api.Expression) SyntaxLeaf(com.sri.ai.expresso.api.SyntaxLeaf) And(com.sri.ai.grinder.library.boole.And) ExtensionalIndexExpressionsSet(com.sri.ai.expresso.core.ExtensionalIndexExpressionsSet) Symbol(com.sri.ai.expresso.api.Symbol) DefaultExistentiallyQuantifiedFormula(com.sri.ai.expresso.core.DefaultExistentiallyQuantifiedFormula) IndexExpressions(com.sri.ai.grinder.library.indexexpression.IndexExpressions) Map(java.util.Map) DefaultFunctionApplication(com.sri.ai.expresso.core.DefaultFunctionApplication) Context(com.sri.ai.grinder.api.Context) IntegerIterator(com.sri.ai.util.collect.IntegerIterator) Util.thereExists(com.sri.ai.util.Util.thereExists) Function(com.google.common.base.Function) DefaultIntensionalMultiSet(com.sri.ai.expresso.core.DefaultIntensionalMultiSet) Collection(java.util.Collection) ExpressionAndSyntacticContext(com.sri.ai.expresso.api.ExpressionAndSyntacticContext) ZipIterator(com.sri.ai.util.collect.ZipIterator) Set(java.util.Set) Util.mapIntoList(com.sri.ai.util.Util.mapIntoList) IntensionalSet(com.sri.ai.expresso.api.IntensionalSet) IsVariable(com.sri.ai.grinder.library.IsVariable) List(java.util.List) Predicate(com.google.common.base.Predicate) DefaultIntensionalUniSet(com.sri.ai.expresso.core.DefaultIntensionalUniSet) FunctorConstants(com.sri.ai.grinder.library.FunctorConstants) TIMES(com.sri.ai.grinder.library.FunctorConstants.TIMES) UnaryMinus(com.sri.ai.grinder.library.number.UnaryMinus) Tuple(com.sri.ai.expresso.api.Tuple) PairOf(com.sri.ai.util.base.PairOf) SyntaxTree(com.sri.ai.expresso.api.SyntaxTree) Stack(java.util.Stack) ArrayList(java.util.ArrayList) ExtensionalSets(com.sri.ai.grinder.library.set.extensional.ExtensionalSets) LinkedHashMap(java.util.LinkedHashMap) SingletonListMaker(com.sri.ai.util.base.SingletonListMaker) Lists(com.google.common.collect.Lists) NotContainedBy(com.sri.ai.util.base.NotContainedBy) IndexExpressionsSet(com.sri.ai.expresso.api.IndexExpressionsSet) DefaultCountingFormula(com.sri.ai.expresso.core.DefaultCountingFormula) DefaultSymbol(com.sri.ai.expresso.core.DefaultSymbol) Registry(com.sri.ai.grinder.api.Registry) ThereExists(com.sri.ai.grinder.library.boole.ThereExists) CompoundSyntaxTree(com.sri.ai.expresso.api.CompoundSyntaxTree) DefaultRegistry(com.sri.ai.grinder.core.DefaultRegistry) LinkedList(java.util.LinkedList) FunctionIterator(com.sri.ai.util.collect.FunctionIterator) LinkedHashSet(java.util.LinkedHashSet) Pair(com.sri.ai.util.base.Pair) DefaultExtensionalUniSet(com.sri.ai.expresso.core.DefaultExtensionalUniSet) LambdaExpression(com.sri.ai.expresso.api.LambdaExpression) Type(com.sri.ai.expresso.api.Type) Iterator(java.util.Iterator) Parser(com.sri.ai.expresso.api.Parser) DefaultUniversallyQuantifiedFormula(com.sri.ai.expresso.core.DefaultUniversallyQuantifiedFormula) DefaultTuple(com.sri.ai.expresso.core.DefaultTuple) Beta(com.google.common.annotations.Beta) Theory(com.sri.ai.grinder.api.Theory) FunctionApplication(com.sri.ai.expresso.api.FunctionApplication) FunctionSignature(com.sri.ai.grinder.helper.FunctionSignature) PruningPredicate(com.sri.ai.grinder.core.PruningPredicate) PairOf.pairOf(com.sri.ai.util.base.PairOf.pairOf) DefaultExtensionalMultiSet(com.sri.ai.expresso.core.DefaultExtensionalMultiSet) ForAll(com.sri.ai.grinder.library.boole.ForAll) Util(com.sri.ai.util.Util) Equals(com.sri.ai.util.base.Equals) Collections(java.util.Collections) DefaultLambdaExpression(com.sri.ai.expresso.core.DefaultLambdaExpression) Expression(com.sri.ai.expresso.api.Expression) LambdaExpression(com.sri.ai.expresso.api.LambdaExpression)

Example 7 with Symbol

use of com.sri.ai.expresso.api.Symbol in project aic-expresso by aic-sri-international.

the class Expressions method parseTextAndMakeSymbolOrStringLiteral.

public static Symbol parseTextAndMakeSymbolOrStringLiteral(String symbolValue) {
    boolean isSingleQuoted = symbolValue.startsWith("'") && symbolValue.endsWith("'");
    boolean isDoubleQuoted = symbolValue.startsWith("\"") && symbolValue.endsWith("\"");
    if (isSingleQuoted || isDoubleQuoted) {
        // When parsing, whether a single quoted symbol or a string literal (i.e. double quoted)
        // the value is that within the quotes and not the quotes themselves.
        symbolValue = symbolValue.substring(1, symbolValue.length() - 1);
    }
    Symbol result;
    if (isDoubleQuoted) {
        result = makeStringLiteral(symbolValue);
    } else {
        result = makeSymbol(symbolValue);
    }
    return result;
}
Also used : Symbol(com.sri.ai.expresso.api.Symbol) DefaultSymbol(com.sri.ai.expresso.core.DefaultSymbol)

Example 8 with Symbol

use of com.sri.ai.expresso.api.Symbol in project aic-expresso by aic-sri-international.

the class AssignmentsIteratorTest method test3.

@Test
public void test3() {
    Registry registry = new DefaultRegistry();
    Type peopleType = new Categorical("People", 4, arrayList(makeSymbol("oscar"), makeSymbol("mary")));
    Type petsType = new Categorical("Pets", 3, arrayList(makeSymbol("fido"), makeSymbol("purrs")));
    Symbol x = makeSymbol("X");
    Symbol y = makeSymbol("Y");
    String expected = "{X=oscar, Y=fido}\n" + "{X=mary, Y=fido}\n" + "{X=people3, Y=fido}\n" + "{X=people4, Y=fido}\n" + "{X=oscar, Y=purrs}\n" + "{X=mary, Y=purrs}\n" + "{X=people3, Y=purrs}\n" + "{X=people4, Y=purrs}\n" + "{X=oscar, Y=pets3}\n" + "{X=mary, Y=pets3}\n" + "{X=people3, Y=pets3}\n" + "{X=people4, Y=pets3}";
    Symbol myPeopleTypeExpression = makeSymbol(peopleType.getName());
    Symbol myPetsTypeExpression = makeSymbol(petsType.getName());
    registry = registry.makeNewContextWithAddedType(peopleType);
    registry = registry.makeNewContextWithAddedType(petsType);
    registry = registry.makeCloneWithAdditionalRegisteredSymbolsAndTypes(map(x, myPeopleTypeExpression, y, myPetsTypeExpression));
    AssignmentMapsIterator assignmentsIterator = new AssignmentMapsIterator(list(x, y), registry);
    String actual = join("\n", assignmentsIterator);
    // System.out.println(actual);
    assertEquals(expected, actual);
}
Also used : AssignmentMapsIterator(com.sri.ai.grinder.helper.AssignmentMapsIterator) Type(com.sri.ai.expresso.api.Type) Expressions.makeSymbol(com.sri.ai.expresso.helper.Expressions.makeSymbol) Symbol(com.sri.ai.expresso.api.Symbol) DefaultRegistry(com.sri.ai.grinder.core.DefaultRegistry) Registry(com.sri.ai.grinder.api.Registry) DefaultRegistry(com.sri.ai.grinder.core.DefaultRegistry) Categorical(com.sri.ai.expresso.type.Categorical) Test(org.junit.Test)

Example 9 with Symbol

use of com.sri.ai.expresso.api.Symbol in project aic-expresso by aic-sri-international.

the class AssignmentsIteratorTest method test2.

@Test
public void test2() {
    Registry registry = new DefaultRegistry();
    Type myType = new Categorical("People", 2, arrayList(makeSymbol("oscar"), makeSymbol("mary")));
    Symbol x = makeSymbol("X");
    Symbol y = makeSymbol("Y");
    String expected = "{X=oscar, Y=oscar}\n" + "{X=mary, Y=oscar}\n" + "{X=oscar, Y=mary}\n" + "{X=mary, Y=mary}";
    Symbol myTypeExpression = makeSymbol(myType.getName());
    registry = registry.makeNewContextWithAddedType(myType);
    registry = registry.makeCloneWithAdditionalRegisteredSymbolsAndTypes(map(x, myTypeExpression, y, myTypeExpression));
    AssignmentMapsIterator assignmentsIterator = new AssignmentMapsIterator(list(x, y), registry);
    String actual = join("\n", assignmentsIterator);
    // System.out.println(actual);
    assertEquals(expected, actual);
}
Also used : AssignmentMapsIterator(com.sri.ai.grinder.helper.AssignmentMapsIterator) Type(com.sri.ai.expresso.api.Type) Expressions.makeSymbol(com.sri.ai.expresso.helper.Expressions.makeSymbol) Symbol(com.sri.ai.expresso.api.Symbol) DefaultRegistry(com.sri.ai.grinder.core.DefaultRegistry) Registry(com.sri.ai.grinder.api.Registry) DefaultRegistry(com.sri.ai.grinder.core.DefaultRegistry) Categorical(com.sri.ai.expresso.type.Categorical) Test(org.junit.Test)

Example 10 with Symbol

use of com.sri.ai.expresso.api.Symbol in project aic-expresso by aic-sri-international.

the class GrinderUtilTest method setUp.

@Before
public void setUp() {
    registry = new DefaultRegistry();
    Symbol x = makeSymbol("X");
    Symbol y = makeSymbol("Y");
    Symbol myPeopleTypeExpression = makeSymbol(peopleType.getName());
    Symbol myPetsTypeExpression = makeSymbol(petsType.getName());
    registry = registry.makeNewContextWithAddedType(peopleType);
    registry = registry.makeNewContextWithAddedType(petsType);
    registry = registry.makeCloneWithAdditionalRegisteredSymbolsAndTypes(map(x, myPeopleTypeExpression, y, myPetsTypeExpression));
}
Also used : Expressions.makeSymbol(com.sri.ai.expresso.helper.Expressions.makeSymbol) Symbol(com.sri.ai.expresso.api.Symbol) DefaultRegistry(com.sri.ai.grinder.core.DefaultRegistry) Before(org.junit.Before)

Aggregations

Symbol (com.sri.ai.expresso.api.Symbol)22 Expression (com.sri.ai.expresso.api.Expression)15 Expressions.makeSymbol (com.sri.ai.expresso.helper.Expressions.makeSymbol)13 Type (com.sri.ai.expresso.api.Type)6 DefaultSymbol (com.sri.ai.expresso.core.DefaultSymbol)6 Registry (com.sri.ai.grinder.api.Registry)6 ExtensionalIndexExpressionsSet (com.sri.ai.expresso.core.ExtensionalIndexExpressionsSet)5 DefaultRegistry (com.sri.ai.grinder.core.DefaultRegistry)5 ArrayList (java.util.ArrayList)5 Predicate (com.google.common.base.Predicate)4 IndexExpressionsSet (com.sri.ai.expresso.api.IndexExpressionsSet)4 Util (com.sri.ai.util.Util)4 PairOf (com.sri.ai.util.base.PairOf)4 Rational (com.sri.ai.util.math.Rational)4 Set (java.util.Set)4 Beta (com.google.common.annotations.Beta)3 IntensionalSet (com.sri.ai.expresso.api.IntensionalSet)3 DefaultExtensionalUniSet (com.sri.ai.expresso.core.DefaultExtensionalUniSet)3 DefaultTuple (com.sri.ai.expresso.core.DefaultTuple)3 TIMES (com.sri.ai.grinder.library.FunctorConstants.TIMES)3