Principle 1: Program understanders require explicit indexes from combinations of program actions to entries in the plan library.
Principle 2: Program understanders require a specialization hierarchy of programming plans.
Principle 3: Program understanders require that programming plans contain explicit knowledge about additional plans that can be inferred once they are recognized.
In contrast, the bottom-up approach starts with the instructions themselves, determines which programming plans might have these instructions as components, attempts to infer higher-level goals from these plans, and repeats the process until the programmer's actual goals are recognized or the understander runs out of candidate plans to match against the program [7, 15, 16].
This means that each time the program understander encounters an INCREMENT action, it checks whether that action is within a LOOP.
Given these explicitly representing specialization relationships, once the program understander recognizes an instance of READ-PROCESS-LOOP, it can recognize READ-PROCESS-VALUE-LOOP simply by checking whether its READER component is a FETCH-INPUT-VALUE--without having to do a complete match on this new plan.
One is that whenever the understander recognizes a plan, it must check all of the specialization constraints to the more specialized versions of that plan, making its plan recognition algorithm more complex.
The program understander considers a particular plan only when it encounters an index to it during understanding--not simply whenever one of its components appears in the code.
The program understander then proceeds through the components in the LOOP body.