Questions tagged «type-theory»

指定对象属性的形式系统


4
领先的旋转栅门操作员是什么意思?
我知道不同的作者使用不同的表示法来表示编程语言的语义。实际上,盖伊·斯蒂尔(Guy Steele)在一段有趣的视频中解决了这个问题。 我想知道是否有人知道领先的旋转门操作员是否具有公认的含义。例如,我不理解以下分母的开头的运算符:⊢⊢\vdash X :Ť1个⊢ Ť2:T2⊢ λ X :Ť1个。Ť2 :T 1个→ T2x:T1⊢t2:T2⊢λx:T1.t2 : T1→T2\frac{x:T_1 \vdash t_2:T_2}{\vdash \lambda x:T_1 . t_2 ~:~ T_1 \to T_2} 有人可以帮我理解吗?谢谢。

1
我们为什么不对编译时间保证进行更多研究?
我喜欢所有的编译时间,我喜欢这样的想法:一旦您编译了程序,就可以保证程序的执行。一般来说,静态类型系统(Haskell,C ++等)似乎比任何动态类型系统都提供了更强大的编译时保证。 据我了解,Ada在编译时间检查方面走得更远,并且能够在执行之前检测到更大范围的错误。考虑到在某个时间点,它被选用于脆弱的领域(编程错误可能会导致人员伤亡),因此它也被认为是相当安全的。 现在,我想知道:如果更强大的静态保证导致代码更完整,更安全,那么我们为什么不朝这个方向进行更多研究呢? 一种似乎缺少的东西的例子是一种语言,它不是定义int具有由基础体系结构的位数确定的范围的通用类型,而是可以具有范围(在下面的示例中Int [a..b]描述了一个介于包括a和b): a : Int [1..24] b : Int [1..12] a + b : Int [2..36] a - b : Int [-11..23] b - a : Int [-23..11] 或(从Ada那里获得): a : Int [mod 24] b : Int [mod 24] a + b : Int [mod 24] …

3
罗素类型理论与类型系统之间的关系
我最近意识到,例如在Haskell中发现的,Russellian类型理论与类型系统之间存在某种联系。实际上,Haskell中的一些类型表示法似乎是类型理论的先驱。但是,恕我直言,Russell在1908年的动机是避免Russell的悖论,我不确定这与计算机科学中的类型系统有何关系。 罗素的悖论是一种形式还是另一种形式,我们是否需要担心,例如,如果我们在给定的语言中没有好的类型系统?

2
将HoTT中的产品简化为教堂/斯科特编码
因此,我目前正在与某些人一起阅读HoTT书。我声称,通过将递归的类型作为等效类型的灵感,我们将看到的大多数归纳类型都可以简化为仅包含依赖函数类型和Universe的类型。我开始勾勒出我认为这将如何工作的草图,经过一番绊脚石,我得出了我认为是答案的答案。 (⋅ ,⋅ )≡ λ 一个:甲。λ b :乙。λ Ç :ü。λ 克:甲→ 乙→ Ç 。g (a )(b )i n d⋅ × ⋅ ≡ ΠA ,B ,C:U(A → B → C)→ C⋅×⋅≡∏A,B,C:U(A→B→C)→C\cdot \times \cdot \equiv \prod_{A, B, C : \mathcal{U}} (A \to B \to C) \to C (⋅ ,⋅ )≡ λ 一个:甲。λ …


1
构造演算中的是什么?
我正在查看构造演算及其在Lambda Cube中的位置。 如果我理解正确,则可以将多维数据集的每个轴都认为是向简单类型的演算添加了另一个涉及类型的操作。第一个轴添加类型到术语运算符,第二个类型到类型运算符和第三个从属类型或术语到类型运算符。CoC具有这三个要素。λ→λ→\lambda_\to 但是,CoC引入了一个术语,并根据推理规则指出,但未使用。我了解这是用于同义命题,但是逻辑命题并未以此为准。P - [R ø p :Ť ÿ p ëPropPropPropProp:TypeProp:TypeProp : Type 您能否向我解释的用途,出现的时间/地点,并根据立方体的轴进行解释(如果确实可以这样做的话)?PropPropProp

1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
基于约束的代数数据类型推断
我正在研究一种基于表达的ML族谱语言,因此自然需要类型推断> :) 现在,我正在尝试基于EOPL(Friedman和Wand)中的简单实现,将基于约束的解决方案扩展到类型推断问题,但是它们优雅地避开了代数数据类型。 到目前为止,我的工作进展顺利;如果一个表达式e是a + b,e : Int,a : Int和b : Int。如果e是比赛, match n with | 0 -> 1 | n' -> n' * fac(n - 1)`, 我可以正确地推断t(e) = t(the whole match expression),t(n) = t(0) = t(n'),t(match) = t(1) = t(n' * fac(n - 1)等... 但是我不确定何时涉及代数数据类型。假设有一个类似filter的函数: let filter pred list …

1
什么是感应感应?
什么是感应感应? 我发现的资源是: 第5.7章末尾的HoTT书。 nLab的文章 一篇名为归纳-归纳定义的论文 该博客文章还提到了归纳-归纳类型 前两个参考资料对我来说太简短了,后两个参考文献太技术性了。有人能用外行的术语解释吗?如果有Agda代码,那就更好了。

2
通用/现有量化?
我正在努力理解类型的通用和存在量化的目的。我正在玩玩根据结构演算编写玩具语言的游戏。我一直在阅读有关Morte和Henk的信息,以帮助我更好地理解。 我不明白为什么CoC同时具有lambda和forall抽象。 (∀ X :甲。乙)(λ X :甲。乙)(λx:A.B)(\lambda x:A . B) (∀ X :甲。乙)(∀x:A.B)(\forall x:A . B) 在我看来,lambda包含了手动传递类型的系统中的所有功能。换句话说,以下 (∀ X :* 。λ 一个:X 。一)(∀x:∗.λa:x.a)(\forall x : *. \lambda a : x. a) 可以替换为 (λ X :* 。λ 一个:X 。一)(λx:∗.λa:x.a)(\lambda x : *. \lambda a : x. a) 如果是第一次将其应用于所使用的类型。 我想念什么?有哪些可以阅读的论文,博客或文章对我有帮助? 谢谢。

2
依赖类型理论中的宇宙
我正在Homotopy类型理论在线书中阅读有关依赖类型理论的内容。 在“ 类型论”一章的第1.3 节中,它介绍了宇宙层次的概念:ü0:U1个:U2:⋯ü0:ü1个:ü2:⋯\mathcal{U}_0 : \mathcal{U}_1 : \mathcal{U}_2 : \cdots,其中 每个宇宙ü一世ü一世\mathcal{U}_i是下一个宇宙的元素ü我+ 1ü一世+1个\mathcal{U}_{i+1}。此外,我们假设我们的宇宙是累积的,即,所述的所有元件一世Ť ^ h一世ŤHi^{\mathrm{th}}宇宙也在的元件(我+ 1 )Ť ^ h(一世+1个)ŤH(i+1)^{\mathrm{th}}宇宙。 但是,当我看一下附录A中各种类型的构成规则时,乍一看,如果有一个Universe出现在柱上方,则该Universe出现在下方。例如,对于联产品类型形成规则: Γ ⊢ 甲:ù一世Γ ⊢ 乙:ù一世Γ ⊢ 甲+ 乙:ù一世(+ - ˚Fø - [R 中号)Γ⊢一个:ü一世Γ⊢乙:ü一世Γ⊢一个+乙:ü一世(+--FØ[R中号)\dfrac{\Gamma \vdash A : \mathcal{U}_i \quad \Gamma \vdash B : \mathcal{U}i}{\Gamma \vdash A + B : \mathcal{U}_i}(+\mbox{-}FORM) 所以我的问题是为什么必须要有层次结构?在什么情况下,您需要从一个Universe跳到更高的层次结构?这是真的不明显,我怎么给定的任意组合,你可以结束了一个类型乙是不是在ü我。更详细地:在附录A.2.4,A.2.5,A.2.6,A.2.7,A.2.8,A.2.9,A.2.10,A.3.2的部分中的形成规则,无论提ü我在前提和判断,或仅在判断中。一个米:U一世一个米:ü一世A_m: \mathcal{U}_i乙乙Bü一世ü一世\mathcal{U}_iü一世ü一世\mathcal{U}_i …

1
ML类型推断的指数成本的简洁示例
引起我注意的是,像OCaml这样的功能语言中类型推断的成本可能很高。该主张是有一系列表达式,使得对于每个表达式,相应类型的长度在表达式的长度上是指数的。 我设计了以下顺序。我的问题是:您是否知道一个具有更简洁表达式的序列,可以实现相同的类型? # fun a -> a;; - : 'a -> 'a = <fun> # fun b a -> b a;; - : ('a -> 'b) -> 'a -> 'b = <fun> # fun c b a -> c b (b a);; - : (('a -> 'b) -> 'b -> …

2
如何得出依赖类型的消除符?
在依赖类型的编程中,有两种主要的方法来分解数据并执行递归: 相关模式匹配:函数定义作为多个子句给出。统一可确保所有遗漏的情况都是不可能的,并且外部求解器可确保有充分的递归依据。 消除符:每个归纳数据类型都有一个关联的常数E D,它充当归纳原理,并充当分解类型D的值的递归函数。它们比较冗长,但是具有总计(所有情况都由E D覆盖)并通过构造终止的优点。ddDËdËdE_DddDËdËdE_D 我已经看到了常见数据类型的消除器,例如,其中消除器基本上是数学归纳法,或者L i s t,其中消除器基本上是折叠。ñ一个牛逼ñ一个ŤNat大号我小号吨大号一世sŤList 我已经阅读了几篇有关依存模式匹配的论文,并且许多论文都引用了类型理论,在其中可以定义数据类型,并且该理论提供了消除符。例如,消除相关模式匹配描述了UTT如何基于消除符,以及在存在公理的情况下如何将模式匹配转换为消除。我的理解是,一旦定义了数据类型,该理论便提供了消除器。ķķK 我没有发现(或者至少没有发现,如果我没看过的话)很好地描述了如何导出消除符,包括其类型和语义。 有人可以指出我的引用,该引用描述了如何从数据类型的定义中获得消除符吗?

1
为什么在依赖类型系统中将递归类型用作证明的原语?
我是类型理论和依赖编程的新手。我一直在研究构造(CoC)和其他纯类型系统的演算。我对将其用作编译器系统的保存证明中间表示特别感兴趣。 据我所知,(共)递归类型表示的,在计算上,使用作为唯一的类型构造函数。不过,我已经读过,它们不能用于归纳构建证明(请原谅,我现在找不到位置!),例如,我无法在普通CoC中证明(即使可以键入)。ΠΠ\Pi0≠10≠10\neq 1NatNat\texttt{Nat}Π(N:∗).Π(S:N→N).Π(Z:N).NΠ(N:∗).Π(S:N→N).Π(Z:N).N\Pi(\mathbb{N}:*).\Pi(S:\mathbb{N}\rightarrow\mathbb{N}).\Pi(Z:\mathbb{N}).\mathbb{N} 我认为这就是为什么他们建立了归纳结构(CIC)的原因。它是否正确?但为什么?我找不到任何材料来解释为什么不使用(共)归纳类型作为原语就无法表示这样的证明。如果不是这样,那么为什么要在CIC中将它们添加为原语?

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.