@Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    LinguisticImperfectField that = (LinguisticImperfectField) o;

    if (innerField != null ? !innerField.equals(that.innerField) : that.innerField != null)
      return false;

    return true;
  }
 public DistributionStrategies<T> getStrategies() {
   return innerField.getStrategies();
 }
 public Distribution<T> getCurrent() {
   return innerField.getCurrent();
 }
 public Distribution<T> getPast(int time) throws IndexOutOfBoundsException {
   return innerField.getPast(time);
 }
 public T getCrisp() {
   return innerField.getCrisp();
 }
 public boolean isSet() {
   return innerField.isSet();
 }
 public String toString() {
   return "(L)" + innerField.toString();
 }
 public void update(T value, Degree deg, String... p) {
   innerField.update(value, deg, p);
 }
 public void setValue(T value, Degree deg, String... params) {
   innerField.setValue(value, deg, params);
 }
 public void setValue(T value, boolean update) {
   innerField.setValue(value, update);
 }
 public void setValue(T value) {
   innerField.setValue(value);
 }
 @Override
 public int hashCode() {
   return innerField != null ? innerField.hashCode() : 0;
 }
 public Distribution<T> fuzzify(Number val) {
   Map<? extends T, ? extends Degree> m =
       ((ShapedFuzzyPartition) innerField.getCurrent()).fuzzify(val);
   return getStrategies().newDistribution(m);
 }
 public Number defuzzify() {
   Number ans =
       subStrats.toCrispValue(
           ((ShapedFuzzyPartition) innerField.getCurrent()).asInducedPossibilityDistribution());
   return ans;
 }
 public void update(Distribution<T> fieldBit) {
   innerField.update(fieldBit);
 }
 public void setValue(Distribution<T> dist) {
   innerField.setValue(dist);
 }
 public void update(T value) {
   innerField.update(value);
 }
 public void setValue(Distribution<T> dist, boolean update) {
   innerField.setValue(dist, update);
 }
 public boolean isNormalized() {
   return innerField.isNormalized();
 }
 public void normalize() {
   innerField.normalize();
 }