我想为这些简单的推理规则提供 Ltac 策略。
在 Modus Ponens 中,如果我有H:P->Q
和H1:P
,Ltac mp H H1
将添加Q
到上下文中作为H2 : Q
.
在 Modus Tollens 中,如果我有H:P->Q
and H1:~Q
,那么Ltac mt H H1
将添加H2:~P
到上下文中。
我已经写了一个用于 ponens 的方法,但它不适用于先例也是暗示的复杂情况。
Ltac mp H0 H1 :=
let H := fresh "H" in
apply H0 in H1 as H.
编辑:我在另一个看似不相关的问题中找到了 Modus Ponens 的答案(在 Coq 中重写假设,保持暗示),其中“简化”版本apply
是用generalize
.
Ltac mp H H0 :=
let H1 := fresh "H" in
generalize (H H0); intros H1.
不过,我仍然会感谢 Modus Tollens 的回答。