| OCR Text |
Show 42 has a unique manifestation during ordinary unification : there is a "crash" when given an equation like x = f( ... x ... ) where the term f( ... x ... ) is not narrowable. We refer to these kind of equations as nonnarrowable eye! ie equattons Unification of h(c(x),c(x)) and h{c(y),c(c(y))) will generate a nonnarrowable cyclic equation y = c(y), where c(y) is not narrowable. Notice that even if superposition plus narrowing is complete for some classes of theories, it may not be considered as an efficient procedure because such a procedure is not goal oriented and there are cases where the original set of rewrite rules can be infinitely enlarged. We believe that from a pragmatic viewpoint, the superposition procedure should be used in a "demand driven" manner. Further research is needed in this direction. For example, let us again consider Henschen's system discussed above. Suppose we try to narrow on the term g(a,x,x) with the lefthand of the first rewrite rule, i.e., g(a,f(b),f(c)). This is equivalent to solving the equation f(b) = f(c), which is not solvable syntactically. However, the term f{b) can be narrowed by the third rule. We then get f{c), and now the resulting equation f(c) = f(c) can be solved. In this way, no new rewrite rules are added to the original set. The problem then is: is it true that if narrowing fails to generate a complete set of unifiers for two unifiable terms, then nonnarrowable cyclic equations necessarily arise during the course of narrowing? The answer to this question is not known. If it is true, it would be easy to check during unification whether there exist nonnarrowable cyclic equations. If there are such equations, a warning can be issued so that the user will know that he or she may not get expected result. The user can then attempt to modify some rewrite rules that will not affect the desired system. The problem again lies in the fact that an equational theory can be described by different term rewriting systems. For example, the term rewriting system {c(h(a,a)) -> h{a,a)} |