{-# OPTIONS --cubical --safe #-}
module Data.Bits.Equatable where
open import Data.Bits
open import Prelude
_≡ᴮ_ : Bits → Bits → Bool
[] ≡ᴮ [] = true
(0∷ xs) ≡ᴮ (0∷ ys) = xs ≡ᴮ ys
(1∷ xs) ≡ᴮ (1∷ ys) = xs ≡ᴮ ys
_ ≡ᴮ _ = false
open import Relation.Nullary.Discrete.FromBoolean
module EqBits where
sound : ∀ n m → T (n ≡ᴮ m) → n ≡ m
sound [] [] p = refl
sound (0∷ n) (0∷ m) p = cong 0∷_ (sound n m p)
sound (1∷ n) (1∷ m) p = cong 1∷_ (sound n m p)
complete : ∀ n → T (n ≡ᴮ n)
complete [] = tt
complete (0∷ n) = complete n
complete (1∷ n) = complete n
_≟_ : Discrete Bits
_≟_ = from-bool-eq record { EqBits }