Có thể chứng minh tính không ổn định của vấn đề tạm dừng trong Coq?


23

Tôi đã xem " Năm giai đoạn chấp nhận toán học xây dựng " của Andrej Bauer và ông nói rằng có hai loại bằng chứng bằng mâu thuẫn (hoặc hai điều mà các nhà toán học gọi là bằng chứng bằng mâu thuẫn):

  1. Giả sử là sai ... blah blah blah, mâu thuẫn. Do đó P đúng.PP
  2. Giả sử là đúng ... blah blah blah, mâu thuẫn. Do đó P sai.PP

Cái đầu tiên tương đương với Luật loại trừ giữa (LEM) và cái thứ hai là làm thế nào để chứng minh sự phủ định.

Bằng chứng về tính không ổn định của Vấn đề Ngừng (HP) là một bằng chứng bằng mâu thuẫn: giả sử có một máy có thể quyết định HP ... blah blah blah, mâu thuẫn. Do đó D không tồn tại.DD

Vì vậy, hãy để là " D tồn tại và có thể quyết định HP". Giả sử P là đúng ... blah blah blah, mâu thuẫn. Do đó P sai.PDPP

Điều này trông giống như loại bằng chứng thứ hai bằng mâu thuẫn, vì vậy có thể chứng minh tính không ổn định của vấn đề tạm dừng trong Coq (mà không giả sử LEM)?

EDIT: Tôi sẽ thấy một số điểm về việc chứng minh điều này bằng cách sử dụng mâu thuẫn. Tôi biết rằng điều này cũng có thể được chứng minh bằng cách sử dụng đường chéo.


2
@cody Tại sao một tuyên bố tiêu cực đòi hỏi mâu thuẫn? Hay bạn đang giới hạn Coq?
David Richerby

3
@DavidR Richby Tôi thực sự phóng đại một chút, vì điều đó chỉ đúng khi không có tiên đề. Trong trường hợp đó, bước đầu tiên (thấp nhất) của bằng chứng (không cắt) phải là Không giới thiệu trong suy luận tự nhiên theo trực giác. Trong trường hợp có các tiên đề / giả thuyết, thì việc áp dụng bước này trước tiên không bao giờ là đau đớn, vì nó không thể đảo ngược, nhưng đôi khi có thể tránh được.
cody

2
Bạn biết gì về bài báo có cùng tiêu đề? (Tôi nghĩ trong đó tôi tuyên bố rõ ràng rằng bằng chứng thông thường về sự không tồn tại của Halting Oracle mang tính xây dựng.)
Andrej Bauer

1
@AndrejBauer, tôi không biết. Chỉ cần tìm thấy nó. Có, bạn nói rằng "Bằng chứng thông thường về sự không tồn tại của nhà tiên tri Ngưng là một ví dụ khác về bằng chứng xây dựng của phủ định.".
Rafael Castro

1
@RafaelCastro: là một sinh viên đại học, bạn đang hỏi những câu hỏi hay. Tôi chỉ khuyến khích bạn mạnh dạn đi nơi mà không có sinh viên đại học (hoặc ít nhất là không nhiều) đã đi trước.
Andrej Bauer

Câu trả lời:


20

Bạn hoàn toàn đúng khi nói rằng vấn đề tạm dừng là một ví dụ về loại "bằng chứng mâu thuẫn" thứ hai - đó thực sự chỉ là một tuyên bố tiêu cực.

Giả sử decides_halt(M)là một vị từ nói rằng máy Mquyết định xem đầu vào của nó có phải là máy dừng hay không (nghĩa là Mchương trình dành cho một số máy mvà đầu vào i, quyết định nếu mdừng trên đầu vào i).

Quên một lúc về cách chứng minh nó, vấn đề tạm dừng là tuyên bố rằng không có máy nào quyết định vấn đề tạm dừng. Chúng tôi có thể nêu điều này trong Coq như (exists M, decides_halt M) -> False, hoặc có thể chúng tôi muốn nói rằng bất kỳ máy cụ thể nào không giải quyết được vấn đề tạm dừng forall M, decides_halt M -> False. Nó chỉ ra rằng không có bất kỳ tiên đề nào, hai chính thức này là tương đương trong Coq. (Tôi đã đánh vần bằng chứng để bạn có thể thấy nó hoạt động như thế nào, nhưng firstordersẽ làm toàn bộ!)

Parameter machine:Type.
Parameter decides_halt : machine -> Prop.

(* Here are two ways to phrase the halting problem: *)

Definition halting_problem : Prop :=
  (exists M, decides_halt M) -> False.

Definition halting_problem' : Prop :=
  forall M, decides_halt M -> False.

Theorem statements_equivalent :
  halting_problem <-> halting_problem'.
Proof.
  unfold halting_problem, halting_problem'; split; intros.
  - exact (H (ex_intro decides_halt M H0)).
  - destruct H0.
    exact (H x H0).
Qed.

Tôi nghĩ rằng một trong hai tuyên bố không quá khó để chứng minh là một đối số đường chéo, mặc dù việc chính thức hóa máy móc, khả năng tính toán và tạm dừng có lẽ là thách thức hợp lý. Đối với một ví dụ đơn giản, nó không quá khó khăn để chứng minh định lý diagonalization Cantor (xem https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 cho một bằng chứng cho thấy nat -> natnatkhông đẳng cấu).

Đường chéo ở trên đưa ra một ví dụ về cách bạn có thể bắt nguồn từ một mâu thuẫn từ một đẳng cấu giữa nat -> natnat. Đây là bản chất của bằng chứng đó được nêu trong một ví dụ khép kín:

Record bijection A B :=
  {  to   : A -> B
  ; from : B -> A
  ; to_from : forall b, to (from b) = b
  ; from_to : forall a, from (to a) = a
  }.

Theorem cantor :
  bijection nat (nat -> nat) ->
  False.
Proof.
  destruct 1 as [seq index ? ?].
  (* define a function which differs from the nth sequence at the nth index *)
  pose (f := fun n => S (seq n n)).
  (* prove f differs from every sequence *)
  assert (forall n, f <> seq n). {
    unfold not; intros.
    assert (f n = seq n n) by congruence.
    subst f; cbn in H0.
    eapply n_Sn; eauto.
  }
  rewrite <- (to_from0 f) in H.
  apply (H (index f)).
  reflexivity.
Qed.

Ngay cả khi không nhìn vào các chi tiết, chúng ta có thể thấy từ tuyên bố rằng bằng chứng này chỉ tồn tại sự tồn tại của một mệnh đề và chứng minh điều đó là không thể. Trước tiên, chúng tôi cung cấp cho hai bên của tên gọi seqindex. Điều quan trọng là hành vi của bijection trong chuỗi đặc biệt f := fun n => S (seq n n)và chỉ số của nó index flà trái ngược nhau. Bằng chứng của vấn đề tạm dừng sẽ dẫn đến một mâu thuẫn theo cách tương tự, đưa ra giả thuyết của nó về một cỗ máy giải quyết vấn đề tạm dừng với một máy được chọn cẩn thận (và đặc biệt là một máy thực sự phụ thuộc vào máy giả định).


Chào mừng đến với trang web! Tôi hy vọng bạn sẽ đi xung quanh - bạn có thể muốn thực hiện chuyến tham quan ngắn của chúng tôi để xem thêm về cách thức hoạt động của Stack Exchange.
David Richerby

2
Tôi quên rằng vấn đề này cũng được chứng minh bằng một đối số đường chéo. Câu trả lời của bạn rất thú vị nhưng tôi muốn thấy một số điểm về việc có thể chứng minh HM bằng cách sử dụng mâu thuẫn trong Coq hay không. Tôi sẽ làm cho điều này rõ ràng hơn trong câu hỏi.
Rafael Castro
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.