{-# OPTIONS --cubical-compatible --safe #-}
module Reflection.AST.Meta where
import Data.Nat.Properties as ℕₚ
open import Function.Base using (_on_)
open import Relation.Nullary.Decidable.Core using (map′)
open import Relation.Binary.Core using (Rel)
open import Relation.Binary.Definitions using (Decidable; DecidableEquality)
import Relation.Binary.Construct.On as On
open import Relation.Binary.PropositionalEquality.Core using (_≡_; cong)
open import Agda.Builtin.Reflection public
using (Meta) renaming (primMetaToNat to toℕ; primMetaEquality to _≡ᵇ_)
open import Agda.Builtin.Reflection.Properties public
renaming (primMetaToNatInjective to toℕ-injective)
infix 4 _≈?_ _≟_ _≈_
_≈_ : Rel Meta _
_≈_ = _≡_ on toℕ
_≈?_ : Decidable _≈_
_≈?_ = On.decidable toℕ _≡_ ℕₚ._≟_
_≟_ : DecidableEquality Meta
m ≟ n = map′ (toℕ-injective _ _) (cong toℕ) (m ≈? n)