@NotNull
  private Result addSingle(Pending pending, Value value) {
    for (int i = 0; i < pending.delta.length; i++) {
      Component component = pending.delta[i];
      if (component.ids.length == 0) {
        Value join = lattice.join(component.value, value);
        if (join == top) {
          return top;
        }
        else if (join == component.value) {
          return pending;
        }
        else {
          Component[] components = pending.delta.clone();
          components[i] = new Component(join, EMPTY_PRODUCT);
          return new Pending(components);
        }
      }
    }
    return new Pending(ArrayUtil.append(pending.delta, new Component(value, EMPTY_PRODUCT)));
  }
@NotNull
  private Result addSingle(Pending pending, Value value)