With the append example, the binding-time analysis must insert a memoization point at the recursive call if 11 is dynamic, so as to prevent infinite unfolding.
foreach s [element of] F do if s = d then s else continue To achieve context propagation, the binding-time analysis must not insert a memoization point at the dynamic conditional s = d.
However, since the monovariant binding-time analysis provides only one annotation for the argument of f, it must annotate it as dynamic for all situations--an overly conservative choice which makes for unsatisfactory specialization; namely for x = 5 the specialized program is
In binding-time analysis, an expression whose value is certain to be determined by the available input is classified as "static." If there is not sufficient input available to evaluate an expression it is called dynamic.
-- f are still valid for binding-time analysis. As for sum types, it is important to distinguish between the completely dynamic structure and the structure where only the elements are dynamic.
Minor modifications to the inference rules suffice to obtain a binding-time analysis. First, the value of constant expressions can always be determined, so these are static.