3.19. Types

A type in head normal form is either a simple type or a function type.

-- Simple types
Prop
Any
Any <level>
Level
<name> ...                  -- zero or more arguments

-- function type
all <telescope>: <simple type>      -- function type

For details of levels see chapter Universes / Sorts.

A type in head normal form is either a proper type or a kind. A proper type is either <name> ... or all <telescope>: name .... The other types are kinds.

The typing rules do not allow types of the form all <telescope>: Level.

In case that variables in a function type do not occur in other argument types or in the return type, arrow notation can be used as an abbreviation.

all (_: A) (_: B) ... : R
--   ^      ^   variables do not occur in the remainder of the type

-- equivalent type
AB → ... → R

I.e. A B is just an abbreviation for all (_: A): B.

The following type expressions are equivalent:

all (x: A₁) (_: A₂) (x: A₃) ... : R

all (x: A₁): all (_: A₂): all (x: A₃): ... : R

all (x: A₁): A₂ → all (x: A₃): ... : R