我想知道如何最好地处理Coq中的这种情况:
假设我需要定义和证明关于任意结构的一些事情(为了讨论的目的,让我们说一个具有二元关系的集合)。当然,我总是可以提供set和relation作为每个这样的定义/证明的参数:
Inductive star (X : Set) (R : X -> X -> Prop) := ...
Lemma star_trans (X : Set) (R : X -> X -> Prop) : ...
当然,一段时间后这会变得很烦人。我想要做的是在一些划分的代码区域中将X
和R
作为参数本地化,如下所示:
Parameter X : Set.
Parameter R : X -> X -> Prop.
Inductive star := ...
Lemma star_trans : ...
以这样的方式,定义和定理在代码区域之外使用时,在通用量化下捕获X
和R
,以便为它们提供正确的类型。例如,Check star
应该产生star : forall X : Set, (X -> X -> Prop) -> X -> X -> Prop
。
我认为这可能是模块的用途,但我无法弄清楚如何在这种情况下使用它们。
答案 0 :(得分:4)
这正是" Section机制"确实:见https://coq.inria.fr/distrib/current/refman/Reference-Manual004.html#Section。
Section rel_star.
Variables (X : Set) (R : X -> X -> Prop).
Inductive star := ...
Lemma star_trans: ...
End rel_star.