依赖类型:依赖对类型与不相交联合有何相似之处?

2024-01-08

我一直在研究依赖类型,我了解以下内容:

  1. Why 通用量化 https://en.wikipedia.org/wiki/Universal_quantification被表示为依赖函数类型。∀(x:A).B(x) means “对全部x类型的A有一个类型的值B(x)。因此,它被表示为一个函数,当给定时any value x类型的A返回类型的值B(x).
  2. Why 存在量化 https://en.wikipedia.org/wiki/Existential_quantification被表示为依赖对类型。∃(x:A).B(x) means “存在一个x类型的A有一个 type 的值B(x)。因此它被表示为一对,其第一个元素是一个特定的 value x类型的A并且其第二个元素是类型的值B(x).

Aside:同样有趣的是,通用量化总是与实质性影响 https://en.wikipedia.org/wiki/Material_conditional而存在量化总是与逻辑连接 https://en.wikipedia.org/wiki/Logical_conjunction.

不管怎样,维基百科上的文章依赖类型 https://en.wikipedia.org/wiki/Dependent_type指出:

与依赖类型相反的是依赖对类型, 依赖和类型 or 西格玛型。它类似于余积或不相交并。

配对类型(通常是乘积类型)如何类似于不相交联合(这是求和类型)?这一直让我很困惑。

另外,依赖功能类型与产品类型有何相似之处?


混淆是由于对 Σ 类型的结构及其值的外观使用类似的术语而引起的。

A value of Σ(x:A) B(x) is a pair (a,b) where a∈A and b∈B(a)。第二个元素的类型取决于第一个元素的值。

如果我们看一下结构 of Σ(x:A) B(x), 它是不相交的联合(副产品)B(x)为了一切可能x∈A.

If B(x)是常数(独立于x) then Σ(x:A) B将只是|A|的副本B, 那是A⨯B(两种类型的产品)。


如果我们看一下结构 of Π(x:A) B(x), 它是product of B(x)为了一切可能x∈A. Its values可以被视为|A|-元组,其中a-th 组件的类型B(a).

If B(x)是常数(独立于x) then Π(x:A) B将只是A→B- 函数来自A to B, 那是Bᴬ (B to A)使用集合论符号 - 的乘积|A|的副本B.


So Σ(x∈A) B(x) is a |A|-ary 余积由以下元素索引A, while Π(x∈A) B(x) is a |A|- 由以下元素索引的乘积A.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

依赖类型:依赖对类型与不相交联合有何相似之处? 的相关文章

  • Haskell:找不到模块“Data.List.Split”

    我正在尝试在 Haskell 中拆分列表 据我所知 最简单的方法是splitOn 但是这个函数需要Data List Split 所以我尝试运行import Data List Split在前奏曲中 但是 我收到以下错误 Could not
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • 如何手动推断表达式的类型

    给定 Haskell 函数 head filter fst 现在的问题是如何手动 手动 找到类型 如果我让 Haskell 告诉我我得到的类型 head filter fst Bool b gt Bool b 但我想了解仅使用所用函数的签名
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 如何在 Haskell 中向右或向左移动列表的 1 个元素?

    嗨 我一直在寻找答案 但找不到 假设我们有一个像这样的列表 1 10 4 5 3 我怎样才能将 5 向左移动 使这个列表变成 1 10 5 4 3 我尝试过了swapElementsAt通过找到该元素的索引 但它看起来非常不足 swapEl
  • 搜索重写规则

    有什么办法可以浏览或搜索重写规则吗 当我使用像这样的标志时 ddump rule firings or ddump rule rewrites我只是得到了触发的规则的名称以及它引起的重写 但没有得到实际的规则本身 理想情况下 我想通过 GH
  • 将 num 的签名键入 double?

    我才刚刚开始为你学习 Haskell 以获得伟大的好处 并且我在类型类方面遇到了一些麻烦 我想创建一个接受任何数字类型并强制其为双精度的函数 我的第一个想法是定义 numToDouble Num gt Double 但我认为这不起作用 因为
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • Haskell 中的中缀运算符优先级

    对于以下 Haskell 表达式 返回 a gt gt f 应该读作 返回a gt gt f or 返回 a gt gt f 这里的相关规则是什么 规则始终是函数应用程序的优先级高于任何运算符 因此 return a gt gt f 被解析
  • 标准的能力

    我发现了一些使用标准的旧例子here http www serpentine com blog 2009 09 29 criterion a new benchmarking library for haskell 看起来好像早在 2009
  • Haskell / GHC - 是否有“警告不完整模式”的中缀标签/编译指示

    我正在寻找一个可以对特定的不完整模式发出警告的编译指示 它会使编译器失败并显示以下 假设的 代码 FAILIF incomplete patterns f Int gt Int f 0 0 我正在尝试使用 Arrows 编写一个 编译器 并
  • Haskell 中的尾递归字符串分割

    我正在考虑分割字符串的问题s在一个字符处c 这表示为 break c s 其中 Haskell 库定义break c 足够接近 br br s h t if c h then s else let h t br t in h h t 假设我
  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • 在 monad 转换器类型类中使用列表 monad?

    我的目标是创建一个在 ReaderT WriterT 堆栈或 RWS 堆栈中使用列表 monad 的函数 更一般地说 如何在 mtl 类型类 例如 MonadReader MonadWriter 中使用列表 monad 我为什么要尝试这样做
  • 带有 RankNTypes 扩展的奇怪类型推断

    我正在尝试在 Haskell 中尝试 System F 类型 并通过以下方式实现了自然数的 Church 编码type 当加载这段代码时 OPTIONS GHC Wall LANGUAGE RankNTypes type CNat fora
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n
  • 如何打乱列表?

    如何从一组数字 1 2 3 直到我击中x 我的计划是重新调整列表 1 2 3 并把它砍在x chopAt 3 2 3 1 2 3 chopAt 3 2 1 3 2 1 3 chopAt 3 3 1 2 3 chopAt chopAt x y
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件

随机推荐