Hi I am trying to develop a system (the steam boiler problem) by stepwise refinement (as used by B and Event B) but am having a small problem. I define the most abstract spec as a TLA+ module
Machine0 and prove its invariants properties. Then I specify the next module
Machine1 that is to be a refinement of
Machine0.
Can I add Machine0, that is in a separate specification? The tool reports a warning message attached. I am not sure if this means you can or can not import this module but it is subsequently reported as not found.
The only way I have managed to use refinement is by developing and verifying Machine0 and then starting again with a new specification for Machine1 and copying Machine0 into a New Module in the new specification. I hope there is a better way to do this kind of development as the next module Machine2 would require be to copy both Machine1 and Machine0 in as New Modules. Clearly this is going to become problematic when you have a long chain of refinement steps.
Other than this it does seem possible to encode an Event B development in TLA+. What might be of interest is that in Event B they require the developer to say which concrete event (TLA+ Action) refines which abstract event. This has not proven to be difficult for engineers to do and, I believe, would make the evaluation of the refinement steps easier for TLC and TLAPS.
kind regards david