Việc khởi tạo các biến hiện sinh với hàm ngoài phạm vi có nghĩa là gì?


7

Tôi đã làm theo bằng chứng dở dang của một bổ đề:

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.

Vấn đề là eapplythất bại cuối cùng , với tin nhắn

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

Các bước chứng minh bản thân trông rất lừa đảo. Bằng chứng xây dựng một biến số tồn tại để thay thế cho trong nửa thứ hai và sau đó cố gắng khởi tạo nó bằng cách sử dụng thu được làm tiền đề sau khi áp dụng giả thuyết . Các bước chứng minh trông bằng chứng tuần hoàn với tôi.xx(forall x, (P x)) -> Q

Nói chung, thông điệp này ngụ ý gì? Những loại lỗi logic nào thông báo này chỉ ra ở đây?


Có một vấn đề github gần đây từ Coq thực sự chỉ ra rằng việc bắt chước các evar bên ngoài phạm vi CÓ THỂ chứng minh sự giả dối, ngoại trừ việc nó bị chặn bởi QED.

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


2
Bạn sẽ không thể chứng minh điều này một cách xây dựng. Bạn có thể nếu bạn giả sử một số tiên đề phù hợp của logic cổ điển.
Derek Elkins rời SE

2
@DerekElkins Tôi đã học được điều đó. nhưng việc khởi tạo ngoài phạm vi sẽ tiết lộ lý do tại sao điều này sẽ không hoạt động theo logic xây dựng?
Jason Hu

1
Tôi sẽ không nói như vậy mặc dù nó bắt đầu gợi ý nó. Có tất cả các cách để không chứng minh điều này một cách xây dựng, và rõ ràng tất cả các cách tiếp cận cần phải thất bại vì điều này không thể chứng minh được. Xây dựng chứng minh một sự tồn tại đòi hỏi phải tạo ra một nhân chứng. Trong trường hợp này, chúng ta cần tạo một giá trị tùy ý của một loại tùy ý là không thể và không có giả định nào cung cấp cho chúng ta một giá trị của loại đó. Luật trung gian bị loại trừ, mặt khác, cho phép chúng ta phù phép các giá trị từ hư không.
Derek Elkins rời SE

1
Bằng chứng chuẩn của LEM trong phép tính tuần tự cổ điển thực sự là "một biến thoát khỏi phạm vi của nó". Không nhìn quá kỹ vào cái này nhưng có thể bạn sẽ gặp tình huống tương tự.
gallais

Bạn có thực sự có ý nghĩa (P : Type -> Prop)? Còn không (A : Type) (P : A -> Prop)? Nếu bạn có nghĩa là cái sau, thì bạn có thể chứng minh sự phủ định của bổ đề của bạn .
Anton Trunov

Câu trả lời:


8

Khi bạn thực hiện một giới thiệu mang tính tồn tại, bạn đang nói rằng có một số thuật ngữ t, được biểu diễn bằng biến thống nhất ?x, sao choP(t)Q. Sau đó bạn thử áp dụngP(t) đến H:(x.P(x))Q. Nó cố gắng khái quát hóa P ?x, bởi vì nếu nó có thể cho thấy điều đóP(c) cho một hằng số tươi c(đại diện bởi xtrong đầu ra Coq), sau đóx.P(x)Sẽ làm theo. Nó cố gắng để thống nhất hằng số mới đó x, với biến thống nhất?x , nhưng điều này không được phép. Từ góc độ logic, ?xđại diện cho một thuật ngữt và thuật ngữ đó, theo định nghĩa là sự tươi mới, khác biệt với sự tươi mới c (I E x ) chỉ để nóic không có trong phạm vi khi chúng tôi giới thiệu t, vì thế t không thể phụ thuộc vào nó.

Như một kịch bản đơn giản hơn, chúng tôi không thể chứng minh x.y.x= =y bằng cách sử dụng giới thiệu hiện sinh với y. y không ở trong phạm vi tại thời điểm đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.