## Consistent Reasoning

Some problems are not of the type where a search for information will lead to either no answer or a unique answer. Rather, the problem is to eliminate an overwhelming number of possibilities. Many scheduling problems are of this type, where there appear to be millions of possible solutions, the difficulty being to choose a suitable solution. Some of the possible solutions may be valid for a particular constraint but are not valid overall, and by reasoning about individual constraints and the interaction among the constraints, the number of possibilities can be extensively pruned. This type of problem is often called "Constraint Programming", by analogy with Linear and Integer programming.

The numeric, logic and list handling facilities of Orion provide a powerful base for Consistent Reasoning. The wide range of operators and the natural analytic language, with its compressed internal form allows many more inferences to be made directly, avoiding the necessity as much as possible to generate solutions and then test them for consistency. The same knowledge structure that supports Direct Search is used, but now instead of information flowing back to a goal, the information swirls around the network, finding points at which inconsistencies can be found and then returning the altered information from whence it came so that further inconsistencies can be determined as the web of constraints grows tighter and tighter.

Several examples of consistent reasoning problems are provided in examples for various industries, and notes against various operators and functions in the ORION Function descriptions provide details of how the operators react to inconsistent information. Just as direct searching is not always sufficient to obtain a solution, and the system must resort to simultaneous equations, so direct evaluation of individual constraints is not always adequate to ensure that all the constraints will be satisfied, and the system will attempt to determine that all simultaneous constraints are satisfied.

Some constraints can not be reasoned about, and it becomes necessary to generate trial solutions. The GENERATE or FORNEST functions can be used for this purpose. The functions test hypothetical data, and to prevent the single copy of the network from being corrupted with hypothetical data, the changes made to the network are stored, so it can be restored to its initial state. As there is no information stored outside the network, restoring puts everything back to exactly the previous state - variables that had been created are uncreated, new connections that had formed are dissolved, even model text that had been added or changed by the user reverts to what was before. The Change Image Storage facility is similar in purpose to the "backtracking" found in Artificial Intelligence languages, but the connectivity essential to Orion's operation is maintained, whereas backtracking usually just pops local copies of variables from the stack. The FORNEST function also provides a TEST@ connection, so that direct searching for a result can be mixed with Consistent Reasoning.