code: private static ImmutableMultimap<ImmutableList<VariableOrGroundTerm>, ExtensionalDataNode> groupByUniqueConstraintArguments(
              ImmutableCollection<ExtensionalDataNode> dataNodes,
              ImmutableCollection<ImmutableList<Integer>> collectionOfUCPositions) {
          ImmutableMultimap.Builder<ImmutableList<VariableOrGroundTerm>, ExtensionalDataNode> groupingMapBuilder = ImmutableMultimap.builder();
  
          for (ImmutableList<Integer> primaryKeyPositions : collectionOfUCPositions) {
              for (ExtensionalDataNode dataNode : dataNodes) {
                  groupingMapBuilder.put(extractArguments(dataNode.getProjectionAtom(), primaryKeyPositions), dataNode);
              }
          }
          return groupingMapBuilder.build();
      }
docs: dataNodes and UC positions are given for the same predicate
  TODO: explain