The generator defined in <7> is not coherent and not complete (cf. <6>), because <7> derives feature structures whose semantics unifies with the semantics of the original feature structure. Note furthermore that generator <7> can easily fail to terminate because of this lack of coherency. An example of this is <9a>.
<9a> may be the semantics for the sentence 'john eats'. Generator <7> will also try to build all feature structures containing a second argument, e.g. <9b>. For a realistic grammar the number of ways to do this will be infinite (e.g. by adding modifiers, <9c>); therefore BUG will not terminate.
Coherency is achieved by 'freezing' all variables occuring in the semantics of the original feature structure (e.g. by the numbervars predicate built in in some implementations of Prolog). These 'atomic place holders' will not unify with any augmentations to the semantics. In order to do so BUG is redefined as in <10>.
This leaves us with the completeness problem.
It is still possible that <10> derives strings like 'john
eats' for
semantics <9b>.
The solution is to test at the end of the generator procedure whether the
feature structure that is found is complete with respect to the original
feature structure.
However, because of the way in which top-down information is used, it is
unclear what semantic information is derived by the rules themselves,
and what semantic information is available because of unifications with
the original semantics.
For this reason so called 'shadow' variables are added in BUG
that represent the feature structure derived by the grammar
itself.
Furthermore a copy of the semantics of the original
feature structure is made at the start of the generation
process. Completeness is achieved by testing whether the
semantics of the shadow subsumes this copy. This technique
is used in the final version of BUG (see the Appendix).