Okay I actually just managed to figure it out approximately one minute after sending this message. Here's a parse input that will trigger it:
---- MODULE Scratch ----
VARIABLE v
op(F(_)) == F(v')
op2(x) == x'
op3 == op(op2)
====
Which results in error message:
line 5, col 8 to line 5, col 14 of module Scratch
Level error in applying operator op:
The permitted level of argument 1 of the operator argument 1 must be at least 2.
So it's about constraints on operator parameters. Dcoding the error message "The permitted level of argument 1 of the operator argument 1 must be at least 2" is a bit tricky; "argument 1 of the operator argument 1" is referring to the "_" in "F(_)" inside "op(F(_))", and "at least 2" means "either action or temporal level" (using the rubric constant = 0, variable = 1, action = 2, temporal = 3). And so when we call F(v'), that asserts that F must accept at least action-level (level 2) parameters. But "op2(x)" cannot accept action-level parameters, it can only accept variable-level parameters (because it primes them and we don't want to double-prime an expression). So "op(op2)" triggers this constraint.
Anyway I'm sure I'll have many more of these amusing puzzles to solve & will require all your help in the future!
Andrew Helwer