if there need to be negative references in array accesses (which certainly makes sense to me, on its face), it seems reasonable to have whatever intermediate variable be signed.

In my first C programming job I saw the source to V7 grep which had a "foo[-2]" construct. It was a moment of enlightenment and another bit of K&R fell into place.  (https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/grep.c; search for "[-")