\chapter{Abstract functional extensionality}
\label{app:abstract-funext}
In two places in my formalization was the computational behaviours of
functional extensionality used. The reduction behaviour can be
disabled by marking functional extensionality as abstract. Below the
fully normalized goal and context with functional extensionality
marked abstract has been shown. The excerpts are from the module
%
\begin{center}
\sourcelink{Cat.Category.Monad.Voevodsky}
\end{center}
%
where this is also written as a comment next to the proofs. When
functional extensionality is not abstract the goal and current value
are the same. It is of course necessary to show the fully normalized
goal and context otherwise the reduction behaviours is not forced.

\subsubsection*{First goal}
Goal:
\begin{verbatim}
PathP (λ _ → §2-3.§2 omap (λ {z} → pure))
(§2-fromMonad
 (.Cat.Category.Monad.toKleisli ℂ
  (.Cat.Category.Monad.toMonoidal ℂ (§2-3.§2.toMonad m))))
(§2-fromMonad (§2-3.§2.toMonad m))
\end{verbatim}
Have:
\begin{verbatim}
PathP
(λ i →
   §2-3.§2 K.IsMonad.omap
   (K.RawMonad.pure
    (K.Monad.raw
     (funExt (λ m₁ → K.Monad≡ (.Cat.Category.Monad.toKleisliRawEq ℂ m₁))
      i (§2-3.§2.toMonad m)))))
(§2-fromMonad
 (.Cat.Category.Monad.toKleisli ℂ
  (.Cat.Category.Monad.toMonoidal ℂ (§2-3.§2.toMonad m))))
(§2-fromMonad (§2-3.§2.toMonad m))
\end{verbatim}
\subsubsection*{Second goal}
Goal:
\begin{verbatim}
PathP (λ _ → §2-3.§1 omap (λ {X} → pure))
(§1-fromMonad
 (.Cat.Category.Monad.toMonoidal ℂ
  (.Cat.Category.Monad.toKleisli ℂ (§2-3.§1.toMonad m))))
(§1-fromMonad (§2-3.§1.toMonad m))
\end{verbatim}
Have:
\begin{verbatim}
PathP
(λ i →
   §2-3.§1
   (RawFunctor.omap
    (Functor.raw
     (M.RawMonad.R
      (M.Monad.raw
       (funExt
        (λ m₁ → M.Monad≡ (.Cat.Category.Monad.toMonoidalRawEq ℂ m₁)) i
        (§2-3.§1.toMonad m))))))
   (λ {X} →
      fst
      (M.RawMonad.pureNT
       (M.Monad.raw
        (funExt
         (λ m₁ → M.Monad≡ (.Cat.Category.Monad.toMonoidalRawEq ℂ m₁)) i
         (§2-3.§1.toMonad m))))
      X))
(§1-fromMonad
 (.Cat.Category.Monad.toMonoidal ℂ
  (.Cat.Category.Monad.toKleisli ℂ (§2-3.§1.toMonad m))))
(§1-fromMonad (§2-3.§1.toMonad m))
\end{verbatim}
