LambdaSimplification.java
package dev.civl.sarl.simplify.simplification;
import dev.civl.sarl.IF.expr.SymbolicConstant;
import dev.civl.sarl.IF.expr.SymbolicExpression;
import dev.civl.sarl.IF.expr.SymbolicExpression.SymbolicOperator;
public class LambdaSimplification extends Simplification {
@Override
protected SymbolicExpression apply(SymbolicExpression expr) {
if (expr.operator() == SymbolicOperator.LAMBDA) {
// lambda x . e;
SymbolicConstant boundVar = (SymbolicConstant) expr.argument(0);
SymbolicExpression body = (SymbolicExpression) expr.argument(1);
SymbolicExpression body2 = (SymbolicExpression) simplify(body);
if (body2 == body)
return expr;
return universe.lambda(boundVar, body2);
} else {
return expr;
}
}
}