スコープ外の変数で存在変数をインスタンス化することは何を意味しますか?


7

補題の未完成の証明を以下に示します。

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.

問題は最後のeapply失敗であり、メッセージが表示されます

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").

証明の手順自体は、すでに非常に厄介です。証明は、存在する変数を構築して、x 後半で、それを使用してそれをインスタンス化しようとします x仮説を適用した後に前提として得られた(forall x, (P x)) -> Q。証明の手順は、周期的な証明に見えます。

このメッセージは一般的に何を意味していますか?このメッセージは、どのタイプの論理的誤りを示していますか?


Coqからの最近のgithubの問題が実際にあり、スコープ外のevarのインスタンス化は、QEDによってブロックされることを除いて、誤りを証明できることを示しています。

https://github.com/coq/coq/issues/8215


2
これを建設的に証明することはできません。古典論理の適切な公理を仮定すればできます。
Derek Elkinsが

2
@DerekElkins私はそれを学びました。しかし、範囲外のインスタンス化は、これが建設的なロジックで機能しない理由を明らかにしますか?
Jason Hu

1
それはそれを示唆し始めますが、私はそうは言わないでしょう。これを建設的に証明することに失敗するあらゆる種類の方法があり、明らかにこれが証明できないためにはすべてのアプローチが失敗する必要があります。存在を建設的に証明するには、証人を作成する必要があります。この場合、任意の型の任意の値を作成する必要がありますが、これは不可能であり、どの仮定も型の値を提供しません。一方、除外された中間の法則は、どこからでも値を魔法にかけることを可能にします。
Derek Elkinsが2017

1
古典的な後続計算におけるLEMの標準的な証明は、確かに「その範囲をエスケープする変数」です。これについてはあまり注意深く見ていませんが、同じような状況になる可能性があります。
ガレーヌ2017

もしかして(P : Type -> Prop)?じゃない(A : Type) (P : A -> Prop)?後者を意味する場合は、補題の否定を証明できます
アントントルノフ2017

回答:


8

あなたが実存的紹介をするとき、あなたはいくつかの用語があると言っています t、統一変数?xで表されます。PtQ。次に、適用しようとしますPtHバツPバツQ。これは、一般化しようとするとP ?x、それはそれを示すことができる場合ので、Pc 新鮮な定数 cxCoq出力ではによって表されます)、次にバツPバツ続くだろう。その新しい定数xを、統一変数と統合しようとします?xが、これは許可されていません。論理的な観点から、?x用語を表しますt そして、その用語は、定義により新鮮さ、新鮮さとは異なります c(つまりx)ただ言うだけですc 私たちが紹介したときは対象外でした t、 そう t それに依存することはできません。

より単純なシナリオとして、証明することはできません バツyバツ=y で実存紹介を使用する yy その時点では対象外です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.