123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108-------------------------------------------------------------------------- The Agda standard library---- Properties of operations on machine words------------------------------------------------------------------------ {-# OPTIONS --cubical-compatible --safe #-} module Data.Word64.Properties where import Data.Nat.Base as ℕopen import Data.Bool.Base using (Bool)open import Data.Word64.Base using (_≈_; toℕ; Word64; _<_)import Data.Nat.Properties as ℕopen import Relation.Nullary.Decidable.Core using (map′; ⌊_⌋)open import Relation.Binary using ( _⇒_; Reflexive; Symmetric; Transitive; Substitutive ; Decidable; DecidableEquality; IsEquivalence; IsDecEquivalence ; Setoid; DecSetoid; StrictTotalOrder)import Relation.Binary.Construct.On as Onopen import Relation.Binary.PropositionalEquality.Core using (_≡_; refl; cong; sym; trans; subst)open import Relation.Binary.PropositionalEquality.Properties using (setoid; decSetoid) -------------------------------------------------------------------------- Primitive properties open import Agda.Builtin.Word.Properties renaming (primWord64ToNatInjective to toℕ-injective) public -------------------------------------------------------------------------- Properties of _≈_ ≈⇒≡ : _≈_ ⇒ _≡_≈⇒≡ = toℕ-injective _ _ ≈-reflexive : _≡_ ⇒ _≈_≈-reflexive = cong toℕ ≈-refl : Reflexive _≈_≈-refl = refl ≈-sym : Symmetric _≈_≈-sym = sym ≈-trans : Transitive _≈_≈-trans = trans ≈-subst : ∀ {ℓ} → Substitutive _≈_ ℓ≈-subst P x≈y p = subst P (≈⇒≡ x≈y) p infix 4 _≈?__≈?_ : Decidable _≈_x ≈? y = toℕ x ℕ.≟ toℕ y ≈-isEquivalence : IsEquivalence _≈_≈-isEquivalence = record { refl = λ {i} → ≈-refl {i} ; sym = λ {i j} → ≈-sym {i} {j} ; trans = λ {i j k} → ≈-trans {i} {j} {k} } ≈-setoid : Setoid _ _≈-setoid = record { isEquivalence = ≈-isEquivalence } ≈-isDecEquivalence : IsDecEquivalence _≈_≈-isDecEquivalence = record { isEquivalence = ≈-isEquivalence ; _≟_ = _≈?_ } ≈-decSetoid : DecSetoid _ _≈-decSetoid = record { isDecEquivalence = ≈-isDecEquivalence }-------------------------------------------------------------------------- Properties of _≡_ infix 4 _≟__≟_ : DecidableEquality Word64x ≟ y = map′ ≈⇒≡ ≈-reflexive (x ≈? y) ≡-setoid : Setoid _ _≡-setoid = setoid Word64 ≡-decSetoid : DecSetoid _ _≡-decSetoid = decSetoid _≟_ -------------------------------------------------------------------------- Boolean equality test. infix 4 _==__==_ : Word64 → Word64 → Boolw₁ == w₂ = ⌊ w₁ ≟ w₂ ⌋ -------------------------------------------------------------------------- Properties of _<_ infix 4 _<?__<?_ : Decidable _<__<?_ = On.decidable toℕ ℕ._<_ ℕ._<?_ <-strictTotalOrder-≈ : StrictTotalOrder _ _ _<-strictTotalOrder-≈ = On.strictTotalOrder ℕ.<-strictTotalOrder toℕ