At this point, the index for the rule set looks like the following, with a 1 indicating an active rule, and a 0 indicating a failed rule:
RELATION-20: 0 1
CLAUSE-28: 0 1 1
%RECONCILE-1: 0 1
%JESUS-20: 1
%CREATURE-SET-6: 1
%GOD-15: 1
CLAUSE-31: 0 0 1
%DEATH-1: 1 1
%JESUS-21: 1
%CROSS-1: 1 1
Many of the nodes only have one choice left. These are called islands. Because there is only one choice, these rules must be used. Therefore, their corresponding effects can be instantiated. Because the rule set dependencies have been analyzed and optimized, we can tell automatically what other rules conflict with this rule and thus must be failed. For instance, because rule 1 in RELATION-20 must be instantiated, we know that index 2 (CLAUSE-28 rule 0) must be failed. In this case, it was already failed by the previous step. In general, though, especially in larger examples, there are many examples of rules that are deleted because of instantiating these ``island constraints''.
It should also be noted that every time a rule is failed, it is checked to see if the node in the tree became an island as a result. If it did, its island constraints are imposed. Many times, a rule is failed, which causes the node to become an island, which instigates its island effects, which fail other rules, which causes them to become islands, etc... In this way, both before the modified recursive descent algorithm takes over and during its operation, many rules are dynamically pruned from the search space.
If at any point in this initial processing the act of failing a rule results in
a node having no more active tests, then the rule set is inherently incompatible
with the given input. What to do in such a situation is left for further
research
.
For the example we are considering, the following rule applications are made (the updated index is shown in linear form after each node is processed):
create-islands: RELATION_20
#(0 2 0 1 1 0 2 1 1 1 0 0 2 1 1 1 1 1)
island found in RELATION_20 rule 1
APPLYING ISLAND CONSTRAINTS
eliminating rule 0 in CLAUSE_28
rule 0 in CLAUSE_28 already failed
create-islands: CLAUSE_28
#(0 2 0 1 1 0 2 1 1 1 0 0 2 1 1 1 1 1)
NOT ISLAND
create-islands: %RECONCILE_1
#(0 2 0 1 1 0 2 1 1 1 0 0 2 1 1 1 1 1)
island found in %RECONCILE_1 rule 1
NO ISLAND CONSTRAINTS
create-islands: %JESUS_20
#(0 2 0 1 1 0 2 1 1 1 0 0 2 1 1 1 1 1)
island found in %JESUS_20 rule 1
NO ISLAND CONSTRAINTS
create-islands: %CREATURE-SET_6
#(0 2 0 1 1 0 2 2 1 1 0 0 2 1 1 1 1 1)
island found in %CREATURE-SET_6 rule 1
NO ISLAND CONSTRAINTS
create-islands: %GOD_15
#(0 2 0 1 1 0 2 2 2 1 0 0 2 1 1 1 1 1)
island found in %GOD_15 rule 1
NO ISLAND CONSTRAINTS
create-islands: CLAUSE_31
#(0 2 0 1 1 0 2 2 2 2 0 0 2 1 1 1 1 1)
island found in CLAUSE_31 rule 2
APPLYING ISLAND CONSTRAINTS
eliminating rule 0 in CLAUSE_31
rule 0 in CLAUSE_31 already failed
create-islands: %DEATH_1
#(0 2 0 1 1 0 2 2 2 2 0 0 2 1 1 1 1 1)
NOT ISLAND
create-islands: %JESUS_21
#(0 2 0 1 1 0 2 2 2 2 0 0 2 1 1 1 1 1)
island found in %JESUS_21 rule 1
NO ISLAND CONSTRAINTS
create-islands: %CROSS_1
#(0 2 0 1 1 0 2 2 2 2 0 0 2 1 1 2 1 1)
NOT ISLAND