我对 Coq 处理存在量化的方式感到困惑。
我有一个谓词 P 和一个假设 H
P : nat -> Prop
H : exists n, P n
而当前的目标是(无论如何)
(Some goal)
如果我想在 H 中实例化 n,我会做
elim H.
但是淘汰之后,现在的目标就变成了
forall n, P n -> (Some goal)
看起来 Coq 将存在量词转换为通用量词。我知道(forall a, P a -> Q a) -> ((exists a, P a) -> Q a)出于我对一阶逻辑的有限知识。但相反的命题似乎是不正确的。如果 'forall' 和 'exists' 不等价,为什么 Coq 会进行这样的转换?
Coq 中的“elim”是否用更难证明的目标代替了目标?或者谁能说明为什么((exists a, P a) -> Q a) -> (forall a, Pa -> Q a)在一阶逻辑中成立?