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

Re: [tlaplus] \in works, while \subseteq gives a “identifier undefined” error



Hello,

both \in and \subseteq are valid TLA+ operators. However, when TLC evaluates the initial condition of a specification, it interprets the first formula (in left-to-right order) of the form

   x = e    or    x \in S

(where x is a variable and e is a state-level expression) as a deterministic, respectively non-deterministic assignment to the variable x. In other words, it generates an initial state in which x is set to the value of e, respectively one initial state per element of the set S. An analogous convention applies to interpreting formulas x' = e and x' \in S that appear in the next-state relation.

Your formula

  members \subseteq People

is interpreted as a regular state predicate, and its evaluation fails because the variable "members" has not yet been assigned a value, as stated by the TLC error message. You want to write

  members \in SUBSET People

which is semantically equivalent to your formula but follows the syntactic shape of a non-deterministic assignment.

Hope this helps,
Stephan


> On 22 Nov 2018, at 09:11, Philip White <phi...@xxxxxxxxxxxxx> wrote:
> 
> Hello,
> 
> I wrote about my problem on Stack Overflow[1], but I’m not sure how well that’s used by TLA+ enthusiasts, so I want to reproduce my question here.
> 
> I have the following simplified spec:
> 
> ------------------------------ MODULE Group ------------------------------
> CONSTANTS People
> VARIABLES members
> 
> Init == members \subseteq People
> 
> Next == members' = members
> 
> TheGroup == Init /\ [][Next]_members
> 
> =============================================================================
> 
> When I try to run it through TLC, I get the following error:
> 
>> In evaluation, the identifier members is either undefined or not an operator.
> 
> The error points to the Init line.
> 
> When I change the Init line to:
> 
> Init == members \in People
> 
> it validates fine.
> 
> I want the former functionality because I mean for members to be a collection of People, not a single person.
> 
> According to section 16.1.6 of Leslie Lamport's Specifying Systems, "TLA+ provides the following operators on sets:" and lists both \in and \subseteq.
> 
> Why is TLA+ not letting me use \subseteq?
> 
> Thank you.
> 
> 1: https://stackoverflow.com/questions/53426052/in-works-while-subseteq-gives-a-identifier-undefined-error
> 
> — 
> Philip
> 
> -- 
> 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+u...@xxxxxxxxxxxxxxxx.
> To post to this group, send email to tla...@xxxxxxxxxxxxxxxx.
> Visit this group at https://groups.google.com/group/tlaplus.
> For more options, visit https://groups.google.com/d/optout.