docs: function (expression) {
              if (isInstanceOf(expression, BooleanExpression)) {
                  var op = expression.op, newArgs;
                  if (op === "AND" || op === "OR") {
                      newArgs = [OPERTATOR_INVERSIONS[op]].concat(expression.args.map(function (arg) {
                          return BooleanExpression.invert(arg);
                      }));
                      return BooleanExpression.fromArgs(newArgs);
                  } else {
                      newArgs = [OPERTATOR_INVERSIONS[op]].concat(expression.args);
                      return BooleanExpression.fromArgs(newArgs);
                  }
              } else if (isInstanceOf(expression, StringExpression) || isInstanceOf(expression, NumericExpression)) {
                  throw new ExpressionError(format("Cannot invert %4j", [expression]));
              } else {
                  return new BooleanExpression("NOT", expression);
              }
          }