Andrew Sneap, 17 February 2022

\begin{code}

{-# OPTIONS --safe --without-K #-}

open import MLTT.Spartan renaming (_+_ to _∔_)
open import Dyadics.Type
open import Integers.Type
open import Integers.Multiplication
open import Integers.Negation renaming (-_ to ℤ-_)
open import Naturals.Exponentiation

module Dyadics.Negation where

-_ : ℤ[1/2]  ℤ[1/2]
- ((z , n) , _) = normalise-pos (ℤ- z , n)

infix 31 -_

ℤ[1/2]-minus-zero : - 0ℤ[1/2]  0ℤ[1/2]
ℤ[1/2]-minus-zero = refl

minus-normalise-pos : (p : ) (a : )
                     - normalise-pos (p , a)  normalise-pos (ℤ- p , a)
minus-normalise-pos p a = γ
 where
  p' = (pr₁  pr₁) (normalise-pos (p , a))
  a' = (pr₂  pr₁) (normalise-pos (p , a))
  α = pr₂ (normalise-pos (p , a))

  I : (p , a) ≈' (p' , a')
  I = ≈'-normalise-pos (p , a)

  II : (ℤ- p' , a') ≈' (ℤ- p , a)
  II = (ℤ- p') * pos (2^ a)  =⟨ negation-dist-over-mult' p' (pos (2^ a)) 
        ℤ- p' * pos (2^ a)   =⟨ ap ℤ-_ (I ⁻¹) 
        ℤ- p * pos (2^ a')   =⟨ negation-dist-over-mult' p (pos (2^ a')) ⁻¹ 
        (ℤ- p) * pos (2^ a') 

  γ : - normalise-pos (p , a)  normalise-pos (ℤ- p , a)
  γ = - normalise-pos (p , a)    =⟨ refl 
      - ((p' , a') , α)          =⟨ refl 
      normalise-pos (ℤ- p' , a') =⟨ ≈'-to-= (ℤ- p' , a') (ℤ- p , a) II 
      normalise-pos (ℤ- p , a)   

ℤ[1/2]-minus-minus : (p : ℤ[1/2])  p  - (- p)
ℤ[1/2]-minus-minus ((z , n) , α) = γ
 where
  I : (z , n) , α  normalise-pos (z , n)
  I = ≈-normalise-pos ((z , n) , α)

  γ : (z , n) , α  - (- ((z , n) , α))
  γ = (z , n) , α                   =⟨ i    
      normalise-pos (z , n)         =⟨ ii   
      normalise-pos (ℤ- (ℤ- z) , n) =⟨ iii  
      - normalise-pos (ℤ- z , n)    =⟨ refl 
      - (- ((z , n) , α))           
   where
    i   = ≈-to-= ((z , n) , α) (normalise-pos (z , n)) I
    ii  = ap  -  normalise-pos (- , n)) (minus-minus-is-plus z ⁻¹)
    iii = minus-normalise-pos (ℤ- z) n ⁻¹

\end{code}