feat(library/logic/classes/decidable): generalize 'by_cases' theorem

This commit is contained in:
Leonardo de Moura 2014-09-08 00:16:20 -07:00
parent fa25ddc8e6
commit 35e68fea76
3 changed files with 5 additions and 7 deletions

View file

@ -11,7 +11,7 @@ import logic data.num tools.tactic struc.binary tools.helper_tactics
import logic.classes.inhabited
open tactic binary eq_ops
open decidable (hiding induction_on rec_on)
open decidable
open relation -- for subst_iff
open helper_tactics
@ -117,8 +117,7 @@ have general : ∀n, decidable (n = m), from
take n, rec_on n
(inr (ne.symm succ_ne_zero))
(λ (n' : ) (iH2 : decidable (n' = succ m')),
have d1 : decidable (n' = m'), from iH1 n',
decidable.rec_on d1
decidable.by_cases
(assume Heq : n' = m', inl (congr_arg succ Heq))
(assume Hne : n' ≠ m',
have H1 : succ n' ≠ succ m', from

View file

@ -241,8 +241,7 @@ have general : ∀n, decidable (n ≤ m), from
rec_on n
(decidable.inl zero_le)
(take (n' : ) (iH2 : decidable (n' ≤ succ m')),
have d1 : decidable (n' ≤ m'), from iH1 n',
decidable.rec_on d1
decidable.by_cases
(assume Hp : n' ≤ m', decidable.inl (succ_le Hp))
(assume Hn : ¬ n' ≤ m',
have H : ¬ succ n' ≤ succ m', from

View file

@ -38,8 +38,8 @@ decidable.rec
theorem em (p : Prop) {H : decidable p} : p ¬p :=
induction_on H (λ Hp, or.inl Hp) (λ Hnp, or.inr Hnp)
theorem by_cases {a b : Prop} {C : decidable a} (Hab : a → b) (Hnab : ¬a → b) : b :=
or.elim (em a) (assume Ha, Hab Ha) (assume Hna, Hnab Hna)
theorem by_cases {a : Prop} {b : Type} {C : decidable a} (Hab : a → b) (Hnab : ¬a → b) : b :=
rec_on C (assume Ha, Hab Ha) (assume Hna, Hnab Hna)
theorem by_contradiction {p : Prop} {Hp : decidable p} (H : ¬p → false) : p :=
or.elim (em p)