functions if possible. The following algorithm does that. (An example which follows illustrates the algorithm.) I. Produce the FVIM. Flag all function indices whose IDM's do not precedence order. II. A. Break all assignments made by this algorithm. B. Choose a set of directions for incrementing the function indices not previously analyzed. If there are none, go to III.C. C. Untag all function and variable types and function indices. III. A. If the set of unassigned function and variable types does not fully precedence order, go to IV.A., otherwise, continue. B. A full precedence ordering has been discovered. Stop. C. Decoupling will not produce a full precedence ordering. Stop. IV. A. Choose an untagged, unassigned variable type. If there are none, go to II.A. Tag the variable type. Untag all function indices and unassigned function types. B. Choose an untagged, unassigned function type. If there are none, go to IV.A. Tag the function type. C. If the variable type chosen is not a legal output of the function type chosen, go to IV.B. V. A. Choose the first untagged function index. If there is none, go to IV.A. Otherwise, go to VI.A. B. Choose the next untagged function index. If there is none, go to IV.B.