鉴于我有forall n m
,有没有办法解决这个问题:
intros n m. generalize dependent n.
但只需一步,只需将intros
(或替代策略)应用于m
?
答案 0 :(得分:1)
您可能想要沿着这些线路(但是为了能够将策略应用于多分类望远镜而使用异构列表):
Require Import ListTactics.
Ltac introNthAcc n acc := match constr:n with
| 0 => intro ; list_iter ltac:(fun x => generalize dependent x) acc
| S ?n =>
let H := fresh "H" in
intro H ; introNthAcc n (cons H acc)
end.
Ltac introNth n := introNthAcc n (@nil Prop).
Goal forall a b c, a /\ b /\ c.
introNth 1.
答案 1 :(得分:0)
不幸的是,基本的Coq策略语言对于这种簿记步骤并不是很好。我个人更喜欢使用SSReflect,因为它们更经济。比较
intros n m. generalize dependent n.
与SSR等效
move=> n m; move: n.
请注意,如果您的定理是一个普遍量化的事实,您也可以将n
和m
直接放在冒号之前,从而保存第一个intros
步骤,例如
Lemma my_lemma n m : P n m.
Proof.
move: n.
(* Rest of proof *)
Qed.
或者更好的是,如果您在推广后立即执行induction
,
Lemma my_lemma n m : P n m.
Proof.
elim: n.
(* Rest of proof *)
Qed.