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
--