SubContextSimplification.java

package dev.civl.sarl.simplify.simplification;

import dev.civl.sarl.IF.expr.BooleanExpression;
import dev.civl.sarl.IF.expr.SymbolicExpression;
import dev.civl.sarl.simplify.simplifier.MutableContext;

/**
 * A {@link Simplification} that proceeds by creating a {@link SubContext} of
 * the current {@link MutableContext} to process a {@link BooleanSymbolicExpression}.
 * Currently, this is used to process expressions with operator AND, LESS_THAN,
 * LESS_THAN_EQUALS, NEQ and also EQUALS in the case where the arguments are
 * numeric.
 */
public class SubContextSimplification extends Simplification {

	@Override
	protected SymbolicExpression apply(SymbolicExpression expression) {
		if (expression.type().isBoolean()) {
			pushAssumption((BooleanExpression) expression);
			BooleanExpression simplifiedAssumption = getFullAssumption();
			popAssumption();

			return simplifiedAssumption;
		}
		return expression;
	}

}