Exercise 12: Rule class design

Summary

The objective of this exercise is to complete a class design for rules as described in an earlier post.

A rule can have one or more conditions.
A rule has exactly one conclusion.
A rule condition is basically the same as a transformation output specification, whereby any token can be replaced with a numbered variable.
Likewise, a rule condition is basically the same as a transformation output specification.
The rule conclusion can only use variables that are referenced in one or more rule conditions.
A rule has a type: A rule is either an "assignment rule" or a "relationship rule".