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.