证明:
Parameter A B : Prop.
Goal A->B.
intro A.
我明白了:
1 subgoals
A : A
______________________________________(1/1)
B
如何将A
返回目标栏目?返回:
1 subgoals
______________________________________(1/1)
A -> B
答案 0 :(得分:5)
答案 1 :(得分:2)
您可以使用revert
策略。
鉴于Coq过多的策略,每个都有不同的角落案例和不同的文档质量,你不知道使用哪种策略是很常见的。
在这种情况下,我发现将你的证据看作一个程序是很有用的(参见Curry-Howard Isomorphism),并问自己你要用什么术语来解决你的目标。这种方法的优点是Coq的术语语言更容易学习(因为没有那么多不同类型的术语)并且表达足以解决所有可用策略解决的目标(有时证明更冗长)。 p>
您可以使用refine
策略以术语语言编写您的证明。 refine
的论点是一个带洞_
的术语。 refine
使用该术语释放当前目标,并为术语中的每个洞生成子目标。一旦你知道refine
如何运作,你所要做的就是想出一个符合你想要的术语。例如:
h
还原假设refine (_ h)
。h
引入假设refine (fun h => _)
。h
复制假设refine ((fun h' => _) h)
。请注意,Coq的策略往往在幕后做了很多魔术。例如,revert
策略在处理因变量时比上面的refine
“更聪明”:
Goal forall n:nat, n >= 0.
intro n; revert n. (* forall n : nat, n >= 0 *)
Restart.
intro n; refine (_ n). (* nat -> n >= 0 *)
Restart.
intro n'; refine ((_ : forall n, n >= 0) n'). (* forall n : nat, n >= 0 *)
Abort.