index

⚠️ This module is not part of this project and is only included for reference.
It is either part of the 1lab, the cubical library, or a built-in Agda module.

<!--
```agda
open import 1Lab.Path
open import 1Lab.Type
```
-->

```agda
module 1Lab.Type.Pointed where
```

## Pointed types {defines="pointed pointed-type pointed-map pointed-homotopy"}

A **pointed type** is a type $A$ equipped with a choice of base point $\point{A}$.

```agda
Type∙ :    Type (lsuc )
Type∙  = Σ (Type )  A  A)
```

<!--
```agda
private variable
   ℓ' : Level
  A B C : Type∙ 
```
-->

If we have pointed types $(A, a)$ and $(B, b)$, the most natural notion
of function between them is not simply the type of functions $A \to B$,
but rather those functions $A \to B$ which _preserve the basepoint_,
i.e. the functions $f : A \to B$ equipped with paths $f(a) \equiv b$.
Those are called **pointed maps**.

```agda
_→∙_ : Type∙   Type∙ ℓ'  Type _
(A , a) →∙ (B , b) = Σ[ f  (A  B) ] (f a  b)
```

Pointed maps compose in a straightforward way.

```agda
id∙ : A →∙ A
id∙ = id , refl

_∘∙_ : (B →∙ C)  (A →∙ B)  A →∙ C
(f , ptf) ∘∙ (g , ptg) = f  g , ap f ptg  ptf

infixr 40 _∘∙_
```

Paths between pointed maps are characterised as **pointed homotopies**:

```agda
funext∙ : {f g : A →∙ B}
         (h :  x  f .fst x  g .fst x)
         Square (h (A .snd)) (f .snd) (g .snd) refl
         f  g
funext∙ h pth i = funext h i , pth i
```