{-# OPTIONS --safe --sized-types #-}
module Generic.Semantics.Elaboration.LetBinders where
open import Size
open import Data.Product
open import Function
open import Relation.Unary
open import Relation.Binary.PropositionalEquality
open import Data.Environment
open import Generic.Syntax
open import Generic.Syntax.LetBinders
open import Generic.Semantics
open import Generic.Semantics.Syntactic
module _ {I : Set} {d : Desc I} where
private
variable
σ : I
i : Size
UnLets : Semantics (d `+ Lets) (Tm d _) (Tm d _)
Semantics.th^𝓥 UnLets = th^Tm
Semantics.var UnLets = id
Semantics.alg UnLets = case (Semantics.alg Sub) $ λ where
((Δ , σ) , est) → case unXs Δ est of λ where
(es , t , refl) → t $$ es
unLets : ∀[ Tm (d `+ Lets) i σ ⇒ Tm d _ σ ]
unLets = Semantics.semantics UnLets id^Tm