\begin{code}
{-# OPTIONS --cubical --safe #-}

module Function.Surjective.Base where

open import Path
open import Function.Fiber
open import Level
open import HITs.PropositionalTruncation
open import Data.Sigma

Surjective : (A  B)  Type _
\end{code}
%<*surjective>
\begin{code}
Surjective f =  y   fiber f y 
\end{code}
%</surjective>
\begin{code}
SplitSurjective : (A  B)  Type _
\end{code}
%<*split-surjective>
\begin{code}
SplitSurjective f =  y  fiber f y
\end{code}
%</split-surjective>
\begin{code}

infixr 0 _↠!_ _↠_

_↠!_ : Type a  Type b  Type (a ℓ⊔ b)
\end{code}
%<*split-surjection>
\begin{code}
A ↠! B = Σ (A  B) SplitSurjective
\end{code}
%</split-surjection>
\begin{code}
_↠_ : Type a  Type b  Type (a ℓ⊔ b)
\end{code}
%<*surjection>
\begin{code}
A  B = Σ (A  B) Surjective
\end{code}
%</surjection>