Two definitions can have the different execution semantics when the interpretation semantics for them are the same and the compilation semantics are the same [1].
So, we should mention the same execution semantics too:
The different words may have the same name token if their names are identical, the actual interpretation semantics for them are equivalent, the actual compilation semantics for them are equivalent, and if the execution semantics defined for one of them, the execution semantics for another one are equivalent to the first one.
Or, in a shorter variant:
The different words may have the same name token if their are synonyms having identical names.
The idea is that if two words have the same name (what about case-sensitivity?), and they behavior indistinguishable, they may have the same nt.
OTOH, I don't insist that we should namely allow the same nt for the different words. But I think, we should either explicitly allow, or explicitly prohibit the same nt.
[1] Example:
: foo 0= ;
: bar ['] 0= state @ if compile, else execute then ; immediate
\ testcase that shows the different execution semantics
: [e] execute ; immediate
0 ' foo ] [e] [ . \ prints -1
0 ' bar ] [e] [ . \ prints 0 (or even throws an exception)
I remember that by Anton's view (in the last year at least), the interpretation semantics for them are different, and the compilation semantics for them are different too. But it seems, this view even isn't supported by the authors of the original reference implementation for SYNONYM.