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
はうまくいくとは思っていませんが、そうではありません。依存型と彼の著書認定プログラミングでLtacのパターンマッチング:forall x、?P x`は `forall x、x`にマッチしないのはなぜですか?
、アダムChlipala discusses依存型のパターンマッチングの制限:
問題は統一変数がローカルにバインドされた変数が含まれていないかもしれないということです。
これが私がここで見ている動作の理由ですか?
'?P x'は[アプリケーション](https://coq.inria.fr/refman/Reference-Manual003.html#applications)を表し、' x'は[識別子](https ://coq.inria.fr/refman/Reference-Manual003.html#qualid)。それらは構文的に異なり、統合できません。 –