Coq 使用“依赖归纳”策略在进行归纳时保留信息

Coq 使用“依赖归纳”策略在进行归纳时保留信息,coq,induction,coq-tactic,Coq,Induction,Coq Tactic,我刚刚遇到了Coq归纳法在阅读一篇文章的校样时丢弃有关构造术语的信息的问题 作者使用了类似于: remember (WHILE b DO c END) as cw eqn:Heqcw. 在实际归纳之前重写假设H。我真的不喜欢引入一个微不足道的等式,因为它看起来像是黑魔法 这里的一些搜索显示,实际上记住技巧是必要的。然而,一个答案指出,新的依赖归纳法可以用来避免记住技巧。这很好,但是依赖归纳法本身现在似乎有点神奇 我很难理解依赖归纳法是如何工作的。给出了一个需要相关感应的示例: Lemma le

我刚刚遇到了Coq
归纳法
在阅读一篇文章的校样时丢弃有关构造术语的信息的问题

作者使用了类似于:

remember (WHILE b DO c END) as cw eqn:Heqcw.
在实际归纳之前重写假设
H
。我真的不喜欢引入一个微不足道的等式,因为它看起来像是黑魔法

这里的一些搜索显示,实际上
记住
技巧是必要的。然而,一个答案指出,新的
依赖归纳法可以用来避免
记住
技巧。这很好,但是
依赖归纳法本身现在似乎有点神奇

我很难理解依赖归纳法是如何工作的。给出了一个需要
相关感应的示例:

Lemma le_minus : forall n:nat, n < 1 -> n = 0.
但这不起作用。任何人都可以用
记住
-ing?

你可以做的事情来解释
依赖归纳法的工作原理

Require Import Coq.Program.Equality.

Lemma le_minus : forall n:nat, n < 1 -> n = 0.
Proof.
intros n H.
remember 1 as m in H. induction H.
- inversion Heqm. reflexivity.
- inversion Heqm. subst m.
  inversion H.
Qed.

如文件所示,从属归纳在Coq.Program.Equality中定义。你可以看看它是如何工作的。
Require Import Coq.Program.Equality.

Lemma le_minus : forall n:nat, n < 1 -> n = 0.
Proof.
intros n H.
remember 1 as m in H. induction H.
- inversion Heqm. reflexivity.
- inversion Heqm. subst m.
  inversion H.
Qed.
Lemma le_minus_aux :
  forall n m, n < m ->
    match m with
    | 1 => n = 0
    | _ => True
    end.
Proof.
intros n m H. destruct H.
- destruct n; trivial.
- destruct H; trivial.
Qed.

Lemma le_minus : forall n, n < 1 -> n = 0.
Proof.
intros n H.
apply (le_minus_aux n 1 H).
Qed.