类型参数和索引之间的区别?

2023-12-25

我是依赖类型的新手,对两者之间的区别感到困惑。似乎人们通常说类型是由另一种类型参数化 and 按某个值索引。但是,在依赖类型语言中,类型和术语之间不是没有区别吗?参数和指数之间的区别是根本性的吗?您能否举例说明它们在编程和定理证明中的含义差异?


当您看到一个类型族时,您可能想知道它的每个参数是否都是参数 or indices.


参数仅表明该类型有些通用,并且行为参数化地关于所提供的论点。

例如,这意味着类型List T无论哪个都会具有相同的形状T你考虑:nil, cons t0 nil, cons t1 (cons t2 nil)等的选择T只影响可以插入的值t0, t1, t2.


Indices另一方面可能会影响您可以在该类型中找到哪些居民!这就是为什么我们说他们index类型族,即每个索引告诉您正在查看的类型(类型族内)中的哪一个(从这个意义上说,参数是一种退化情况,其中所有索引都指向同一组“形状”)。

例如,类型族Fin n或大小有限集n根据您的选择包含非常不同的结构n.

指数0索引一个空集。 指数1用一个元素索引一组。

从这个意义上说,对指数价值的了解可能携带着重要的信息!通常,您可以通过查看索引来了解哪些构造函数可能已使用或未使用。这就是依赖类型语言中的模式匹配如何消除不可行的模式,并从模式的触发中提取信息的方式。


这就是为什么当你定义归纳族时,通常你可以定义整个类型的参数,但你必须为每个构造函数指定索引(因为你可以为每个构造函数指定它所在的索引)。

例如我可以定义:

F (T : Type) : ℕ → Type
C1 : F T 0
C2 : F T 1
C3 : F T 0

Here, T是一个参数,而0 and 1是指数。当你收到一些x类型的F T n,看什么T不会透露任何有关x。但看着n会告诉你:

  • that x必须是C1 or C3 when n is 0
  • that x必须是C2 when n is 1
  • that x否则一定是从矛盾中伪造出来的

同样,如果您收到y类型的F T 0,你知道你只需要模式匹配C1 and C3.

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

类型参数和索引之间的区别? 的相关文章

  • 在 Idris 中证明如果 n = m 且 m = o,则 n + m = m + o?

    我正在尝试通过查看一些练习来提高我的伊德里斯技能软件基础 https softwarefoundations cis upenn edu lf current toc html 最初是为 Coq 设计的 但我希望对 Idris 的翻译不会太
  • 如何在 Coq 中禁用我的自定义符号?

    我定义了一个符号来模拟命令式编程 Notation a gt gt b b a at level 50 然而之后 所有函数应用表达式都表示为 gt gt 样式 例如 在 Coq Toplevel 的证明模式下 我可以看到 bs nat gt
  • 如何将假设中的具体变量更改为存在量化变量?

    假设我有一个这样的假设 FooProp a b 我想将假设改为这种形式 exists a FooProp a b 我怎样才能做到这一点 我知道我能做到assert exists a FooProp a b by eauto但我试图找到一个不
  • 如何查找 Coq 证明策略的定义或实现?

    我正在看this https github com coq coq blob cdfe69d6da6b32338ba74c9f599c74389089c9dd theories Numbers Natural Abstract NAdd v
  • Idris 中类型的模式匹配

    可能这是基本的 但我不明白为什么下面的函数回答 1fnc Nat并且 对于fnc 整数 它甚至没有作为模式包含在内 fnc Type gt Integer fnc Bool 1 fnc Nat 2 您不能对类型进行模式匹配 也不应该这样做
  • Scala:特征中的“静态值”?

    假设我有 trait X val x String 使用混合 我可以定义一个特征 例如 trait XPrinter self X gt def printX String X is x 这样一个值 对象实现XPrinter实施x并给出其方
  • 函数类型中的 Plus 与 S

    以下向量声明cons cons a gt Vect n a gt Vect n 1 a cons x xs x xs 因错误而失败 Type mismatch between S n and plus n 1 而下面的向量append编译并
  • 理解 `k : Nat ** 5 * k = n` 签名

    以下函数编译 onlyModByFive n Nat gt k Nat 5 k n gt Nat onlyModByFive n k 100 但有什么作用k以其代表Nat 5 k n syntax 另外 我该如何称呼它 这是我尝试过的 但我
  • 专门构造函数上的模式匹配

    这几天我一直在为一个问题绞尽脑汁 但我的 Agda 技能不是很强 我正在尝试在仅在特定索引处定义的索引数据类型上编写一个函数 这仅适用于数据构造函数的某些专门化 我不知道如何定义这样的函数 我试图将我的问题简化为一个更小的例子 该设置涉及自
  • 如何解释agda中的REL

    我试图理解 Agda 标准库的某些部分 但我似乎无法弄清楚REL FWIW 这是定义REL Binary relations Heterogeneous binary relations REL a b Set a Set b Level
  • 由 Scala 宏生成时,依赖类型似乎“不起作用”

    为这个挥手的标题道歉 我不完全确定如何简洁地表达这个问题 因为我以前从未遇到过这样的事情 背景资料 我有以下特征 其中类型U是为了举行无形可扩展记录 https github com milessabin shapeless wiki Fe
  • 将假设中的 ~exists 转换为 forall

    我陷入了假设的境地 exists k k lt n 1 f k f n 2 并希望将其转换为等效的 我希望如此 假设forall k k lt n 1 gt f k lt gt f n 2 这是一个小例子 Require Import Co
  • 逻辑:tr_rev_ Correct 的辅助引理

    在逻辑章节中 介绍了反向列表函数的尾递归版本 我们需要证明它可以正确工作 Fixpoint rev append X l1 l2 list X list X match l1 with gt l2 x l1 gt rev append l1
  • 如何处理 Agda 不确定是否在 with 语句中生成构造函数的情况?

    我有以下代码 open import Data Nat open import Agda Builtin Char open import Data Maybe digit Maybe digit n with compare n prim
  • Coq 中的“错误:宇宙不一致”是什么意思?

    我正在努力通过软件基础 http www cis upenn edu bcpierce sf current 目前正在做教堂数字的练习 这是自然数的类型签名 Definition nat forall X Type X gt X gt X
  • Coq :> 符号

    这可能是非常微不足道的 但我找不到任何关于 gt 符号在 Coq 中含义的信息 有什么区别 U 类型 和 W gt 类型 这取决于符号出现的位置 例如 如果它位于记录声明内 它会指示 Coq 添加相应的记录投影作为强制 具体来说 假设我们有
  • 为什么在这种情况下重写不改变表达式的类型?

    在 1 中可以阅读下一篇 rewrite prf in expr 如果我们有prf x y 并且 expr 所需的类型是以下属性x the rewrite in语法将搜索x在所需的类型中expr并将其替换为y 现在 我有下一段代码 您可以将
  • AGDA 中极浅嵌入 VHDL 的指南

    对于我的编程语言项目 我正在 agda 中做一个非常浅且简单的 VHDL 数字电路嵌入 目的是写出语法 静态语义 动态语义 然后写一些证明来展示我们对材料的理解 到目前为止我已经编写了以下代码 data Ckt Set where var
  • 在 Coq 中,“if then else”允许非布尔第一个参数?

    我读过一些教程if a then b else c代表match a with true gt b false gt c end 然而 很奇怪的是 前者不检查类型a 而后者当然确保a是一个布尔值 例如 Coq lt Check if nil
  • 为什么较新的依赖类型语言没有采用 SSReflect 的方法?

    我在 Coq 的 SSReflect 扩展中发现了两个约定 它们似乎特别有用 但我还没有看到它们在较新的依赖类型语言 Lean Agda Idris 中得到广泛采用 首先 可能的谓词被表示为布尔返回函数而不是归纳定义的数据类型 默认情况下

随机推荐

  • 将单元格中的 Excel 公式转换为 Python 脚本中的函数

    我一直在尝试将 Excel 工作簿中的公式转换为 Python 脚本中的等效 Python 函数或语句 在我的工作场所 我们有旧的 Excel 工作簿 用于工程过程中的计算 例如设计混凝土结构 这些计算涉及到很多公式以及公式之间的引用 我想
  • SQL中弱相关表的字段映射

    我正在寻找一个 SQL 查询 它可以将一组单独大小的项目映射到一组单独大小的存储桶 我想满足以下条件 桶的大小必须大于或等于项目的大小 每个桶只能包含一件物品 或者留空 每件物品只能放入一个桶中 任何项目都不能拆分到多个存储桶中 我想以某种
  • 即使我正在顺序处理,我也应该阻止吗

    我有一个 Windows 服务 需要定期执行一些工作 所以我设置了一个 System Timers Timer 来执行此操作 我们假设处理时间可能大于计时器间隔 我们还假设如果发生这种情况 那将是一件非常糟糕的事情 为了避免这种情况 我将计
  • 使用 __getitem__ 就地自定义对象解压不同行为 python 3.5 与 python 3.6

    后续问题这个问题 https stackoverflow com questions 50375793 elegant way to have an almost copy constructor that allows to update
  • 点击 UITableview 标题中的手势

    我尝试在 swift 中使用可扩展的表格视图 所以我将手势添加到表视图的标题中 但它无法识别 请指导我 只是交叉检查我的编码 我的编码如下 func tableView tableView UITableView viewForHeader
  • Android - 使用 AppCompatDelegate.MODE_NIGHT_AUTO 时如何检测夜间模式是否打开

    我正在使用内置日间 夜间模式功能的 Android 我想在我的应用程序中添加一个选项AppCompatDelegate MODE NIGHT AUTO 但我遇到了问题 因为我的应用程序需要以编程方式对某些内容进行着色 并且我不知道如何检查应
  • 有没有办法在不知道它们的序列号的情况下取消天蓝色服务总线主题中的所有计划消息?

    使用案例 我们使用天蓝色服务总线主题 根据业务规则 我们有时会安排在未来某个时间将消息传递到某个主题 如果系统配置错误 我们需要取消发送到特定主题的所有预定消息 我们没有每条预定消息的序列号 到目前为止我发现了什么 根据https blog
  • 如何在打字稿中描述简单的 Just 函子的接口?

    我第一次尝试用打字稿编写一个简单的界面 并对几乎所有事情都抱有疑问 问题很简单 如何描述这个简单的笑话匹配器扩展 param v Any value function just v return fmap f gt just f v exp
  • “无法分配给 var,因为它是只读属性。”使用 Jasmine 测试框架进行角度测试

    我在 Angular 的一项服务中有一个只读属性 Injectable providedIn root export class MyService private readonly timeIntervals any constructo
  • TortoiseHg 和一个存储库中的多个分支

    我实在想不通 我是 Mercurial 和 TortoiseHg 的新手 阅读了大量文档 仍然找不到答案 我知道分支的一种方法是制作副本 这很清楚 但还有另一种方式称为 命名分支 但这是我无法理解的一件事 例如 我有新的存储库第一个分支称为
  • 使 nstextfield 单行

    如何让 NSTextField 真正成为单行 我以编程方式创建了一个文本字段 当按下返回键时 将选择所有文本 但我仍然可以粘贴多行文本 当我按向右箭头或向下箭头时 它会滚动到下一行 如果我使用 IB 并设置 使用单行模式 则不会出现这些问题
  • ggplot facet_wrap 在每个方面具有特定的变量顺序

    我想用 ggplot 绘制这些数据 library ggplot2 set seed 0 df lt data frame var1 rep c group1 group2 each 3 var2 rep letters 1 3 2 val
  • mvn sonar:声纳有什么作用?

    命令执行的 Maven 生命周期阶段是什么mvn sonar sonar执行 当我看到屏幕上运行的日志时 级别非常高test install我发现了 考虑下面的例子 我有一个如下的 Maven 项目 maven root maven chi
  • Kendo Grid 在网格的“onchange”事件中不返回 dataItem

    我的Kendo网格具有内联编辑功能 数据通过ajax绑定 我尝试过不同的选择 例如 1 var grid Grid data kendoGrid var row this closest tr var rowIdx tr grid tbod
  • 如何阻止像 darodar.com 这样的垃圾邮件引用者访问网站?

    我有几个网站 每天约有 5 的访问量来自垃圾邮件引荐者 我注意到这个引荐来源网址有一个奇怪的事情 它们显示在 Google Analytics 中 但我在自定义设计的表中看不到它们 在该表中我插入了网站的所有访问者 所以我认为它们只操纵 G
  • 您可以使用 .NET MAUI 和 blazor 开发一个面向 Web、ios、android 和 windows 的网页吗?

    我最近阅读了 NET MAUI 但我对其与 Blazor 的用途感到困惑 您可以使用 NET MAUI 和 blazor 开发一个面向 Web ios android 和 windows 的网页吗 例如 有效地开发网页以在任何其他设备上也作
  • 如何在 Vim 中执行 JSLint

    我每天都在 vim 中度过 目前正在编写大量 JavaScript 我一直在尝试找到一种方法将 JSLint 或类似的东西集成到 vim 中以改进我的编码 有没有人设法做这样的事情 我试过这个 Vim 中的 Javascript 语法检查
  • pbxcp 问题,找不到文件,但它肯定存在

    所以我一直在为我的应用程序处理不同的图像 看看它的外观 替换它 一切都很好 直到早些时候我用我制作的更新版本替换了一个文件 checkmark png 现在当我构建我时得到pbxcp checkmark png no such file o
  • qml虚拟键盘:keyboardDesignWidth和Height

    我正在查看虚拟键盘的 QML 样式 KeyboardDesignWidth 和 Height 的用途是什么 我似乎在管理键盘的宽度和高度方面遇到了很多麻烦 并且永远无法将其设置为我想要的方式 直接设置键盘高度和宽度也没有多大帮助 问题在于组
  • 类型参数和索引之间的区别?

    我是依赖类型的新手 对两者之间的区别感到困惑 似乎人们通常说类型是由另一种类型参数化 and 按某个值索引 但是 在依赖类型语言中 类型和术语之间不是没有区别吗 参数和指数之间的区别是根本性的吗 您能否举例说明它们在编程和定理证明中的含义差