在 System FI 中,可以使用 Church 数字定义真正的总加法函数。
在 Haskell 中,由于底部值,我无法定义该函数。例如,在 haskell 中,如果 x + y = x,那么我不能说 y 为零 - 如果 x 是底部,对于任何 y,x + y = x。所以加法不是真正的加法,而是它的近似值。
在 CI 中无法定义该函数,因为 C 规范要求所有内容都具有有限的大小。所以在 C 中可能的近似值甚至比在 Haskell 中更糟糕。
所以我们有:
在 System F 中,可以定义加法,但不可能有完整的实现(因为没有无限的硬件)。
在 Haskell 中,不可能定义加法(因为底部),也不可能有完整的实现。
在 C 中,不可能定义总加法函数(因为一切的语义都是有界的),但兼容的实现是可能的。
因此,所有 3 个正式系统(Haskell、System F 和 C)似乎都有不同的设计权衡。
那么选择一个而不是另一个的后果是什么?