ULC.Checks
\begin{code}
{-# OPTIONS --rewriting --confluence-check #-}
open import Agda.Builtin.Equality
open import Agda.Builtin.Equality.Rewrite
module ULC.Checks where
open import ULC.Domains
open import ULC.Variables
open import ULC.Terms
open import ULC.Environments
open import ULC.Semantics
open Inverse using (inverseˡ; inverseʳ)
to-from : (f : D∞ → D∞) → to (from f) ≡ f
from-to : (d : D∞) → from (to d) ≡ d
to-from f = inverseˡ iso refl
from-to f = inverseʳ iso refl
{-# REWRITE to-from from-to #-}
check-id :
⟦ app (lam (x 1) (var x 1))
(var x 42) ⟧ ≡ ⟦ var x 42 ⟧
check-id = refl
check-const :
⟦ app (lam (x 1) (var x 42))
(var x 0) ⟧ ≡ ⟦ var x 42 ⟧
check-const = refl
check-convergence :
⟦ app (lam (x 1) (var x 42))
(app (lam (x 0) (app (var x 0) (var x 0)))
(lam (x 0) (app (var x 0) (var x 0)))) ⟧
≡ ⟦ var x 42 ⟧
check-convergence = refl
check-abs :
⟦ app (lam (x 1) (var x 1))
(lam (x 1) (var x 42)) ⟧
≡ ⟦ lam (x 2) (var x 42) ⟧
check-abs = refl
check-free :
⟦ app (lam (x 1)
(app (lam (x 42) (var x 1))
(var x 2)))
(var x 42) ⟧ ≡ ⟦ var x 42 ⟧
check-free = refl
\end{code}