Questions tagged «pl.programming-languages»

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


3
读者,作家单子
令CCC为CCC。设(×)(×)(\times)为的乘积双函子CCC。由于Cat是CCC,因此我们可以咖喱(×)(×)(\times): curry(×):C→(C⇒C)curry(×):C→(C⇒C)curry (\times) : C \rightarrow(C \Rightarrow C) curry(×)A=λB.A×Bcurry(×)A=λB.A×Bcurry (\times) A = \lambda B. A \times B 函子范畴C⇒CC⇒CC \Rightarrow C具有通常monoidal结构。 所述的半群C⇒CC⇒CC \Rightarrow C处于单子CCC。 我们将有限积视为上的单调结构CCC。 curry(×)1≅idcurry(×)1≅idcurry (\times) 1 \cong id ∀A B.curry(×)(A×B)≅(curry(×)A)∘(curry(×)B)∀A B.curry(×)(A×B)≅(curry(×)A)∘(curry(×)B)\forall A\ B. curry (\times) (A\times B) \cong (curry (\times) A) \circ (curry (\times) B) 因此(curry(×))(curry(×))(curry (\times))保留了单曲面结构,因此将一个单面体传输到单子,而将共形子传输到共体。即,它将一个任意的等分面词传输www到(Writer w)(Writer w)(Writer\ …

2
范畴论和单子论在理论计算机科学研究中的现状?
背景。我是一名本科生,对与类别理论,monads和Haskell有关的研究感兴趣,并且我想为该领域的本科论文找到一个主题。 我看了看报纸 Eugenio Moggi,“ 计算和单子的概念 ”,1991年, 而且我还不太了解。我可能需要一些时间才能完全理解它。但是在花更多的时间研究它之前,我想更好地了解该领域及其研究潜力。我最近与我的一位教授讨论了这一问题,他告诉我,单子电池在90年代的研究界就很流行,但如今它们已经过时了。 因此,我现在正在寻找与monad有关的最新作品,并且想知道: 如今,在理论计算机科学的哪些领域中完成了与类别理论和单子论有关的研究? 关于E. Moggi在程序设计理论上对单子的研究,已经建立或提出了什么样的研究?是否有与他的论文相关的后续研究或正在进行的研究?

1
相关记录的参数化和投影消除
π 1:甲× 乙→ 甲π 2:甲× 乙→ 乙A×B≜∀α.(A→B→α)→αA×B≜∀α.(A→B→α)→α A \times B \triangleq \forall\alpha.\; (A \to B \to \alpha) \to \alpha π1:A×B→Aπ1:A×B→A\pi_1 : A \times B \to Aπ2:A×B→Bπ2:A×B→B\pi_2 : A \times B \to B 即使F型的自然读数是一对带有let样式消除的对,也并不令人惊讶。let(x,y)=pinelet(x,y)=pine\mathsf{let}\;(x,y) = p \;\mathsf{in}\; e,因为两种对在直觉逻辑中是可互换的。 现在,在具有强制性量化的从属类型理论中,您可以遵循相同的模式来编码从属记录类型Σx:A.B[x]Σx:A.B[x]\Sigma x:A.\; B[x]为 Σx:A.B[x]≜∀α.(Πx:A.B[x]→α)→αΣx:A.B[x]≜∀α.(Πx:A.B[x]→α)→α \Sigma x:A.\;B[x] \triangleq \forall\alpha.\; (\Pi x:A.\; B[x] \to \alpha) …

1
(如何)可以在pi演算中建模广播?
您可以在pi演算中对可靠的广播建模吗? 如果是这样:如何? 如果不是:是否有任何类似的过程代数可供使用? 我尝试过的 如果发件人想要消息发送Ÿ所有P 1到P ñ,你可以写 !(¯ X Ÿ )。S和x (z )。P 1至x (z )。P ñ。但是你如何保证(¯ X Ÿ )复制ñ倍,即没有消息迷路?我不知道ñSSSyyyP1P1P_1PnPnP_nx¯¯¯y).Sx¯y).S\overline{x}y).Sx(z).P1x(z).P1x(z).P_1x(z).Pnx(z).Pnx(z).P_n(x¯¯¯y)(x¯y)(\overline{x}y)nnnnnn提前。(仅)在涉及的所有进程之间来回发送多个消息是否可能? ...还是误解了复制的不确定行为?


3
谓词在类型论中归纳定义中的作用是什么?
我们经常要定义一个对象一∈ ü一种∈üA \in U根据一些推理规则。这些规则表示生成函数FFF,当它是单调的,产生一个至少固定点。我们取是“归纳定义”的。此外,单调性使我们能够以“归纳原理”进行推理,以确定集合何时包含(即,何时属性普遍持有)。μ ˚FμF\mu F甲:= μ ˚F一种:=μFA := \mu F一种一种AFFFA一种AA一种A 在勒柯克这相当于编写定义有明确的介绍条款。尽管此定义表示特定函数,但该函数不一定是单调的。因此,Coq使用一些语法检查来确保定义的“格式正确”。在某种程度上,它拒绝了在引入词类型中出现在负数位置的Inductive一世ñdüCŤ一世vË\mathtt{Inductive}A一种AFFFA一种A (如果到目前为止我的理解存在缺陷,请纠正我!) 首先,关于Coq的一些问题: 1)Coq中的语法检查是否仅用于确保的定义为谓语?(如果是这样,则难辨性是定义定义不正确的唯一方法吗?)还是检查单调性?(相应地,非单调性会杀死它吗?)A一种A 2)这种否定出现是否必然意味着的定义是强制性/非单调性的?还是Coq在这种情况下根本无法验证其定义是否正确?AA一种AA一种A 更一般地说: 3)归纳定义的谓词性与该定义的生成函数的单调性之间有什么关系?它们是同一枚硬币的两个面吗?他们无关吗?非正式地,哪一个更重要?

4
关于自己的源代码的程序推理
这个问题的灵感来自以下(模糊的)问题:拥有可以推理并修改其源代码的AI的编程语言/逻辑基础是什么? 这一点都不严格,因此这是我尝试从中提取一个具体的问题。我对两件事感兴趣: (A)可以将自己的程序表示和操纵为数据类型程序(例如,AST)的编程语言P。(如果需要,可以将类型为Program的对象转换为String,即该语言的有效程序的文本。这与编译器的操作相反。) (B)一种推理语言P程序的功能的方法。我正在考虑以下两个层次: 另一种语言Q(具有定理证明功能)可对P程序的功能进行建模。它应该能够表达和证明诸如“运行程序p的结果为foo”之类的语句。 推理程序p:Program 用语言P本身做什么的一种方式。(因此,我们将P = Q视为上述值。) 在何种程度上实施了类似的措施,或者在这个方向上取得了什么进展?实际的障碍是什么?根据问题的初衷,使问题形式化的最佳方法是什么? * 正如答案所显示的(谢谢!),(A)和(B1)可以分别完成,尽管似乎将它们一起执行更多是研究问题。 这是我对这个问题的一些初步想法(警告:相当模糊)。另请参阅我对Martin Berger答案的评论。 我对编程语言建模相同的编程语言感兴趣,而不是对一种更简单的编程语言(因此上面的P = Q)感兴趣。这将是程序能够“了解其自身源代码”的“概念证明”。相依类型的编程语言可以保证其功能的输出,但这不算是“关心自己的源代码”,而不仅仅是“ Hello world!”。会被视为一种会自动打印出裸露的字符串的语言中的quine-需要某种引用/自引用。这里的类似物具有表示Program的数据类型。 这似乎是一个相当大的项目-语言越简单,表达其中的所有内容就越困难;语言越复杂,就需要进行更多的建模工作。 按照递归定理的精神,程序可以“获取”其自己的源代码并对其进行修改(即,输出其自身的修改版本)。(B2)然后告诉我们该程序应该能够对修改后的程序表示保证(这应该能够递归,即它应该能够对将来的所有修改内容进行表达?)。

2
程序翻译的完全完整性与完全抽象
编译器验证工作通常归结为证明编译器完全抽象:它保留并反映(上下文)对等。 代替提供完全抽象样张,由长谷川[一些最近(分类基于)编译器核查工作1,2 ]和艾格等。等 [ 3 ]证明了各种CPS翻译的完全完整性。 问题: 完全完整性和完全抽象之间有什么区别? 在我看来,完整性就像翻译的对等反映,而完整性似乎是对等保存的结果。 注意:Curien [ 7 ]和Abramsky [ 8 ]都探讨了可定义性,完全抽象以及某种程度上完全完整性之间的关系。我怀疑这些资源可能可以回答我的问题,但经过表面阅读后,我尚未确认。 某些背景:Abramsky和Jagadeesan [ 4 ] 提出了“完全完整性”一词,用以描述乘法线性逻辑的博弈语义模型的正确性。 Blute [ 5 ]提供以下定义: 令FF\mathcal{F}为自由类别。我们说一个明确的模型 MM\mathcal{M}是全面完成 FF\mathcal{F}或者说我们有 充分完整性FF\mathcal{F}相对于MM\mathcal{M},如果,相对于发电机的一些解释,独特的无仿函数[[−]]:F→M[[−]]:F→M[\![ - ]\!] : \mathcal{F} \rightarrow \mathcal{M}已满。 据我所知,[ 6 ]中的长谷川是第一个采用完全完整性来描述程序翻译而不是分类语义模型的人。在这种情况下,吉拉德从简单类型的Lambda演算转换为线性Lambda演算。后来,在[ 1 ],他定义了CPS翻译的全完整性(⋅)∘(⋅)∘(\cdot)^\circ为: Γ∘;∅⊢N:(σ∘→o)⊸oΓ∘;∅⊢N:(σ∘→o)⊸o\Gamma^{\circ};\emptyset \vdash N : (\sigma^\circ \rightarrow o) \multimap oΓ⊢M:σΓ⊢M:σ\Gamma \vdash …

1
MALL +无限制的递归类型图灵完成了吗?
如果你看一下在无类型的λ演算的递归组合程序,如Y组合或欧米伽组合子: 很明显,所有这些组合器最终都在其定义中的某个位置复制了一个变量。ωY==(λx.xx)(λx.xx)λf.(λx.f(xx))(λx.f(xx))ω=(λx.xx)(λx.xx)ÿ=λF。(λX。F(XX))(λX。F(XX)) \begin{array}{lcl} \omega & = & (\lambda x.\,x\;x)\;(\lambda x.\,x\;x)\\ Y & = & \lambda f.\,(\lambda x.\,f\;(x\;x))\; (\lambda x.\,f\;(x\;x)) \\ \end{array} 此外,所有这些组合子是分型的简单类型的演算,如果你用递归类型扩展它,其中递归类型中允许 α出现负数。μα.A(α)μα.A(α)\mu\alpha.\,A(\alpha)αα\alpha 但是,如果将完整的(负发生率)递归类型添加到线性逻辑的无指数片段(即MALL)中,会发生什么? 那你就没有指数了给你收缩。您可以使用类似!的方式对指数 类型进行编码。甲≜ μ α 。!A!A!A ,但我不知道如何定义它引进规则,因为这似乎需要一个固定的点组合子来定义。我正在尝试定义指数,收缩,定点组合器!!A≜μα.I&A&(α⊗α)!A≜μα.I&A&(α⊗α) !A \triangleq \mu\alpha.\;I \;\&\; A \;\&\; (\alpha \otimes \alpha) MALL加上无限制的递归类型是否仍在规范化‽

2
准PER /双功能关系/ Z字形关系的用途?
给定集和乙,一个双官能关系(〜)⊆ 甲× 乙它们之间被定义为满足以下特性的关系式:一种一种A乙乙B (〜)⊆ 甲× 乙(〜)⊆一种×乙(\sim) \subseteq A \times B 如果和一个'〜b '和一个〜b ',然后一个'〜b。 一〜b一种〜ba \sim b一种′〜b′一种′〜b′a' \sim b'一〜b′一种〜b′a \sim b'一种′〜b一种′〜ba' \sim b 双功能关系是对等价关系概念的概括,它允许人们从不同的集合中定义平等的概念。结果,由于以下图片,它们也被称为准PER(QPER),也被称为之字形关系: 我正在写一篇使用它们的论文,但是我在寻找好的参考文献在语义方面遇到困难。 Martin Hoffman在基于效果的程序转换的正确性中使用它们。 我看到过提到Tennant和Takeyama也提议使用它们的提及(但没有很好的参考)。 它们是一个很漂亮的主意,我很难相信我对它们的特殊使用是原创的。我将不胜感激任何进一步的参考。

4
一元参数与二元参数
在看到Bernardy和Moulin在2012年发表的LICS论文(https://dl.acm.org/citation.cfm?id=2359499)之后,我最近对参数变得非常感兴趣。在本文中,他们将一元参数化内部化为具有依赖类型的纯类型系统,并暗示如何将构造扩展到任意Arities。 我只看过之前定义的二进制参数。我的问题是:一个有趣的定理的例子是什么,可以用二元参数性证明而不是一元参数性?看到一个可证明具有三级参数性但不具有二元性的定理的例子也很有趣(尽管我已经看到n参数= n等于n> = 2的证据,请参见http://www.sato.kuis .kyoto-u.ac.jp /〜takeuti / art / par-tlca.ps.gz)


3
我们什么时候可以说两个程序不同?
Q1。我们什么时候可以说两个程序(用某些编程语言,如C ++编写)不同? 第一个极端是,如果两个程序相同,则它们是等效的。另一个极端是,如果两个程序计算相同的功能(或在相似的环境中显示相同的可观察行为),则它们是等效的。但这并不是很好:并非所有检查素数的程序都相同。我们可以添加一行代码,而不会影响结果,我们仍将其视为同一程序。 Q2。程序和算法是同一种对象吗?如果不是,算法的定义是什么?它与程序的定义有何不同?我们什么时候可以说两种算法是等效的?

1
订单维护问题(或“维护列表中的订单”)是为了支持以下操作: singleton:创建一个包含一个项目的列表,并返回指向它的指针 insertAfter:给定一个指向项目的指针,在其后插入一个新项目,并返回指向该新项目的指针 delete:给定指向项目的指针,将其从列表中删除 minPointer:给定两个指向同一列表中项目的指针,则返回更靠近列表前面的那个 我知道此问题的三种解决方案可以在摊销时间内执行所有操作。它们都使用乘法。O(1)O(1)O(1) Athanasios K. Tsakalidis:维护广义链表中的顺序 Dietz,P.,D. Sleator,两种用于维护列表顺序的算法 Michael A. Bender,Richard Cole,Erik D. Demaine,Martin Farach-Colton和Jack Zito,“维护列表中顺序的两种简化算法” 是否可以在摊销时间内以列表形式维护订单,而无需使用A C 0以外的任何算术运算?O(1)O(1)O(1)AC0AC0AC^0

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.