module Data.Binary.Addition where open import Data.Binary.Definition open import Data.Binary.Increment 1+[_+_] : 𝔹 → 𝔹 → 𝔹 2+[_+_] : 𝔹 → 𝔹 → 𝔹 1+[ 0ᵇ + ys ] = inc ys 1+[ 1ᵇ xs + 0ᵇ ] = 2ᵇ xs 1+[ 2ᵇ xs + 0ᵇ ] = 1ᵇ inc xs 1+[ 1ᵇ xs + 1ᵇ ys ] = 1ᵇ 1+[ xs + ys ] 1+[ 1ᵇ xs + 2ᵇ ys ] = 2ᵇ 1+[ xs + ys ] 1+[ 2ᵇ xs + 1ᵇ ys ] = 2ᵇ 1+[ xs + ys ] 1+[ 2ᵇ xs + 2ᵇ ys ] = 1ᵇ 2+[ xs + ys ] 2+[ 0ᵇ + 0ᵇ ] = 2ᵇ 0ᵇ 2+[ 0ᵇ + 1ᵇ ys ] = 1ᵇ inc ys 2+[ 0ᵇ + 2ᵇ ys ] = 2ᵇ inc ys 2+[ 1ᵇ xs + 0ᵇ ] = 1ᵇ inc xs 2+[ 2ᵇ xs + 0ᵇ ] = 2ᵇ inc xs 2+[ 1ᵇ xs + 1ᵇ ys ] = 2ᵇ 1+[ xs + ys ] 2+[ 1ᵇ xs + 2ᵇ ys ] = 1ᵇ 2+[ xs + ys ] 2+[ 2ᵇ xs + 1ᵇ ys ] = 1ᵇ 2+[ xs + ys ] 2+[ 2ᵇ xs + 2ᵇ ys ] = 2ᵇ 2+[ xs + ys ] infixl 6 _+_ _+_ : 𝔹 → 𝔹 → 𝔹 0ᵇ + ys = ys 1ᵇ xs + 0ᵇ = 1ᵇ xs 2ᵇ xs + 0ᵇ = 2ᵇ xs 1ᵇ xs + 1ᵇ ys = 2ᵇ (xs + ys) 1ᵇ xs + 2ᵇ ys = 1ᵇ 1+[ xs + ys ] 2ᵇ xs + 1ᵇ ys = 1ᵇ 1+[ xs + ys ] 2ᵇ xs + 2ᵇ ys = 2ᵇ 1+[ xs + ys ]