The same idea is used in the UML model design. A good example is to refactor a class diagram, which happens to be ill-designed.
Ill designs are usually found in models, i.e. identifying a composition relationship with an inheritance (or generalization) relationship and thus an invalid inheritance is formed. In this case, an action defined in action semantics is used to discover all these design flaws and, if found, correct them. (Of course this process is very limited and also requires a lot of human work.) As mentioned above, action semantics uses the OCL dot-notation to navigate among all the objects in a model, it is able to look into every detail of the model design.
Table 5 shows another example of removing all the useless classes. Such classes are not referenced by any other class and they have no subclasses (or no features) [SPH+01]. Two functions, addSuperClass and delete are not defined in action semantics. They are defined by the programmer to add a generalization to a subclass and delete a class accordingly.
More examples on refactoring class diagrams and statecharts can be found in [SPTJ01].