[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tlaplus] TLA+ Expressions - need clarification

I'm working through the TLA+ Lecture 5 example and trying to nail down the notation as implemented by TLA+. I have looked at the TLA+ book and the "cheat sheet" of notation, but I'm having a hard time wrapping my head around a couple things.

The primary question is related to the "type" of "rmState" and how it is used in the spec as a variable. The other questions have to do with how/when to interpret the meaning of square brackets in the TLA _expression_ syntax - in some cases they return a set of functions, in others they seem to represent a single function.

For example. This definition in the example spec:
TCTypeOK == rmState \in [RM -> {"working","prepared","committed","aborted"}]  

In the TLA documentation, the _expression_ [S->T] is a "set of functions f, with f(x) /in T for x /in S".  
So, according to the definition given, I can interpret as:  S = RM and T = {"working","prepared","committed","aborted"}, and rmState is any function that maps S to T.  Correct?

Which leads me to this definition _expression_ in the spec:

TCInit == rmState = [r \in RM |-> "working"]

Here the TLA documentation says the _expression_ of form "[x in S |-> e]" is a "function f, such that f(x) = e for x in S". Even though we're seeing [] brackets - which implies a set of functions, that function which returns a specific (constant _expression_ 'e') value for any x in S can really only be a constant function. In this case, rmState seems to be representing a function that returns "working" for all r in RM. Correct?

To summarize:
1. I think rmState's type, based on the above definitions/context, is "function". 
2. The square bracket notation can return or reference either a set of functions or a specific function.

Thanks for any clarification or support.

You received this message because you are subscribed to the Google Groups "tlaplus" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tlaplus+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to tlaplus@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/tlaplus.
To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/68ae5b95-a7c2-4590-ab08-36e2074f403e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.