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

Safe HaskellNone

Agda.TypeChecking.Rules.Term

Contents

Synopsis

Types

isType :: Expr -> Sort -> TCM TypeSource

Check that an expression is a type.

isType_ :: Expr -> TCM TypeSource

Check that an expression is a type without knowing the sort.

isTypeEqualTo :: Expr -> Type -> TCM TypeSource

Check that an expression is a type which is equal to a given type.

Telescopes

checkTelescope_ :: Telescope -> (Telescope -> TCM a) -> TCM aSource

Type check a telescope. Binds the variables defined by the telescope.

checkTypedBindings_ :: TypedBindings -> (Telescope -> TCM a) -> TCM aSource

Check a typed binding and extends the context with the bound variables. The telescope passed to the continuation is valid in the original context.

data LamOrPi Source

Constructors

LamNotPi 
PiNotLam 

Instances

checkTypedBindings :: LamOrPi -> TypedBindings -> (Telescope -> TCM a) -> TCM aSource

Check a typed binding and extends the context with the bound variables. The telescope passed to the continuation is valid in the original context.

Parametrized by a flag wether we check a typed lambda or a Pi. This flag is needed for irrelevance.

checkLambda :: Arg TypedBinding -> Expr -> Type -> TCM TermSource

Type check a lambda expression.

Literal

Terms

checkArguments' :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg Expr] -> Type -> Type -> Expr -> (Args -> Type -> TCM Term) -> TCM TermSource

checkArguments' exph r args t0 t e k tries checkArguments exph args t0 t. If it succeeds, it continues k with the returned results. If it fails, it registers a postponed typechecking problem and returns the resulting new meta variable.

Checks e := ((_ : t0) args) : t.

checkExpr :: Expr -> Type -> TCM TermSource

Type check an expression.

inferHead :: Expr -> TCM (Args -> Term, Type)Source

Infer the type of a head thing (variable, function symbol, or constructor)

checkConstructorApplication :: Expr -> Type -> QName -> [NamedArg Expr] -> TCM TermSource

Check the type of a constructor application. This is easier than a general application since the implicit arguments can be inserted without looking at the arguments to the constructor.

checkHeadApplication :: Expr -> Type -> Expr -> [NamedArg Expr] -> TCM TermSource

checkHeadApplication e t hd args checks that e has type t, assuming that e has the form hd args. The corresponding type-checked term is returned.

If the head term hd is a coinductive constructor, then a top-level definition fresh tel = hd args (where the clause is delayed) is added, where tel corresponds to the current telescope. The returned term is fresh tel.

Precondition: The head hd has to be unambiguous, and there should not be any need to insert hidden lambdas.

traceCallE :: Error e => (Maybe r -> Call) -> ErrorT e TCM r -> ErrorT e TCM rSource

checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg Expr] -> Type -> Type -> ErrorT Type TCM (Args, Type)Source

Check a list of arguments: checkArgs args t0 t1 checks that t0 = Delta -> t0' and args : Delta. Inserts hidden arguments to make this happen. Returns the evaluated arguments vs, the remaining type t0' (which should be a subtype of t1) and any constraints cs that have to be solved for everything to be well-formed.

TODO: doesn't do proper blocking of terms

checkArguments_ :: ExpandHidden -> Range -> [NamedArg Expr] -> Telescope -> TCM ArgsSource

Check that a list of arguments fits a telescope.

inferExpr :: Expr -> TCM (Term, Type)Source

Infer the type of an expression. Implemented by checking against a meta variable. Except for neutrals, for them a polymorphic type is inferred.

inferExprForWith :: Expr -> TCM (Term, Type)Source

Infer the type of an expression, and if it is of the form {tel} -> D vs for some datatype D then insert the hidden arguments. Otherwise, leave the type polymorphic.

Let bindings