Coq'taki durma sorununun kararsızlığını kanıtlamak mümkün mü?


23

Andrej Bauer'ın “ Yapıcı Matematiği Kabul Etmenin Beş Aşaması ” nı izliyordum ve çelişkiyle iki tür kanıt olduğunu (ya da matematikçilerin çelişkiyle kanıt dediği iki şey) olduğunu söylüyor:

  1. yanlış olduğunu varsayalım ... falan filan, çelişki. Bu nedenle P doğrudur.PP
  2. doğru olduğunu varsayalım ... falan filan, çelişki. Bu nedenle P yanlıştır.PP

Birincisi Dışlanan Orta Yasa'ya (LEM) eşittir ve ikincisi olumsuzluğun nasıl kanıtlanacağıdır.

Halting Probleminin kararsızlığının kanıtı (HP), çelişki ile kanıtıdır: HP'ye karar verebilecek bir makine olduğunu varsayalım ... filan filan, çelişki. Bu nedenle D mevcut değil.DD

Öyleyse, " D var ve HP'ye karar verebilir" olsun. P'nin doğru olduğunu varsayalım ... falan filan, çelişki. Bu nedenle P yanlıştır.PDPP

Bu çelişkiyle ikinci tür bir kanıt gibi gözüküyor, bu nedenle Coq'taki durma sorununun kararsızlığını kanıtlamak mümkün müdür (LEM varsayımı olmadan)?

EDIT: Bunu çelişki kullanarak kanıtlamanın bazı noktalarını görmek isterdim. Bunun köşegenleştirme ile de kanıtlanabileceğini biliyorum.


2
@cody Neden olumsuz bir ifade çelişki gerektiriyor? Yoksa Coq ile mi kısıtlıyorsun?
David Richerby,

3
@DavidRicherby Aslında biraz abartıyorum, çünkü bu sadece aksiyomların yokluğunda doğrudur. Bu durumda, (kesinti olmayan) bir kanıtın ilk (en düşük) adı, sezgisel doğal çıkarımda Giriş-Dışı olmalıdır. Aksiyomların / hipotezlerin olduğu durumlarda, tersine çevrilebildiği için ilk önce bu adımı uygulamak asla zarar vermez, ancak bazen önlenebilir.
cody

2
Aynı başlıkta kağıttan haberin var mı? (Bence orada açıkça Halting Oracle’ın bulunmadığının olağan kanıtının yapıcı olduğunu belirtiyorum.)
Andrej Bauer

1
@AndrejBauer, bilmiyorum. Sadece buldum. Evet, “Halting Kahinesi'nin her zaman var olmayışının kanıtı, yapıcı bir olumsuzlama kanıtı örneğidir” diyorsunuz.
Rafael Castro

1
@RafaelCastro: Bir lisans öğrencisi olarak iyi sorular soruyorsunuz. Sadece, lisans öğrencilerinin (ya da en azından pek çoğunun) daha önce gitmediği yerlere cesaretle gitmenizi tavsiye ediyorum.
Andrej Bauer

Yanıtlar:


20

Durma sorununun ikinci tür "çelişkiyle kanıt" örneğine bir örnek olduğu konusunda haklısın - bu gerçekten olumsuz bir ifade.

Diyelim decides_halt(M)ki, makine Mgirişinin durup durmadığı bir makine olup olmadığına karar verir (bu, Mbazı makine mve girdiler için girişte durup durmadığına ikarar veren bir programdır ).mi

Bunu nasıl ispatlayacağıyla ilgili bir anı unutmak, durma problemi, durma problemine karar verecek bir makine olmadığı ifadesidir. Bunu Coq'da belirtebiliriz (exists M, decides_halt M) -> Falseya da herhangi bir makinenin durma problemini çözmediğini söylemeyi tercih edebiliriz forall M, decides_halt M -> False. Herhangi bir aksiyom olmadan bu iki formalizasyonun Coq'da eşdeğer olduğu ortaya çıkmıştır. (İspatı açıkladım, böylece nasıl çalıştığını görebilirsiniz, ama firstorderher şeyi yapacak!)

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.

Makinelerin biçimlendirilmesi, hesaplanabilirlik ve durdurmanın muhtemelen makul derecede zor olmasına rağmen, her iki ifadenin de köşegenleştirme argümanı olarak kanıtlanması zor olmadığını düşünüyorum. Daha basit bir örnek olarak, Cantor'un köşegenleştirme teoremini ispatlamak zor değildir ( isomorfik olmadıklarını ve isomorfik olmadıklarını görmek için bkz. Https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 ).nat -> natnat

Yukarıdaki köşegenleştirme, nat -> natve arasındaki bir izomorfizmden nasıl bir çelişki çıkarmaya başladığınıza bir örnek verir nat. İşte bağımsız bir örnek olarak belirtilen bu kanıtın özü:

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.

Ayrıntılara bakmadan bile, bu kanıtın yalnızca bir önyargının varlığını aldığını ve imkansız olduğunu gösterdiğini açıklayabiliriz. Biz ilk eşleşme iki yakasını isim vermek seqve index. Önemli olan, itirazın özel sıradaki davranışının f := fun n => S (seq n n)ve endeksinin index fçelişkili olmasıdır. Durma probleminin ispatı, durma problemini dikkatlice seçilmiş bir makine (ve özellikle de varsayılan makineye bağlı olan) ile çözen bir makine hakkındaki hipotezini harekete geçirecek şekilde benzer bir çelişki yaratacaktır.


Siteye Hoşgeldiniz! Umarım takılırsınız - Stack Exchange'in nasıl çalıştığı hakkında daha fazla bilgi edinmek için kısa bir gezintiye çıkmak isteyebilirsiniz .
David Richerby

2
Bu sorunun köşegenleştirme argümanı ile de kanıtlandığını unuttum. Cevabınız ilginç ama Coq’ta bir çelişki kullanarak HM’yi kanıtlamanın mümkün olup olmadığı hakkında bazı noktalar görmek istiyorum. Bunu soruda daha net hale getireceğim.
Rafael Castro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.