The appropriate selection of the arguments of functions that
can be evaluated
in function calls is often useful to improve efficiency, speed, termination behavior, and so on. This is essential, e.g., in the conditional if - then - else operator. We can specify this by associating a set
μ(f)
of indices of
evaluable arguments
to each function symbol
f
. With
μ
(if - then - else)={1}, only the Boolean argument
b
in calls if
b
, then
e
else
e'
is evaluated. In the realm of term rewriting, this is called
context-sensitive rewriting
. It has been proven useful to improve the termination behavior of rewriting computations while it is still able to compute (or approximate) canonical forms like head-normal forms, (infinite) values, and (infinite) normal forms by requiring a few reasonable conditions. This article provides an overview of basic results to use context-sensitive rewriting in practice.