ULC.Checks
{-# 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.Semantics
open import Relation.Binary.PropositionalEquality using (refl)
open Inverse using (inverseˡ; inverseʳ)
to-from-elim : ∀ {f} → to (from f) ≡ f
to-from-elim = inverseˡ iso refl
from-to-elim : ∀ {d} → from (to d) ≡ d
from-to-elim = inverseʳ iso refl
{-# REWRITE to-from-elim #-}
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