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 .Antworten:
Wenn Sie eine existenzielle Einführung machen, sagen Sie, dass es einen Begriff gibtt , die durch die Vereinigungsvariable dargestellt wird P.( t ) → Q. . Sie versuchen dann, sich zu bewerbenP.( t ) zu H.:: ( ∀ x . P.( x ) ) → Q. . Es versucht zu verallgemeinern P.( c ) für eine frische Konstante c (dargestellt durch ∀ x . P.( x ) würde folgen. Es wird versucht, diese neue Konstante t und dieser Begriff unterscheidet sich per Definition von Frische c (dh c war nicht im Umfang, als wir vorstellten t , damit t kann nicht davon abhängen.
?x
, so dassP ?x
, denn wenn es das zeigen kannx
in der Coq-Ausgabe), dannx
mit der Vereinigungsvariablen zu vereinheitlichen,?x
dies ist jedoch nicht zulässig.?x
Repräsentiert aus logischer Sicht einen Begriffx
) was nur zu sagen istAls einfacheres Szenario können wir nicht beweisen∃ x . ∀ y. x = y durch existenzielle Einführung mit y . y ist zu diesem Zeitpunkt nicht im Geltungsbereich.
quelle