83 lines
2.6 KiB
Idris
83 lines
2.6 KiB
Idris
module Tests
|
|
|
|
import Term
|
|
import Check
|
|
import Convert
|
|
import Misc
|
|
import Normalize
|
|
import Value
|
|
|
|
import Control.Monad.RWS
|
|
import Control.Monad.Identity
|
|
import Control.Monad.Either
|
|
|
|
import Data.Fin
|
|
|
|
%default total
|
|
|
|
{- λA. λx. x : ∏ (A : Type) → A → A -}
|
|
test_id : Either String (Bool, List String)
|
|
test_id = typecheck (TLam (TLam (TVar 0)))
|
|
(TPi TType (TPi (TVar 0) (TVar 1)))
|
|
|
|
{- λA. λB. λf. λx. f x : ∏ (A : Type) ∏ (B : A → Type) ∏ (f : ∏ (x : A) B x) ∏ (x : A) B x -}
|
|
test_app : Either String (Bool, List String)
|
|
test_app = typecheck (TLam (TLam (TLam (TLam (TApp (TVar 1) (TVar 0))))))
|
|
(TPi TType
|
|
(TPi (TPi (TVar 0) TType)
|
|
(TPi (TPi (TVar 1) (TApp (TVar 1) (TVar 0)))
|
|
(TPi (TVar 2) (TApp (TVar 2) (TVar 0))))))
|
|
|
|
{- λf. λx. f x ≃ λf. λx. (λy. f y) x -}
|
|
eta_test : Either String (Bool, List String)
|
|
eta_test = resolve action
|
|
where
|
|
action : PI Bool
|
|
action = do
|
|
x <- eval ctx0 (TLam (TLam (TApp (TVar 1) (TVar 0))))
|
|
y <- eval ctx0 (TLam (TLam (TApp (TLam (TApp (TVar 2) (TVar 0))) (TVar 0))))
|
|
convert x y
|
|
|
|
addition : Term 0
|
|
addition = TNatInd (TLam (TPi TNat TNat))
|
|
(TLam (TVar 0))
|
|
(TLam {-n-} (TLam {-n+-} (TLam {-m-} (TSuc (TApp (TVar 1) (TVar 0))))))
|
|
|
|
addition_type : Either String (Bool, List String)
|
|
addition_type = typecheck addition (TPi TNat (TPi TNat TNat))
|
|
|
|
{- 2 + 1 = 3 -}
|
|
add_test : Either String (Bool, List String)
|
|
add_test = resolve action
|
|
where
|
|
action : PI Bool
|
|
action = do
|
|
x <- eval ctx0 (addition `TApp` TSuc (TSuc TZero) `TApp` TSuc TZero)
|
|
y <- eval ctx0 (TSuc (TSuc (TSuc TZero)))
|
|
convert x y
|
|
|
|
multi : Term 0
|
|
multi = TNatInd (TLam (TPi TNat TNat))
|
|
(TLam TZero)
|
|
(TLam {-n-} (TLam {-n*-} (TLam {-m-} (weakTr3 addition `TApp` TVar 0 `TApp` (TVar 1 `TApp` TVar 0)))))
|
|
|
|
multi_type : Either String (Bool, List String)
|
|
multi_type = typecheck multi (TPi TNat (TPi TNat TNat))
|
|
|
|
{- 2 * 3 = 6 -}
|
|
multi_test : Either String (Bool, List String)
|
|
multi_test = resolve action
|
|
where
|
|
action : PI Bool
|
|
action = do
|
|
x <- eval ctx0 (multi `TApp` TSuc (TSuc TZero) `TApp` TSuc (TSuc (TSuc TZero)))
|
|
y <- eval ctx0 (TSuc (TSuc (TSuc (TSuc (TSuc (TSuc TZero))))))
|
|
convert x y
|
|
|
|
-- no, not that kind
|
|
unit_test : Either String (Bool, List String)
|
|
unit_test = typecheck TStar TTop
|
|
|
|
absurd_test : Either String (Bool, List String)
|
|
absurd_test = typecheck (TLam (TBotInd (TLam (TVar 1)))) (TPi TType (TPi TBot (TVar 1)))
|