Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 是否有任何类型的推理系统在所有情况下都有效?_Algorithm_Type Inference_Hindley Milner - Fatal编程技术网

Algorithm 是否有任何类型的推理系统在所有情况下都有效?

Algorithm 是否有任何类型的推理系统在所有情况下都有效?,algorithm,type-inference,hindley-milner,Algorithm,Type Inference,Hindley Milner,是否有任何类型推断算法可以总是或几乎总是推断出正确的类型?我知道Hindley-Milner算法在很多情况下都能做到,但不是所有情况下都能做到,例如,更高级别的多态类型。你的问题不是完全正确的,因为所有情况的集合都不是完全明确的 例如,您提到高阶多态类型,因为Hindley–Milner类型推断不能总是推断出正确的类型,这是正确的,但有些语言(如标准ML和Haskell)使用Hindley–Milner类型推断,并且没有高阶多态类型。事实上,Hindley–Milner算法在Hindley–Mi

是否有任何类型推断算法可以总是或几乎总是推断出正确的类型?我知道Hindley-Milner算法在很多情况下都能做到,但不是所有情况下都能做到,例如,更高级别的多态类型。

你的问题不是完全正确的,因为所有情况的集合都不是完全明确的

例如,您提到高阶多态类型,因为Hindley–Milner类型推断不能总是推断出正确的类型,这是正确的,但有些语言(如标准ML和Haskell)使用Hindley–Milner类型推断,并且没有高阶多态类型。事实上,Hindley–Milner算法在Hindley–Milner类型系统所涵盖的所有情况下都有效;也就是说,Hindley–Milner系统完全允许Hindley–Milner类型推断算法可以推断的类型,因此该系统中不需要显式类型注释

当然,现实世界中使用Hindley–Milner的语言出于实用的原因通常会以各种方式扩展系统,其中一些扩展会导致算法无法覆盖的情况。例如,标准ML有一些内置的重载标识符,例如+:real*real->real和+:int*int->int,这意味着程序员有时需要使用显式类型注释来选择正确的重载。但这是一个设计决策,不是必要的;我注意到你的问题中没有提到任何真实世界的语言


但从你的问题看来,你至少想要所有的欣德利-米尔纳加上更高等级的多态类型。这意味着您至少需要所有的多态lambda演算。已知系统F中的类型推断是不可判定的。这意味着你的问题的答案是否定的:没有任何类型推断算法可以为你想要的所有情况推断出正确的类型。

任何认真的尝试都会在你成功之前很久就让你陷入困境。@b很抱歉-我能了解一下你的意思吗?在一个足够复杂的系统中,很容易意外发现你可以对图灵机器进行编码。在这一点上,您最终能够编写任意程序,并且不可能在所有情况下分析结果。例如,Rust、Haskell和Scala的类型系统都是图灵完备的。这意味着你可以编写一个程序,而没有人能判断它是否应该是可编译的。@b很抱歉,如果你不介意的话,你能给出几个haskell的例子吗?有关在haskell的类型系统中实现的编程语言,请参阅。够好吗?