code: public final void setEquivalence(String feature, String type,
                                     PatternToken elem) {
  
      EquivalenceTypeLocator typeKey = new EquivalenceTypeLocator(feature, type);
      if (equivalenceTypes.containsKey(typeKey)) {
        return;
      }
      equivalenceTypes.put(typeKey, elem);
      
      List<String> lTypes;
      if (equivalenceFeatures.containsKey(feature)) {
        lTypes = equivalenceFeatures.get(feature);
      } else {
        // workaround for issue #13
        lTypes = new CopyOnWriteArrayList<>();
        equivalenceFeatures.put(feature, lTypes);
      }
      lTypes.add(type);
    }
docs: Prepares equivalence types for features to be tested. All equivalence
  types are given as {@link PatternToken}s. They create an equivalence set (with
  abstraction).
  
  @param feature Feature to be tested, like gender, grammatical case or number.
  @param type Type of equivalence for the feature, for example plural, first person, genitive.
  @param elem Element specifying the equivalence.