5.1. Operator ** quirk
Viper has a quirk processing the '**' operator: it is considered
unassociative, so that brackets must be used to indicate precedence.
Also, a ** -b is not permitted: since ** has a higher precedence than
unary -, the expression - a ** b means -(a**b), and the meaning of
a ** - b ** c would then be a ** (-(b**c)) or a ** ((-b) ** c)
or even (a ** (-b)) ** c. Any ambiguities or errors can be fixed
by adding brackets to the original python source without changing
semantics of exiting programs. This quirk exists because it is the
most conservative resolution of a problem in the Viper grammar.