Agda- A dependently typed functional programming language and proof assistant

Safe HaskellNone





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

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

smallParams :: Telescope -> Sort -> TCM [Int] Source

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

checkConstructor Source


:: 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?

isCoinductive :: Type -> TCM (Maybe Bool) Source

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