{-# OPTIONS --allow-unsolved-metas #-}
open import Relation.Binary using (Decidable)
open import Relation.Binary.PropositionalEquality using (_≡_)
module dtres
{{ Α : Set }}
{{ C : Set }}
{{ Var : Set }}
{{ decEqVar : Decidable (_≡_ {A = Var}) }}
{{ Κ : Set }}
where
import SyntaxRew
open SyntaxRew
{{ Α }}
{{ C }}
{{ Var }}
{{ decEqVar }}
{{ Κ }}
using (Sig ; Prog ; Ctx ; PT ; Go ; go ; inMT ; · )
import BigSem
open BigSem
{{ Α }}
{{ C }}
{{ Var }}
{{ decEqVar }}
{{ Κ }}
using ( _+_⟶_∷_ )
import SmlSem
open SmlSem
{{ Α }}
{{ C }}
{{ Var }}
{{ decEqVar }}
{{ Κ }}
using ( _+_⊢_∣_~>_∣_ ; ∀gen )
import LogRel.Gen
open LogRel.Gen
{{ Α }}
{{ C }}
{{ Var }}
{{ decEqVar }}
{{ Κ }}
using ( log-gen )
import Fundamental
open Fundamental
{{ Α }}
{{ C }}
{{ Var }}
{{ decEqVar }}
{{ Κ }}
using ( fundamental )
import Escape
open Escape
{{ Α }}
{{ C }}
{{ Var }}
{{ decEqVar }}
{{ Κ }}
using ( escape )
sound : {S : Sig} {P : Prog} {Γ : Ctx} {e : PT} {G : Go} →
S + P ⊢ Γ ∣ (go G) ~> · ∣ (inMT e) →
S + P ⟶ e ∷ G
sound sml = escape (fundamental sml)
gensound : {S : Sig} {P : Prog} {Γ Γ' : Ctx} {e : PT} {G : Go} →
S + P ⊢ Γ ∣ (go G) ~> Γ' ∣ (inMT e) →
S + P ⟶ e ∷ (∀gen Γ' G)
gensound sml = escape (log-gen (fundamental sml))