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