« Home

單位乘法通用化 [ag-4AP1]

用 Agda 實現單位正確的算術*-unit 其實可以進一步通用化,我們只關心拿來當單位的類型是不是有可判定的相等,所以程式可以寫成

{-# OPTIONS --safe --without-K #-}
module ag-4AP1 where

open import MLTT.Spartan hiding (_+_)
open import MLTT.List
open import MGS.MLTT using (has-decidable-equality)
open import Integers.Type
open import Integers.Addition
open import ag-OW40
generalized-_-unit : {A : 𝓤 ̇ }
   has-decidable-equality A
   List (A × )  List (A × )  List (A × )
generalized-_-unit {_}{A} dec us₁ us₂ = foldr step us₁ us₂
  where
  step : A ×   List (A × )  List (A × )
  step (u , n) [] = (u , n)  []
  step (u , n) ((v , m)  xs) with dec u v
  ... | inr _ = (v , m)  step (u , n) xs
  ... | inl _ with ℤ-≟ (n + m) (pos 0)
  ...   | inl _ = xs
  ...   | inr _ = (u , n + m)  xs