rzk-0.1.0: An experimental proof assistant for synthetic ∞-categories
Safe HaskellSafe-Inferred
LanguageHaskell2010

Rzk.TypeCheck

Synopsis

Documentation

data Decl var Source #

Constructors

Decl 

Fields

data TypeError var Source #

Instances

Instances details
Foldable TypeError Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fold :: Monoid m => TypeError m -> m #

foldMap :: Monoid m => (a -> m) -> TypeError a -> m #

foldMap' :: Monoid m => (a -> m) -> TypeError a -> m #

foldr :: (a -> b -> b) -> b -> TypeError a -> b #

foldr' :: (a -> b -> b) -> b -> TypeError a -> b #

foldl :: (b -> a -> b) -> b -> TypeError a -> b #

foldl' :: (b -> a -> b) -> b -> TypeError a -> b #

foldr1 :: (a -> a -> a) -> TypeError a -> a #

foldl1 :: (a -> a -> a) -> TypeError a -> a #

toList :: TypeError a -> [a] #

null :: TypeError a -> Bool #

length :: TypeError a -> Int #

elem :: Eq a => a -> TypeError a -> Bool #

maximum :: Ord a => TypeError a -> a #

minimum :: Ord a => TypeError a -> a #

sum :: Num a => TypeError a -> a #

product :: Num a => TypeError a -> a #

Functor TypeError Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fmap :: (a -> b) -> TypeError a -> TypeError b #

(<$) :: a -> TypeError b -> TypeError a #

data TypeErrorInContext var Source #

Instances

Instances details
Foldable TypeErrorInContext Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fold :: Monoid m => TypeErrorInContext m -> m #

foldMap :: Monoid m => (a -> m) -> TypeErrorInContext a -> m #

foldMap' :: Monoid m => (a -> m) -> TypeErrorInContext a -> m #

foldr :: (a -> b -> b) -> b -> TypeErrorInContext a -> b #

foldr' :: (a -> b -> b) -> b -> TypeErrorInContext a -> b #

foldl :: (b -> a -> b) -> b -> TypeErrorInContext a -> b #

foldl' :: (b -> a -> b) -> b -> TypeErrorInContext a -> b #

foldr1 :: (a -> a -> a) -> TypeErrorInContext a -> a #

foldl1 :: (a -> a -> a) -> TypeErrorInContext a -> a #

toList :: TypeErrorInContext a -> [a] #

null :: TypeErrorInContext a -> Bool #

length :: TypeErrorInContext a -> Int #

elem :: Eq a => a -> TypeErrorInContext a -> Bool #

maximum :: Ord a => TypeErrorInContext a -> a #

minimum :: Ord a => TypeErrorInContext a -> a #

sum :: Num a => TypeErrorInContext a -> a #

product :: Num a => TypeErrorInContext a -> a #

Functor TypeErrorInContext Source # 
Instance details

Defined in Rzk.TypeCheck

data TypeErrorInScopedContext var Source #

Instances

Instances details
Foldable TypeErrorInScopedContext Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fold :: Monoid m => TypeErrorInScopedContext m -> m #

foldMap :: Monoid m => (a -> m) -> TypeErrorInScopedContext a -> m #

foldMap' :: Monoid m => (a -> m) -> TypeErrorInScopedContext a -> m #

foldr :: (a -> b -> b) -> b -> TypeErrorInScopedContext a -> b #

foldr' :: (a -> b -> b) -> b -> TypeErrorInScopedContext a -> b #

foldl :: (b -> a -> b) -> b -> TypeErrorInScopedContext a -> b #

foldl' :: (b -> a -> b) -> b -> TypeErrorInScopedContext a -> b #

foldr1 :: (a -> a -> a) -> TypeErrorInScopedContext a -> a #

foldl1 :: (a -> a -> a) -> TypeErrorInScopedContext a -> a #

toList :: TypeErrorInScopedContext a -> [a] #

null :: TypeErrorInScopedContext a -> Bool #

length :: TypeErrorInScopedContext a -> Int #

elem :: Eq a => a -> TypeErrorInScopedContext a -> Bool #

maximum :: Ord a => TypeErrorInScopedContext a -> a #

minimum :: Ord a => TypeErrorInScopedContext a -> a #

sum :: Num a => TypeErrorInScopedContext a -> a #

product :: Num a => TypeErrorInScopedContext a -> a #

Functor TypeErrorInScopedContext Source # 
Instance details

Defined in Rzk.TypeCheck

data Action var Source #

Instances

Instances details
Foldable Action Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fold :: Monoid m => Action m -> m #

foldMap :: Monoid m => (a -> m) -> Action a -> m #

foldMap' :: Monoid m => (a -> m) -> Action a -> m #

foldr :: (a -> b -> b) -> b -> Action a -> b #

foldr' :: (a -> b -> b) -> b -> Action a -> b #

foldl :: (b -> a -> b) -> b -> Action a -> b #

foldl' :: (b -> a -> b) -> b -> Action a -> b #

foldr1 :: (a -> a -> a) -> Action a -> a #

foldl1 :: (a -> a -> a) -> Action a -> a #

toList :: Action a -> [a] #

null :: Action a -> Bool #

length :: Action a -> Int #

elem :: Eq a => a -> Action a -> Bool #

maximum :: Ord a => Action a -> a #

minimum :: Ord a => Action a -> a #

sum :: Num a => Action a -> a #

product :: Num a => Action a -> a #

Functor Action Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fmap :: (a -> b) -> Action a -> Action b #

(<$) :: a -> Action b -> Action a #

ppSomeAction :: Eq var => [(var, Maybe VarIdent)] -> Int -> Action var -> String Source #

traceAction' :: Int -> Action' -> a -> a Source #

unsafeTraceAction' :: Int -> Action var -> a -> a Source #

data Verbosity Source #

Constructors

Debug 
Normal 
Silent 

Instances

Instances details
Eq Verbosity Source # 
Instance details

Defined in Rzk.TypeCheck

Ord Verbosity Source # 
Instance details

Defined in Rzk.TypeCheck

data Covariance Source #

Constructors

Covariant

Positive position.

Contravariant

Negative position

data Context var Source #

Instances

Instances details
Foldable Context Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fold :: Monoid m => Context m -> m #

foldMap :: Monoid m => (a -> m) -> Context a -> m #

foldMap' :: Monoid m => (a -> m) -> Context a -> m #

foldr :: (a -> b -> b) -> b -> Context a -> b #

foldr' :: (a -> b -> b) -> b -> Context a -> b #

foldl :: (b -> a -> b) -> b -> Context a -> b #

foldl' :: (b -> a -> b) -> b -> Context a -> b #

foldr1 :: (a -> a -> a) -> Context a -> a #

foldl1 :: (a -> a -> a) -> Context a -> a #

toList :: Context a -> [a] #

null :: Context a -> Bool #

length :: Context a -> Int #

elem :: Eq a => a -> Context a -> Bool #

maximum :: Ord a => Context a -> a #

minimum :: Ord a => Context a -> a #

sum :: Num a => Context a -> a #

product :: Num a => Context a -> a #

Functor Context Source # 
Instance details

Defined in Rzk.TypeCheck

Methods

fmap :: (a -> b) -> Context a -> Context b #

(<$) :: a -> Context b -> Context a #

showSomeTermTs :: Eq var => [TermT var] -> String Source #

entail :: Eq var => [TermT var] -> TermT var -> Bool Source #

nubTermT :: Eq var => [TermT var] -> [TermT var] Source #

saturateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var] Source #

saturateWith :: (a -> [a] -> Bool) -> ([a] -> [a] -> [a]) -> [a] -> [a] Source #

generateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var] Source #

generateTopesForPoints :: Eq var => [TermT var] -> [TermT var] Source #

allTopePoints :: Eq var => TermT var -> [TermT var] Source #

topePoints :: TermT var -> [TermT var] Source #

subPoints :: TermT var -> [TermT var] Source #

simplifyLHS :: Eq var => [TermT var] -> [[TermT var]] Source #

solveRHS :: Eq var => [TermT var] -> TermT var -> Bool Source #

checkTope :: Eq var => TermT var -> TypeCheck var Bool Source #

contextEntailedBy :: Eq var => TermT var -> TypeCheck var () Source #

contextEntails :: Eq var => TermT var -> TypeCheck var () Source #

topesEquiv :: Eq var => TermT var -> TermT var -> TypeCheck var Bool Source #

contextEquiv :: Eq var => [TermT var] -> TypeCheck var () Source #

enterScope :: Maybe VarIdent -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b Source #

performing :: Eq var => Action var -> TypeCheck var a -> TypeCheck var a Source #

etaMatch :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var (TermT var, TermT var) Source #

Perform at most one \(\eta\)-expansion at the top-level to assist unification.

etaExpand :: Eq var => TermT var -> TypeCheck var (TermT var) Source #

inCubeLayer :: Eq var => TermT var -> TypeCheck var Bool Source #

inTopeLayer :: Eq var => TermT var -> TypeCheck var Bool Source #

tryRestriction :: Eq var => TermT var -> TypeCheck var (Maybe (TermT var)) Source #

whnfT :: Eq var => TermT var -> TypeCheck var (TermT var) Source #

Compute a typed term to its WHNF.

>>> whnfT "(\\p -> first (second p)) (x, (y, z))" :: Term'
y

nfTope :: Eq var => TermT var -> TypeCheck var (TermT var) Source #

nfT :: Eq var => TermT var -> TypeCheck var (TermT var) Source #

Compute a typed term to its NF.

>>> nfT "(\\p -> first (second p)) (x, (y, z))" :: Term'
y

valueOfVar :: Eq var => var -> TypeCheck var (Maybe (TermT var)) Source #

typeOfVar :: Eq var => var -> TypeCheck var (TermT var) Source #

typeOfUncomputed :: Eq var => TermT var -> TypeCheck var (TermT var) Source #

typeOf :: Eq var => TermT var -> TypeCheck var (TermT var) Source #

unifyTopes :: Eq var => TermT var -> TermT var -> TypeCheck var () Source #

inAllSubContexts :: TypeCheck var () -> TypeCheck var () -> TypeCheck var () Source #

unify :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var () Source #

unifyInCurrentContext :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var () Source #

unifyTypes :: Eq var => TermT var -> TermT var -> TermT var -> TypeCheck var () Source #

unifyTerms :: Eq var => TermT var -> TermT var -> TypeCheck var () Source #

localTope :: Eq var => TermT var -> TypeCheck var a -> TypeCheck var a Source #

topeEQT :: TermT var -> TermT var -> TermT var Source #

topeLEQT :: TermT var -> TermT var -> TermT var Source #

topeOrT :: TermT var -> TermT var -> TermT var Source #

topeAndT :: TermT var -> TermT var -> TermT var Source #

cubeProductT :: TermT var -> TermT var -> TermT var Source #

typeRestrictedT :: TermT var -> [(TermT var, TermT var)] -> TermT var Source #

lambdaT :: TermT var -> Maybe VarIdent -> Maybe (TermT var, Maybe (Scope TermT var)) -> Scope TermT var -> TermT var Source #

appT :: TermT var -> TermT var -> TermT var -> TermT var Source #

pairT :: TermT var -> TermT var -> TermT var -> TermT var Source #

firstT :: TermT var -> TermT var -> TermT var Source #

secondT :: TermT var -> TermT var -> TermT var Source #

reflT :: TermT var -> Maybe (TermT var, Maybe (TermT var)) -> TermT var Source #

typeFunT :: Maybe VarIdent -> TermT var -> Maybe (Scope TermT var) -> Scope TermT var -> TermT var Source #

recOrT :: TermT var -> [(TermT var, TermT var)] -> TermT var Source #

typeIdT :: TermT var -> Maybe (TermT var) -> TermT var -> TermT var Source #

idJT :: TermT var -> TermT var -> TermT var -> TermT var -> TermT var -> TermT var -> TermT var -> TermT var Source #

typeAscT :: TermT var -> TermT var -> TermT var Source #

typecheck :: Eq var => Term var -> TermT var -> TypeCheck var (TermT var) Source #

inferAs :: Eq var => TermT var -> Term var -> TypeCheck var (TermT var) Source #

infer :: Eq var => Term var -> TypeCheck var (TermT var) Source #

checkCoherence :: Eq var => (TermT var, TermT var) -> (TermT var, TermT var) -> TypeCheck var () Source #