52 lines
1.6 KiB
Text
52 lines
1.6 KiB
Text
/-
|
|
Copyright (c) 2015 Floris van Doorn. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Floris van Doorn
|
|
|
|
Theorems about the booleans
|
|
-/
|
|
|
|
open is_equiv eq equiv function is_trunc option unit decidable
|
|
|
|
namespace bool
|
|
|
|
definition ff_ne_tt : ff = tt → empty
|
|
| [none]
|
|
|
|
definition is_equiv_bnot [constructor] [instance] [priority 500] : is_equiv bnot :=
|
|
begin
|
|
fapply is_equiv.mk,
|
|
exact bnot,
|
|
all_goals (intro b;cases b), do 6 reflexivity
|
|
-- all_goals (focus (intro b;cases b;all_goals reflexivity)),
|
|
end
|
|
|
|
definition bnot_ne : Π(b : bool), bnot b ≠ b
|
|
| bnot_ne tt := ff_ne_tt
|
|
| bnot_ne ff := ne.symm ff_ne_tt
|
|
|
|
definition equiv_bnot [constructor] : bool ≃ bool := equiv.mk bnot _
|
|
definition eq_bnot : bool = bool := ua equiv_bnot
|
|
|
|
definition eq_bnot_ne_idp : eq_bnot ≠ idp :=
|
|
assume H : eq_bnot = idp,
|
|
assert H2 : bnot = id, from !cast_ua_fn⁻¹ ⬝ ap cast H,
|
|
absurd (ap10 H2 tt) ff_ne_tt
|
|
|
|
|
|
definition bool_equiv_option_unit : bool ≃ option unit :=
|
|
begin
|
|
fapply equiv.MK,
|
|
{ intro b, cases b, exact none, exact some star},
|
|
{ intro u, cases u, exact ff, exact tt},
|
|
{ intro u, cases u with u, reflexivity, cases u, reflexivity},
|
|
{ intro b, cases b, reflexivity, reflexivity},
|
|
end
|
|
|
|
protected definition has_decidable_eq [instance] : ∀ x y : bool, decidable (x = y)
|
|
| has_decidable_eq ff ff := inl rfl
|
|
| has_decidable_eq ff tt := inr (by contradiction)
|
|
| has_decidable_eq tt ff := inr (by contradiction)
|
|
| has_decidable_eq tt tt := inl rfl
|
|
|
|
end bool
|