Доказательство тавтологии с coq

12

В настоящее время я должен изучить Coq и не знаю, как бороться с or:

Как простой пример, я не вижу, как это доказать:

Theorem T0: x \/ ~x.

Буду очень признателен, если кто-нибудь сможет мне помочь.

Для справки я использую этот шпаргалку .

Также пример доказательства, которое я имею в виду: здесь для двойного отрицания:

Require Import Classical_Prop.

Parameters x: Prop.

Theorem T7: (~~x) -> x. 
intro H. 
apply NNPP. 
exact H. 
Qed.
Имаго
источник
NNPPЭто тип forall p:Prop, ~ ~ p -> p., так что это обман, чтобы использовать его, чтобы доказать T7. При импорте Classical_Propвы получаетеAxiom classic : forall P:Prop, P \/ ~ P.
Антон Трунов
Итак, apply classic.решает вашу цель за T0.
Антон Трунов

Ответы:

14

Вы не можете доказать это в «ванильном» Coq, потому что он основан на интуиционистской логике :

С точки зрения теории доказательств, интуиционистская логика является ограничением классической логики, в которой закон исключенного среднего и двойного отрицания не являются действительными логическими правилами.

Есть несколько способов справиться с такой ситуацией.

  • Введите закон исключенной середины в качестве аксиомы:

    Axiom excluded_middle : forall P:Prop, P \/ ~ P.
    

    Больше нет необходимости доказывать что-либо после этого.

  • Ввести некоторую аксиому, эквивалентную закону исключенного среднего, и доказать их эквивалентность. Вот только несколько примеров.

Антон Трунов
источник
Спасибо вам большое. Я не знаком со всем, что вы написали, но все же проверю. Я использую coqIde и фактически также получил доказательство двойного отрицания, я добавил его к описанию проблемы для большей ясности позже. Я ожидал, что будет аналогичный способ решения проблемы, указанной выше. Может быть, я должен был включить один пример.
Имаго
1
@AntonTrunov вам нужно добавить некоторые скобки к вашему Axiom peirce: в его нынешнем виде это не закон Пирса (и на самом деле, trivialчтобы доказать).
Gallais
@gallais Спасибо, что заметили это! Исправлена.
Антон Трунов
6

Как вам сообщили другие, ваша тавтология не является тавтологией, если вы не принимаете классическую логику. Но так как вы делаете тавтологию над разрешимыми значениями истинности, вы можете использовать boolвместо Prop. Тогда ваша тавтология гласит:

Require Import Bool.

Lemma how_about_bool: forall (p : bool), Is_true (p || negb p).
Proof.
  now intros [|].
Qed.
Андрей Бауэр
источник