I'm reading SPJ's "The Implementation of Functional Programming Languages," and
on page 32, it defines the multiplication operator in its extended lambda
calculus as:
Eval[[ * ]] a b = a x b
Eval[[ * ]] _|_ b = _|_
Eval[[ * ]] a _|_ = _|_
Is that complete? What are the denotational semantics of * applied to things
not in the domain of the multiplication operator x, such as TRUE (in the
extended lambda defined by this book) and functions (in normal lambda calc)? Do
these things just eval to bottom? Or is this just to be ignored, since the
extended calculus will only be applied to properly "typed" expressions in the
context of this book?