Prop 和 Type 的不同归纳原理

Cry*_*sis 5 coq

我注意到 Coq 综合了关于 Prop 和 Type 等式的不同归纳原理。有人对此有解释吗?

平等定义为

Inductive eq (A : Type) (x : A) : A -> Prop :=  eq_refl : x = x
Run Code Online (Sandbox Code Playgroud)

与之相关的归纳原理有以下类型:

eq_ind
 : forall (A : Type) (x : A) (P : A -> Prop),
   P x -> forall y : A, x = y -> P y
Run Code Online (Sandbox Code Playgroud)

现在让我们定义一个 eq 的 Type 挂件:

Inductive eqT {A:Type}(x:A):A->Type:= eqT_refl: eqT x x.
Run Code Online (Sandbox Code Playgroud)

自动生成归纳原理为

eqT_ind
 : forall (A : Type) (x : A) (P : forall a : A, eqT x a -> Prop),
   P x (eqT_refl x) -> forall (y : A) (e : eqT x y), P y e
Run Code Online (Sandbox Code Playgroud)

Ant*_*nov 5

注意:我将_rect在各处使用原则而不是_ind,因为_ind原则通常是通过_rect原则来实现的。

\n\n

类型eqT_rect

\n\n

让我们看一下谓词P。\n处理归纳族时,参数的数量P等于非参数的数量参数(索引)的数量 + 1。

\n\n

让我举一些例子(可以很容易地跳过)。

\n\n\n\n

上面解释了eqT_rect(当然,因此eqT_ind),因为后面的参数(x : A)是非参数的,P所以有 2 个参数:

\n\n
P : forall a : A, eqT x a -> Type\n
Run Code Online (Sandbox Code Playgroud)\n\n

这证明了整体类型的合理性eqT_rect

\n\n
eqT_rect\n     : forall (A : Type) (x : A) (P : forall a : A, eqT x a -> Type),\n       P x (eqT_refl x) -> forall (y : A) (e : eqT x y), P y e\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样得到的归纳原理称为最大归纳原理

\n\n

类型eq_rect

\n\n

归纳谓词的生成归纳原理(例如eq)被简化以表达证明无关性(术语是简化归纳原理)。

\n\n

当定义谓词 时P,Coq 只是删除谓词的最后一个参数(这是正在定义的类型,它位于 中Prop)。这就是为什么 中 使用的谓词eq_rect是一元的。这一事实塑造了以下类型eq_rect

\n\n
eq_rect : \n  forall (A : Type) (x : A) (P : A -> Type),\n         P x -> forall y : A, x = y -> P y\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何产生极大归纳原理

\n\n

我们还可以让 Coq 生成 的非简化归纳原理eq

\n\n
Scheme eq_rect_max := Induction for eq Sort Type.\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果类型是

\n\n
eq_rect_max :\n  forall (A : Type) (x : A) (P : forall a : A, x = a -> Type),\n         P x eq_refl -> forall (y : A) (e : x = y), P y e\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且它的结构与 相同eqT_rect

\n\n

参考

\n\n

更详细的解释参见章节。Bertot 和 Cast\xc3\xa9ran (2004) 所著的《交互式定理证明和程序开发(Coq\'Art:归纳构造微积分)》一书的 14.1.3 ... 14.1.6。

\n

  • 注意:虽然证明无关性通常(隐式)被假设并解释了这种简化的归纳原理,但 Coq 的逻辑并不暗示这一点。 (2认同)
  • 我要补充的是,您还可以要求 Coq 使用 `Scheme my_eqT_ind := Minimality for eqT Sort Prop` 生成简化版本。请参阅 https://coq.inria.fr/refman/Reference-Manual015.html#sec570。 (2认同)
  • 更新的链接:https://coq.inria.fr/refman/user-extensions/proof-schemes.html# Generation-of-induction-principles-with-scheme。 (2认同)