Ltac checkForall H :=
let T := type of H in
match T with
| forall x, ?P x =>
idtac
| _ =>
fail 1 "not a forall"
end.
Example test : (forall x, x) -> True.
Proof.
intros H.
Fail checkForall H. (* not a forall *)
Abort.
我天真地期望checkForall H
成功,但事实并非如此。
在他的书Certified Programming with Dependent Types中,Adam Chlipala讨论了模式匹配对依赖类型的限制:
问题是统一变量可能不包含本地绑定变量。
这是我在这里看到的行为的原因吗?