where we use the arrow to point at which operand to use to take primitives from. Thus this operation is useful in a general sense in that it should always produce a valid SMARTS pattern. Combining each result of each composition listed above results in a large, redundant hierarchy and needs to be pruned. Pruning can be done multiple ways. The two reasonable approaches are to remove any SMARTS that are subsets of a higher priority SMARTS, or to keep only the SMARTS that were used for a given set of molecules.