{-# OPTIONS --safe #-}
module Data.Bool.Properties where
open import Data.Bool
open import Decidable
open import Path
open import Data.Unit
open import HLevels
open import Data.Empty.Properties
open import Data.Unit.Properties
discreteBool : Discrete Bool
discreteBool = from-bool-eq
record { _≡ᴮ_ = bool′ ! (λ x → x)
; sound = λ { false false p → refl ; true true p → refl }
; complete = λ { false → tt ; true → tt }
}
isSetBool : isSet Bool
isSetBool = Discrete→isSet discreteBool
isPropT : ∀ b → isProp (T b)
isPropT false = isProp⊥
isPropT true = isProp⊤
open import Data.Empty
false≢true : false ≢ true
false≢true p = subst (bool ⊤ ⊥) p tt
true≢false : true ≢ false
true≢false p = subst (bool ⊥ ⊤) p tt
open import Level
open import Isomorphism
open import Data.Sigma
Bool→⇔× : (Bool → A) ⇔ (A × A)
Bool→⇔× .fun f = f false , f true
Bool→⇔× .inv (x , y) false = x
Bool→⇔× .inv (x , y) true = y
Bool→⇔× .rightInv _ = refl
Bool→⇔× .leftInv f i false = f false
Bool→⇔× .leftInv f i true = f true
||-assoc : (x y z : Bool) → (x || y) || z ≡ x || (y || z)
||-assoc false y z = refl
||-assoc true y z = refl
||-idʳ : ∀ x → x || false ≡ x
||-idʳ false = refl
||-idʳ true = refl
||-annʳ : ∀ x → x || true ≡ true
||-annʳ false = refl
||-annʳ true = refl
||-comm : (x y : Bool) → x || y ≡ y || x
||-comm false y = sym (||-idʳ y)
||-comm true y = sym (||-annʳ y)
||-idem : ∀ x → x || x ≡ x
||-idem false = refl
||-idem true = refl
&&-assoc : (x y z : Bool) → (x && y) && z ≡ x && (y && z)
&&-assoc false y z = refl
&&-assoc true y z = refl
&&-idʳ : ∀ x → x && true ≡ x
&&-idʳ false = refl
&&-idʳ true = refl
&&-annʳ : ∀ x → x && false ≡ false
&&-annʳ false = refl
&&-annʳ true = refl
&&-comm : (x y : Bool) → x && y ≡ y && x
&&-comm false y = sym (&&-annʳ y)
&&-comm true y = sym (&&-idʳ y)
&&-idem : ∀ x → x && x ≡ x
&&-idem false = refl
&&-idem true = refl