module Data.Bool.Base where
true≠false : ¬ true ≡ false
true≠false p = subst P p tt where
  P : Bool  Type
  P false =
  P true =
not : Bool  Bool
not true = false
not false = true

and or : Bool  Bool  Bool
and false y = false
and true y = y

or false y = y
or true y = true
instance
  Discrete-Bool : Discrete Bool
  Discrete-Bool {false} {false} = yes refl
  Discrete-Bool {false} {true}  = no false≠true
  Discrete-Bool {true}  {false} = no true≠false
  Discrete-Bool {true}  {true}  = yes refl
x≠true→x≡false : (x : Bool)  x ≠ true  x ≡ false
x≠true→x≡false false p = refl
x≠true→x≡false true p = absurd (p refl)

x≠false→x≡true : (x : Bool)  x ≠ false  x ≡ true
x≠false→x≡true false p = absurd (p refl)
x≠false→x≡true true p = refl
is-true : Bool  Type
is-true true  =
is-true false =

record So (b : Bool) : Type where
  field
    is-so : is-true b

pattern oh = record { is-so = tt }