Types Lambda演算中的类型推断
我想知道,在lambda演算方面,特别是在类型推断方面,谁会有一些不错的资源。 我正在为考试而学习,在我所做的任何教程中,我似乎都找不到任何关于lambda类型以及如何推断的信息 我有一道考试题,我想在星期二把它弄清楚 在下面的lambda演算表达式中推断所有变量和带括号的子表达式的类型: (\表示λ) ((\x.(\y.(x,y)y))g)h) 我保证这不是家庭作业!非常欢迎提供任何帮助。推断lambda术语的类型(最通用、最简单)是一项非常简单且极具指导意义的活动。当您试图破译lambda术语时,从猜测其类型开始是一个非常好的方法 类型推断背后的一般思想是,您开始将泛型类型(类型变量)归因于任何标识符,然后根据您在术语中对标识符的使用来细化此类型。这在lambda演算中非常容易,因为标识符只能以两种方式使用:作为函数的参数或作为函数 例如,在您的示例中,假设x:α和y:β。但是x应用于y, 因此,它必须有一个函数类型,而且它的输入必须与参数y的类型兼容,因此我们将α细化为(β->γ),其中γ是应用程序(xy)的(so fa未知)结果类型 术语(xy)依次应用于y。这意味着γ实际上也必须是一个函数类型,也就是说,γ=β->δ 在这种情况下,这基本上结束了分析 为了清楚起见,我在下面报告了所有子项的类型(请注意,所有应用程序都是正确类型的): 此外,我们还得出了g:β->β->γ和h:β的结论。 整个表达式为γ型 这个术语提供了一个稍微有趣的例子 \y、 \x.(y(yx))。 假设x:α。那么y必须有类型α->β,其中β是结果的类型(yx)。该项再次作为输入传递给y,这意味着α=β。 所以 \y、 \x.(y(yx)):(α->α)->α->α 通常,在某些情况下,当您对同一标识符有多个使用时,您需要统一它们的类型,从而推断出它们之间最通用的实例Types Lambda演算中的类型推断,types,lambda,calculus,inference,Types,Lambda,Calculus,Inference,我想知道,在lambda演算方面,特别是在类型推断方面,谁会有一些不错的资源。 我正在为考试而学习,在我所做的任何教程中,我似乎都找不到任何关于lambda类型以及如何推断的信息 我有一道考试题,我想在星期二把它弄清楚 在下面的lambda演算表达式中推断所有变量和带括号的子表达式的类型: (\表示λ) ((\x.(\y.(x,y)y))g)h) 我保证这不是家庭作业!非常欢迎提供任何帮助。推断lambda术语的类型(最通用、最简单)是一项非常简单且极具指导意义的活动。当您试图破译lambda术
关于Damas-Milner类型推理算法的讨论相当不错,但在我看来,对于这样一个简单直观的主题来说,这是非常技术性的。假设使用简单类型的lambda演算?lambda演算有几种类型系统,有些甚至不允许类型推断。对不起,类型lambda演算。
x : β -> β -> γ
y : β
(x y) : β -> γ
((x y) y) : γ
\y.((x y) y) : β -> γ
\x.\y.((x y) y) : (β -> β -> γ) -> β -> γ