Why is `-` the functor for pairs?

There is probably no reason other than historical accident. Currently it is used for Key-Value pairs by keysort/2 and library(pairs) so there is a good enough reason to continue using it.

This is questionable no matter which operator precedence you have. All of these share the same problem, see this post and the posts above it. For example:

?- A-B-C = A-B.
A = A-C,
B = C.

?- A:B:C = A:B.
B = B:C.

I guess you’d hope both queries would fail? For that, you need to use a flat term, something like v(A,B,C).

PS: if the second element of the pair is supposed to be a “negative number”, like -2, both - and : are problematic in different ways…

?- display(1--2).
ERROR: Syntax error: Operator expected
ERROR: display(
ERROR: ** here **
ERROR: 1--2) . 

?- display(1- -2). % this works....
-(1,-2)
true.

?- display(1:-2). % this seems to work but it doesn't
:-(1,2)
true.