lamp abstraction
In Clafer, abstract clafers are defined using a keyword
abstract
, which means that there will never be any direct
instances of that clafer in a model. We can extract the common parts of
every lamp into an abstraction as follows:
then, we can inherit
the properties and
the xor
constraint from the abstraction as follows:
The clafer TrafficLight
is a concrete
clafer, which is why we see instances generated for it in the
configurator. The clafers for each lamp are also concrete and they only
inherit properties from the abstract clafer Lamp
.
This model change is a refactoring–change of structure without changing the semantics; the set of instances of the model remains the same.
From now on, always use the Alloy-based
instance
generator.
Now, let’s analyze the valid states of a traffic light.
Previous