{-# OPTIONS --rewriting #-}
module Reflect3 where
import DS
import DSK
import CPS
import Reflect3a
import Reflect3b
open import DS-DSK
open import DSK-DS
open import DSK-CPS
open import CPS-DSK
open import TypeIsos
open import Data.Unit
open import Data.Empty
open import Data.Product
open import Function
open import Relation.Binary.PropositionalEquality
correctE : {var : Set} → {Δ : CPS.Delta} → {Θ : CPS.Theta} →
{e e' : DS.term[ var ]} →
(ΔΘ : CPS.Delta-Theta Δ Θ) →
{c : CPS.cont[ var , Δ ]} →
{m : CPS.mcont[ var , Θ ]} →
DS.Reduce e e' →
CPS.Reduce {var}
(cpskE (knE (dskΔΘ ΔΘ) e (dskC c) (dskM m)))
(cpskE (knE (dskΔΘ ΔΘ) e' (dskC c) (dskM m)))
correctE ΔΘ red = Reflect3b.correctE (Reflect3a.correctE (dskΔΘ ΔΘ) red)