在页面https://en.wikibooks.org/wiki/Haskell/Denotational_semantics#Pattern_Matching有以下练习:
考虑具有
or
以下属性的两个布尔参数的函数:
- 或⊥ ⊥ = ⊥</li>
- 或真 ⊥ = 真
- 或 ⊥ 真 = 真
- 或假 y = y
- 或 x 假 = x
这个函数是联合严格性的另一个例子,但更清晰:如果两个参数都是(至少当我们将参数限制为 True 和 ⊥ 时),结果只是 ⊥。在 Haskell 中可以实现这样的功能吗?
该函数可以用下表表示:
| ⊥ | False | True
------|-----------------------
⊥ | ⊥ | ⊥ | True
False | ⊥ | False | True
True | True | True | True
根据https://en.wikibooks.org/wiki/Haskell/Denotational_semantics#Monotonicity中给出的定义,这个函数是单调的,所以我认为没有理由排除在 Haskell 中实现这个函数的可能性。尽管如此,我没有看到实现它的方法。
练习的答案是什么?
PS:我知道答案是“不,你不能”。我正在寻找的是一个严格的证明。我觉得我错过了一些关于可以定义哪些功能的重要限制。绝对不是所有的单调函数。