Ich habe folgenden unvollendeten Beweis für ein Lemma:
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.
Das Problem ist das letzte eapply
fehlgeschlagene mit der Nachricht
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").
Die Beweisschritte selbst sehen schon sehr phishy aus. Der Beweis konstruiert existenzielle Variablen, die anstelle von sitzen sollen in der zweiten Hälfte und versucht dann, es mit dem zu instanziieren als Voraussetzung nach Anwendung der Hypothese erhalten (forall x, (P x)) -> Q
. Die Beweisschritte sehen für mich zyklisch aus.
Was bedeutet diese Nachricht im Allgemeinen? Welche Arten von logischen Fehlern zeigt diese Meldung hier an?
Es gibt ein aktuelles Github-Problem von Coq, das tatsächlich darauf hinweist, dass das Instanziieren von Evars außerhalb des Gültigkeitsbereichs Unwahrheit beweisen kann, außer dass es von QED blockiert wird.
(P : Type -> Prop)
? Und nicht (A : Type) (P : A -> Prop)
? Wenn Sie Letzteres gemeint haben, können Sie die Negation Ihres Lemmas beweisen .