Result (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))); }