Questions tagged «pl.programming-languages»

编程语言尤其关注其语义。

2
严格积极性背后的直觉?
我想知道是否有人可以给我直觉,为什么归纳数据类型严格的正定性可以保证强大的规范化。 明确地说,我看到负出现是如何导致分歧的,即通过定义: data X where Intro : (X->X) -> X 我们可以编写一个发散函数。 但我想知道,怎样才能证明严格正归纳类型不容许分歧?也就是说,是否有某种归纳措施可以让我们构造强规范化的证明(使用逻辑关系或类似关系)?此类证据在哪里会针对负面事件进行分解?有没有很好的参考文献显示出归纳类型语言的强大归一化?

1
证明依赖类型检查是可判定的证明技术
我处于一种情况下,我需要证明对于我正在研究的依赖类型演算,类型检查是可以决定的。到目前为止,我已经能够证明该系统正在高度规范化,因此定义相等性是可判定的。 在我阅读的许多参考文献中,类型检查的可判定性被列为强规范化的必然结果,我相信在这种情况下会如此,但是我想知道如何才能真正显示出这一点。 特别是,我坚持以下几点: 仅仅因为类型良好的术语会高度归一化,并不意味着该算法不会在非类型良好的输入上永远循环 由于逻辑关系通常用于显示强规范化,因此在进行类型检查术语时,没有方便的递减度量。因此,即使我的类型规则是针对语法的,也无法保证应用规则最终会终止。 我想知道,有没有人能很好地证明依赖类型语言的类型检查可判定性证明?如果是小的核心演算,那很好。任何讨论证明可判定性的证明技术的东西都将是很棒的。

2
减少策略和评估策略有什么区别?
从Wikipedia上的评估策略文章中: λ演算中的约简策略的概念相似但又截然不同。 从Wikipedia上的减少策略文章中: 它与计算机科学中的评估策略概念相似但有细微差别。 这两篇文章所暗示的评估策略与减少策略之间的微妙区别是什么?它们只是来自不同领域的两个相似概念吗?

1
对于(0 = 1)表示false的事实的引用需要MLTT中的Universe
众所周知,从马丁·洛夫类型理论的不等式(例如)得出矛盾需要一个宇宙。(0 = 1 )→ ⊥(0=1)→⊥(0=1) \to \bot 证明也非常简单-在没有Universe的情况下,我们可以擦除任何依赖类型的依赖关系,以得到简单类型的形状,因此证明意味着我们可以证明以获取任意原子,这当然是不可能的。(0 = 1 )→ ⊥(0=1)→⊥(0=1) \to \botp → ⊥p→⊥p \to \botppp 但是,我找不到谁首先证明了这一点!有人参考吗?

5
使用过程计算和PL理论进行现代编程语言开发
一段时间以来,我对编程语言理论和过程计算非常感兴趣,并已开始对其进行研究。老实说,我不介意从事某种职业。我发现该理论令人着迷。我一直遇到的一个恒定问题是,PL理论或过程计算在现代编程语言开发中是否根本没有任何重要性。我在Pi演算上看到如此多的变体,并且有大量活跃的研究,但是它们是否会被需要或有重要的应用?我之所以这样问,是因为我喜欢开发编程语言,而真正的最终目标是使用该理论来实际构建PL。对于我写的东西,与理论之间确实没有任何关联。

1
程序最小化
电路最小化是最小化给定电路尺寸的问题。一般程序有什么类似的东西吗? 我的问题尤其是- 是否存在用于最小化给定程序的指令数量的算法。我知道这是一个无法确定的问题,但我不是在寻找能够返回最佳结果的解决方案。 虽然可以应用现有的编译器转换来完成此操作,但我正在寻找不需要定义一组非常狭窄的转换和算法来预先搜索它们的东西。 编辑:我还有另一个问题是,是否可以进行一个合理而完整的演算,以使我们能够探索这种语义上等效的程序的整个空间,或者这是不可能的。


1
别名分析文献
我正在用CS撰写硕士学位论文,并且正在使用别名分析。我感兴趣的是针对类Java语言的过程内,流量敏感的必须和可能混淆分析。 我正在搜索详细描述该主题基础知识的文本,但无法找到真正合适的内容。 我在许多关于编译器和静态分析的教科书中幸存下来,但在那儿什么也没找到。 我发现有许多使用别名分析的论文,但是大多数论文都集中在应用别名分析的问题上,并且没有详细描述别名分析算法。其他人则把重点放在C上,因为通用指针增加了复杂性,因此C不合适。 我发现的最好的文本是Whaley和Rinard撰写的论文Java程序的成分指针和转义分析。这是一篇很棒的论文,也是一个很好的起点,但是没有专门讨论别名分析。 这个问题似乎太普遍了,因此我希望可以使用一些规范的算法来解决。 是否有人对这个主题的文本有任何指示?



1
基于统一的平等消除规则
几年前,我在后续演算中遇到了以下左规则: 小号≐ 吨⇝ θθ (Γ )⊢ θ (Ç)Γ ,小号≐ 吨⊢ Çs≐t⇝θθ(Γ)⊢θ(C)Γ,s≐t⊢C \frac{s \doteq t \leadsto \theta \qquad \theta(\Gamma) \vdash \theta(C)} {\Gamma, s \doteq t \vdash C} 在这里,小号≐ 吨⇝ θs≐t⇝θs \doteq t \leadsto \theta计算最一般合一θθ\theta为sss和Ťtt,然后应用substition的结论CCC和所有在上下文中的假设ΓΓ\Gamma。 关于这种统一的有趣之处在于,它等同于找到通用变量(即skolem)。 但是,我不记得我在哪里读到这篇文章,并且想知道是否有人可以帮助我找到对此的引用。

6
消除递归-幕后理论研究
我是这个网站的新手,这个问题肯定不是研究水平-很好。我在软件工程方面有一点背景,但是在CSTheory中几乎没有背景,但是我觉得它很有吸引力。长话短说,如果这个问题在本网站上可以接受,我想对以下内容提供更详细的答案。 因此,我知道每个递归程序都有一个迭代模拟,并且通过维护类似于“系统堆栈”的内容并推送环境设置(如返回地址等),我有点理解为它提供的流行解释。 。 更具体一点,我想(正式地)看看如果您有一个函数调用链如何证明这一说法。此外,如果存在一些可能导致调用某些条件语句该怎么?也就是说,潜在函数调用图具有一些紧密连接的组件。F i F jF0→F1个… F一世→ F我+ 1… Fñ→F0F0→F1个…F一世→F一世+1个…Fñ→F0F_0 \rightarrow F_1 \ldots F_i \rightarrow F_{i+1} \ldots F_n \rightarrow F_0F一世F一世F_iFĴFĴF_j 我想知道如何让我们说一些递归的迭代转换器来处理这些情况。我前面提到的手工波浪形说明是否真的足以解决这个问题?我的意思是为什么在某些情况下删除递归很容易。特别是从二叉树的遍历遍历中删除递归确实很容易-这是一个标准的面试问题,但是对后继订单而言,删除递归一直是我的噩梦。 我真正要问的是问题222 (1)确实有更正式(令人信服的)证明可以将递归转换为迭代吗? (2)如果该理论真的存在,那么为什么我会发现例如简化预订购的迭代,而使后订购如此困难呢?(除了我的智力有限)

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

1
PCF中连续模量的不确定性参考?
有人可以指出PCF中连续模量函数的不可定义性吗? \newcommand{\N}{\mathbb{N}} \newcommand{\bool}{\mathsf{bool}} 安德烈·鲍尔(Andrej Bauer)写了一篇非常不错的博客文章,更详细地探讨了一些问题,但是我将总结一下他的文章中的一部分,以为该问题提供一些背景信息。Baire空间是自然数序列的集合,或者等效地是从自然数到自然数N → N的函数集。对于此问题,我们将仅将注意力集中在可计算的流上。BBBN→NN→N\N \to \N 现在,一个函数是连续的,如果对于每个X 小号∈ 乙,的值˚F (X 小号)仅依赖的元件的有限数量的X 小号,它的computably连续如果我们实际上可以计算需要x s的元素的上限。在计算的某些型号,它实际上可以写一个程序 米Ø d ü 升ü š:(乙→ b Øf:B→boolf:B→boolf : B \to \boolxs∈Bxs∈Bxs \in Bf(xs)f(xs)f(xs)xsxsxsxsxsxs这需要在Baire空间和Baire空间的元件的可计算函数,并给出背面上界流的元素的数量。modulus:(B→bool)→B→Nmodulus:(B→bool)→B→N\mathsf{modulus} : (B \to \bool) \to B \to \N 实现此目的的一个技巧是使用本地存储将最大索引记录到所看到的流中: let modulus f xs = let r = ref 0 in let …

2
限制无锁集合吗?
大卫·罗德里格斯(DavidRodríguez)-dribeas 在StackOverflow的评论中写道:“并非没有锁就可以实现所有集合”。我不确定这是否是正确的,而且我也找不到任何证据。 该语句不是很精确,但是让我尝试以一种更为正式的方式来重新表述:对于每种集合类型C,都有一个无锁集合类型CLF,它提供相同的操作集,并且在CLF上的每个操作都在哪里与上的相应操作具有相同的big-O复杂度C。 顺便说一句,我不希望有一个转变。

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.