Nate Nystrom pointed out on 9/15/04 that the reduceViaPath implementation in the Technical Report has a bug. Near the end of this function, in the case where a new rightSib is created, the line
insert rightSib into topmost;should be followed by a sequence that enqueues the reduction paths that start at the new rightSib node (similar to the loop in doReductions):
for each "reduce by N -> alpha" in actions(rightSib, t) { for each path p of length len(alpha) from rightSib { enqueue(p, "N -> alpha") into pathQueue; } }
Without this addition, nothing more is added to pathQueue after the initial seeding (except in the obscure enqueueLimitedReductions case), which is clearly wrong since doing one reduction is supposed to potentially give rise to additional reduction opportunities.