Library ZornsLemma.DecidableDec
Require Import Description.
Lemma exclusive_dec: ∀ P Q:Prop, ~(P ∧ Q) →
(P ∨ Q) → {P} + {Q}.
Proof.
intros.
assert ({x:bool | if x then P else Q}).
apply constructive_definite_description.
case H0.
∃ true.
red; split.
assumption.
destruct x'.
reflexivity.
tauto.
∃ false.
red; split.
assumption.
destruct x'.
tauto.
reflexivity.
destruct H1.
destruct x.
left.
assumption.
right.
assumption.
Qed.
Lemma decidable_dec: ∀ P:Prop, P ∨ ¬P → {P} + {¬P}.
Proof.
intros.
apply exclusive_dec.
tauto.
assumption.
Qed.
Require Import Classical.
Lemma classic_dec: ∀ P:Prop, {P} + {¬P}.
Proof.
intro P.
apply decidable_dec.
apply classic.
Qed.
Lemma exclusive_dec: ∀ P Q:Prop, ~(P ∧ Q) →
(P ∨ Q) → {P} + {Q}.
Proof.
intros.
assert ({x:bool | if x then P else Q}).
apply constructive_definite_description.
case H0.
∃ true.
red; split.
assumption.
destruct x'.
reflexivity.
tauto.
∃ false.
red; split.
assumption.
destruct x'.
tauto.
reflexivity.
destruct H1.
destruct x.
left.
assumption.
right.
assumption.
Qed.
Lemma decidable_dec: ∀ P:Prop, P ∨ ¬P → {P} + {¬P}.
Proof.
intros.
apply exclusive_dec.
tauto.
assumption.
Qed.
Require Import Classical.
Lemma classic_dec: ∀ P:Prop, {P} + {¬P}.
Proof.
intro P.
apply decidable_dec.
apply classic.
Qed.
