Re: [tlaplus] How do you do functions of structures?

• From: Karolis Petrauskas <k.petrauskas@xxxxxxxxx>
• Date: Mon, 7 Jun 2021 14:44:22 +0300
• Ironport-hdrordr: A9a23:GkWiIqCMdYCwZynlHekK55DYdb4zR+YMi2TDiHocOGdom52j+rHXoB1E73WE8Qr5OUtQ7+xoXZPuL080mqQFk7X5UY3SLzUO/VHYXL2LA+PZsn7d8wOXzJ8c6U4iSdkzNDXIZWIKzPoSmTPIUerIo+P3jpxBMIzlvjpQpGNRGtRdBlxCe0ym+yRNLWEsdP1Jbuvh2idenUvcRZ1UVLXLOpBiZZmJmzTlrvLbiHU9dmoaAWe1/ESVAH+TKWn94v7caUIt/V7hywn4e7yT3NTsjxh28G6/64ffhK4m0OcIOrB4dYWxYwEuW1Cc7HfWWK1RH4eatDRwiuCi4lQnnZ3tpFMPJMJu8hrqDy6InSc=
• References: <f71490a1-015b-c6f0-a24f-efe11a7757e4@gmail.com>

I was used to using the structured version, until I started to play with TLAPS.
The things are easier to prove in the case of the structure split to multiple variables.
Not sure why. Maybe the prover can easier resolve the actions that do not change a variable used in a property to prove.

Karolis

On Sun, Jun 6, 2021 at 11:34 PM Hillel Wayne <hwayne@xxxxxxxxx> wrote:
Say you have a spec like this:

---- MODULE foo ----

EXTENDS Sequences
CONSTANT Worker, Msg
ASSUME Worker # {} /\ Msg # {}

VARIABLE state

WorkerState == [queue: Seq(Msg), online: BOOLEAN]
TypeOK ==
state \in [Worker -> WorkerState]

\* ...

====

I've noticed that a lot of my students start by writing things that way,
where we have a single state variable that is a function from Worker to
WorkerState. I generally encourage them to instead write it as

VARIABLES worker_queue, worker_online

TypeOK ==
/\ worker_queue \in [Worker -> Seq(Msg)]
/\ worker_online \in [Worker -> BOOLEAN]

\* ...

====

The reason why I prefer this is because you can define worker_queue' and
worker_online' in separate actions, while you can only (easily) define
state' in a single action. Also, it's easier to do things like
worker_queue' = [w \in Worker |-> (* ... *)]. The downside is your
UNCHANGED statements get a little more cluttered, but IMO the benefits
are worth it.

What do you all do? Do "destructure" your state or prefer to keep it all
in one variable?

H

--
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 view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/f71490a1-015b-c6f0-a24f-efe11a7757e4%40gmail.com.

--
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 view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/CAFteovLeYPyyqzgyBFdZNTBJKRmL2_Am82H7jitLe52yYiKF2w%40mail.gmail.com.