Coq kanıt kanıtı ilgisizlik kanıtlamak?


18

Coq'ta aşağıdaki teoremi kanıtlamanın bir yolu var mı?

Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.

EDIT : "Ne kanıtı ilgisizlik" kısa bir açıklama yapmak için bir girişim (yanlış veya yanlış varsa beni birisi düzeltmek)

Temel fikir, öneri dünyasında (veya PropCoq'taki sıralamada), sizin (ve yapmanız gereken) gerçekten önem verdiğiniz şeyin, bir kanıtı değil , bir önerinin güvenilirliği olduğudur . Olasılık açısından birden fazla kanıtınız olması durumunda , aynı öneriyi kanıtlamaları anlamında eşittirler . Bu yüzden ayrımları önemsizdir. Eğer gerçekten iki terim ayrım umurumda görünümü, hesaplama açısından bu farklılık örneğin, temelde, iki sakinleri istemiyoruz tip (ya yani Coq deyimiyle) ve eşit olması. Ama eğer onları koyarsanız, onlara eşit muamele edilir.boolSettruefalseProp


İlgi çekici. Eminim Coq posta listesinde birkaç dakika içinde cevap alırsınız. (Cevabınızı buraya yazdığınızdan emin olun.)
Dave Clarke

2
Sorunuzun ne hakkında olduğunu merak eden, ancak Coq'a aşina olmayanlar için, bu teorinin İngilizce ne anlama geldiğini açıklayan bir veya iki cümle ekleyebilir misiniz? (Ve belki de "kanıt ilgisizliği" ne demektir?)
Joshua Grochow

@Joshua, ayrıntılı olarak açıklamak için yeterli değilim, çünkü benim için de yeni, bu yüzden beni bir süredir şaşırttı. Neyse, işte benim girişimim (soru kısmına bakınız).
gün

6
@Joshua IIRC yapıcı matematik gibi bir dolaylı bir kanıtı dönüştürür bir bir fonksiyonu / süreç / algoritması / inşaat geçirmez bir a kanıt arasında ve inşaat alakasız geçirmez elde edilen kanıt olmadığını arasında kanıtı için verildiği bağlı değildir . birBbirBBbir
Kaveh

Yanıtlar:


28

Kanıt ilgisizliği genel olarak Coq'un arkasındaki teori tarafından ima edilmez. Eşitlik için kanıt ilgisizliği bile ima edilmez; Streicher'in K aksiyomuna eşdeğerdir . Her ikisi de aksiyom olarak eklenebilir .

Kanıt nesneler hakkında akıl yürütmenin faydalı olduğu gelişmeler vardır ve kanıt ilgisizliği bunu neredeyse imkansız kılar. Muhtemelen bu gelişmeler, yapısı önemli olan tüm nesnelere sahip olmalıdır Set, ancak temel Coq teorisi ile olasılık var.

Her zaman sahip olunan önemli bir kanıt ilgisizliği alt kutusu vardır. Streicher'in aksiyomu K her zaman karar verilebilir alanlara sahiptir, yani karar verilebilir kümelerde eşitlik kanıtları benzersizdir. Genel kanıt Eqdep_decCoq standart kütüphanesindeki modülde bulunur. İşte bir sonuç olarak teoreminiz (buradaki kanıtım mutlaka en zarif değil):

Require Bool.
Require Eqdep_dec.
Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.
Proof.
  intros; apply Eqdep_dec.eq_proofs_unicity; intros.
  destruct (Bool.bool_dec x y); tauto.
Qed.

Bu özel durum için, burada doğrudan bir kanıt (genel kanıttan esinlenilmiştir Eqdep_dec.v). İlk olarak, kanonik bir kanıtı tanımladığımızı tanımlayın true=b(her zamanki gibi Coq'ta sabitin ilk olması daha kolaydır). Sonra herhangi bir kanıtın true=bolması gerektiğini gösteriyoruz refl_equal true.

Let nu b (p:true = b) : true = b :=
  match Bool.bool_dec true b with
    | left eqxy => eqxy
    | right neqxy => False_ind _ (neqxy p)
  end.
Lemma bool_pcanonical : forall (b : bool) (p : true = b), p = nu b p.
Proof.
  intros. case p. destruct b.
  unfold nu; simpl. reflexivity.
  discriminate p.
Qed.

Coq'a klasik mantık eklerseniz, kanıt ilgisizliği elde edersiniz. Sezgisel olarak konuşursak, klasik mantık size önermeler için bir karar kâhin verir ve bu aksiyom K için yeterince iyidir. Coq standart kütüphane modülünde bir kanıt vardır Classical_Prop.

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.