use of com.sri.ai.grinder.sgdpllt.rewriter.api.Rewriter in project aic-expresso by aic-sri-international.
the class DifferenceArithmeticTheory method makeEvaluatorStepSolver.
@Override
public ExpressionLiteralSplitterStepSolver makeEvaluatorStepSolver(Expression expression) {
Rewriter literalExternalizer = new LiteralRewriter(new Recursive(new Exhaustive(getTopRewriter())));
ExpressionLiteralSplitterStepSolver result = new Recursive(new Exhaustive(new FirstOf(getTopRewriter(), literalExternalizer))).makeStepSolver(expression);
return result;
}
use of com.sri.ai.grinder.sgdpllt.rewriter.api.Rewriter in project aic-expresso by aic-sri-international.
the class AbstractIterativeMultiIndexQuantifierElimination method solve.
public Expression solve(AssociativeCommutativeGroup group, List<Expression> indices, Expression indicesCondition, Expression body, Context context) {
Expression result = group.additiveIdentityElement();
Expression summand = makeSummand(group, indices, indicesCondition, body, context);
Rewriter rewriter = new Recursive(new Exhaustive(getTopRewriterUsingContextAssignments()));
Iterator<Map<Expression, Expression>> assignmentsIterator = makeAssignmentsIterator(indices, indicesCondition, context);
for (Map<Expression, Expression> indicesValues : in(assignmentsIterator)) {
Context extendedContext = extendAssignments(indicesValues, context);
Expression bodyEvaluation = rewriter.apply(summand, extendedContext);
if (group.isAdditiveAbsorbingElement(bodyEvaluation)) {
return bodyEvaluation;
}
result = group.add(result, bodyEvaluation, extendedContext);
}
return result;
}
use of com.sri.ai.grinder.sgdpllt.rewriter.api.Rewriter in project aic-expresso by aic-sri-international.
the class AbstractInterpreter method setBaseTopRewriter.
public void setBaseTopRewriter(TopRewriter baseTopRewriter) {
Rewriter result = new Recursive(new Exhaustive(new TopRewriterUsingQuantifierEliminatorAndContextAssignments(baseTopRewriter)));
setBaseRewriter(result);
}
use of com.sri.ai.grinder.sgdpllt.rewriter.api.Rewriter in project aic-expresso by aic-sri-international.
the class SetDNFRewriter method createBaseRewriter.
private static Rewriter createBaseRewriter() {
// Original Rewriters
TopRewriter topRewriter = new DefaultTopRewriter(new IntensionalUnionToUnionsOfIntensionalSetsOfBaseTypeTopRewriter(), // NOTE: added to simplify expressions like `if true then { (2, 2) } else { }', which are common in this setup
new BooleanSimplifier(), new UnionEmptySetTopRewriter(), new IntersectionEmptySetTopRewriter(), new IntensionalSetToConditionalTopRewriter(), new IntersectionIntensionalSetsTopRewriter(), new IntersectionExtensionalSetTopRewriter(), new DistributeIntersectionOverUnionTopRewriter());
// Rewriters based on UAI 2017 Paper
// TopRewriter topRewriter = new DefaultTopRewriter(
// new TupleEqualityTopRewriter(), // Rule 1
// new ElementOfExtensionalSetTopRewriter(), // Rule 2
// new ElementOfIntensionalUnionTopRewriter(), // Rule 3
// new IntensionalUnionEqualToEmptySetTopRewriter(), // Rule 4
// new IntersectionEmptySetTopRewriter(), // Rule 5
// new UnionEmptySetTopRewriter(), // Rule 6
// new SetIntersectExtensionalSetEqualToEmptySetTopRewriter(), // Rule 7
// new IntensionalUnionIntersectionEqualToEmptySetTopRewriter(), // Rule 8
// new DistributeIntersectionOverUnionTopRewriter(), // Rule 9
// new UnionOfSetsEqualEmptySetTopRewriter(), // Rule 10
// new ExtensionalSetEqualEmptySetTopRewriter(), // Rule 11
// new BooleanSimplifier() // NOTE: added to simplify expressions like `if true then { (2, 2) } else { }', which are common in this setup
// );
Rewriter literalExternalizer = new LiteralRewriter(new Recursive(new Exhaustive(topRewriter)));
Rewriter result = new Exhaustive(new FirstOf(topRewriter, literalExternalizer));
return result;
}
use of com.sri.ai.grinder.sgdpllt.rewriter.api.Rewriter in project aic-expresso by aic-sri-international.
the class Switch method makeStepSolver.
@Override
public ExpressionLiteralSplitterStepSolver makeStepSolver(Expression expression) {
ExpressionLiteralSplitterStepSolver result;
T key = keyMaker.apply(expression);
Rewriter baseRewriter = fromKeyToRewriter.get(key);
if (baseRewriter != null) {
result = baseRewriter.makeStepSolver(expression);
} else {
result = new ConstantExpressionStepSolver(expression);
}
return result;
}
Aggregations