gpt4 book ai didi

coq - Coq Inductive 定义中的 `of` 和 `&` 是什么意思?

转载 作者:行者123 更新时间:2023-12-04 02:15:24 25 4
gpt4 key购买 nike

我刚刚看到有人用一种不熟悉的语法在 Coq 中定义了 Inductive 类型,如下所示:

Inductive nat_tree : Type :=
| NatLeaf
| NatNode of color & nat_tree & nat & nat_tree.

我习惯的语法看起来像this :

Inductive ident : sort :=
ident1 : type1
| …
| identn : typen

谁能解释一下新语法是什么?

顺便说一句,这是来自 ssrflect 教程。我想知道这是不是ssr加法。

最佳答案

是的,你是对的:这个语法是由 Ssreflect 定义的。两者都被定义为用于声明匿名参数的语法糖:of T& T 的意思是 (_ : T);即,T 类型的未命名参数。因此,nat_tree 的定义等同于下面的定义。

Inductive nat_tree :=
| NatLeaf
| NatNode (_ : color) (_ : nat_tree) (_ : nat) (_ : nat_tree).

您还可以为每个参数命名:

Inductive nat_tree :=
| NatLeaf
| NatNode (c : color) (t1 : nat_tree) (n : nat) (t2 : nat_tree).

正如 gallais 所指出的,这使得 Coq 中数据类型声明的语法更类似于 OCaml。请注意,上面的声明并没有给出每个构造函数的返回类型。在标准 Coq 中,当所有参数都使用此语法给出并且定义的类型是 uniform 时,指定返回类型是可选的。这意味着我们可以将 list 类型定义为

Inductive list (T : Type) :=
| nil
| cons (t : T) (l : list T).

但需要按如下方式定义长度索引列表的类型(因为 nat 索引):

Inductive vector (T : Type) : nat -> Type :=
| vnil : vector T O
| vcons (n : nat) (t : T) (v : vector T n) : vector T (S n).

关于coq - Coq Inductive 定义中的 `of` 和 `&` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com