module Tools.Bool where
open import Data.Bool.Base
using (Bool; true; false; not; _∧_; _∨_; if_then_else_; T)
public
open import Data.Bool.Properties
using (∨-comm; ∨-assoc; ∨-identityʳ;
∧-comm; ∧-assoc; ∨-∧-absorptive;
∧-distribʳ-∨; ∧-distribˡ-∨; ∨-distribʳ-∧; ∨-distribˡ-∧;
T?)
public
import Function.Bundles as Fun
open import Tools.Empty
open import Tools.Function
open import Tools.Relation
open import Tools.Product
open import Tools.PropositionalEquality
open import Tools.Sum
private variable
b x y : Bool
T-propositional : Is-proposition (T b)
T-propositional {b = true} = refl
T-not⇔¬-T : T (not b) ⇔ (¬ T b)
T-not⇔¬-T {b = false} = (λ { _ → idᶠ }) , _
T-not⇔¬-T {b = true} = (λ ()) , (_$ _)
T⇔T : (T x ⇔ T y) ⇔ x ≡ y
T⇔T {x = false} {y = false} = (λ _ → refl) , (λ _ → id⇔)
T⇔T {x = false} {y = true} = ⊥-elim ∘→ (_$ _) ∘→ proj₂ , (λ ())
T⇔T {x = true} {y = false} = ⊥-elim ∘→ (_$ _) ∘→ proj₁ , (λ ())
T⇔T {x = true} {y = true} = (λ _ → refl) , (λ _ → id⇔)
T-∧ : T (x ∧ y) ⇔ (T x × T y)
T-∧ =
Data.Bool.Properties.T-∧ .Fun.Equivalence.to
, Data.Bool.Properties.T-∧ .Fun.Equivalence.from
T-∨ : T (x ∨ y) ⇔ (T x ⊎ T y)
T-∨ =
Data.Bool.Properties.T-∨ .Fun.Equivalence.to
, Data.Bool.Properties.T-∨ .Fun.Equivalence.from
¬-T : (¬ T b) ⇔ b ≡ false
¬-T {b = false} = (λ _ → refl) , (λ _ ())
¬-T {b = true} = ⊥-elim ∘→ (_$ _) , (λ ())
∨-positiveˡ : x ∨ y ≡ false → x ≡ false
∨-positiveˡ {x = false} _ = refl
∧-zero-product : x ∧ y ≡ false → x ≡ false ⊎ y ≡ false
∧-zero-product {x = false} _ = inj₁ refl
∧-zero-product {y = false} _ = inj₂ refl