# Re: [tlaplus] Tagged formulas

On Thursday, January 14, 2016 at 3:42:19 PM UTC+2, Stephan Merz wrote:
> That was my original intuition. I don't know what TLA+'s policy on backwards compatibility is, but changing the action semantics of CHOOSE now may break existing specs in possibly subtle ways.

No, it shouldn't. A CHOOSE _expression_ returns a value, i.e., a constant. So the proposed change doesn't break the semantics but only the level-checking algorithm, which we know to be an approximation.

Hmm, so I may have misunderstood you after all. Trying:

VARIABLE x

Capture(e) == CHOOSE k \in {e} : k = e

Next == /\ x' = x + 1

/\ PrintT(x)                   \* => 1

/\ PrintT(x')                  \* => 2

/\ PrintT(Capture(x))    \* => 1

/\ PrintT(Capture(x)')   \* => 2

Spec == (x = 1) /\ [][Next]_<<x>>

So Capture(x)' /= Capture(x), and this seems to be more than just level-checking.

If the difference is due to my writing CHOOSE k \in {e} : k = e instead of CHOOSE k : k = e, then the latter is currently unsupported by TLC anyway.