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

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(使用前将#替换为@)

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

  • (xs : Vect n elem) -> Vect (n * 2) elem

    这本书使用 Idris 进行类型驱动开发 https www manning com books type driven development with idris提出这个练习 定义一个适合签名的可能方法 two xs Vect n el
  • 如何处理 Agda 不确定是否在 with 语句中生成构造函数的情况?

    我有以下代码 open import Data Nat open import Agda Builtin Char open import Data Maybe digit Maybe digit n with compare n prim
  • Prop 和 Type 的不同归纳原理

    我注意到 Coq 综合了关于 Prop 和 Type 等式的不同归纳原理 有人对此有解释吗 平等定义为 Inductive eq A Type x A A gt Prop eq refl x x 与之相关的归纳原理有以下类型 eq ind
  • 无法声明 MonadPlus 接口受 Monad 约束

    我试图像这样声明 MonadPlus 接口 module NanoParsec Plus access public export interface Monad m gt MonadPlus m where zero m a plus m
  • 如何在构造微积分中提取Sigma的第二个元素?

    我尝试这样做 A gt B A gt gt t r gt x a gt B x gt r gt r gt t B t A x A gt y B x gt x x A gt y B x gt y 请注意 由于该函数返回的值取决于 sigma
  • Coq:添加“强归纳”策略

    对自然数的 强 或 完全 归纳意味着当证明 n 上的归纳步骤时 您可以假设该属性对于任何 k 都成立 Theorem strong induction forall P nat gt Prop forall n nat forall k n
  • Coq 中的案例分析证明

    我试图证明关于以下函数的命题 Program Fixpoint division m nat n nat measure m nat match lt nat 0 n with false gt 0 true gt match leq na
  • Coq 中 MSet 的使用示例

    MSets https coq inria fr library Coq MSets MSets html似乎是 OCaml 式有限集的最佳选择 可悲的是 我找不到示例用途 如何定义一个空的MSet或单身人士MSet 我怎样才能结合两个MS
  • 在 Coq 中查找 ++ 等定义和符号

    我们如何获得这些符号的定义 类型 例如 or of List 我努力了 Search Search Search SearchAbout and Check Check Check 然而它们都不起作用 SearchAbout 确实显示了一些
  • 约束接口中的函数参数

    在接受函数的接口中约束函数参数的语法是什么 我试过 interface Num a gt Color f a gt Type where defs 但它说Name a is not bound in interface Your inter
  • Idris - 在 n 维向量上映射操作

    我在 Idris 中定义 n 维向量如下 import Data Vect NDVect Num t gt rank Nat gt shape Vect rank Nat gt t Type gt Type NDVect Z t t NDV
  • 我如何编写行为类似于“破坏...作为”的策略?

    在coq中 destruct https coq inria fr distrib current refman Reference Manual010 html hevea tactic65策略有一个接受 连接析取引入模式 的变体 该模式
  • 如何处理 Coq 中 Program Fixpoint 生成的非常大的项?

    我试图在 Coq 中定义并证明正确的函数 该函数可以有效地比较两个排序列表 由于它并不总是在结构较小的项上递归 第一个或第二个列表较小 Fixpoint不会接受它 所以我尝试使用Program Fixpoint反而 当尝试使用策略证明函数的
  • 为什么较新的依赖类型语言没有采用 SSReflect 的方法?

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

    也许这是一个愚蠢的问题 这是引用自the 哈索主义 paper https personal cis strath ac uk conor mcbride pub hasochism pdf 解决这个问题的一种方法是对引理进行编码 由下式给
  • 无法证明与路径相关类型的等价性

    为什么最后一个summon编译失败 我该怎么做才能让它编译 import java time LocalDateTime LocalTime trait Circular T type Parent given localTimeCircu
  • Haskell/Idris 中的开放类型级别证明

    在 Idris Haskell 中 可以通过注释类型并使用 GADT 构造函数 例如使用 Vect 来证明数据的属性 但这需要将属性硬编码到类型中 例如 Vect 必须是与 List 不同的类型 是否有可能拥有具有开放属性集的类型 例如同时
  • Haskell 单例:我们可以通过 SNat 获得什么

    我正在尝试使用 Haskell 单例 在论文中使用单例进行依赖类型编程 http cs brynmawr edu rae papers 2012 singletons paper pdf并在他的博客文章中单例 v0 9 发布 https t
  • 为什么 Coq 中实数公理化?

    我想知道 Coq 是否将实数定义为柯西序列或 Dedekind 切割 所以我检查了 Coq Reals Raxioms 这两个都不是 实数及其运算被公理化 如Parameters and Axioms 为什么会这样呢 此外 实数紧密依赖于子
  • Haskell 中的类型化抽象语法和 DSL 设计

    我正在 Haskell 中设计 DSL 我想要进行赋值操作 像这样的东西 下面的代码只是为了在有限的上下文中解释我的问题 我没有类型检查 Stmt 类型 data Stmt forall a Assign String Exp a Assi

随机推荐

  • 将单元格中的 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 按某个值索引 但是 在依赖类型语言中 类型和术语之间不是没有区别吗 参数和指数之间的区别是根本性的吗 您能否举例说明它们在编程和定理证明中的含义差