1991 Volume 6 Issue 2 Pages 247-259
Hypothetical reasoning is a basic technique for building AI system based on incomplete knowledge. Knowledge bases include hypotheses that are not always valid. Systems for hypothetical reasoning usually take a lot of time because they need to maintain the consistency of knowledge bases. This paper presents an efficient method for hypothetical reasoning on a forward-chaining system with the assumption-based truth maintenance system (ATMS). The forward-chaining system consists of a compiler of Horn clauses and normal defaults into a Rete-like network and a Rete-based inference engine. The Rete-like network as a flow graph consists of a root node, one-input nodes, two-input nodes and terminal nodes. The Rete algorithm is an efficient method for matching a large collection of objects with many conjunctive patterns. The inference engine is extended to reason in multiple contexts without conflict resolution. It gives justifications that are propositional Horn clauses to the ATMS. In the ATMS, each datum is labeled with a collection of sets of assumptions where the datum holds. The feature of a proposed reasoning method is that the inference engine gives intermediate justifications to the ATMS and stores intermediate dependent assumptions of two-input nodes, allowing faster hypothetical reasoning. By means of this method, the APRICOT/0 system for hypothetical reasoning has been implemented on the PSI-II machine (Personal Sequential Inference machine) in ESP (Extended Self-contained Prolog). An experimental result shows that APRICOT/0 is about seven times faster than a system that neither gives intermediate justifications to the ATMS nor stores the intermediate dependent assumptions under a tested knowledge base. The compared system, called SCS, is a simple combination system of a conventional inference engine and the ATMS. The cost of total ATMS label computations on APRICOT/O is generally less than the cost of the compared system in the following cases : (1) When the Rete-like network includes a two-input node shared by some clauses or defaults. (2) When a one-input node passes tokens to its successor that is a successor of another two-input node.