This makes it easier to implement some traits for a type but not others. For example, the SubsetConstruction constructs states on the fly. This means it cannot provide an iterator over all state indices and it cannot test whether a given state index exists. Those two methods/functionalities could instead be provided by a trait StateIterable or StatesKnown, which is then implemented by e.g. DTS, but not by SubsetConstruction.
This makes it easier to implement some traits for a type but not others. For example, the
SubsetConstructionconstructs states on the fly. This means it cannot provide an iterator over all state indices and it cannot test whether a given state index exists. Those two methods/functionalities could instead be provided by a traitStateIterableorStatesKnown, which is then implemented by e.g.DTS, but not bySubsetConstruction.