Obecnie muszę się nauczyć Coq i nie wiem, jak sobie radzić z or
:
Jako przykład, choć jest to tak proste, nie widzę, jak udowodnić:
Theorem T0: x \/ ~x.
Byłbym bardzo wdzięczny, gdyby ktoś mógł mi pomóc.
Dla porównania używam tego ściągawki .
Mam też przykład dowodu, który mam na myśli: tutaj dla podwójnej negacji:
Require Import Classical_Prop.
Parameters x: Prop.
Theorem T7: (~~x) -> x.
intro H.
apply NNPP.
exact H.
Qed.
NNPP
jest typforall p:Prop, ~ ~ p -> p.
, więc oszustwo polega na tym, żeby to udowodnićT7
. Podczas importuClassical_Prop
otrzymujeszAxiom classic : forall P:Prop, P \/ ~ P.
apply classic.
rozwiązuje twój celT0
.Odpowiedzi:
Nie można tego udowodnić w „waniliowym” Coq, ponieważ opiera się na intuicyjnej logice :
Istnieje kilka sposobów poradzenia sobie z taką sytuacją.
Wprowadź prawo wykluczonego środka jako aksjomat:
Po tym punkcie nie trzeba już niczego udowadniać.
Wprowadź pewien aksjomat równoważny prawu wykluczonego środka i udowodnij ich równoważność. Oto tylko kilka przykładów.
Eliminacja podwójnej negacji jest jednym z takich aksjomatów:
Prawo Peirce'a to kolejny przykład:
Lub skorzystaj z jednego z praw De Morgana :
źródło
Axiom peirce
: w tej chwili nie jest to prawo Peirce'a (i faktycznie matrivial
to udowodnić).Jak poinformowali cię inni, twoja tautologia nie jest tautologią, chyba że przyjmiesz logikę klasyczną. Ale ponieważ robisz tautologie dotyczące rozstrzygających wartości prawdy, możesz użyć
bool
zamiast tegoProp
. Zatem twoja tautologia obejmuje:źródło