@Override
  protected boolean checkPrecondition(final Map<String, BasicOperator> mso) {
    final Filter filter = (Filter) mso.get("filter");
    if (filter.getPrecedingOperators().size() > 1) return false;
    lupos.sparql1_1.Node n = filter.getNodePointer();
    if (n.jjtGetNumChildren() > 0) {
      n = n.jjtGetChild(0);
      if (n instanceof lupos.sparql1_1.ASTEqualsNode) {
        lupos.sparql1_1.Node left = n.jjtGetChild(0);
        lupos.sparql1_1.Node right = n.jjtGetChild(1);
        if (right instanceof lupos.sparql1_1.ASTVar) {
          final lupos.sparql1_1.Node tmp = left;
          left = right;
          right = tmp;
        }
        if (left instanceof lupos.sparql1_1.ASTVar) {
          final String varname = ((lupos.sparql1_1.ASTVar) left).getName();
          var = new Variable(varname);
          varInference = new VariableInInferenceRule(varname);

          if (right instanceof lupos.sparql1_1.ASTQName
              || right instanceof lupos.sparql1_1.ASTQuotedURIRef
              || right instanceof lupos.sparql1_1.ASTFloatingPoint
              || right instanceof lupos.sparql1_1.ASTInteger
              || right instanceof lupos.sparql1_1.ASTStringLiteral
              || right instanceof lupos.sparql1_1.ASTDoubleCircumflex) {
            constant = LazyLiteral.getLiteral(right);

            final AddBinding add = (AddBinding) mso.get("add");
            if (add.getVar().equals(var) || add.getVar().equals(varInference)) {
              if (add.getLiteral().equals(constant)) return false;
              else return true;
            }
          }
        }
      }
    }
    return false;
  }