Syntactic characteristic-rule collision cases #
These are the LR-core cases decided solely by the rigid characteristic rule shapes. They deliberately do not use the operational cut invariant needed for collisions between transition rules (or between two empty-list rules).
A post-handle form with no list symbol cannot equal one whose rule
right side ends in a list symbol. This disposes of every base/nonbase pair.
Two split rules with equal post-handle forms have the same handle position and are literally the same production.
A read-rule prefix and a split-rule prefix cannot be equal: after cancelling the final list marker, one ends in a terminal and the other in a nonterminal.
Symmetric orientation of read_split_post_impossible.
The untouched characteristic start occurrence fixes its entire prehandle: there is no prefix and no terminal suffix.
Every retained start rule targets the distinguished global drain state. Productivity supplies a complete empty-stack run, and global accepting runs cannot finish in a boot or simulation state.
In particular, the productive reduction retains at most one start production.
Two reachable start rules with equal post-handle forms coincide.
A start-rule postform cannot coincide with a read or split postform: the start occurrence has empty prefix, whereas those rule right sides put one non-list symbol before their final list marker.