code: public static <T> List<Optional<LocalProperty<T>>> normalize(List<? extends LocalProperty<T>> localProperties)
      {
          List<Optional<LocalProperty<T>>> normalizedProperties = new ArrayList<>(localProperties.size());
          Set<T> constants = new HashSet<>();
          for (LocalProperty<T> localProperty : localProperties) {
              normalizedProperties.add(localProperty.withConstants(constants));
              constants.addAll(localProperty.getColumns());
          }
          return normalizedProperties;
      }
docs: Normalizes the local properties by removing redundant symbols, but retains the original local property positions