\node (a) at (-1, 0) {$a$};

\node (a0) at (0, 0.75) {$a$};
\node (a1) at (0, -0.75) {$a$};
\draw[->] (a0) -- node[midway] (al) {} (a1);
\draw[dashed,->] (a) to[] node[midway,above] {$\sigma$} ([xshift=-0.5em]al);

\node (fi0) at (1, 0.75) {$a$};
\node (fi1) at (1, -0.75) {$b$};
\draw[->] (fi0) -- node[midway,right] (f) {f} (fi1);

\node (fi0j1) at (4 + -0.75,  0.75) {$a$};
\node (fi0j0) at (4 + -0.75, -0.75) {$a$};
\node (fi1j1) at (4 + 0.75,   0.75) {$b$};
\node (fi1j0) at (4 + 0.75,  -0.75) {$b$};

\draw[->] (fi0j1) -- (fi1j1) node[midway] (fs)       {f};
\draw[->] (fi0j0) -- (fi1j0) node[midway,below] (gs) {f};
\draw[<-] (fi0j0) -- (fi0j1) node[midway,left] (p)  {};
\draw[<-] (fi1j0) -- (fi1j1) node[midway,right] (q) {};

\node (sq) at (4, 0) {$\bullet$};

\draw[dashed,->] (f) to[out=20,in=160] node[midway,below] {$\sigma_0 \circ \sigma$} (sq);