NumericOrSimplification.java

package edu.udel.cis.vsl.sarl.simplify.simplification;

import java.util.HashSet;

import edu.udel.cis.vsl.sarl.IF.expr.BooleanExpression;
import edu.udel.cis.vsl.sarl.IF.expr.SymbolicExpression;
import edu.udel.cis.vsl.sarl.IF.expr.SymbolicExpression.SymbolicOperator;
import edu.udel.cis.vsl.sarl.simplify.simplifier.Context;
import edu.udel.cis.vsl.sarl.simplify.simplifier.ContextExtractor;
import edu.udel.cis.vsl.sarl.simplify.simplifier.IdealSimplifierWorker;
import edu.udel.cis.vsl.sarl.simplify.simplifier.InconsistentContextException;

public class NumericOrSimplification extends Simplification {

	public NumericOrSimplification(IdealSimplifierWorker worker) {
		super(worker);
	}

	@Override
	public SymbolicExpression apply(SymbolicExpression x) {
		if (x.operator() != SymbolicOperator.OR)
			return x;

		BooleanExpression expr = (BooleanExpression) x, result;
		Context subContext = newSubContext();
		ContextExtractor extractor = new ContextExtractor(subContext,
				new HashSet<>());
		boolean success;

		try {
			success = extractor.extractNumericOr(expr);
		} catch (InconsistentContextException e) {
			return info().falseExpr();
		}
		if (success)
			result = subContext.getFullAssumption();
		else
			result = expr;
		return result;
	}

	@Override
	public SimplificationKind kind() {
		return SimplificationKind.NUMERIC_OR;
	}

}