嵌套电感类型的感应原理

时间:2017-11-03 14:17:32

标签: coq induction

我注意到我一直在为嵌套(有时是相互的)归纳类型重新定义非常相似的归纳原则,因为Coq自动生成的归纳太弱了。这是一个非常简单的例子:

DataContext

Coq自动生成ComboBox

Require Import Coq.Lists.List.

Inductive T : Set :=
| C1 : T
| C2 : list T -> T.

Section T_nested_ind.
  Variable P : T -> Prop.
  Hypothesis C1_case : P C1.
  Hypothesis C2_case : forall l : list T, Forall P l -> P (C2 l).

  Fixpoint T_nested_ind (t : T) :=
    match t with
    | C1 => C1_case
    | C2 xs =>
        let H := (fix fold (xs : list T) : Forall P xs :=
          match xs with
          | nil => Forall_nil _
          | x :: xs => Forall_cons _ (T_nested_ind x) (fold xs)
          end) xs in
        C2_case xs H
    end.
End T_nested_ind.

虽然我需要对列在T_ind列表中的元素进行归纳假设:

forall P : T -> Prop,
  P C1 ->
  (forall l : list T, P (C2 l)) ->
  forall t : T, P t
  1. 有没有办法实现自动化?
  2. 如果我需要这样的归纳原则,我做错了吗?
  3. Coq的标准解决方案是什么?
  4. 是否有一些关于这个问题的孵化研究?

1 个答案:

答案 0 :(得分:1)

这是一个部分答案:

  1. 不,Coq正在给你一个正确但不是很有用的归纳原则,你可以通过巧妙地使用fix来做得更好。
  2. 据我所知,定义和证明新的归纳原则是标准解决方案。