Questions tagged «type-theory»

指定对象属性的形式系统

2
具有嵌套组件的归纳类型的递归定义
考虑归纳类型,它在嵌套但严格为正的位置中具有一些递归出现。例如,具有节点的有限分支的树使用通用列表数据结构来存储子级。 Inductive LTree : Set := Node : list LTree -> LTree. 通过对树和树列表进行递归来定义这些树的递归函数的幼稚方法不起作用。这是带有size计算节点数的函数的示例。 Fixpoint size (t : LTree) : nat := match t with Node l => 1 + (size_l l) end with size_l (l : list LTree) : nat := match l with | nil => 0 | cons …

2
是否有一个非平凡类型等于它自己的派生类型?
一篇名为“常规类型的导数是其单孔上下文的类型”的文章显示,类型的“拉链”(即一个孔上下文)遵循类型代数中的微分规则。 我们有: ∂XX∂X0∂X1个∂X(S+ T)∂X(S× T)↦ 1↦ 0↦ 0↦ ∂&X小号+ ∂XŤ↦ ∂&X小号× T+ S× ∂XŤ∂xx↦1∂x0↦0∂x1↦0∂x(S+T)↦∂xS+∂xT∂x(S×T)↦∂xS×T+S×∂xT\begin{align} \partial_x x &\mapsto 1 \\ \partial_x 0 &\mapsto 0 \\ \partial_x 1 &\mapsto 0 \\ \partial_x (S + T) &\mapsto \partial_x S + \partial_x T \\ \partial_x (S\times T) &\mapsto \partial_xS \times T + S \times …

2
通用类型是存在类型的子类型还是特例?
此问题是从软件工程堆栈交换迁移的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 我想知道一个普遍-量化类型是否:Ť 一个 = ∀ X :{ 一个∈ X ,˚F :X → { Ť ,˚F } }是一个存在限定的一个子类型,或特殊情况下,键入Ť Ë具有相同签名:Ť è = ∃ X :{ 一个∈ X ,˚F :X → { Ť ,˚F } }Ť一种TaT_aŤ一种= ∀ X:{ 一个∈ X,˚F:X→ { T,F} }Ta=∀X:{a∈X,f:X→{T,F}}T_a = \forall X: \left\{ a\in X,f:X→\{T, F\} \right\}ŤËTeT_eŤË= …


2
“最小”直觉型理论?
我为人们不断在类型理论中添加新类型感到惊讶,但似乎没有人提到一种最基本的理论(或者我找不到它)。我以为数学家喜欢极少的东西,不是吗? 如果我正确理解的话,在具有强制性的类型理论中Prop,λ-抽象和Π型就足够了。说够了,我的意思是它可以用作直觉逻辑。其他类型可以定义如下: ⊥ =dË ˚FΠ α :P[R Ø p 。α¬ 甲=dË ˚FA → ⊥甲∧ 乙=dË ˚FΠ ç:P[R Ø p 。(A → B → C)→ C甲∨ 乙=dË ˚FΠ ç:P[R Ø p 。(A → C)→ (B → C)→ C∃X :小号(P(x ))=dË ˚FΠ α :P[R Ø p 。(Π X :小号。Px → α )→ …

3
如何阅读打字规则?
我开始阅读越来越多的语言研究论文。我发现它非常有趣,并且是一种全面学习编程的好方法。然而,通常是一个部分,在那里我总是(就拿第三部分的奋斗此),因为我没有在计算机科学的理论背景:类型规则。 是否有任何好的书籍或在线资源可用于该领域的入门?维基百科含糊不清,对初学者没有任何帮助。

4
有人真的创建了一个可以按照规范编写计算机程序的系统吗?
有没有人实际编写过一个可以生成计算机程序的系统(软件或纸上的详细说明以及简单的示例)?余输入,它创建了一个程序,它列出了素数小于10 P - [R 我中号È (X )被简单地定义为 1 &lt; X ∧ ∄ 甲Prime(x)∧x&lt;10Prime(x)∧x&lt;10Prime(x) \wedge x<10Prime(x)Prime(x)Prime(x) 教授说,他们可以,但没有人给出实际完成的例子。1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1<x \wedge \not\exists A\; s.t. 1<A \wedge A<x \wedge x=A\times B,\mbox{ with } A,B\in \mathbb{N}

2
Y组合器是否与Curry-Howard对应矛盾?
Y组合器的类型为。根据库里·霍华德 Curry-Howard)的对应关系,因为类型被居住,所以它必须对应于一个真定理。但是始终为真,因此似乎Y组合器的类型对应于定理,但并不总是正确的。怎么会这样?(a → a )→ a(一种→一种)→一种(a \rightarrow a) \rightarrow a(a → a )→ a(一种→一种)→一种(a \rightarrow a) \rightarrow a一→ 一一种→一种a \rightarrow a一种一种a

1
产品类型的类型推断
我正在为连接语言开发编译器,并希望添加类型推断支持。我了解Hindley–Milner,但是我一直在学习类型理论,所以我不确定如何适应它。以下系统是否合理,可以推断? 术语是文字,术语的组合,术语的引用或基元。 e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… e ::= x \:\big|\: e\:e \:\big|\: [e] \:\big|\: \dots 所有术语表示功能。对于两个函数和,,即,并置表示反向组合。文字表示尼拉德功能。e 2 e 1e1e1e_1e2e2e_2e1e2=e2∘e1e1e2=e2∘e1e_1\:e_2 = e_2 \circ e_1 除组合以外的其他术语具有基本的类型规则: x:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γx:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γ \dfrac{}{x : \iota}\text{[Lit]} \\ \dfrac{\Gamma\vdash e : \sigma}{\Gamma\vdash [e] : \forall\alpha.\:\alpha\to\sigma\times\alpha}\text{[Quot]}, \alpha \text{ not free in } \Gamma 值得注意的是缺少应用规则,因为连接语言缺少它。 类型可以是文字,类型变量,也可以是堆栈之间的函数,其中堆栈被定义为右嵌套元组。相对于“堆栈其余部分”,所有函数都是隐式多态的。 …

3
哪种研究语言比Haskell具有更强大的类型系统,为什么?
在这里我读到: Haskell肯定没有最先进的类型系统(如果算上研究语言,甚至还不算很紧密),但是在实际用于生产的所有语言中,Haskell可能是最高级的。 所以我要问两件事: 哪种研究语言比Haskell具有更强大的类型系统; 他们有什么改进。 我只是一名程序员,所以我不知道类型理论中使用的许多数学对象,如果可以的话,请提供温和的解释。

1
为什么Hindley-Milner算法永远不会产生类似t1-> t2的类型?
我在编写实现时正在阅读有关Hindley-Milner输入算法的信息,并且看到,只要绑定了每个变量,您总会得到原子类型或参数将确定最终类型的类型,例如t1 -&gt; t1或。(t1 -&gt; t2) -&gt; (t1 -&gt; t2)其中t1和t2是类型变量。 我想不出一种方法,您将获得类似于t1 -&gt; t2或简单的东西t1,据我所知,这意味着算法已被破坏,因为无法确定表达式的实际类型。您怎么知道只要绑定了每个变量,您就永远不会得到像“破”这样的类型? 我知道算法会产生带有变量的类型,但是一旦将参数传递给函数,这些变量就总是可以解决的,而带type的函数不会出现这种情况t1 -&gt; t2。这就是为什么我想知道我们如何确定算法永远不会产生此类类型的原因。 (看来您可以在ML中获得这些“残缺的”类型,但我要询问的是lambda演算。)

1
图的导数与邻接表相关吗?
Conor McBride的某些作品《Diff,Dissect》将数据类型的派生与它们的“单孔上下文类型”相关联。也就是说,如果采用该类型的派生形式,则将剩下一个数据类型,该数据类型向您显示该数据类型在任何给定点从内部看起来如何。 因此,例如,如果您有一个列表(在Haskell中) data List a = [] | a : List a 这对应于 data List a = 1 + a * List a 通过一点数学魔术,导数是 data ListDeriv a = List a * List a 这被解释为意味着在列表中的任何一点处,左侧都会有一个列表,而右侧则有一个列表。我们可以使用派生数据结构浏览原始列表。 现在,我有兴趣对图形进行类似的操作。图的常见表示形式是一组顶点和边,它们可以通过以下数据类型来简单地实现: data Gr a b i = Gr [(i,a)] [(i,i,b)] 如果我正确理解的话,就图索引而言,这种数据类型的派生i应该是类似的。 data GrDeriv a b …

2
我可以有一个“依赖的副产品类型”吗?
我正在阅读HoTT的书,并且对第一章中的内容有一个(可能很幼稚)问题。 本章介绍函数类型 ,然后通过使依赖于来对其进行概括 这就是所谓的从属函数类型。B x :A B :A → U,f:A→Bf:A→B f:A\to B BBBx:Ax:Ax:A B:A→U,g:∏x:AB(x)B:A→U,g:∏x:AB(x)B:A\to\mathcal{U},\qquad g:\prod_{x:A}B(x) 接下来,本章介绍产品类型 ,然后通过使依赖于归纳产品类型 ,这称为依赖对类型。B x :A B :A → U,f:A×Bf:A×B f:A\times BBBBx:Ax:Ax:A B:A→U,g:∑x:AB(x)B:A→U,g:∑x:AB(x)B:A\to\mathcal{U},\qquad g:\sum_{x:A}B(x) 我绝对可以在这里看到一个模式。 接下来,本章将介绍副产品类型 和... combobreaker ...没有讨论这种类型的依赖版本。f:A+Bf:A+B f:A+B 对此是否有一些基本限制,或者与本书的主题无关?无论如何,有人可以帮助我了解功能和产品类型的原因吗?是什么让这两个如此特别,以至于它们被泛化为依赖类型,然后用于构建其他所有内容?

2
参考要求:分类理论,因为它适用于类型系统
我不断听到关于如何必须学习类别理论才能真正理解编程语言理论的信息。到目前为止,我在不涉足类别领域的情况下学到了很多PL。但是,我认为是时候该大踏步地看看我所缺少的了。 不幸的是,我找不到的任何资料似乎都与类型系统或编程没有任何联系。他们说这是计算机科学家对类别理论的入门,但是随后转向一般的抽象废话(我很爱说),而没有给出任何实际的例子或应用。 我想我的问题实际上有两个方面: 范畴论对于理解PL中的“深层概念”是否必不可少? 从实际应用到类型系统和编程的角度来看,有什么资料可以解释类别理论? 到目前为止,我得到的最深入的是模糊的函子概念(据我所知,它似乎与ML中的函子无关)。我对要从类别理论的角度理解monad所需的抽象感到恐惧。

2
通过拥有“依赖类型”,我们可以获得什么?
我以为我正确理解了依赖类型(DT),但是这个问题的答案是:https : //cstheory.stackexchange.com/questions/30651/why-was-there-a-need-for-martin-l%C3% B6f要创建直觉型的理论使我产生了其他想法。 在阅读了DT并试图理解它们之后,我想知道,从DT的概念中我们可以得到什么?它们似乎比简单的lambda演算(STLC)更灵活,功能更强大,尽管我无法确切地理解“如何/为什么”。 用STLC无法完成的DT可以做什么?似乎增加DT会使理论变得更加复杂,但是有什么好处呢? 从以上问题的答案: 依赖类型由de Bruijn和Howard提出,他们希望将Curry-Howard对应关系从命题逻辑扩展到一阶逻辑。 从某种程度上讲,这似乎是有道理的,但我仍然无法掌握“如何/为什么”的全局图?也许一个例子明确表明了将CH对应关系扩展到FO逻辑可以帮助理解DT有什么大不了的地方?我不确定我也应该理解这一点。

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.