Description-tape layout #
Positional facts about a tape holding a description string
l = qsF □ qhF □ R (the takeField split): where the two header fields
end, and what the cells of the entry region are. Everything is derived
from a single normalization: the getElem?-with-blank-default view of l
agrees with its canonical three-part layout even when trailing separators
are missing (takeField treats end-of-list like □ — by design, matching
the tape's blank fill).
These feed the seek phase (two scanRight_loop instances land the desc
head at the entry region) and the match loop (entry-region cells).
Entry-region cells: cell |F1| + |F2| + 3 + j holds the j-th symbol
of the entry region R := (takeField (takeField l).2).2 (blank beyond).
Field-2 cell values, blank-default form (covers positions beyond the
field: the separator/beyond reads □).
First mismatch extraction: two different blank-free lists, viewed as
blank-padded infinite sequences, have a least disagreement index; below
it they agree on non-blank symbols, and at it the hc1-style mismatch
conditions hold.