
| Transformation              | Ignored in metaelements   | Ignored out metaelements   |
|-----------------------------|---------------------------|----------------------------|
| classInstantiation          | Class                     |                            |
| enumRemoval                 | EnumLiteral, Enumeration  |                            |
| forallRemoval recordRemoval | Class                     | Class, Record              |
| uselessIfRemoval            |                           |                            |

set of authorized element types can be obtained by computing **the difference between the set of all metamodel concepts and those presented in Table 2. It must**
be noted that looking only at the concepts in source patterns **is not enough,** since OCL navigation expressions can be used to explore and grab the elements contained in one being removed. Moreover, this information **is only an approximation of the actual domain and codomain of the transformations, as described**
in Section 3.

Inferring partial transformation meaning. **Considering Table 3, we can**
try to interprete the discovered knowledge to infer the transformation meaning. In the case of the class instantiation transformation, we can see that the only concept never copied and never mutated is the class concept. **Since it is not in** Table 2, it appears within OCL expressions, but it never appears within source patterns. It seems logical, since the aim of this transformation is to remove class statements by expanding their features. Then, variable elements are conditionally copied and conditionally mutated. Indeed, variable types are checked to know if they must be copied (i.e., their type is a primitive type) or if they must be mutated into record elements. Several concepts are always copied and never mutated. They correspond to type definitions or the root model concept, i.e.

all concepts that can not be contained in a class. Finally all **other concepts are** conditionally copied and never mutated. It is checked they do not appear in a class before copying them.

Considering this knowledge, we can deduce that this transformation eliminates class elements, even if they are used within OCL navigation expressions.

Variables are copied or mutated, whereas other elements are **copied (some of**
them under a condition). So, this transformation mainly act on two types of elements: class and variable. We may use the set of element types **occurring in the**
target patterns to know the sub-metamodel to which generated models conform.

Looking at the useless if removal transformation, we can easily infer its meaning. Indeed, only the if statements are conditionnally copied, while all other elements are always copied. Then, only some if statements are processed and might be removed.

Discovering fixed point transformations. **A transformation having a fixed**
point semantics may have its codomain equal to its domain. It **may focus only** on a few concepts to conditionally mutate and to conditionally copy. All other