pi/src/Tests.idr

48 lines
1.3 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.Nat
import Data.Fin
import Data.Vect
%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
term1 : Term 0 []
term1 = TLam (TLam (TApp (TVar 1) (TVar 0)))
term2 : Term 0 []
term2 = TLam (TLam (TApp (TLam (TApp (TVar 2) (TVar 0))) (TVar 0)))
action : PI Bool
action = do
x <- eval ctx0 term1
y <- eval ctx0 term2
convert x y