Shieber argues for a uniform architecture for parsing and generation [21].
I will argue that *BUG1 * and a simple version of a left-corner parser [16]
can be
regarded as two instantiations of a simple general proof procedure for Horn clauses.
Such a general procedure can be defined as in:

prove(Call) :- predict_unit(SubCall,Call), connect(SubCall,Call). connect(Call,Call). connect(Child,Ancestor):- predict_rule(Child,Ancestor,Parent,Siblings), prove_ds(Siblings), connect(Parent,Ancestor). prove_ds([]). prove_ds([H|T]):- prove(H), prove_ds(T).

In this definition the two clauses *predict_unit* and *predict_rule*
are parameterized for a specific task such as parsing or generation.
In the case of parsing *predict_unit*
simply finds a representation of the first word of the sentence, in the case of generation
it finds a representation of the pivot of the sentence. The clauses for *predict_rule*
similarly are parameterized to define different orders of selection of the literals of the
clause. For parsing a left-to-right selection is useful; for generation a head-first
selection.
Thus the above general proof procedure constitutes a bottom-up proof procedure
where top-down filtering is defined via the and
predicates.
In [19] a generalized version of this proof procedure is defined
where is replaced by a predicate that predicts a non_chain_rule.

Fri Nov 25 13:07:08 MET 1994