我非常熟悉在声明归纳类型时区分参数和索引。我不确定的是,在声明定理时,将内容放在冒号前和冒号后是否有区别。具体来说
Lemma par (n : nat) : n < 1 -> n = 0.
Lemma ind : forall (n : nat), n < 1 -> n = 0.
我发现的一个区别是,在证明 时par
,冒号右侧的所有内容最初都在上下文中,而在 中则ind
必须如此intro
。您知道这两者之间还有其他区别吗?您能举一个例子来说明这不仅仅是一堆intro
/revert
吗?
我担心的问题之一是自动化可能会更喜欢其中一个,例如autorewrite
或auto
,尽管我找不到会产生影响的例子。
参见文档:
对于归纳数据类型,所有构造函数的参数都是固定的,并且它们之间不会发生变化。
索引根据构造函数而变化,并反映在类型中。
这里,A 是一个参数,对于所有构造函数都是固定的。的第二个参数
vector
是一个索引,用于表示向量的长度。请注意索引如何根据特定的构造函数(0
forvnil
,S n
forvcons
)而变化。