123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117-------------------------------------------------------------------------- The Agda standard library---- Parity------------------------------------------------------------------------ {-# OPTIONS --cubical-compatible --safe #-} module Data.Parity.Base where open import Algebra.Bundles.Raw using (RawMagma; RawMonoid; RawGroup; RawNearSemiring; RawSemiring)open import Data.Sign.Base using (Sign; +; -)open import Level using (0ℓ)open import Relation.Binary.PropositionalEquality.Core using (_≡_) -------------------------------------------------------------------------- Definition data Parity : Set where 0ℙ : Parity 1ℙ : Parity -------------------------------------------------------------------------- Operations -- The opposite parity. infix 8 _⁻¹ _⁻¹ : Parity → Parity1ℙ ⁻¹ = 0ℙ0ℙ ⁻¹ = 1ℙ -- Addition. infixl 7 _+_ _+_ : Parity → Parity → Parity0ℙ + p = p1ℙ + p = p ⁻¹ -- Multiplication. infixl 7 _*_ _*_ : Parity → Parity → Parity0ℙ * p = 0ℙ1ℙ * p = p -------------------------------------------------------------------------- Raw Bundles +-rawMagma : RawMagma 0ℓ 0ℓ+-rawMagma = record { _≈_ = _≡_ ; _∙_ = _+_ } +-0-rawMonoid : RawMonoid 0ℓ 0ℓ+-0-rawMonoid = record { _≈_ = _≡_ ; _∙_ = _+_ ; ε = 0ℙ } +-0-rawGroup : RawGroup 0ℓ 0ℓ+-0-rawGroup = record { _≈_ = _≡_ ; _∙_ = _+_ ; _⁻¹ = _⁻¹ ; ε = 0ℙ } *-rawMagma : RawMagma 0ℓ 0ℓ*-rawMagma = record { _≈_ = _≡_ ; _∙_ = _*_ } *-1-rawMonoid : RawMonoid 0ℓ 0ℓ*-1-rawMonoid = record { _≈_ = _≡_ ; _∙_ = _*_ ; ε = 1ℙ } +-*-rawNearSemiring : RawNearSemiring 0ℓ 0ℓ+-*-rawNearSemiring = record { Carrier = _ ; _≈_ = _≡_ ; _+_ = _+_ ; _*_ = _*_ ; 0# = 0ℙ } +-*-rawSemiring : RawSemiring 0ℓ 0ℓ+-*-rawSemiring = record { Carrier = _ ; _≈_ = _≡_ ; _+_ = _+_ ; _*_ = _*_ ; 0# = 0ℙ ; 1# = 1ℙ } -------------------------------------------------------------------------- Homomorphisms between Parity and Sign toSign : Parity → SigntoSign 0ℙ = +toSign 1ℙ = - fromSign : Sign → ParityfromSign + = 0ℙfromSign - = 1ℙ