code: private ImmutableSet<ExtensionalDataNode> selectNodesToRemove(
  
              ImmutableSet<Variable> requiredAndCooccuringVariables, ImmutableMap<FunctionalDependency,
              ImmutableCollection<Collection<ExtensionalDataNode>>> constraintNodeMap, AtomPredicate predicate) {
  
          if (settings.getCardinalityPreservationMode() != LOOSE) {
              return ImmutableSet.of();
          }
  
          /*
           * Expects that different unique constraints can only remove independent data nodes (-> no conflict)
           *
           * TODO: show why this works
           */
          return constraintNodeMap.entrySet().stream()
                  .flatMap(e -> selectNodesToRemovePerConstraint(requiredAndCooccuringVariables, e.getKey(), e.getValue(),
                          predicate))
                  .collect(ImmutableCollectors.toSet());
      }
docs: Does not look for redundant joins if not in the LOOSE preservation mode
  
  TODO: consider the case of predicates with multiple non-unique functional dependencies