Questions tagged «type-inference»


1
交集和并集类型的实际问题是什么?
我正在设计一种简单的静态类型的函数式编程语言,作为一种学习体验。 到目前为止,我已经实现的类型系统似乎可以(需要做一些额外的工作)合并交集和并集类型,例如,您可以: <Union String Integer> <Union Integer Foo> 上面两种类型的交集将是一个普通的 Integer 两种类型的联合是 <Union String Integer Foo> 当然,这是可能的事实并不一定意味着它是一个好的设计思想。特别是,我有点担心保持类型不相交和/或处理重叠的实现困难。 在类型系统中合并此类功能的利弊是什么?

3
类型检查器的正确性证明实际上应该证明什么?
我已经进行了几年编程,但是对理论CS并不熟悉。我最近一直在尝试学习编程语言,并且其中的一部分是类型检查和推断。 我的问题是,如果我尝试为一种编程语言编写类型推断和检查程序,并且希望证明我的类型检查器可以工作,那么我要寻找的证明到底是什么? 用通俗易懂的语言,我希望类型检查器能够识别出在运行时可能发生的代码中的任何错误。如果我要使用类似Coq的方法来证明我的实现是正确的,那么这种“正确性证明”将试图显示什么?

2
未装箱类型上的高级多态
我有一门语言,默认情况下会将类型取消装箱,并且基于Hindley–Milner进行类型推断。我想添加更高级别的多态性,主要用于处理存在类型。 我想我知道如何检查这些类型,但是我不确定在编译时该怎么做。目前,我通过生成专门化来编译多态定义,就像C ++模板一样,以便它们可以与未装箱的值一起使用。例如,给定的定义f<T>,如果程序仅调用f<Int32>和f<Char>,则仅那些专门化内容会出现在已编译程序中。(我现在假设是整个程序的编译。) 但是当将多态函数作为参数传递时,我看不到如何静态生成正确的专业化,因为可以在运行时选择该函数。除了使用方框表示法,我别无选择吗?还是有办法解决这个问题? 我的第一个想法是以某种方式将等级n多态编码为等级1,但我一般认为这是不可能的,因为构造逻辑中的公式不一定具有先验范式。

2
子类型作为SML数据类型的子集
我对Okasaki关于纯功能数据结构的书不满意的几件事之一是,他的代码充满了不尽详尽的模式匹配。举例来说,我将为他提供实时队列的实现(重构为消除不必要的挂起): infixr 5 ::: datatype 'a stream = Nil | ::: of 'a * 'a stream lazy structure RealTimeQueue :> QUEUE = struct (* front stream, rear list, schedule stream *) type 'a queue = 'a stream * 'a list * 'a stream (* the front stream is one element …

3
赋值以外的命令性语句的类型推断
在搜寻有关命令式语言的类型系统的研究论文时,我只找到一种具有可变引用但没有真正的命令式控制结构(例如复合运算符,循环或条件)的解决方案。 因此,尚不清楚如何实现具有部分类型推断的命令式语言(例如http://rust-lang.org)。 这些论文没有提到参数化类型,例如,List of a因为参数化类型是Hindley-Milner类型系统的琐碎扩展-仅应扩展统一算法,其余推论照原样工作。但是,由于出现了自相矛盾,不能轻易添加分配,因此必须应用诸如ML值限制之类的特殊技术。 您能否推荐描述具有命令性循环,条件,IO和复合语句的语言的类型系统的论文或书籍?

2
MLTT中类型推断和类型检查的可判定性
在马丁- LOF的类型的直觉理论:表语部分证明了类型检查是可判定受到感分型摆在首位,通过证明用于封闭分型术语标准化定理。另一方面,我已经看到它写在多个地方(维基百科,Nördstrom等),(故意的)MLTT的类型检查是可以确定的。它们是否隐含地限制了可键入的术语?a:Aa:一个a \colon Aa一个a 如果我们不限于可输入的术语,那么关于内涵式MLTT中类型推断或类型检查的可判定性是否已知?例如,也许有一个决策过程可以识别无法键入的术语,例如通过规范化为与任何构造函数都不对应的形式,或者通过显示对于任何无法键入的术语都没有非周期性的减数顺序。 我在文献中找不到很多东西。

1
一个简单的证明,证明系统F()具有可判定性
假设我们不知道Joe B.Wells从1994年得出的结果,即系统F(AKA)中的可打字性和类型检查都无法确定 λ2λ2\lambda 2)。在Barendregt的Lambda Calcula with types(1992)中,我发现由于Malecki 1989的证明,类型检查意味着可打字性。这是因为 存在 σσ\sigma 这样 M:σM:σM:\sigma 相当于 (λxy.y)M:(α→α)(λxy.y)M:(α→α)(\lambda xy.y)M : (\alpha\rightarrow\alpha) (这是因为如果某个术语在系统F中是可键入的,则其所有子术语都可以。) 反过来有没有简单的证明呢?就是说,证明可打字性意味着在系统F中进行类型检查?

2
基于呼叫站点的类型推断研究?
我正在尝试学习更多关于整个程序类型检查和类型推断系统的信息,这些系统使用来自函数调用站点的信息来计算类型信息(除了使用函数体的标准方法之外)。例如,这种算法可能会使用函数调用foo(1)来推断该函数foo采用整数参数。显然,这会使推论复杂化很多,并使检查变得非模块化。 无论如何,我没有太多运气能找到关于这种方法的研究,可能是因为我不知道描述我在说什么的正确术语。有指针吗?

1
双色构造微积分的作用是什么?
因此,我正在阅读一些有关阐述的内容,特别是基于双色构造演算的算法,我有些困惑。我不明白该广告的确切目的是什么CCbiCCbiCC^{bi}是。似乎与CCCCCC函数的隐式参数和显式参数之间有区别。特别是,我看不到它如何允许您编写(id0)(id0)(id\; 0) 代替 (idN0)(idN0)(id\; \mathbb{N}\; 0)。如果我们假设一个用于全局定义的系统,那么, id:(ΠA|Type.(Πx:A.A))id:(ΠA|Type.(Πx:A.A))id : (\Pi A\; |\; \mathsf{Type}\; . (\Pi x : A\; . A)) 和 id=(λA|Type.(λx:A.x))id=(λA|Type.(λx:A.x))id = (\lambda A\; |\; \mathsf{Type}\; . (\lambda x : A . x))。 规则真的允许吗 (id0)(id0)(id\; 0)?当然语法可以,但是我在键入关系中看不到它。我想念什么吗?我是否了解角色CCbiCCb一世CC^{bi} 错误地? 另外,会合的财产不会丢失吗?我想我的问题是,我在阅读有关精心制作的文章时,并没有读太多关于CCbiCCbiCC^{bi}在这之前。介绍它的好论文是什么? 编辑:更具体地说,我问(id0)(id0)(id\; 0) 被接受代替 (idN0)(idN0)(id\; \mathbb{N}\; 0) 当明确和隐含的规则 ΠΠ\Pi应用程序是相同的模语法。我认为两者之间没有区别::: 和 ||| 两者的规则似乎相同。 编辑:我不是在谈论构造的隐式演算,这是一个不同的理论,对于显式有不同的规则ΠΠ\Pi的(应用程序与生成。) …

1
在System Fàla Church中,我们可以自动为所有消除类型推断吗?
问题如下。通常,当一个词有Λ X。ŤΛX.t\Lambda X.t,我们可以通过消除FORALL 适用这个词的类型,为实例(Λ X。吨)[ Ť] → t [ X:= T](ΛX.t)[T]→t[X:=T](\Lambda X.t)[T]\to t[X:=T]。 现在,假设这是一个箭头,并且我们想给它一个参数,那么我们将需要将此术语应用于适当的类型,以便它可以接收这样的参数。这就是我要问的问题:是否可以构造一个函数Fff 取两个词并返回一个类型 F&lt; Λ X。t &gt; &lt; r &gt;f&lt;ΛX.t&gt;&lt;r&gt;f<{\Lambda X.t}><{r}> 给我们需要替换的类型 XXX 在 ttt 这样 ttt 可以接受论点 rrr? 一些例子: f&lt;ΛX.λxX→X.t&gt;&lt;λxT.x&gt;=Tf&lt;ΛX.λxX→X.t&gt;&lt;λxT.x&gt;=Tf<{\Lambda X.\lambda x^{X\to X}.t}><{\lambda x^T.x}>=T。 f&lt;ΛX.λxX.r&gt;&lt;(λxR.tT) s&gt;=Tf&lt;ΛX.λxX.r&gt;&lt;(λxR.tT) s&gt;=Tf<{\Lambda X.\lambda x^X.r}><{(\lambda x^{R}.t^T)~s}>=T
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.