Search in sources :

Example 11 with Pair

use of com.sri.ai.util.base.Pair in project aic-expresso by aic-sri-international.

the class TupleQuantifierSimplifier method update.

private static Pair<IndexExpressionsSet, Expression> update(Expression expression, Map<Expression, Expression> indexToTypeMap, Map<Expression, Expression> indexToTupleOfVars, Context context) {
    List<Expression> indexExpressions = new ArrayList<>();
    Expression substitutedExpression = expression;
    for (Map.Entry<Expression, Expression> entry : indexToTypeMap.entrySet()) {
        Expression entryIndex = entry.getKey();
        Expression entryType = entry.getValue();
        Expression tupleVars = indexToTupleOfVars.get(entryIndex);
        if (tupleVars != null) {
            substitutedExpression = substitutedExpression.replaceAllOccurrences(entryIndex, tupleVars, context);
            for (int i = 0; i < entryType.numberOfArguments(); i++) {
                indexExpressions.add(Expressions.apply(FunctorConstants.IN, tupleVars.get(i), entryType.get(i)));
            }
        } else {
            if (entryType == null) {
                indexExpressions.add(entryIndex);
            } else {
                indexExpressions.add(Expressions.apply(FunctorConstants.IN, entryIndex, entryType));
            }
        }
    }
    ExtensionalIndexExpressionsSet indexExpressionsSet = new ExtensionalIndexExpressionsSet(indexExpressions);
    return new Pair<>(indexExpressionsSet, substitutedExpression);
}
Also used : ExtensionalIndexExpressionsSet(com.sri.ai.expresso.core.ExtensionalIndexExpressionsSet) DefaultLambdaExpression(com.sri.ai.expresso.core.DefaultLambdaExpression) Expression(com.sri.ai.expresso.api.Expression) LambdaExpression(com.sri.ai.expresso.api.LambdaExpression) QuantifiedExpression(com.sri.ai.expresso.api.QuantifiedExpression) ArrayList(java.util.ArrayList) HashMap(java.util.HashMap) Map(java.util.Map) Pair(com.sri.ai.util.base.Pair)

Example 12 with Pair

use of com.sri.ai.util.base.Pair in project aic-expresso by aic-sri-international.

the class TupleValuedFreeVariablesSimplifier method createReverseLookupMap.

private static Map<Expression, Pair<Expression, Integer>> createReverseLookupMap(Map<Expression, List<Pair<Expression, Integer>>> freeVariableComponentsMap) {
    Map<Expression, Pair<Expression, Integer>> result = new LinkedHashMap<>();
    for (Map.Entry<Expression, List<Pair<Expression, Integer>>> freeVariableComponents : freeVariableComponentsMap.entrySet()) {
        Expression freeVariable = freeVariableComponents.getKey();
        for (Pair<Expression, Integer> component : freeVariableComponents.getValue()) {
            Expression componentVariable = component.first;
            Integer componentIndex = component.second;
            result.put(componentVariable, new Pair<>(freeVariable, componentIndex));
        }
    }
    return result;
}
Also used : Expression(com.sri.ai.expresso.api.Expression) ArrayList(java.util.ArrayList) List(java.util.List) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Pair(com.sri.ai.util.base.Pair) LinkedHashMap(java.util.LinkedHashMap)

Example 13 with Pair

use of com.sri.ai.util.base.Pair in project aic-expresso by aic-sri-international.

the class InversionSimplifier method getIndexAndFunctionType.

private static Pair<Expression, FunctionType> getIndexAndFunctionType(Expression functionOnIntensionalSet, Context context) {
    IndexExpressionsSet indexExpressionsSet = getIndexExpressions(functionOnIntensionalSet);
    List<Expression> indices = IndexExpressions.getIndices(indexExpressionsSet);
    if (indices.size() != 1) {
        throw new UnsupportedOperationException("Currently only support singular indices");
    }
    Expression index = indices.get(0);
    Context intensionalSetContext = context.extendWith(indexExpressionsSet);
    Type type = GrinderUtil.getTypeOfExpression(index, intensionalSetContext);
    FunctionType functionType = null;
    if (type instanceof FunctionType) {
        functionType = (FunctionType) type;
    }
    Pair<Expression, FunctionType> result = new Pair<>(index, functionType);
    return result;
}
Also used : Context(com.sri.ai.grinder.api.Context) Type(com.sri.ai.expresso.api.Type) FunctionType(com.sri.ai.expresso.type.FunctionType) Expression(com.sri.ai.expresso.api.Expression) FunctionType(com.sri.ai.expresso.type.FunctionType) ExtensionalIndexExpressionsSet(com.sri.ai.expresso.core.ExtensionalIndexExpressionsSet) IndexExpressionsSet(com.sri.ai.expresso.api.IndexExpressionsSet) Pair(com.sri.ai.util.base.Pair)

Example 14 with Pair

use of com.sri.ai.util.base.Pair in project aic-expresso by aic-sri-international.

the class TupleValuedFreeVariablesSimplifier method constructComponentTuple.

private static Expression constructComponentTuple(List<Pair<Expression, Integer>> replacementComponents) {
    List<Expression> elements = replacementComponents.stream().map(pair -> pair.first).collect(Collectors.toList());
    Expression result = Expressions.makeTuple(elements);
    return result;
}
Also used : Type(com.sri.ai.expresso.api.Type) Expressions(com.sri.ai.expresso.helper.Expressions) Set(java.util.Set) Expression(com.sri.ai.expresso.api.Expression) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) GrinderUtil(com.sri.ai.grinder.helper.GrinderUtil) List(java.util.List) TupleType(com.sri.ai.expresso.type.TupleType) Map(java.util.Map) Simplifier(com.sri.ai.grinder.rewriter.api.Simplifier) Context(com.sri.ai.grinder.api.Context) FunctorConstants(com.sri.ai.grinder.library.FunctorConstants) LinkedHashSet(java.util.LinkedHashSet) Pair(com.sri.ai.util.base.Pair) Expression(com.sri.ai.expresso.api.Expression)

Example 15 with Pair

use of com.sri.ai.util.base.Pair in project aic-expresso by aic-sri-international.

the class TupleValuedFreeVariablesSimplifier method extendContextWithComponentVariables.

private static Context extendContextWithComponentVariables(Context context, Map<Expression, TupleType> freeVariablesOfTupleType, Map<Expression, List<Pair<Expression, Integer>>> freeVariableComponentsMap) {
    Map<String, String> mapFromSymbolNameToTypeName = new LinkedHashMap<>();
    Set<Type> componentTypes = new LinkedHashSet<>();
    for (Map.Entry<Expression, TupleType> freeVariableOfTupleType : freeVariablesOfTupleType.entrySet()) {
        Expression freeVariable = freeVariableOfTupleType.getKey();
        TupleType freeVariableTupleType = freeVariableOfTupleType.getValue();
        componentTypes.addAll(freeVariableTupleType.getElementTypes());
        List<Pair<Expression, Integer>> components = freeVariableComponentsMap.get(freeVariable);
        for (Pair<Expression, Integer> freeVariableComponent : components) {
            Expression freeVariableComponentVar = freeVariableComponent.first;
            Type freeVariableComponentType = freeVariableTupleType.getElementTypes().get(freeVariableComponent.second - 1);
            mapFromSymbolNameToTypeName.put(freeVariableComponentVar.toString(), freeVariableComponentType.getName());
        }
    }
    Context result = (Context) GrinderUtil.extendRegistryWith(mapFromSymbolNameToTypeName, componentTypes, context);
    return result;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Context(com.sri.ai.grinder.api.Context) LinkedHashMap(java.util.LinkedHashMap) Type(com.sri.ai.expresso.api.Type) TupleType(com.sri.ai.expresso.type.TupleType) Expression(com.sri.ai.expresso.api.Expression) TupleType(com.sri.ai.expresso.type.TupleType) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Pair(com.sri.ai.util.base.Pair)

Aggregations

Pair (com.sri.ai.util.base.Pair)32 Expression (com.sri.ai.expresso.api.Expression)29 ArrayList (java.util.ArrayList)20 Map (java.util.Map)17 LinkedHashMap (java.util.LinkedHashMap)12 Type (com.sri.ai.expresso.api.Type)10 List (java.util.List)10 Expressions (com.sri.ai.expresso.helper.Expressions)9 TupleType (com.sri.ai.expresso.type.TupleType)8 Context (com.sri.ai.grinder.api.Context)8 Context (com.sri.ai.grinder.sgdpllt.api.Context)6 LinkedHashSet (java.util.LinkedHashSet)6 Beta (com.google.common.annotations.Beta)5 Expressions.apply (com.sri.ai.expresso.helper.Expressions.apply)5 Expressions.makeSymbol (com.sri.ai.expresso.helper.Expressions.makeSymbol)5 Util.map (com.sri.ai.util.Util.map)5 Function (com.google.common.base.Function)4 Symbol (com.sri.ai.expresso.api.Symbol)4 INFINITY (com.sri.ai.expresso.helper.Expressions.INFINITY)4 MINUS_INFINITY (com.sri.ai.expresso.helper.Expressions.MINUS_INFINITY)4