Search in sources :

Example 16 with Symbol

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

the class AbstractSingleVariableConstraintWithBinaryAtoms method getEquivalentSignAndNormalFunctor.

/**
	 * Determine which normal functor to use, possibly negating functor if non-normal
	 * @param sign
	 * @param atom
	 * @return
	 */
private Pair<Boolean, Expression> getEquivalentSignAndNormalFunctor(boolean sign, Expression atom) {
    Expression normalFunctor;
    Expression functor = atom.getFunctor();
    String functorString = functor.toString();
    if (getNormalFunctors().contains(functorString)) {
        normalFunctor = functor;
    } else {
        Symbol negatedFunctor = makeSymbol(getNegationFunctor(functorString));
        myAssert(() -> getNormalFunctors().contains(negatedFunctor), () -> getClass().getSimpleName() + ": requires negation of non-normal functors to be normal functors, but got non-normal '" + functor + "' which has non-normal negation '" + negatedFunctor + "'");
        normalFunctor = negatedFunctor;
        // flip sign since we negated the functor
        sign = !sign;
    }
    Pair<Boolean, Expression> signAndNormalFunctor = Pair.make(sign, normalFunctor);
    return signAndNormalFunctor;
}
Also used : Expression(com.sri.ai.expresso.api.Expression) Expressions.makeSymbol(com.sri.ai.expresso.helper.Expressions.makeSymbol) Symbol(com.sri.ai.expresso.api.Symbol)

Example 17 with Symbol

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

the class SwitchTest method testSimpleSwitchRewriter.

@Test
public void testSimpleSwitchRewriter() {
    RewriterFromStepMaker baseRewriterSum = (Expression e, Context c) -> {
        int argument1 = e.get(0).intValue();
        int argument2 = e.get(1).intValue();
        Symbol resultValue = DefaultSymbol.createSymbol(argument1 + argument2);
        return new Solution(resultValue);
    };
    RewriterFromStepMaker baseRewriterSubtraction = (Expression e, Context c) -> {
        int argument1 = e.get(0).intValue();
        int argument2 = e.get(1).intValue();
        Symbol resultValue = DefaultSymbol.createSymbol(argument1 - argument2);
        return new Solution(resultValue);
    };
    Switch rewriter = new Switch<String>(e -> e.getFunctor() != null ? e.getFunctor().toString() : "", map("+", baseRewriterSum, "-", baseRewriterSubtraction));
    Expression initial;
    Expression expected;
    initial = parse("7");
    expected = parse("7");
    runTest(rewriter, initial, expected, map());
    initial = parse("10 - 7");
    expected = parse("3");
    runTest(rewriter, initial, expected, map());
    initial = parse("10 + 3");
    expected = parse("13");
    runTest(rewriter, initial, expected, map());
}
Also used : Context(com.sri.ai.grinder.sgdpllt.api.Context) TrueContext(com.sri.ai.grinder.sgdpllt.core.TrueContext) Switch(com.sri.ai.grinder.sgdpllt.rewriter.core.Switch) Expression(com.sri.ai.expresso.api.Expression) Symbol(com.sri.ai.expresso.api.Symbol) DefaultSymbol(com.sri.ai.expresso.core.DefaultSymbol) RewriterFromStepMaker(com.sri.ai.grinder.sgdpllt.rewriter.api.RewriterFromStepMaker) Solution(com.sri.ai.grinder.sgdpllt.api.ExpressionLiteralSplitterStepSolver.Solution) Test(org.junit.Test)

Example 18 with Symbol

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

the class FromTableToExpressionFactorConverter method makeComparisonToAssignedValue.

private Expression makeComparisonToAssignedValue(TableVariable tableVariable, int assignment) {
    Symbol assignedValueExpression = createSymbol(assignment);
    Symbol variableExpression = makeVariableExpression(tableVariable);
    Expression result = Equality.make(variableExpression, assignedValueExpression);
    return result;
}
Also used : Expression(com.sri.ai.expresso.api.Expression) DefaultSymbol.createSymbol(com.sri.ai.expresso.core.DefaultSymbol.createSymbol) Symbol(com.sri.ai.expresso.api.Symbol)

Example 19 with Symbol

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

the class RealInterval method sampleUniquelyNamedConstant.

@Override
public Expression sampleUniquelyNamedConstant(Random random) {
    myAssert(() -> boundsAreConstants(), () -> "Cannot sample uniquely named constant from real interval that is infinite and/or defined by variables: " + getName());
    // We split the interval into NUMBER_OF_SAMPLING_POINTS contiguous sub-intervals, delimited by (NUMBER_OF_SAMPLING_POINTS + 1) points.
    // We then pick one of these points, but exclude the extreme ones depending on whether bounds are open or closed.
    int sampledPoint = (lowerBoundIsOpen ? 1 : 0) + random.nextInt(getNumberOfAllowedSamplingPoints());
    // We compute the sampled element of the interval
    Rational intervalFraction = new Rational(sampledPoint, SAMPLING_RESOLUTION);
    Rational sampledElement = lowerBound.rationalValue().add(intervalFraction.multiply(getLength()));
    Symbol result = makeSymbol(sampledElement);
    return result;
}
Also used : Rational(com.sri.ai.util.math.Rational) Symbol(com.sri.ai.expresso.api.Symbol) Expressions.makeSymbol(com.sri.ai.expresso.helper.Expressions.makeSymbol)

Example 20 with Symbol

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

the class SamplingProceduralAttachmentSingleQuantifierEliminator method solve.

@Override
public Expression solve(MultiQuantifierEliminationProblem problem, Context context) {
    sampler = new SamplingAdderLazyIterator(problem, getTopRewriterUsingContextAssignments(), random, context);
    List<Expression> proceduralAttachmentParameters = getParameters(problem, context);
    int arity = proceduralAttachmentParameters.size();
    Symbol samplerFunctor = makeAndRegisterProceduralAttachment(arity, context);
    Expression samplerExpression = apply(samplerFunctor, proceduralAttachmentParameters);
    return samplerExpression;
}
Also used : Expression(com.sri.ai.expresso.api.Expression) Expressions.makeSymbol(com.sri.ai.expresso.helper.Expressions.makeSymbol) Symbol(com.sri.ai.expresso.api.Symbol)

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