Atualmente, tenho que aprender Coq e não sei como lidar com or
:
Como exemplo, por mais simples que seja, não vejo como provar:
Theorem T0: x \/ ~x.
Eu realmente aprecio isso, se alguém puder me ajudar.
Para referência, eu uso esta folha de dicas .
Também um exemplo de uma prova que tenho em mente: Aqui para dupla negação:
Require Import Classical_Prop.
Parameters x: Prop.
Theorem T7: (~~x) -> x.
intro H.
apply NNPP.
exact H.
Qed.
NNPP
O tipo éforall p:Prop, ~ ~ p -> p.
, então é trapaceiro usá-lo para provarT7
. Quando você importa,Classical_Prop
você recebeAxiom classic : forall P:Prop, P \/ ~ P.
apply classic.
resolve seu objetivoT0
.Respostas:
Você não pode provar isso em Coq "baunilha", porque é baseado na lógica intuicionista :
Existem várias maneiras de lidar com uma situação como essa.
Introduzir a lei do meio excluído como um axioma:
Não há mais necessidade de provar nada após esse ponto.
Introduzir algum axioma equivalente à lei do meio excluído e provar sua equivalência. Aqui estão apenas alguns exemplos.
A eliminação da dupla negação é um desses axiomas:
A lei de Peirce é outro exemplo:
Ou use uma das leis de De Morgan :
fonte
Axiom peirce
: do jeito que está, não é a lei de Peirce (e de fato étrivial
para provar).Como outros informaram, sua tautologia não é uma tautologia, a menos que você assuma a lógica clássica. Mas como você está praticando tautologias sobre valores de verdade decidíveis, você pode usar em
bool
vez deProp
. Então sua tautologia vale:fonte