module linear.Language.Examples where
open import Data.Fin
open import linear.Type
open import linear.Language
identity : Check 0
identity = `lam (`neu (`var zero))
swap : Check 0
swap = `lam `let (`v ,, `v) ∷= `var zero
`in `prd (`neu `var (suc zero)) (`neu `var zero)
illTyped : Check 0
illTyped = `let (`v ,, `v) ∷= `cut (`inl (`lam (`neu (`var zero)))) ((κ 0 ─o κ 0) ⊕ κ 1)
`in `prd (`neu (`var zero)) (`neu (`var (suc zero)))
diag : Check 0
diag = `lam (`prd (`neu (`var zero)) (`neu (`var zero)))
omega : Infer 0
omega = let delta = `lam (`neu (`app (`var zero) (`neu (`var zero))))
in `app (`cut delta (κ 0)) delta