code: @Override
      public double membership(double x) {
          if (Double.isNaN(x)) {
              return Double.NaN;
          }
          if (Op.isLE(inflection, end)) { //Concave increasing
              if (Op.isLt(x, end)) {
                  return height * (end - inflection) / (2.0 * end - inflection - x);
              }
          } else if (Op.isGt(x, end)) { //Concave decreasing
              return height * (inflection - end) / (inflection - 2.0 * end + x);
          }
          return height * 1.0;
      }
docs: Computes the membership function evaluated at `x`
  
  @param x
  @return `\begin{cases} h \times (e - i) / (2e - i - x) & \mbox{if $i \leq
  e \wedge x < e$
  (increasing concave)} \cr
  h \times (i - e) / (-2e + i + x) & \mbox{if $i > e \wedge x > e$
  (decreasing concave)} \cr h & \mbox{otherwise} \cr \end{cases}`
  
  where `h` is the height of the Term,
  `i` is the inflection of the Concave,
  `e` is the end of the Concave