Bottom is the semantic outcome of evaluating an expression that never returns a definite value because it runs forever or throws an error. The term makes divergence and failure part of reasoning about expression evaluation. section 5.1
Bottom clarifies strictness: a function is strict when applying it to any argument that evaluates to bottom also produces bottom. Nonstrict functions can avoid evaluating such arguments, using call-by-name parameters. section 5.1
Avoiding an unused bottom
A nonstrict conditional can select a safe branch without evaluating the other: `if2(false, sys.error("fail"), 3)` produces `3`. The error expression would evaluate to bottom if forced, but the unselected branch is never evaluated. section 5.1
