72
pairs the degree of change-completeness of a system, since it introduces a data dependency
that blocks potentially sensible merge results. Furthermore, any application needing such a
“move-conditional insertion” could also achieve the same effect by recording the insertion at
the source of the move operation and simply avoiding the selection of states that include
the move but do not include the insertion in question. Therefore, we shall not require that
insertion targets be able to specify points within move destinations.
For ranges, things are a bit more complicated. Since a contiguous sequence in a sequence
containing move operations may contain an arbitrary number of original source ranges, there
may, in the worst case, be m+1places where an operation must be recorded, in a sequence
containing mmove operations. This implies that a single conceptual range, carried back to
the source of all moves that might have their destinations within that range, could fragment
into an arbitrary number of ranges. Doing this implies either that the representation of op-
erations must become more complex (to represent discontiguous regions of effect), or that
single application operations must be represented as sets of simpler ones. This looks like a
potentially expensive choice in terms of representational complexity and the storage cost of
an implementation. In Literary Machines (Nelson 1987), this kind of fragmentation was con-
sidered for link anchors (linkendsas Nelson called them). This problem is inherent in any
attempt to trace the results of move operations back to their origins, since any subsequence
in a particular version may be the result of multiple move operations from different sources.
However, storing ranges in fragmented form at their ultimate origins does not seem like a
good idea for other reasons. In any case where splitting would occur there must be more
than one move operation involved. And in exactly these cases, the context of the range it-
self is determined by the move operations whose destination the range is affecting, includ-
ing, quite importantly, the relative order of the various fragments that constitute the range
in question. Particularly in the case of a copy range, the idea of separately assembling the
source from disconnected pieces is not obviously useful for anything. Even for a deletion
pairs the degree of change-completeness of a system, since it introduces a data dependency
that blocks potentially sensible merge results. Furthermore, any application needing such a
“move-conditional insertion” could also achieve the same effect by recording the insertion at
the source of the move operation and simply avoiding the selection of states that include
the move but do not include the insertion in question. Therefore, we shall not require that
insertion targets be able to specify points within move destinations.
For ranges, things are a bit more complicated. Since a contiguous sequence in a sequence
containing move operations may contain an arbitrary number of original source ranges, there
may, in the worst case, be m+1places where an operation must be recorded, in a sequence
containing mmove operations. This implies that a single conceptual range, carried back to
the source of all moves that might have their destinations within that range, could fragment
into an arbitrary number of ranges. Doing this implies either that the representation of op-
erations must become more complex (to represent discontiguous regions of effect), or that
single application operations must be represented as sets of simpler ones. This looks like a
potentially expensive choice in terms of representational complexity and the storage cost of
an implementation. In Literary Machines (Nelson 1987), this kind of fragmentation was con-
sidered for link anchors (linkendsas Nelson called them). This problem is inherent in any
attempt to trace the results of move operations back to their origins, since any subsequence
in a particular version may be the result of multiple move operations from different sources.
However, storing ranges in fragmented form at their ultimate origins does not seem like a
good idea for other reasons. In any case where splitting would occur there must be more
than one move operation involved. And in exactly these cases, the context of the range it-
self is determined by the move operations whose destination the range is affecting, includ-
ing, quite importantly, the relative order of the various fragments that constitute the range
in question. Particularly in the case of a copy range, the idea of separately assembling the
source from disconnected pieces is not obviously useful for anything. Even for a deletion