Questions tagged «type-theory»

指定对象属性的形式系统



3
Martin-Löf类型理论简介
什么是PerMartin-Löfs关于类型理论的最佳介绍?我看过俄勒冈PL暑期学校的一些讲座,但仍然对以下问题感到困惑: 什么是类型? 我知道集合是什么,因为您可以通过常规的ZF公理定义它们,并且它们具有非常直观的具体模型;试想一下装满东西的篮子。但是,我还没有看到类型的合理定义,并且我想知道是否有某些来源可以将这种想法提炼为假人。


4
集合和类型之间的语义区别到底是什么?
编辑:我现在已经问过有关类别和集合之间差异的类似问题。 每当我读到类型理论(这诚然是相当非正式的),我无法真正了解它集理论的不同之处,具体。 我知道说“ x属于一个集合X”和“ x是类型X”之间存在概念上的区别,因为从直觉上讲,集合只是对象的集合,而类型具有某些“属性”。尽管如此,集合通常也根据属性进行定义,如果确实如此,那么我将很难理解这种区别的重要性。 所以在最具体的方式可能,究竟是什么暗示 关于xxx的说,它的类型是,比说,这是集合的元素?TTTSSS (您可以选择任何类型和设置以使比较最清晰)。
33 type-theory  sets 

3
对纯/依赖类型系统的简要但完整的解释是什么?
如果简单,那么只需几句话就可以完全解释。可以对λ微积分进行此操作: λ演算是具有归约规则的语法(基本上是结构)(这意味着对特定模式的每次出现都会重复应用搜索/替换过程,直到不存在这种模式为止)。 语法: Term = (Term Term) | (λ Var . Term) | Var 归约规则: ((λ var body) term) -> SUBS(body,var,term) where `SUBS` replaces all occurrences of `var` by `term` in `body`, avoiding name capture. 例子: (λ a . a) -> (λ a a) ((λ a . (λ b . …


2
编程语言和数学基础如何关联?
基本上我知道数学的三个基础 集合论 类型理论 范畴论 那么编程语言和数学基础在哪些方面相关? 编辑 最初的问题是“基于数学基础的语言编程” 与添加的paragarph 理论的实现 1. Coq中的类型论 2. SETL中的 集合论3. Haskell中的范畴论 根据建议,该内容已更改为“编程语言和数学基础如何相关” 由于这是我不知道所要问的问题但想学习一些东西的问题之一,因此,我正在修改问题以使其对学习和其他人更有价值,但又保留了细节以免安德烈·鲍尔(Andrej Bauer)当前的答案似乎不合时宜。 感谢到目前为止的所有评论和答复,我正在向他们学习。

2
具有联合类型的lambda项的特征
许多教科书都涵盖了lambda微积分中的交集类型。交集的键入规则可以定义如下(在带有子类型的简单键入的lambda演算的顶部): Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I)Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I) \dfrac{\Gamma \vdash M : T_1 \quad \Gamma \vdash M : T_2} {\Gamma \vdash M : T_1 \wedge T_2} (\wedge I) \qquad\qquad \dfrac{} {\Gamma \vdash M : \top} (\top I) 交叉点类型在归一化方面具有有趣的属性: 一个lambda长期不使用键入的⊤I⊤I\top I治当且仅当它是强烈正火。 一个lambda项接受一个不包含的类型,只要⊤⊤\top它具有正常形式。 如果不添加交集而是添加并集怎么办? Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2)Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2) \dfrac{\Gamma \vdash M : T_1} {\Gamma \vdash M : T_1 \vee T_2} (\vee …

2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它void更适合于空/底类型的定义。 void据我所知,没有价值观存在。 返回类型为void的函数指定该函数不返回任何内容,因此只能执行某些副作用。 类型的指针void*是所有其他指针类型的子类型。同样,void*在C中进行来回转换是隐式的。 我不确定最后一点是否可以作为void空类型的参数,void*或多或少是与无关的特例void。 另一方面,void它本身不是所有其他类型的子类型,据我所知,这是将类型作为底部类型的要求。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 


4
类型和种类有什么区别?
我正在学习编程语言Haskell,并且试图围绕a type和a 之间的区别进行思考kind。 据我了解,a kind is a type of type。例如a ford is a type of car和a car is a kind of vehicle。 这是思考这个问题的好方法吗? 因为,我的大脑当前的连接方式是a ford is a **type** of car,但同时需要car is a **type** of vehiclea car is a **kind** of vehicle。即条款,type并且kind可以互换。 有人能对此有所启示吗?

3
类型系统的分类(强/弱,动态/静态)
简而言之:如何在学术环境中对类型系统进行分类;尤其是在哪里可以找到使不同类型的类型系统之间的区别清晰的信誉良好的来源? 从某种意义上说,这个问题的难点不是我找不到答案,而是我可以找到太多答案,而且没有一个能脱颖而出。背景是我正在尝试改进Has​​kell Wiki上有关输入的文章,该文章目前具有以下区别: 没有类型:语言没有类型的概念,或者从类型的角度来看:语言中只有一种类型。汇编语言只有“位模式”类型,Rexx和Tk只有“文本”类型,核心MatLab只有“复杂值矩阵”类型。 弱类型输入:只有很少的可分辨类型,可能还有几种类型的类型同义词。例如,C使用整数表示布尔值,整数,字符,位集和枚举。 强类型:细粒度的类型集,例如Ada,Wirthian语言(Pascal,Modula-2),Eiffel 这完全与我的个人看法相反,后者更像是: 弱类型输入:对象具有类型,但是在上下文需要时会隐式转换为其他类型。例如,Perl,PHP和JavaScript都是"1"可以在或多或少可以使用的任何上下文中使用的语言1。 强类型化:对象具有类型,并且没有隐式转换(尽管可以使用重载来模拟它们),因此在错误的上下文中使用对象是错误的。在Python中,用字符串或浮点数索引数组会引发TypeError异常;在Haskell中,它将在编译时失败。 我从其他比我更富有经验的人那里征求意见,有人对此进行了描述: 弱类型输入:对数据执行无效操作不会受到控制或拒绝,而只会产生无效/任意结果。 强类型:仅当数据与操作兼容时才允许对数据进行操作。 据我了解,第一个和最后一个特征将称为C弱类型,第二个将其称为强类型。第一个和第二个将Perl和PHP称为弱类型,第三个将它们称为强类型。这三个都将Python描述为强类型。 我认为大多数人会告诉我“嗯,没有共识,没有公认的条款含义”。如果这些人都错了,我很高兴听到这个消息,但如果他们是对的,那么如何做 CS的研究人员描述和比较类型的系统?我可以使用哪种问题较少的术语? 作为一个相关的问题,我觉得动态/静态区别通常是用“编译时间”和“运行时间”来表示的,考虑到是否编译语言并不是该语言的本质,我发现这并不令人满意。作为其实现。我觉得应该对动态类型和静态类型进行纯粹的语义描述。类似于“静态语言是可以在其中键入每个子表达式的语言”。我希望您能提出任何使这种概念更加清楚的想法,特别是参考文献。

1
可确定推断的最强大的已知类型系统是什么?
众所周知,Hindley-Milner类型推断(具有多态性的简单类型的演算)具有可确定的类型推断:您可以为任何程序重建原理类型而无需任何注释。λλ\lambda 添加哈斯克尔风格类型类似乎保留此可判定性,但进一步增加使得推理没有标注不可判定的(类型的家庭,GADTs,依赖类型,等级-N类型,系统等)ωω\omega 我想知道:最能断定推断的已知类型系统是什么?它会介于Hindley-Milner(完全可确定)和依赖类型(完全不可确定)之间。是否可以添加DT的某些方面来保持推理可判定性?已经进行了哪些研究以了解可以将其推进多远? 我意识到,没有一个最强大的系统,可能有无限的微小增量变化可以添加到HM保持推理中。但是可能已经发现了一些实用的系统候选对象。 编辑:因为没有“最强”的系统,我会接受,勾勒出一个答案显着扩展辛德雷米尔纳与可判定的推理系统。例如液体类型,等级2等。

2
什么是Beta对等?
此问题是从理论计算机科学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 在我目前正在阅读的lambda演算的脚本中,β等价定义为: 该 -equivalence是一个包含最小的等价。≡ β →交通βββ\beta≡β≡β\equiv_\beta→β→β\rightarrow_\beta 我不知道那是什么意思。有人可以用更简单的方式解释它吗?也许举个例子? 我需要它来作为遵循Church-Russer定理的引理, 如果M N,则存在具有M A L L和N L.↠ β≡β≡β\equiv_\beta↠β↠β\twoheadrightarrow_\beta↠β↠β\twoheadrightarrow_\beta

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.