MiniAgda
Safe HaskellNone
LanguageHaskell98

TCM

Synopsis

Documentation

traceSig :: String -> a -> a Source #

traceRew :: String -> a -> a Source #

traceRewM :: Monad m => String -> m () Source #

traceMeta :: String -> a -> a Source #

traceMetaM :: Monad m => String -> m () Source #

data OneOrTwo a Source #

Constructors

One a 
Two a a 

Instances

Instances details
Functor OneOrTwo Source # 
Instance details

Defined in TCM

Methods

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

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

Foldable OneOrTwo Source # 
Instance details

Defined in TCM

Methods

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

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

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

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

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

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

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

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

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

toList :: OneOrTwo a -> [a] #

null :: OneOrTwo a -> Bool #

length :: OneOrTwo a -> Int #

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

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

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

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

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

Traversable OneOrTwo Source # 
Instance details

Defined in TCM

Methods

traverse :: Applicative f => (a -> f b) -> OneOrTwo a -> f (OneOrTwo b) #

sequenceA :: Applicative f => OneOrTwo (f a) -> f (OneOrTwo a) #

mapM :: Monad m => (a -> m b) -> OneOrTwo a -> m (OneOrTwo b) #

sequence :: Monad m => OneOrTwo (m a) -> m (OneOrTwo a) #

PrettyTCM a => PrettyTCM (OneOrTwo a) Source # 
Instance details

Defined in PrettyTCM

Substitute v => Substitute (OneOrTwo v) Source # 
Instance details

Defined in TypeChecker

Show a => Show (OneOrTwo a) Source # 
Instance details

Defined in TCM

Methods

showsPrec :: Int -> OneOrTwo a -> ShowS #

show :: OneOrTwo a -> String #

showList :: [OneOrTwo a] -> ShowS #

Eq a => Eq (OneOrTwo a) Source # 
Instance details

Defined in TCM

Methods

(==) :: OneOrTwo a -> OneOrTwo a -> Bool #

(/=) :: OneOrTwo a -> OneOrTwo a -> Bool #

Ord a => Ord (OneOrTwo a) Source # 
Instance details

Defined in TCM

Methods

compare :: OneOrTwo a -> OneOrTwo a -> Ordering #

(<) :: OneOrTwo a -> OneOrTwo a -> Bool #

(<=) :: OneOrTwo a -> OneOrTwo a -> Bool #

(>) :: OneOrTwo a -> OneOrTwo a -> Bool #

(>=) :: OneOrTwo a -> OneOrTwo a -> Bool #

max :: OneOrTwo a -> OneOrTwo a -> OneOrTwo a #

min :: OneOrTwo a -> OneOrTwo a -> OneOrTwo a #

oneOrTwo :: (a -> b) -> (a -> a -> b) -> OneOrTwo a -> b Source #

mapSecond12 :: (a -> a) -> OneOrTwo a -> OneOrTwo a Source #

zipWith12 :: (a -> b -> c) -> OneOrTwo a -> OneOrTwo b -> OneOrTwo c Source #

zipWith123 :: (a -> b -> c -> d) -> OneOrTwo a -> OneOrTwo b -> OneOrTwo c -> OneOrTwo d Source #

fromList12 :: Show a => [a] -> OneOrTwo a Source #

toMaybe12 :: Show a => [a] -> Maybe (OneOrTwo a) Source #

data TCContext Source #

Constructors

TCContext 

Fields

Instances

Instances details
MonadCxt TypeCheck Source # 
Instance details

Defined in TCM

Methods

newVar :: Name -> OneOrTwo Domain -> (Int -> OneOrTwo Val -> TypeCheck a) -> TypeCheck a Source #

newWithGen :: Name -> Domain -> (Int -> Val -> TypeCheck a) -> TypeCheck a Source #

new2WithGen :: Name -> (Domain, Domain) -> (Int -> (Val, Val) -> TypeCheck a) -> TypeCheck a Source #

new :: Name -> Domain -> (Val -> TypeCheck a) -> TypeCheck a Source #

new2 :: Name -> (Domain, Domain) -> ((Val, Val) -> TypeCheck a) -> TypeCheck a Source #

new' :: Name -> Domain -> TypeCheck a -> TypeCheck a Source #

newIrr :: Name -> TypeCheck a -> TypeCheck a Source #

addName :: Name -> (Val -> TypeCheck a) -> TypeCheck a Source #

addKindedTypeSigs :: [Kinded (TySig TVal)] -> TypeCheck a -> TypeCheck a Source #

setType :: Int -> Domain -> TypeCheck a -> TypeCheck a Source #

setTypeOfName :: Name -> Domain -> TypeCheck a -> TypeCheck a Source #

genOfName :: Name -> TypeCheck Int Source #

nameOfGen :: Int -> TypeCheck Name Source #

uniqueName :: Name -> Int -> TypeCheck Name Source #

lookupGen :: Int -> TypeCheck CxtEntry Source #

lookupGenType2 :: Int -> TypeCheck (TVal, TVal) Source #

lookupName :: Name -> TypeCheck CxtEntry Source #

lookupName1 :: Name -> TypeCheck CxtEntry1 Source #

getContextTele :: TypeCheck TeleVal Source #

getLen :: TypeCheck Int Source #

getEnv :: TypeCheck Env Source #

getRen :: TypeCheck Ren Source #

applyDec :: Dec -> TypeCheck a -> TypeCheck a Source #

resurrect :: TypeCheck a -> TypeCheck a Source #

addRewrite :: Rewrite -> [Val] -> ([Val] -> TypeCheck a) -> TypeCheck a Source #

addPattern :: TVal -> Pattern -> Env -> (TVal -> Val -> Env -> TypeCheck a) -> TypeCheck a Source #

addPatterns :: TVal -> [Pattern] -> Env -> (TVal -> [Val] -> Env -> TypeCheck a) -> TypeCheck a Source #

addSizeRel :: Int -> Int -> Int -> TypeCheck a -> TypeCheck a Source #

addBelowInfty :: Int -> TypeCheck a -> TypeCheck a Source #

addBoundHyp :: Bound Val -> TypeCheck a -> TypeCheck a Source #

isBelowInfty :: Int -> TypeCheck Bool Source #

sizeVarBelow :: Int -> Int -> TypeCheck (Maybe Int) Source #

getMinSize :: Int -> TypeCheck (Maybe Int) Source #

getSizeVarsInScope :: TypeCheck [Name] Source #

checkingCon :: Bool -> TypeCheck a -> TypeCheck a Source #

checkingDom :: TypeCheck a -> TypeCheck a Source #

setCo :: Co -> TypeCheck a -> TypeCheck a Source #

installFuns :: Co -> [Kinded Fun] -> TypeCheck a -> TypeCheck a Source #

setMeasure :: Measure Val -> TypeCheck a -> TypeCheck a Source #

activateFuns :: TypeCheck a -> TypeCheck a Source #

goImpredicative :: TypeCheck a -> TypeCheck a Source #

checkingMutual :: Maybe DefId -> TypeCheck a -> TypeCheck a Source #

MonadMeta TypeCheck Source # 
Instance details

Defined in TCM

MonadSig TypeCheck Source # 
Instance details

Defined in TCM

MonadAssert TypeCheck Source # 
Instance details

Defined in TCM

Show TCContext Source # 
Instance details

Defined in TCM

Monoid (TypeCheck Bool) Source # 
Instance details

Defined in Eval

Semigroup (TypeCheck Bool) Source # 
Instance details

Defined in Eval

data TCState Source #

Instances

Instances details
MonadCxt TypeCheck Source # 
Instance details

Defined in TCM

Methods

newVar :: Name -> OneOrTwo Domain -> (Int -> OneOrTwo Val -> TypeCheck a) -> TypeCheck a Source #

newWithGen :: Name -> Domain -> (Int -> Val -> TypeCheck a) -> TypeCheck a Source #

new2WithGen :: Name -> (Domain, Domain) -> (Int -> (Val, Val) -> TypeCheck a) -> TypeCheck a Source #

new :: Name -> Domain -> (Val -> TypeCheck a) -> TypeCheck a Source #

new2 :: Name -> (Domain, Domain) -> ((Val, Val) -> TypeCheck a) -> TypeCheck a Source #

new' :: Name -> Domain -> TypeCheck a -> TypeCheck a Source #

newIrr :: Name -> TypeCheck a -> TypeCheck a Source #

addName :: Name -> (Val -> TypeCheck a) -> TypeCheck a Source #

addKindedTypeSigs :: [Kinded (TySig TVal)] -> TypeCheck a -> TypeCheck a Source #

setType :: Int -> Domain -> TypeCheck a -> TypeCheck a Source #

setTypeOfName :: Name -> Domain -> TypeCheck a -> TypeCheck a Source #

genOfName :: Name -> TypeCheck Int Source #

nameOfGen :: Int -> TypeCheck Name Source #

uniqueName :: Name -> Int -> TypeCheck Name Source #

lookupGen :: Int -> TypeCheck CxtEntry Source #

lookupGenType2 :: Int -> TypeCheck (TVal, TVal) Source #

lookupName :: Name -> TypeCheck CxtEntry Source #

lookupName1 :: Name -> TypeCheck CxtEntry1 Source #

getContextTele :: TypeCheck TeleVal Source #

getLen :: TypeCheck Int Source #

getEnv :: TypeCheck Env Source #

getRen :: TypeCheck Ren Source #

applyDec :: Dec -> TypeCheck a -> TypeCheck a Source #

resurrect :: TypeCheck a -> TypeCheck a Source #

addRewrite :: Rewrite -> [Val] -> ([Val] -> TypeCheck a) -> TypeCheck a Source #

addPattern :: TVal -> Pattern -> Env -> (TVal -> Val -> Env -> TypeCheck a) -> TypeCheck a Source #

addPatterns :: TVal -> [Pattern] -> Env -> (TVal -> [Val] -> Env -> TypeCheck a) -> TypeCheck a Source #

addSizeRel :: Int -> Int -> Int -> TypeCheck a -> TypeCheck a Source #

addBelowInfty :: Int -> TypeCheck a -> TypeCheck a Source #

addBoundHyp :: Bound Val -> TypeCheck a -> TypeCheck a Source #

isBelowInfty :: Int -> TypeCheck Bool Source #

sizeVarBelow :: Int -> Int -> TypeCheck (Maybe Int) Source #

getMinSize :: Int -> TypeCheck (Maybe Int) Source #

getSizeVarsInScope :: TypeCheck [Name] Source #

checkingCon :: Bool -> TypeCheck a -> TypeCheck a Source #

checkingDom :: TypeCheck a -> TypeCheck a Source #

setCo :: Co -> TypeCheck a -> TypeCheck a Source #

installFuns :: Co -> [Kinded Fun] -> TypeCheck a -> TypeCheck a Source #

setMeasure :: Measure Val -> TypeCheck a -> TypeCheck a Source #

activateFuns :: TypeCheck a -> TypeCheck a Source #

goImpredicative :: TypeCheck a -> TypeCheck a Source #

checkingMutual :: Maybe DefId -> TypeCheck a -> TypeCheck a Source #

MonadMeta TypeCheck Source # 
Instance details

Defined in TCM

MonadSig TypeCheck Source # 
Instance details

Defined in TCM

MonadAssert TypeCheck Source # 
Instance details

Defined in TCM

Monoid (TypeCheck Bool) Source # 
Instance details

Defined in Eval

Semigroup (TypeCheck Bool) Source # 
Instance details

Defined in Eval

type MScope Source #

Arguments

 = [Name]

names of size variables which are in scope of mvar

data MetaVar Source #

Constructors

MetaVar 

Fields

data Rewrite Source #

Constructors

Rewrite 

Fields

Instances

Instances details
Show Rewrite Source # 
Instance details

Defined in TCM

type Context a = Map Int a Source #

data CxtE a Source #

Constructors

CxtEntry 

Fields

data SemCxt Source #

Constructors

SemCxt 

Instances

Instances details
Substitute SemCxt Source # 
Instance details

Defined in TypeChecker

Show SemCxt Source # 
Instance details

Defined in TCM

lookupM :: (MonadError TraceError m, Show k, Ord k) => k -> Map k v -> m v Source #

Version of lookup that throws TraceError.

class Monad m => MonadCxt (m :: Type -> Type) where Source #

Methods

newVar :: Name -> OneOrTwo Domain -> (Int -> OneOrTwo Val -> m a) -> m a Source #

newWithGen :: Name -> Domain -> (Int -> Val -> m a) -> m a Source #

new2WithGen :: Name -> (Domain, Domain) -> (Int -> (Val, Val) -> m a) -> m a Source #

new :: Name -> Domain -> (Val -> m a) -> m a Source #

new2 :: Name -> (Domain, Domain) -> ((Val, Val) -> m a) -> m a Source #

new' :: Name -> Domain -> m a -> m a Source #

newIrr :: Name -> m a -> m a Source #

addName :: Name -> (Val -> m a) -> m a Source #

addKindedTypeSigs :: [Kinded (TySig TVal)] -> m a -> m a Source #

setType :: Int -> Domain -> m a -> m a Source #

setTypeOfName :: Name -> Domain -> m a -> m a Source #

genOfName :: Name -> m Int Source #

nameOfGen :: Int -> m Name Source #

uniqueName :: Name -> Int -> m Name Source #

lookupGen :: Int -> m CxtEntry Source #

lookupGenType2 :: Int -> m (TVal, TVal) Source #

lookupName :: Name -> m CxtEntry Source #

lookupName1 :: Name -> m CxtEntry1 Source #

getContextTele :: m TeleVal Source #

getLen :: m Int Source #

getEnv :: m Env Source #

getRen :: m Ren Source #

applyDec :: Dec -> m a -> m a Source #

resurrect :: m a -> m a Source #

addRewrite :: Rewrite -> [Val] -> ([Val] -> m a) -> m a Source #

addPattern :: TVal -> Pattern -> Env -> (TVal -> Val -> Env -> m a) -> m a Source #

addPatterns :: TVal -> [Pattern] -> Env -> (TVal -> [Val] -> Env -> m a) -> m a Source #

addSizeRel :: Int -> Int -> Int -> m a -> m a Source #

addBelowInfty :: Int -> m a -> m a Source #

addBoundHyp :: Bound Val -> m a -> m a Source #

isBelowInfty :: Int -> m Bool Source #

sizeVarBelow :: Int -> Int -> m (Maybe Int) Source #

getMinSize :: Int -> m (Maybe Int) Source #

getSizeVarsInScope :: m [Name] Source #

checkingCon :: Bool -> m a -> m a Source #

checkingDom :: m a -> m a Source #

setCo :: Co -> m a -> m a Source #

installFuns :: Co -> [Kinded Fun] -> m a -> m a Source #

setMeasure :: Measure Val -> m a -> m a Source #

activateFuns :: m a -> m a Source #

goImpredicative :: m a -> m a Source #

checkingMutual :: Maybe DefId -> m a -> m a Source #

Instances

Instances details
MonadCxt TypeCheck Source # 
Instance details

Defined in TCM

Methods

newVar :: Name -> OneOrTwo Domain -> (Int -> OneOrTwo Val -> TypeCheck a) -> TypeCheck a Source #

newWithGen :: Name -> Domain -> (Int -> Val -> TypeCheck a) -> TypeCheck a Source #

new2WithGen :: Name -> (Domain, Domain) -> (Int -> (Val, Val) -> TypeCheck a) -> TypeCheck a Source #

new :: Name -> Domain -> (Val -> TypeCheck a) -> TypeCheck a Source #

new2 :: Name -> (Domain, Domain) -> ((Val, Val) -> TypeCheck a) -> TypeCheck a Source #

new' :: Name -> Domain -> TypeCheck a -> TypeCheck a Source #

newIrr :: Name -> TypeCheck a -> TypeCheck a Source #

addName :: Name -> (Val -> TypeCheck a) -> TypeCheck a Source #

addKindedTypeSigs :: [Kinded (TySig TVal)] -> TypeCheck a -> TypeCheck a Source #

setType :: Int -> Domain -> TypeCheck a -> TypeCheck a Source #

setTypeOfName :: Name -> Domain -> TypeCheck a -> TypeCheck a Source #

genOfName :: Name -> TypeCheck Int Source #

nameOfGen :: Int -> TypeCheck Name Source #

uniqueName :: Name -> Int -> TypeCheck Name Source #

lookupGen :: Int -> TypeCheck CxtEntry Source #

lookupGenType2 :: Int -> TypeCheck (TVal, TVal) Source #

lookupName :: Name -> TypeCheck CxtEntry Source #

lookupName1 :: Name -> TypeCheck CxtEntry1 Source #

getContextTele :: TypeCheck TeleVal Source #

getLen :: TypeCheck Int Source #

getEnv :: TypeCheck Env Source #

getRen :: TypeCheck Ren Source #

applyDec :: Dec -> TypeCheck a -> TypeCheck a Source #

resurrect :: TypeCheck a -> TypeCheck a Source #

addRewrite :: Rewrite -> [Val] -> ([Val] -> TypeCheck a) -> TypeCheck a Source #

addPattern :: TVal -> Pattern -> Env -> (TVal -> Val -> Env -> TypeCheck a) -> TypeCheck a Source #

addPatterns :: TVal -> [Pattern] -> Env -> (TVal -> [Val] -> Env -> TypeCheck a) -> TypeCheck a Source #

addSizeRel :: Int -> Int -> Int -> TypeCheck a -> TypeCheck a Source #

addBelowInfty :: Int -> TypeCheck a -> TypeCheck a Source #

addBoundHyp :: Bound Val -> TypeCheck a -> TypeCheck a Source #

isBelowInfty :: Int -> TypeCheck Bool Source #

sizeVarBelow :: Int -> Int -> TypeCheck (Maybe Int) Source #

getMinSize :: Int -> TypeCheck (Maybe Int) Source #

getSizeVarsInScope :: TypeCheck [Name] Source #

checkingCon :: Bool -> TypeCheck a -> TypeCheck a Source #

checkingDom :: TypeCheck a -> TypeCheck a Source #

setCo :: Co -> TypeCheck a -> TypeCheck a Source #

installFuns :: Co -> [Kinded Fun] -> TypeCheck a -> TypeCheck a Source #

setMeasure :: Measure Val -> TypeCheck a -> TypeCheck a Source #

activateFuns :: TypeCheck a -> TypeCheck a Source #

goImpredicative :: TypeCheck a -> TypeCheck a Source #

checkingMutual :: Maybe DefId -> TypeCheck a -> TypeCheck a Source #

underAbs :: Name -> Domain -> FVal -> (Int -> Val -> Val -> TypeCheck a) -> TypeCheck a Source #

Go into the codomain of a Pi-type or open an abstraction.

underAbs_ :: Name -> Domain -> FVal -> (Int -> Val -> Val -> TypeCheck a) -> TypeCheck a Source #

Do not check consistency preservation of context.

underAbs' :: Name -> FVal -> (Val -> Val -> TypeCheck a) -> TypeCheck a Source #

No eta, no hypotheses. First returned val is a VGen i.

data SigDef Source #

Constructors

FunSig 

Fields

LetSig 

Fields

PatSig 
ConSig 

Fields

  • conPars :: ConPars

    Parameter patterns and no. of variable they bind. Nothing if old-style parameters.

  • lhsTyp :: LHSType

    LHS type of constructor for pattern matching, e.g. rhs cons : [A : Set] [i : Size] -> A -> List A i -> List A $i lhs cons : [A : Set] [i : Size] [j - A -> List A j -> List A i Name is the name of the size parameter.

  • recOccs :: [Bool]

    True if argument contains rec.occs.of the (co)data type?

  • symbTyp :: TVal

    (RHS) type, includs parameter tel.

  • dataName :: Name

    Its datatype.

  • dataPars :: Int

    No. of parameters of its datatype.

  • extrTyp :: Expr

    Fomega type.

DataSig 

Fields

Instances

Instances details
Show SigDef Source # 
Instance details

Defined in TCM

type ConPars = Maybe ([Name], [Pattern]) Source #

Parameter patterns and no. of variables they bind.

type LHSType = Maybe (Name, TVal) Source #

LHS type plus name of size index.

data DataView Source #

Constructors

Data Name [Clos] 
NoData 

dataView :: TVal -> TypeCheck DataView Source #

Check if type tv is a datatype D vs.

disambigCon :: QName -> TVal -> TypeCheck QName Source #

Disambiguate possibly overloaded constructor c at given type tv.

conType :: QName -> TVal -> TypeCheck TVal Source #

conType c tv returns the type of constructor c at datatype tv with parameters instantiated.

conLType :: QName -> TVal -> TypeCheck TVal Source #

Get LHS type of constructor.

Constructors or sized data types internally have a lhs type that differs from its rhs type. E.g., rhs suc : [i : Size] -> Nat i -> Nat $i lhs suc : [i : Size] [j - Nat j -> Nat i. In the lhs type, i turns into an additional parameter.

instConType :: QName -> ConPars -> TVal -> Name -> Int -> TVal -> TypeCheck TVal Source #

Instantiate type of constructor to parameters obtained from the data type.

instConType c n symbTyp dataName tv instantiates type symbTyp of constructor c with first n arguments that dataName is applied to in tv. @ instConType c n ((x1:A1..xn:An) -> B) d (d v1..vn ws) = B[vs/xs] @

instConLType :: QName -> ConPars -> TVal -> LHSType -> (Val -> Bool) -> Int -> TVal -> TypeCheck TVal Source #

Get correct lhs type for constructor pattern.

instConLType c numPars symbTyp Nothing isFlex tv behaves like instConLType c numPars symbType _ tv.

But if the data types is sized and the constructor has a lhs type, instConLType c numPars symbTyp (Just ltv) isFlex tv uses the lhs type ltv unless the variable instantiated for the size argument is flexible (because then it wants to be unified with the successor pattern of the rhs type.

instConLType' :: QName -> ConPars -> TVal -> Maybe ((Name, TVal), Val -> Bool) -> Maybe Name -> Int -> TVal -> TypeCheck TVal Source #

The common pattern behind instConType and instConLType.