Syntax 为什么带分号的证明不适用于句号?
以下证明在Coq中仓促给出: 我试着一步一步地写这篇文章来理解发生了什么,但是在解决了基本情况之后,归纳假设就不一样了!因此,战术失败:Syntax 为什么带分号的证明不适用于句号?,syntax,coq,Syntax,Coq,以下证明在Coq中仓促给出: 我试着一步一步地写这篇文章来理解发生了什么,但是在解决了基本情况之后,归纳假设就不一样了!因此,战术失败: Lemma exercise6' : forall n m, add n (S m) = S (add n m). Proof. induction n. intros m. simpl. reflexivity. rewrite IHn. reflexivity. Qed. 它们在以“重写”开头的行失败,错误如下: 错误:在当前目标中未
Lemma exercise6' : forall n m, add n (S m) = S (add n m).
Proof.
induction n.
intros m.
simpl.
reflexivity.
rewrite IHn. reflexivity.
Qed.
它们在以“重写”开头的行失败,错误如下:
错误:在当前目标中未找到与添加n(S?M1580)匹配的子项
为什么一步一步地编写相同的代码会失败?分号和句号有什么区别
此外,有没有一种方法可以让我快速查看Coq中给出的证明的逐步过程?
简言之:
生成2个子目标归纳法n
将策略A;B
应用于B
A
介绍m;simpl
应用于归纳法生成的两个目标
。这意味着您可以通过在重写之前插入额外的简介m
和额外的siml
来修复第二个脚本:
Lemma exercise6' : forall n m, add n (S m) = S (add n m).
Proof.
induction n.
intros m.
simpl.
reflexivity.
intros m.
simpl.
rewrite IHn.
reflexivity.
Qed.
顺便说一下,通过使用项目符号来划分各个子目标,您可以使校对脚本的结构更加清晰。这提供了以下两个脚本,您可以在练习6
中看到简介m;siml
在输入任一子目标之前执行,而在练习6'
中,它们已被推入每个子目标:
Lemma exercise6 : forall n m, add n (S m) = S (add n m).
Proof.
induction n; intros m; simpl.
- reflexivity.
- rewrite IHn; reflexivity.
Qed.
Lemma exercise6' : forall n m, add n (S m) = S (add n m).
Proof.
induction n.
- intros m.
simpl.
reflexivity.
- intros m.
simpl.
rewrite IHn.
reflexivity.
Qed.
对不起,我没看到!我猜当我搜索“分号”和“句号”时,它没有出现,因为答案的名称中有“;”和“.”。谢谢你的快速回答!我特别欣赏关于要点的提示——我想知道如何编写更可读的代码。不用麻烦了!我编辑了其他问题,在标题中添加了分号和句号。希望这将使它更容易发现在未来!
Lemma exercise6 : forall n m, add n (S m) = S (add n m).
Proof.
induction n; intros m; simpl.
- reflexivity.
- rewrite IHn; reflexivity.
Qed.
Lemma exercise6' : forall n m, add n (S m) = S (add n m).
Proof.
induction n.
- intros m.
simpl.
reflexivity.
- intros m.
simpl.
rewrite IHn.
reflexivity.
Qed.