如何为 coq 中的类型指定别名

How can I give an alias to a type in coq

假设我想在 coq 中创建一个自然数矩阵。

我有内置的 coq 列表,要创建一个自然数列表,我只需要写 list nat

为了创建一个二维列表(即矩阵),我需要写 list (list nat).

我的问题是:除了写 list (list nat),我应该怎么做才能让 coq 完全理解 matrix 这个词,就好像它是 list (list nat)


我尝试了 Notation "matrix" := list (list nat)Notation "(matrix nat)" := (list (list nat)) 等,但似乎没有任何效果。

你可以只写一个定义:Definition matrix := list (list nat)。该定义应该只适用于大部分(例如,您仍然可以使用 ListNotations 编写 Definition foo : matrix := [nil])。

如果您不想要定义(特别是因为在证明中您可能必须明确展开某些策略的定义),那么您可以使用符号。正确的语法是 Notation matrix := (list (list nat)).