Tenho a seguinte prova inacabada de um lema:
Goal forall (P : Type -> Prop) (Q : Prop),
((forall x, (P x)) -> Q) -> (exists x, P x -> Q).
Proof.
intros.
eapply ex_intro. intros. apply H. intros. eapply H0.
O problema é a última eapply
falha, com a mensagem
Error:
In environment
P : Type -> Prop
Q : Prop
H : (forall x : Type, P x) -> Q
H0 : P ?x
x : Type
Unable to unify "?x" with "x" (cannot instantiate "?x" because "x" is not in
its scope: available
arguments are "P" "Q" "H").
As etapas da prova já parecem muito fraudulentas. A prova constrói uma variável existencial para ficar no lugar de na segunda metade e, em seguida, tenta instanciar usando o obtido como premissa após a aplicação da hipótese . As etapas da prova parecem uma prova cíclica para mim.(forall x, (P x)) -> Q
O que em geral esta mensagem implica? Que tipos de erros lógicos essa mensagem indica aqui?
Há um problema recente no Github da Coq, na verdade, indica que instâncias instáveis fora do escopo PODEM provar falsidade, exceto pelo fato de serem bloqueadas pelo QED.
(P : Type -> Prop)
? E não (A : Type) (P : A -> Prop)
? Se você quis dizer o último, poderá provar a negação do seu lema .