fstar - 试图理解索引类型
问题描述
我正在尝试从 FStar 教程中了解矢量类型:
type vector (a: Type) : nat -> Type =
| Nil : vector a 0
| Cons : hd: a -> n: nat -> tl: vector a n -> vector a (n + 1)
构造向量 - 类似于构造普通列表 -Cons nat 3 Nil
失败,whileCons nat 3
被接受。Cons
有人可以通过阅读需要尾部参数来向我解释我错在哪里吗?此外,如何创建具有实际元素的向量 - 还是“空向量”类型?
解决方案
这里有点混乱,对不起:)
的类型参数
a
是vector
(出于我也不清楚的原因)隐含的Nil
andCons
。因此,当您编写参数时Cons nat
,nat
实际上是hd
参数,而 F* 推断a
为Type0
(的类型nat
)。所以你正在构建一个类型的向量,这可能不是你想要的。Cons nat 3 Nil
失败的原因是因为3
参数错误并且与列表的长度不对应Nil
。Cons nat 0 Nil
有效并且是包含单一类型的大小为 1 的向量nat
。起作用的原因
Cons nat 3
是因为你还没有给它tl
参数,所以这是一个部分应用的构造函数,Cons
应用于它的 3 个参数中的 2 个。的类型Cons nat 3
是vector Type0 3 -> vector Type0 4
,所以一个函数需要一个大小为 3 的向量来生成一个类型为 4 的向量。
希望这可以帮助。
推荐阅读
- flutter - MediaQuery 导致整个应用程序消失 Flutter
- mysql - 计算 Datediff 的平均值
- spring-boot - 自定义spring initializr实例——添加自定义java类
- wordpress - WordPress中的视频背景全屏
- javascript - React onChange 重新渲染动态输入字段奇怪
- c++ - 我的数独板生成函数陷入无限循环
- vue.js - 在对话框vue上将道具从父组件传递给子组件
- javascript - 带滑块的时间线进度条
- python - 如何用大写主机名连接 PyMongo?
- asp.net-core - 异常处理程序不会被触发