我有以下定理:(A→(B→C))→((A∧B)→C),我试图确定它的计算解释是什么。我有以下选择:

(1) 将柯里化函数转换为非柯里化函数的函数。

(2) 将非柯里化函数转换为柯里化函数的函数。

(3) 创建两个给定 A 值和 B 值的元组的函数。

(4) 这个逻辑公式没有计算解释。

我认为 (1) 或 (2) 都不正确,因为在 Haskell 中,所有函数都被认为是柯里化的。我认为选项 (3) 是正确的,因为 (A∧B) 是转换为类型时的元组 (A,B)。但是,我不确定我的推理是否正确。是否可以有一个柯里化函数,您可以在其中获取前两个参数 A 和 B,然后以某种方式将它们转换为元组,然后返回值 C?任何见解表示赞赏。

最佳答案



这是对的。但这不会使 (A→(B→C))→((A∧B)→C) 成为“创建两个给定 A 值和 B 值的元组的函数”。这样的函数将是 A→B→(A∧B)。



不,这不太对。语言本身并没有定义如何表达具有多个参数的函数。它没有多参数函数的概念。选择通过一次传递一个参数(柯里化)还是传递元组(非柯里化)来表达多参数函数是一个约定问题。这些约定对库和编译器的设计有严重的影响,但从语言本身的角度来看,柯里化与否的选择是无所谓的。

A→(B→C) 的计算解释是一个函数,它接受一个参数并返回一个接受第二个参数的函数,即以柯里化形式接受两个参数。 (A∧B)→C 的计算解释是一个函数,它采用一对参数,即采用非柯里化形式的两个参数。因此,(A→(B→C))→((A∧B)→C) 的计算解释是一个将柯里化形式的函数转换为非柯里化形式的函数的函数。

关于haskell - 找到定理的计算解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57431491/

10-09 02:51