Many of our data structures can be finalized
when they are
complete.
This is done via the various finalize()
member functions.
Adding new constraints to a structure that has been finalized is
illegal.
Explicit finalization allows the implementation to perform certain
simplifications of constraints, which can improve efficiency in some
cases. For example, we could provide an optimization that simply
discards any constraints that are added to an F_Or
that
contains a tautology (this optimization is not currently in the
library, but it is easy to explain). We can only be sure that one of
the children is a tautology after it has been finalized: otherwise we
would have to consider the possibility of the programmer adding
something like to this child, in which case it is no
longer a tautology.
Since finalization does not affect the relation, we have not shown its
use in our examples.
However, finalization is important to achieving maximum efficiency.
If you are concerned with efficiency, you should finalize each part of
a relation as soon as you have finished building it.