Provare tautologia con coq


12

Attualmente devo imparare Coq e non so come affrontare un or:

Ad esempio, per quanto sia semplice, non vedo come provare:

Theorem T0: x \/ ~x.

Lo apprezzerei davvero, se qualcuno potesse aiutarmi.

Per riferimento utilizzo questo cheat sheet .

Anche un esempio di una prova che ho in mente: qui per doppia negazione:

Require Import Classical_Prop.

Parameters x: Prop.

Theorem T7: (~~x) -> x. 
intro H. 
apply NNPP. 
exact H. 
Qed.

NNPPIl tipo è forall p:Prop, ~ ~ p -> p., quindi è imbarazzante usarlo per provare T7. Quando Classical_PropAxiom classic : forall P:Prop, P \/ ~ P.
importi,

Quindi, apply classic.risolve il tuo obiettivo per T0.
Anton Trunov,

Risposte:


14

Non è possibile dimostrarlo in Coq "vaniglia", perché si basa sulla logica intuizionistica :

Dal punto di vista della teoria della dimostrazione, la logica intuizionista è una restrizione della logica classica in cui la legge dell'eliminazione della negazione intermedia e doppia negata non sono regole logiche valide.

Esistono diversi modi per affrontare una situazione come questa.

  • Introdurre la legge del mezzo escluso come assioma:

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

    Non è più necessario dimostrare nulla dopo questo punto.

  • Introdurre un assioma equivalente alla legge del mezzo escluso e dimostrare la loro equivalenza. Ecco solo alcuni esempi.


Grazie mille finora. Non ho familiarità con tutto ciò che hai scritto, ma controllerò comunque. Uso il coqIde e in effetti ho anche ottenuto una prova della doppia negazione, l'ho aggiunto alla descrizione del problema per maggiore chiarezza in seguito. Mi aspettavo che ci fosse un modo analogo per il problema sopra indicato. Forse avrei dovuto includere un esempio.
Imago,

1
@AntonTrunov devi aggiungere qualche parentesi alla tua Axiom peirce: così com'è non è la legge di Peirce (ed è in effetti trivialda provare).
gallais,

@gallais Grazie per averlo individuato! Fisso.
Anton Trunov,

6

Come altri ti hanno informato, la tua tautologia non è una tautologia a meno che tu non assuma la logica classica. Ma dal momento che stai facendo tautologie su valori di verità decidibili, potresti usare boolinvece di Prop. Quindi la tua tautologia contiene:

Require Import Bool.

Lemma how_about_bool: forall (p : bool), Is_true (p || negb p).
Proof.
  now intros [|].
Qed.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.