Coq 引入一个假设,然后立即对其执行另一个策略

Coq 引入一个假设,然后立即对其执行另一个策略,coq,ssreflect,Coq,Ssreflect,当我的证明状态为 H->目标 我经常使用这种模式 介绍H.*一些策略*H。 其中一些策略可以是“反转”或“应用”,等等。如果有一些策略将这两个步骤结合起来,也就是说,引入顶层假设,然后对其应用特定的策略,那就更好了。我查阅了有关move的ssreflect文档,因为move可以做类似的有用的事情,但没有发现任何东西。有没有这样一种策略 谢谢。如前所述,ssreflect可以移动变量,例如,如果变量位于堆栈顶部,则使用ssreflect甚至不需要引入变量 Lemma blah : H ->

当我的证明状态为
H->目标
我经常使用这种模式

介绍H.*一些策略*H。
其中一些策略可以是“反转”或“应用”,等等。如果有一些策略将这两个步骤结合起来,也就是说,引入顶层假设,然后对其应用特定的策略,那就更好了。我查阅了有关move的ssreflect文档,因为move可以做类似的有用的事情,但没有发现任何东西。有没有这样一种策略


谢谢。

如前所述,ssreflect可以移动变量,例如,如果变量位于堆栈顶部,则使用ssreflect甚至不需要引入变量

Lemma blah : H -> Goal                  Lemma blah : H -> Goal 
intro H. induction H.           ~       elim.

Lemma blahh : P -> H -> Goal            Lemma blah : P -> H -> Goal 
intros P H. induction H.         ~      move=> P; elim. or shorten intros;elim : H.
intro P H. apply P in H.         ~      apply : P.

我建议初学者使用它非常舒服。

谢谢Tiago Campos的回答,但这些策略在使用
ssreflect
时特别有效。我认为你应该在回答的开头加上这些信息。例如,你可以用“当你使用
ssreflect
策略语言时,…”哦,谢谢,@Yves根据你的建议,我做了一些修正。有没有一种方法可以在做介绍的时候使用任意的策略?在这种情况下,我认为使用序列进行“intro H;destruct H”是一种更舒适的方式,而不是像您给出的归纳法或apply?哼哼法这样的具体示例。但是您可以使用Ltac尝试一些更好的方法,例如:Ltac top tac:=let T:=fresh in move=>T;还有,引理等等:H->目标。交咨会情商小组案件。让inv k:=ltac:(反转k)在top inv中,破坏你的目标并分别尝试反转。