Доведіть доказову недоречність у Coq?


18

Чи є спосіб довести наступну теорему в Coq?

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

EDIT : Спроба дати коротке пояснення щодо того, "що є доказовою невідповідністю" (виправте мене хтось, якщо я помиляюся чи неточний)

Основна ідея полягає в тому, що у світі пропозицій (або Propроду у Coq) те, про що ви (і вам слід) насправді переймаєтесь, - це доцільність пропозиції, а не докази цього, їх може бути багато (або їх немає). Якщо у вас є кілька доказів, з точки зору доказовості, вони рівні, в тому сенсі, що вони доводять те саме твердження . Тож їх відмінність просто не має значення. Це відрізняється від обчислювальної точки зору, коли ви дійсно дбаєте про розрізнення двох термінів, наприклад, в основному, ви не хочете, щоб два мешканці boolтипу (або Set, кажучи словами Кока), а саме trueі falseбули рівними. Але якщо покласти їх Prop, вони ставляться до рівних.


Інтригуючий. Я впевнений, що ви отримаєте відповідь протягом декількох хвилин у списку розсилки Coq. (Обов'язково опублікуйте відповідь тут, якщо ви це зробите.)
Дейв Кларк,

2
Тим із нас, кому цікаво, про що йдеться у твоєму питанні, але не знайомий з Кок, чи можеш ти додати речення чи два, що пояснюють, що ця теорема означає англійською? (І, може, в чому полягає «
доказна

@ Джошуа, я не є адекватним, щоб це детально пояснити, тому що він також для мене новий, тому також спантеличував мене досить довгий час. Але все одно, ось моя спроба (див. У частині питання).
день

6
@Joshua, IIRC, в конструктивній математиці, доказ імплікації , як є функцією / процес / алгоритм / конструкція , яка перетворює доказ з А до доказу з B , і конструкція є доказом не має значення , якщо в результаті доказ B не залежить від яких доказ дано для A . АБАББА
Kaveh

Відповіді:


28

Теорія, що стоїть за Coq, не передбачає загальної доказової нерелевантності. Навіть доказ невідповідності рівності не мається на увазі; це еквівалентно аксіомі До STREICHER в . Обидва можна додати як аксіоми .

Існують розробки, де корисно міркувати про доказові предмети, а доказова недоречність робить це майже неможливим. Можливо, у цих розробках повинні бути перероблені всі об'єкти, структура яких перероблена Set, але з базовою теорією Coq можливість існує.

Існує важливий підзарядний доказ невідповідності, який завжди має місце. Аксіома К Стрейхера K завжди належить до вирішальних областей, тобто докази рівності для множин, що визначаються, є унікальними. Загальний доказ є в Eqdep_decмодулі в стандартній бібліотеці Coq. Ось ваша теорема як наслідок (моє доказ тут не обов'язково є найелегантнішим):

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.

Для цього особливого випадку ось прямий доказ (натхненний загальним доказом у Eqdep_dec.v). По-перше, визначимо, що ми визначимо канонічний доказ true=b(як зазвичай у Coq, це легше спочатку бути постійним). Тоді ми показуємо, що будь-який доказ true=bмає бути 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 класичну логіку, ви отримаєте доказову невідповідність. Інтуїтивно кажучи, класична логіка дає вам оракул рішення для пропозицій, і це досить добре для аксіоми K. У стандартному модулі бібліотеки Coq є доказ Classical_Prop.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.