{-# OPTIONS --safe --without-K #-}
module Canon.Ref where
open import Data.Product
open import Data.List
open import Data.Vec
open import Data.List.Relation.Unary.All
open import Data.List.Membership.Propositional
open import Data.List.Relation.Binary.Sublist.Propositional
open import Core
open import Signature
open import Canon
open import Level as L
module RefCanon where
data TRefShape : Set where ref : TRefShape
TRefΣ = TRefShape ▹ λ where ref → 1
ref′ : ⦃ TRefΣ ≼ σ ⦄ → (t : μ σ) → μ σ
ref′ t = inject (ref , L.lift (t ∷ []))
open Algebra
ReferenceVal : Values Sto TRefΣ
alg (out ReferenceVal) (ref , lift ((t , _) ∷ [])) Σ = value t ∈ Σ
refCanon : ICanon Sto
ICanon.ity refCanon = TRefΣ
ICanon.ival refCanon = ReferenceVal
open RefCanon public