### Description

The IS NULL/IS NOT NULL only care about the nullability not the value of an expression.
Given the expression x + 1 / 2, the actual result does not matter only if it's null or not - that is, it only matters if x is null or not.
So x + 1 / 2 IS NULL becomes x IS NULL - which can be opportunistically pushed down or evaluated.
x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/optimizer/OptimizerRules.java
private final TransformDirection direction;
        
        
        
        private final Class<E> expressionTypeToken = ReflectionUtils.detectSuperTypeForRuleLike(getClass());
        public OptimizerExpressionRule(TransformDirection direction) {
            this.direction = direction;
        }
        @Override
        public final LogicalPlan apply(LogicalPlan plan) {
            return direction == TransformDirection.DOWN
                ? plan.transformExpressionsDown(expressionTypeToken, this::rule)
                : plan.transformExpressionsUp(expressionTypeToken, this::rule);
        }
        protected LogicalPlan rule(LogicalPlan plan) {
            return plan;
        }
        protected abstract Expression rule(E e);
        public Class<E> expressionToken() {
            return expressionTypeToken;
        }
    }
    public enum TransformDirection {
        UP,
        DOWN
    }
}