Dear Marko,
May I suggest you make the following modifications to the Synchronizer spec?
1- Change the name "Init" to a more specific name, such as "TSInit" which stands for ThreadSyncInit.
2- Define a next state relation.
3- Define the complete spec in the following form:
TSSpec ==
/\ TSInit
/\ [][TSNext]_<<threadAWaiting, threadBWaiting>>
4- Define an invariant of the new spec, after all we need to know what is the correctness condition of this specification!
Adding this invariant will allow you to check the correctness of your specification by running the TLC model checker.
5- Add descriptive comments to each part of the spec, for example:
(***************************************************************************)
(* An explanation of the action *)
(***************************************************************************)
waitingForB(threadAVars) ==
threadAWaiting
=> UNCHANGED threadAVars
Best Regards,
AmirHossein