Questions tagged «pl.programming-languages»

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


1
编程语言理论试图回答的“问题”是什么?
我一直对诸如组合逻辑,Lambda微积分,函数式编程等各种主题感兴趣,并一直在研究它们。但是,与试图回答“可计算性”问题(即可以/不能在各种约束条件下进行计算的问题)的“计算理论”不同,我努力寻找“编程理论”的类似物 维基百科将其描述为: 编程语言理论(PLT)是计算机科学的一个分支,致力于编程语言及其各个功能的设计,实现,分析,表征和分类。 这就像说“一切”,这并不是很具体。 主题的共同进展通常是这样的: 组合逻辑>演算>马丁·洛夫类型理论>类型lambda积分>(有什么在这里发生)>编程语言开发的-有很少与CL连接/λλ\lambda 我可以看到与CL /相关的底层“数学”λλ\lambda以及由此产生的有趣证明,包括Church-Rosser定理,这很简洁。但是,我正在努力了解所有这些工作的“最终目标”吗?什么是圣杯 PLT的,如果你愿意?就目前而言,这似乎只是在刮擦知识分子的痒,但我真的无法跨过研究/理论到任何实际的桥梁。 注意:在使用 λλ\lambda-calc用于不确定性证明。但是,除了它对“可计算性”的适用性之外,我只是不了解它,甚至很难从这种狭窄的POV理解PLT研究的需要。是否有任何现有的书籍,参考文献可以阐明PLT的“大局”?



2
编程语言中的抽象解释的目标是什么?
我现在试图更好地理解编程语言中的“抽象解释”是什么。我找到了一本很好的书,该章解释了用最小固定元素扩展域的思想,为连续函数产生固定点的四个公理等等。我了解了这些技术细节(尽管我不确定整个方案中到底指的是“抽象解释”)。 我不确定是什么促使使用抽象解释?它只是确定可计算功能的固定点吗?主要动机是否来自大多数编程语言中的递归? 也将很高兴获得一些高层次的概述,该概述对具有计算机科学学位的人的技术确实足够深入。我发现Wikipedia页面令人不安。

2
抽象层次结构的形式表示
介绍 我正在撰写有关抽象三角洲建模(ADM)的博士学位论文,该摘要是对能够作用于产品(如“软件产品”)的修改(称为deltas)的抽象代数描述。这可以用于将一组相关产品(“产品系列”)组织为一个简单的核心产品和一组有条件应用的增量,从而可以更好地重用基础产品。 增量建模的细节对于我的问题并不是很重要,但是ADM可以作为一个很好的例子来说明这个问题,因此我将介绍最重要的概念。 背景 感兴趣的主要结构是三角肌 。产品来自全集。增量来自具有合成运算符的单点半体和中性元素。语义评估运算符转换一个'syntactic'delta转换为关系(P,D,⋅,ϵ,[[−]])(P,D,⋅,ϵ,[[−]])(\mathcal P, \mathcal D, \cdot, \epsilon, \mathbf{[\kern-1pt[-]\kern-1pt]})PP\mathcal P(D,⋅,ϵ)(D,⋅,ϵ)(\mathcal D, \cdot, \epsilon)⋅:D×D→D⋅:D×D→D\cdot : \mathcal D \times \mathcal D \to \mathcal Dϵ∈Dϵ∈D\epsilon \in \mathcal D[[−]]:D→2P×P[[−]]:D→2P×P\mathbf{[\kern-1pt[-]\kern-1pt]} : \mathcal D \to 2^{\mathcal P \times \mathcal P}d∈Dd∈Dd \in \mathcal D[[d]]⊆P×P[[d]]⊆P×P\mathbf{[\kern-1pt[}\,d\,\mathbf{]\kern-1.5pt]} \subseteq \mathcal P \times \mathcal P决定如何修改产品。ddd 题 由于ADM是抽象代数,因此我的大部分工作都是从乘积和增量的具体本质中抽象出来的,并证明了许多结果而没有下降到更具体的水平。预期这些结果将延续到更具体的领域,但我尚未对此进行形式化。 有一些示例和案例研究在特定领域中起作用:面向对象的源代码,代码,自然数,移动电话配置文件等。还有一些中间的抽象阶段,例如嵌套键值对。对于每个I,我都重新定义(或“优化”)。大号一个ŤËXLATEX\small\mathrm{\LaTeX}(P,D,⋅ ,ϵ …

2
Coq / Agda中经过认证的编译器和优化
我对以Martin-Löf类型理论(即Coq / Agda)形式化的经过验证的编译器感兴趣。目前,我已经写了一个小玩具示例。因此,我可以证明我的优化是正确的。例如,可以消除具有零的加法运算,即“ x + 0”之类的表达式。 有没有用常规编译器难以执行的优化,可以作为一个很好的例子?是否可以证明程序的某些属性,这些属性允许使用常规编译器无法执行的优化?(即没有定理证明者可能的推论) 我将对这个想法或示例以及该主题的参考感兴趣。 一个相关问题: 编译器正确性证明 编辑:正如Tsuyoshi在评论中很好地指出的那样:我正在寻找优化技术,如果使用(例如)C编写编译器,则难以实现,但是如果使用(例如)Coq编写编译器,则更容易实现。随着Agda编译为C(通过haskell),有可能在Agda中也可以在C中完成所有可能的工作。定理证明如Coq / Agda的唯一好处可能是可以验证编译器和优化。 edit2:按照Vijay DI的建议,写我到目前为止所读的内容。我主要关注INRIA的Xavier Leroy和CompCert项目(我认为有80页的论文很好阅读)。第二个兴趣是Anton Setzer在交互式程序上的工作。尽管我也许他的工作可以用来证明有关IO程序和IO程序的双重仿真的特性。感谢您提及Sewell。我在ICFP听到了他的演讲“丛林传说”,并阅读了2-3篇论文。但是我还没有专门研究他和他的合著者的作品。 我还没有找到从哪里开始,也没有找到关于优化编译器的论文。例如,在经过验证的编译器设置中,哪些优化最有趣。

1
Martin-Löf类型理论会提高编写可证明正确代码的能力吗?
这篇文章引用了Curry-Howard同构和Martin-Löf类型理论。 该帖子声称在数学的描述语言和计算机编程的基于操作的语言之间存在未来的“统一”。 我的问题是: 这些想法会提高(通过语言)编写可证明正确代码的能力吗? 在理论层面上是否已经发现了MLTT的全部含义? 这篇文章是否描述了在COQ或Agda中无法完成的任何事情?

3
是否可以计算两个函数是否在扩展上相等?
如果您有两个实现不同排序算法的函数,那么是否可以通过源代码推断它们都具有相同的外部属性?意味着它们都将具有可能的未排序序列作为输入并具有已排序序列作为输出?这些外部属性可以通过什么方式由源代码确定?您将如何描述这些外部属性?将使用什么表示法? 可以通过显式定义外部属性(例如在类型系统中)来使外部属性已知,但是我想知道是否可以隐式完成。还是在某种程度上理论上无法推断出这种语义?我对这是否适用于任意函数(不仅是排序算法)感兴趣,并假设函数之类的东西总是会停滞并且没有副作用。 我应该看看指称语义还是无关的? 我对这方面的研究以及用于描述可能有助于我的文献检索的主题的不同术语感兴趣。


2
面向对象模型的“对象”的数学形式定义/计数器部分
这是我在数学SE论坛上提出的一个问题,在此已被推荐给我。所以这里的问题是 我在形式数学和理论计算机科学方面都是新手,因此如果您发现我的问题没有适当的表述,请多多包涵。在模拟现实世界时,面向对象建模对于定义复杂的交互似乎非常有用。但是它主要用于编程。我想知道我们在数学上是否有类似的概念。当我们进行编程时,我们可以理解“对象”和“面向对象编程”的概念,并加以实现。但是,我们是否有基于集合论的“对象”的正式定义?或就此而言,还有其他形式数学理论吗? 我们可以实现/正式定义三个主要的面向对象的建模概念吗?1.封装2.继承3.多态 我知道问题太笼统了,但是如果您也可以提供一些指示,以便我能更好地理解这些概念,我将不胜感激。

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

1
数据库查询语言可实现高效查询
在关系数据库的流行查询语言中,似乎可以创建需要大量资源来回答的查询。在实践中,数据库管理员通过限制每个查询的内存量并检查是否存在长时间运行的查询(如果数据库速度变慢)来进行管理。这似乎是临时的,是否有TCS解决方案? 是否存在只能实现高效查询的查询语言? 如果没有这种语言,是否有理论上的原因? 我可能希望这类事物存在或至少存在的一些原因是有道理的: 我们有专门设计用于仅实现有效计算的编程语言(通常通过在其类型系统中使用一些限制性逻辑) 流行的查询语言(例如SQL)已经受到逻辑的启发,因此对于数据库用户来说,考虑使用更多限制性逻辑似乎并不困难。 一个非恶意数据库用户已经尝试准备快速执行的查询,因此我们应该期望这些限制性更强的查询语言只会阻碍恶意用户。 这个问题的灵感来自于前面两个问题的交集: 用于高效计算的编程语言 考虑到答案查找的理论指数复杂性(以查询的大小为单位),为什么关系数据库根本无法工作?

5
编写通用递归函数
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为理论计算机科学堆栈交换的主题。 3年前关闭。 通用递归函数是否有简短的显式构造?我所看到的所有定义都以某种方式涉及对Turing机器进行编号,这可能是可行的,但似乎很难且难以用高级编程语言(如Python,Haskell等)编写。
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.