Each procedure can specify a set of specializations that is triggered by the properties assigned to the input objects. The specializations modify the call site in the application code. Like the analyze annotations, each specialization is guarded by a condition, but these conditions are evaluated after abstract interpretation is complete. Unlike the analyze annotations, these conditions can refer to any combination of properties, and thus must provide the specific property name. The right side of the => specifies either a literal code replacement, indicated by the replace keyword, or that the library call should simply be removed as indicated by the remove keyword.
The PLAPACK annotations in Figure show three specializations for the matrix multiply procedure. The first causes the call to be removed whenever either of the inputs A or B refers to empty views. The second replaces the parallel matrix multiply routine with a local version if both A and B refer to local views. Finally, if the data indexed by A is upper-triangular, we can replace the general matrix multiply call with a call to a special triangular form that requires half the number of floating point operations.