module Common.Semantics where

open import Common.Context public


-- Special products for glueing.

infix 5 _⅋_
record Glue (Syn : Set) (Sem : Set) : Set where
  constructor _⅋_
  field
    syn : Syn
    sem : Sem

open Glue public


-- Contexts as concrete worlds.

module ConcreteWorlds (U : Set) where
  record World : Set where
    constructor wrap
    field
      Γ : Cx U

  unwrap : World  Cx U
  unwrap (wrap Γ) = Γ

  data _≤_ : World  World  Set where
    wrap :  {Γ Γ′}  Γ  Γ′  wrap Γ  wrap Γ′

  unwrap≤ :  {Γ Γ′}  wrap Γ  wrap Γ′  Γ  Γ′
  unwrap≤ (wrap η) = η

  refl≤ :  {w}  w  w
  refl≤ = wrap refl⊆

  trans≤ :  {w w′ w″}  w  w′  w′  w″  w  w″
  trans≤ (wrap η) (wrap η′) = wrap (trans⊆ η η′)

  weak≤ :  {A w}  w  wrap (unwrap w , A)
  weak≤ = wrap weak⊆