# Dependent function types
```agda
module foundation.dependent-function-types where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.spans-families-of-types
open import foundation.terminal-spans-families-of-types
open import foundation.type-arithmetic-dependent-function-types
open import foundation.universal-property-dependent-function-types
open import foundation.universe-levels
```
</details>
## Idea
Consider a family `B` of types over `A`. A {{#concept "dependent function"}}
that takes elements `x : A` to elements of type `B x` is an assignment of an
element `f x : B x` for each `x : A`. In Agda, dependent functions can be
written using `λ`-abstraction, i.e., using the syntax
```text
λ x → f x.
```
Informally, we also use the notation `x ↦ f x` for the assignment of values of a
dependent function `f`.
The type of dependent function `(x : A) → B x` is built in to the kernel of
Agda, and doesn't need to be introduced by us. The purpose of this file is to
record some properties of dependent function types.
## Definitions
### The structure of a span on a family of types on a dependent function type
```agda
module _
{l1 l2 : Level} {A : UU l1} (B : A → UU l2)
where
span-type-family-Π : span-type-family (l1 ⊔ l2) B
pr1 span-type-family-Π = (x : A) → B x
pr2 span-type-family-Π x f = f x
```
## Properties
### Dependent function types satisfy the universal property of dependent function types
```agda
module _
{l1 l2 : Level} {A : UU l1} (B : A → UU l2)
where
abstract
universal-property-dependent-function-types-Π :
universal-property-dependent-function-types (span-type-family-Π B)
universal-property-dependent-function-types-Π T = is-equiv-swap-Π
```
### Dependent function types are terminal spans on families of types
```agda
module _
{l1 l2 : Level} {A : UU l1} (B : A → UU l2)
where
abstract
is-terminal-span-type-family-Π :
is-terminal-span-type-family (span-type-family-Π B)
is-terminal-span-type-family-Π =
is-terminal-universal-property-dependent-function-types
( span-type-family-Π B)
( universal-property-dependent-function-types-Π B)
```