Questions tagged «pl.programming-languages»

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

2
双产品的证明理论?
一类具有双积时相同的对象都是产品和副产品。有没有人研究过双产品范畴的证明理论? 也许最著名的例子是向量空间的类别,其中直接和和直接乘积构造给出相同的向量空间。这意味着向量空间和线性映射是线性逻辑的稍微退化的模型,我很好奇接受这种退化的类型理论会是什么样子。

2
逻辑关系的起源是什么?
我实际上有两个问题: 谁首先使用逻辑关系来关联语义? 我将它们追溯到雷诺的“论直接语义学与连续语义学之间的关系 ”,但是我不能声称自己做了详尽的搜索。 我发现了对较早的逻辑关系的引用(Tait,'67),但没有涉及语义。 当前对逻辑关系最好的介绍是什么? 我从TCS手册中知道Mitchell的“ 用于编程语言的类型系统 ”。还有什么其他的展览?

2
有人在模块化编译器中使用过Pottier和Gauthier的多态去功能化功能吗?
去功能化是一种程序转换,可将高阶程序转换为一阶程序。这个想法是,给定一个程序,只有有限的许多lambda抽象,因此您可以用id替换每个lambda,并使用对在该id上分支的apply过程的调用来替换每个函数应用程序。有时 在函数语言的编译器中使用此方法,但是它的适用性受到以下事实的限制:去功能化是整个程序的转换(您必须静态地了解程序中的所有功能),因此,只有整个程序的编译器才能使用它。 但是,Pottier和Gauthier使用了涉及GADT的更为复杂的类型化方法,从而为它提供了一种多态性类型的去功能化算法。现在,有了它们的编码,就可以向其lambda数据类型添加一个包罗万象的大小写,它不是标签,而是包含一个高阶函数。这意味着应该有可能使用它们的编码来逐模块地解除功能。 有没有人做过这个,并指出我使用这种想法的编译器?(玩具编译器还可以,实际上是首选。)

1
构造度量空间的不动点定理?
Banach的不动点定理说,如果我们有一个非空的完整度量空间,那么任何统一压缩函数都具有唯一的不动点。然而,这个定理的证明需要选择公理-我们需要选择任意元素一个∈ 一开始迭代˚F从,得到柯西序列一,˚F (一),˚F 2(一),˚F 3(a ),…。 AAAf:A→Af:A→Af : A \to Aμ(f)μ(f)\mu(f)a∈Aa∈Aa \in Afffa,f(a),f2(a),f3(a),…a,f(a),f2(a),f3(a),…a, f(a), f^2(a), f^3(a), \ldots 构造分析中不动点定理如何表达? 另外,是否有对构造度量空间的简要引用? 我问的原因是我要构建系统F的模型,其中类型还带有度量结构(除其他外)。在构造性集合理论中,我们可以构造集合的族非常有用UUU,这样使得UUU在产品,指数和UUU索引族下是封闭的,这使得给出系统F的模型变得容易。 如果我能做一个类似的构造性超测空间,那将是非常好的。但是,由于在构造性集合论中增加了选择使其成为经典,显然,我需要对定点定理以及其他一些东西更加谨慎。

1
线性类型的编程语言中的数据结构
假设我们正在使用一种支持线性类型的编程语言(可以说,线性类型的术语最多可以使用一次)。这允许以某种对语言有问题的方式来处理某些计算效果(例如,变异,甚至更改操作数的类型),而语言的类型系统仅对“永恒的真理”起作用。 许多数据结构可以用归纳类型来表征(列表和树是典型示例)。如果将线性归纳类型添加到混合,我们还可以处理可变数据结构。 但是,我尚不清楚如何用线性类型的编程语言来表示表现出共享和循环引用的数据结构(此类数据结构的示例是DAG和其他图,由邻接表或其他东西(循环列表)表示)。我们能做到吗?如果不可能,我们应该以哪种方式扩展语言以适应这种数据结构? 到目前为止,我发现的最复杂的示例是一个双向链接列表。还有其他例子吗?

1
谓语元理论中祈使系统的逻辑关系。
像系统F这样的命令性语言的逻辑关系似乎严重依赖于环境逻辑的命令性。具体来说,将根据所有类型的关系来定义forall类型的解释。在强制性系统(如CiC / Coq)中很好,但在谓词系统(如Agda)中似乎是不可能的。 如何才能做到这一点?例如,您将如何证明Agda中系统F的规范化?您是否必须建立自己的命令性宇宙?

1
我们可以严格区分编程语言中的句法和语义方法吗?
虽然讨论了强有力的规范化证明,但该评论将“规范形式模型”与“纯粹的句法方法”进行了对比。 这使我回到一个更基本的问题:面对基于语法的模型,我们仍然可以严格地区分句法和语义结构吗?代数的术语模型,一阶逻辑的Henkin模型呢?那么结构操作语义呢?由于术语模型可以与语法同构,因此很难进行明确区分。 在研究逻辑上的证明论与模型论之间的区别之前,我甚至对“静态类型系统是一种句法方法”的想法感到困惑。归根结底,类型系统会考虑类型,这是程序行为的抽象(对于依赖类型,则是任意精确的类型)。

1
λ演算扩展中的η转换与可扩展性
η转换与可扩展性之间的关系经常使我感到困惑。 编辑:根据评论,似乎我也对延伸对等与观察对等之间的关系感到困惑。但是至少在具有函数的扩展性相等性的Agda(作为假设)和简单类型的lambda演算(如果我没有记错的话,它具有完全抽象的语义)中,指称等效性与观察性等效性相同。随时用评论或答案来纠正我;我从未在这些问题上接受过系统的教育。 在无类型的lambda演算中,如Barendregt所证明的那样(根据该问题的回答),eta规则提供与扩展性规则相同的证明系统。我理解这意味着具有等于规则的证明系统对于观察等价而言是完整的(从其他答案来看,可能需要ξ规则规则,即根据约束力IIUC进行归约;我也没有问题添加该规则) 。 但是,如果我们切换到类型化演算并添加额外的基本类型以及相应的引入和消除形式来扩展该演算,会发生什么?我们还能为观察等效性编写一个完整的证明系统吗?我将按照米切尔(Mitchell)的编程语言基础(FPL)来讨论公理语义形式的证明系统。证明系统/公理语义定义程序等效性。 问题1:Barendregt定理是否扩展到STLC?在这种情况下,η等价性等同于可扩展性吗? 我正在浏览FPL对PCF的讨论(但尚未完成本节),似乎一旦添加了对,可扩展性就需要另外一条规则,即排斥性配对:pair (Proj1 P, Proj2 P) = P。有趣的是,该规则与对的引入和消除完全相同,就像η规则与功能的引入和消除一样。 问题2:添加简单的配对公理是否足以证明简单的带对的λ微积分的可扩展性?编辑:问题2b:由于我提到的结构相似性,否定性配对η-律,如本文中提到的η-律? 现在让我们一路前往PCF。然后,我所看到的对扩展性相等的描述证明了扩展性是一种归纳证明的规则,但是他们没有说这是否足够。由于PCF是图灵完备的,所以扩展等式是不确定的。但这并不意味着没有完整的证明系统,因为证明的长度是不受限制的。更相关的是,这样的证明系统可能与哥德尔的不完备性定理相矛盾。该论点甚至适用于不带的PCF fix和Gödel的SystemT。 问题3:PCF中是否存在用于观测等效性的完整证明系统?没有PCF fix呢? 更新:完全抽象 我在这里回答关于完全抽象的评论。我认为PCF遇到两种不同类型的问题:它具有非终止(通过修复),这会导致完全抽象的丢失,但是它也具有自然数。这两个问题都使观察对等难以解决,但我认为彼此独立。 一方面,PCF失去了完全的抽象,因为并行或存在于语义域中(Plotkin 1977),这似乎与非终止有关。Ralph Loader(2000年,“最终PCF不可判定”)表明,最终PCF(无自然值,但具有非终止性)已经不确定。因此,(如果我总结正确的话),完全抽象的语义不能限制于具有可计算操作的域。 另一方面,以不带有终结符的GödelSystem T为例。(我不确定它具有完全抽象的语义,但是我猜是的,因为仅针对PCF提到了该问题;该域必须包含高阶原始递归函数)。Harper的《编程语言实用基础》讨论了该语言的观察等效性。秒 47.4的标题为“一些平等法则”,并显示了观察等效性的一些可接受的证明规则。它没有地方说出证明系统是否完整,所以我想不是,但也没有地方讨论它是否可以完成。我的最佳猜测可以追溯到哥德尔的不完全性定理。

2
用nat或其他归纳数据类型进行微积分的切消?
是否有人将我引向一篇详细介绍命题直觉逻辑的割消除定理的论文,包括诸如自然数之类的归纳数据类型(列表或树也可以)?什么系统我对的一个例子是哥德尔T,其具有由所述语法给出类型。我对自然数或以自然数索引的谓词不太感兴趣。A::=N|A→A′A::=N|A→A′A ::= \mathbb{N} \;\;|\;\; A \to A' 我知道如何使用逻辑关系参数(或诸如NbE之类的相关技术)来证明这些系统的自然推导版本的beta归一化,但是我想知道是否存在有关如何使这些方法适应随后的结石的标准参考。 我问的原因是我正在研究添加定点运算符以保护语言的递归。否定性想法是一个相当古老的想法-通过Banach定理将类型解释为超空间和不动点-但是我所知道的证明消除剪切的纯粹语法技术似乎并不能很好地适应这种情况。

1
在无类型的λ微积分中,最里面的约简是否是永久的?
(我已经在MathOverflow上问过这个问题,但是那里没有答案。) 背景 在无类型lambda演算,一个术语可以包含许多redexes,而不同的选择关于哪一个,以减少可能会产生非常不同的结果(例如,其在一步(β-)减小到y或自身)。减少位置的不同(顺序)选择称为减少策略。一个术语牛逼据说是正火,如果存在一个削减战略带来ŧ(λ X 。ÿ)((λ X 。X X )λ X 。X X )(λX。ÿ)((λX。XX)λX。XX)(\lambda x.y)((\lambda x.xx)\lambda x.xx)ββ\betaÿÿyŤŤtŤŤt正常形式。如果每种简化策略都将t转化为正常形式,则项将被强烈归一化。(我不担心会发生什么,但是合流保证不会有不止一种可能性。)ŤŤtŤŤt 如果每当t具有正常形式时,就可以说是一种归约策略正在规范化(从某种意义上说,这是最好的),这就是最终的结果。最左端的策略正在规范化。ŤŤt 在频谱的另一端,如果每当有t项存在无限的还原序列时,就认为该还原策略是永久的(从某种意义上讲,这是最坏的可能性),然后该策略找到了这样的序列-换句话说,我们可能无法正常化,那么我们将。ŤŤt 我知道永久减少策略和˚F b ķ分别由下式给出: ˚F b ķ(Ç [ (λ X 。小号)吨] )= c ^ [ 小号[ 吨/ X ] ] 如果 吨 强烈正火˚F b ķ(ç [ (λ X 。小号)吨] )= C ^ [F∞F∞F_\inftyFb …

1
通过融合重写规则表征不可见的等效项
针对另一个问题,lambda演算的beta理论的扩展,Evgenij提供了答案: Beta +规则{s = t | s和t是不可解的封闭条件} 如果我们可以找到一个术语序列使得M对它们的应用等于I,那么术语M是可解的。 Evgenij的答案给出了关于lambda微积分的方程式理论,但没有一个以归约系统(即汇聚的,递归的重写规则集)为特征的方程式理论。 我们称其为lambda演算的一种无形的等价形式。lambda演算的一种归约系统将一些非平凡的封闭不可解lambda项等同起来,但不添加任何涉及可解项的新方程式。 在λ演算的β理论上有无形的对等吗? 后记一个示例,描述无形的对等,但不融合。令M =(λx.xx)和N =(λx.xxx)两个不可解的项。将规则重写NN添加到MM会导致包含MM = NN的不可见等价关系,但具有坏临界对,其中NN减少为MM和MMN,其中每个都有一个可用的重写,然后重写为自身。

2
功能编程中的差异列表
问题自Okasaki以来,纯功能数据结构有何新变化?和jbapple的史诗答案,提到了在函数编程中使用差异列表(与逻辑编程相对),这是我最近感兴趣的事情。这使我找到了Haskell 的差异列表实现。我有两个问题(如果我应该在StackExchange上给他们两个不同的问题,请原谅/纠正我)。 一个简单的问题是,除了Haskell库中的代码之外,还有人意识到函数式编程和/或实现中的差异列表的学术考虑吗?jbapple的答案没有引用差异列表(逻辑编程中的差异列表存在于绝大部分内容中,并且存在于我在“周围某处”(TM)中提供的两个资源中)。在找到Haskell实现之前,我不知道这个想法已经从逻辑跃升为函数式编程。当然,Haskell差异列表是高阶函数的自然使用,其工作原理与逻辑编程中的完全不同,但是接口肯定是相似的。 我想问的更有趣(而且更模糊)的问题是上述Haskell差异列表库所要求的渐近上限看起来是否正确/合理。我的困惑可能是因为我失去了一些东西约显而易见约懒惰复杂的推理,但所主张的界限才有意义,我如果替换在大数据结构(或关闭阵型,或者变量查找,或东西)总是恒定的时间。还是“捕获”仅仅是因为“头”和“尾”的运行时间没有限制,正是因为这些操作可能必须经过任意一堆延迟的计算/替换才能完成?

1
语言与quote`-`eval`的上下文等价性是微不足道的吗?
在[1]中,米切尔·旺德(Mitchell Wand)证明了在纯lambda演算中添加fexprs会使语境对等理论变得微不足道,这意味着如果两个词是 -congruent,则它们在语境上是等同的。在探索相关工作时,他认为“我们的结果扩展了对阿尔伯特·梅耶[2]的古老观察,并使得上下文对等变得微不足道”。但是参考[2],只能找到Meyer的以下陈述:αα\alphaevalquote 我第一个想到的是与语言quote- eval功能,如LISP [3]有语法和可执行的对象之间没有区别类型。实际上quote- eval在LISP中看起来已经足够安全了,因为尽管从quote句法上来说cond,它看起来像是一个真正的运算符,例如say ,但它实际上并不像一个运算符(它只有在解析时有行为,在运行时才有行为,例如,一个人不能通过quote作为过程的参数)。不过,我还没有看到令人信服的示例,其中quote- eval功能值得。 不管这些注释中有哪一个小缺陷,都可能误导读者以为cond可以将其作为参数传递给过程。如果我理解正确,那么迈耶所说的“ quote- eval似乎足够安全”意味着quote- eval尽管他没有提供证明,但可能不会使方程式理论变得微不足道。 编辑: 正如Martin所建议的那样,由于所有三篇论文都引用了有关LISP家庭语言的内容,因此让我们将这个问题放在相同的背景下。 在地球上,带有quote- 的语言eval(特别是LISP)的上下文对等是否微不足道? [1]米切尔· 旺德(Mitchell Wand),《 Fexprs理论不重要》。Lisp和符号计算10(3):189-199(1998)。 [2] Albert Meyer, “正式软件开发的编程逻辑研讨会”之谜。1984年 [3] John McCarthy,符号表达式的递归函数及其通过机器的计算,第一部分。1960年4月ACM的通讯。

3
可以机械地实施任何程序吗?
是否可以构建一个单一目的的(非图灵完整的)机械实现,例如Microsoft Word?是否可以实现诸如迭代器,一阶函数以及整个编程技术之类的东西?齿轮和其他机械零件能否代表数据结构甚至是程序对象?在某种程度上,这是否有必要建造一台通用的图灵等效机器,或者每个功能,变量等都可以以飞轮和/或齿轮,棘轮的形式拥有自己独特的机械结构,那么您呢?总之,我想知道标准计算机上的任何给定软件是否可以编译为机械蓝图。

1
移位减少解析与定界连续之间的关系?
是否有人正式定义了移位减少解析技术和定界连续符之间的关系? 在构造一个自下而上的解析器(例如LR解析器)时,我们采用一种语法,然后将解析状态表示为一组项:形式的增产,其中α和β是末端和非末端的序列。标记∙表示解析器进入字符串的距离,其中α表示到目前为止已看到的内容,而β表示对可能要解析的内容的预测。A→α∙βA→α∙βA \to \alpha \bullet \betaαα\alphaββ\beta∙∙\bulletαα\alphaββ\beta 在LR语法分析自动机的转变的移位动作匹配靠在堆叠的前缀,并将其替换为甲。对堆栈的这种深层操作类似于控制操作员的效果,但这只是定性观察。αα\alphaAAA 有没有人研究过移位减少解析与定界控制运算符(例如移位/重置)之间的联系?

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.