Agda-2.5.1.2: A dependently typed functional programming language and proof assistant

Agda.TypeChecking.Rules.Data

Contents

Synopsis

# Datatypes

checkDataDef :: DefInfo -> QName -> [LamBinding] -> [Constructor] -> TCM () Source #

Type check a datatype definition. Assumes that the type has already been checked.

A parameter is small if its sort fits into the data sort. smallParams overapproximates the small parameters (in doubt: small).

Arguments

 :: QName Name of data type. -> Telescope Parameter telescope. -> Nat Number of indices of the data type. -> Sort Sort of the data type. -> Constructor Constructor declaration (type signature). -> TCM [Int] Non-linear parameters.

Type check a constructor declaration. Checks that the constructor targets the datatype and that it fits inside the declared sort. Returns the non-linear parameters.

bindParameters :: [LamBinding] -> Type -> (Telescope -> Type -> TCM a) -> TCM a Source #

Bind the parameters of a datatype.

fitsIn :: Type -> Sort -> TCM () Source #

Check that the arguments to a constructor fits inside the sort of the datatype. The first argument is the type of the constructor.

constructs :: Int -> Type -> QName -> TCM [Int] Source #

Return the parameters that share variables with the indices nonLinearParameters :: Int -> Type -> TCM [Int] nonLinearParameters nPars t =

Check that a type constructs something of the given datatype. The first argument is the number of parameters to the datatype.

As a side effect, return the parameters that occur free in indices. E.g. in data Eq (A : Set)(a : A) : A -> Set where refl : Eq A a a this would include parameter a, but not A.

TODO: what if there's a meta here?

Is the type coinductive? Returns Nothing if the answer cannot be determined.