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}