module Memory.Addr where
open import Data.Nat
open import Relation.Nullary using (¬_; Dec; yes; no)
open import Relation.Nullary.Negation using (contradiction)
open import Relation.Binary.PropositionalEquality using (_≡_; refl)
open import Function using (case_of_)
open import Common.SecurityLabels
RawAddr = ℕ
data Addr : Set where
a⟦_⟧_ : StaticLabel → RawAddr → Addr
addr-eq? : ∀ (a₁ a₂ : Addr) → Dec (a₁ ≡ a₂)
addr-eq? (a⟦ ℓ̂₁ ⟧ n₁) (a⟦ ℓ̂₂ ⟧ n₂) =
case ℓ̂₁ =? ℓ̂₂ of λ where
(yes refl) →
case n₁ ≟ n₂ of λ where
(yes refl) → yes refl
(no neq) → no λ { refl → contradiction refl neq }
(no neq) → no λ { refl → contradiction refl neq }