Manual for Pijul
\PassOptionsToPackage{dvipsnames}{xcolor}
\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{external,matrix,positioning,calc,shapes}
\tikzexternalize
\begin{document}

\section{Associativity}

\tikzsetnextfilename{associativity0}
\begin{tikzpicture}[scale=3]
  \newcommand\nodesize{1.5mm}
  \node(Init0) at (-0.2, 0){};
  \node(Init) at (0, 0){};
  \node[draw,circle,fill=Green](B0) at (1, 0){$A$};
  \node[draw,circle,fill=Cyan](A0) at (1, 0.7){$B$};
  \draw[->](Init0) to (B0);


  \draw[->](Init) to[in=180,out=0] (A0);

  \node[draw,circle,fill=BurntOrange,inner sep=\nodesize](A1) at (2, 0.7){$C$};
  \draw[->](A0) to (A1);

  \node[draw,circle,fill=Cyan,inner sep=\nodesize](A0B) at (2.8, 0){$B$};
  \draw[->](B0) to[in=180,out=0] (A0B);

  \node[draw,circle,fill=BurntOrange,inner sep=\nodesize](A1B) at (2.95, 0){$C$};
  \draw[->](A1) to[in=180,out=0] (A0B);
  \node(A) at (3.5, 0){};
  \draw(A1B) -- (A);
\end{tikzpicture}

\tikzsetnextfilename{associativity1}
\begin{tikzpicture}[scale=3]
  \newcommand\nodesize{1.5mm}
  \node(Init0) at (-0.2, 0){};
  \node(Init) at (0, 0){};
  \node[draw,circle,fill=Green](B0) at (1, 0){$A$};
  \node[draw,circle,fill=Cyan](A0) at (1, 0.7){$B$};
  \draw[->](Init0) to (B0);


  \draw[->](Init) to[in=180,out=0] (A0);

  \node[draw,circle,fill=BurntOrange](A1) at (2, 0.7){$C$};
  \draw[->](A0) to (A1);

  \node[draw,circle,fill=Cyan](A0B) at (1.8, 0){$B$};
  \draw[->](A0) to[in=180,out=0] (A0B);
  \draw[->](B0) to[in=180,out=0] (A0B);

  \node[draw,circle,fill=BurntOrange](A1B) at (2.8, 0){$C$};
  \draw[->](A0B) to (A1B);
  \draw[->](A1) to[in=180,out=0] (A1B);
  \node(A) at (3.5, 0){};
  \draw(A1B) -- (A);
\end{tikzpicture}

\section{Git bad merge}

\tikzsetnextfilename{badmerge0}
\begin{tikzpicture}
  \begin{scope}[yshift=-1.25cm]
    \node[Red,inner sep=0](Aa) at (0, 0) {A};
    \node[inner sep=0](Ba) at (0, -0.5) {B};
  \end{scope}
  % listing diff from a to b1, abstract
  \node[ForestGreen](Gb1) at (1, 0) {G};
  \node[Red](Ab1) at (1, -0.5) {A};
  \node(Bb1) at (1, -1) {B};
  \path[draw,->](Aa) to (Ab1);
  \path[draw,->](Ba) to (Bb1);
  % listing diff from b1 to b2, abstract
  \begin{scope}[yshift=1cm]
    \node[ForestGreen](Ab2-) at (2, 0) {A};
    \node[ForestGreen](Bb2-) at (2, -0.5) {B};
    \node[ForestGreen](Gb2) at (2, -1) {G};
    \node[Red](Ab2) at (2, -1.5) {A};
    \node(Bb2) at (2, -2) {B};
  \end{scope}
  \path[draw,->](Ab1) to (Ab2);
  \path[draw,->](Bb1) to (Bb2);
  \path[draw,->](Gb1) to (Gb2);
  % listing diff from a to c, abstract
  \begin{scope}[yshift=-2cm,xshift=1cm]
    \node[Red](Ac) at (1, 0) {A};
    \node(Bc) at (1, -1) {B};
    \node[Dandelion](Xc) at (1, -0.5) {X};
  \end{scope}
  \path[draw,->](Aa) to (Ac);
  \path[draw,->](Ba) to[out=0,in=180] (Bc);
  \begin{scope}[yshift=0cm,xshift=3cm]
    \node(A-m) at (1, 0) {A};
    \node[Dandelion](Xm) at (1, -0.5) {X};
    \node(B-m) at (1, -1) {B};
    \node[ForestGreen](Gm) at (1, -1.5) {G};
    \node(Am) at (1, -2) {A};
    \node(Bm) at (1, -2.5) {B};
  \end{scope}
  \path[draw,->](Xc) to[out=0,in=180] (Xm);
  \path[draw,->](Gb2) to[out=0,in=180] (Gm);
\end{tikzpicture}


\tikzsetnextfilename{goodmerge}
\begin{tikzpicture}
  \begin{scope}[yshift=-1.25cm]
    \node[Red,inner sep=0](Aa) at (0, 0) {A};
    \node[inner sep=0](Ba) at (0, -0.5) {B};
  \end{scope}
  % listing diff from a to b1, abstract
  \node[ForestGreen](Gb1) at (1, 0) {G};
  \node[Red](Ab1) at (1, -0.5) {A};
  \node(Bb1) at (1, -1) {B};
  \path[draw,->](Aa) to (Ab1);
  \path[draw,->](Ba) to (Bb1);
  % listing diff from b1 to b2, abstract
  \begin{scope}[yshift=1cm]
    \node[ForestGreen](Ab2-) at (2, 0) {A};
    \node[ForestGreen](Bb2-) at (2, -0.5) {B};
    \node[ForestGreen](Gb2) at (2, -1) {G};
    \node[Red](Ab2) at (2, -1.5) {A};
    \node(Bb2) at (2, -2) {B};
  \end{scope}
  \path[draw,->](Ab1) to (Ab2);
  \path[draw,->](Bb1) to (Bb2);
  \path[draw,->](Gb1) to (Gb2);
  % listing diff from a to c, abstract
  \begin{scope}[yshift=-2cm,xshift=1cm]
    \node[Red](Ac) at (1, 0) {A};
    \node[Dandelion](Xc) at (1, -0.5) {X};
    \node(Bc) at (1, -1) {B};
  \end{scope}
  \path[draw,->](Aa) to (Ac);
  \path[draw,->](Ba) to[out=0,in=180] (Bc);
  \begin{scope}[yshift=0cm,xshift=3cm]
    \node[ForestGreen](A-m) at (1, 0) {A};
    \node[ForestGreen](B-m) at (1, -0.5) {B};
    \node[ForestGreen](Gm) at (1, -1) {G};
    \node[Red](Am) at (1, -1.5) {A};
    \node[Dandelion](Xm) at (1, -2) {X};
    \node(Bm) at (1, -2.5) {B};
  \end{scope}
  \path[draw,->](Xc) to[out=0,in=180] (Xm);
  \path[draw,->](Gb2) to[out=0,in=180] (Gm);
\end{tikzpicture}



\tikzsetnextfilename{badmerge1}
\begin{tikzpicture}
  \begin{scope}[yshift=-1.25cm]
    \node[Red,inner sep=0](Aa) at (0, 0) {A};
    \node[inner sep=0](Ba) at (0, -0.5) {B};
  \end{scope}
  % listing diff from a to b1, abstract
  \node[ForestGreen](Gb1) at (1, 0) {G};
  \node[Red](Ab1) at (1, -0.5) {A};
  \node(Bb1) at (1, -1) {B};
  \path[draw,->](Aa) to (Ab1);
  \path[draw,->](Ba) to (Bb1);
  % listing diff from b1 to b2, abstract
  \begin{scope}[yshift=1cm]
    \node[ForestGreen](Ab2-) at (2, 0) {A};
    \node[ForestGreen](Bb2-) at (2, -0.5) {B};
    \node[ForestGreen](Gb2) at (2, -1) {G};
    \node[Red](Ab2) at (2, -1.5) {A};
    \node(Bb2) at (2, -2) {B};
  \end{scope}
  \path[draw,->](Ab1) to (Ab2);
  \path[draw,->](Bb1) to (Bb2);
  \path[draw,->](Gb1) to (Gb2);
  % listing diff from a to c, abstract
  \begin{scope}[yshift=-2cm,xshift=1cm]
    \node[Red](Ac) at (1, 0) {A};
    \node(Bc) at (1, -1) {B};
    \node[Dandelion](Xc) at (1, -0.5) {X};
  \end{scope}
  \path[draw,->](Aa) to (Ac);
  \path[draw,->](Ba) to[out=0,in=180] (Bc);
  \begin{scope}[yshift=0cm,xshift=3cm]
    \node(A-m) at (1, 0) {A};
    \node[Dandelion](Xm) at (1, -0.5) {X};
    \node(B-m) at (1, -1) {B};
    \node[ForestGreen](Gm) at (1, -1.5) {G};
    \node[Red](Am) at (1, -2) {A};
    \node(Bm) at (1, -2.5) {B};
  \end{scope}
  \path[draw,->](Xc) to[out=0,in=180] (Xm);
  \path[draw,->](Gb2) to[out=0,in=180] (Gm);
  \path[draw,dashed,->](Ac) to[out=0,in=180] (Am);
  \path[draw,dashed,->](Ab2) to[out=0,in=180] (Am);
\end{tikzpicture}

\tikzsetnextfilename{badmerge2}
\begin{tikzpicture}
  \begin{scope}[yshift=-1.25cm]
    \node[Red,inner sep=0](Aa) at (0, 0) {A};
    \node[inner sep=0](Ba) at (0, -0.5) {B};
  \end{scope}
  % listing diff from a to b1, abstract
  \node[ForestGreen](Gb1) at (1, 0) {G};
  \node[Red](Ab1) at (1, -0.5) {A};
  \node(Bb1) at (1, -1) {B};
  \path[draw,->](Aa) to (Ab1);
  \path[draw,->](Ba) to (Bb1);
  % listing diff from b1 to b2, abstract
  \begin{scope}[yshift=1cm]
    \node[ForestGreen](Ab2-) at (2, 0) {A};
    \node[ForestGreen](Bb2-) at (2, -0.5) {B};
    \node[ForestGreen](Gb2) at (2, -1) {G};
    \node[Red](Ab2) at (2, -1.5) {A};
    \node(Bb2) at (2, -2) {B};
  \end{scope}
  \path[draw,->](Ab1) to (Ab2);
  \path[draw,->](Bb1) to (Bb2);
  \path[draw,->](Gb1) to (Gb2);
  % listing diff from a to c, abstract
  \begin{scope}[yshift=-2cm,xshift=1cm]
    \node[Red](Ac) at (1, 0) {A};
    \node(Bc) at (1, -1) {B};
    \node[Dandelion](Xc) at (1, -0.5) {X};
  \end{scope}
  \path[draw,->](Aa) to (Ac);
  \path[draw,->](Ba) to[out=0,in=180] (Bc);
  \begin{scope}[yshift=0cm,xshift=3cm]
    \node[Red](A-m) at (1, 0) {A};
    \node[Dandelion](Xm) at (1, -0.5) {X};
    \node(B-m) at (1, -1) {B};
    \node[ForestGreen](Gm) at (1, -1.5) {G};
    \node(Am) at (1, -2) {A};
    \node(Bm) at (1, -2.5) {B};
  \end{scope}
  \path[draw,->](Xc) to[out=0,in=180] (Xm);
  \path[draw,->](Gb2) to[out=0,in=180] (Gm);
  \path[draw,dashed,->](Ac) to[out=0,in=180] (A-m);
  \path[draw,dashed,->](Ab2) to[out=0,in=180] (A-m);
\end{tikzpicture}



\section{Theory}

\tikzsetnextfilename{repos-line-add}
\begin{tikzpicture}
  \node[inner sep=3](A0) at (0, 0) {A};
  \node[inner sep=3](B0) at (0, -0.8) {B};
  \node[inner sep=3](C0) at (0, -1.6) {C};
  \path[draw, ->](A0) to (B0);
  \path[draw, ->](B0) to (C0);
  \begin{scope}[xshift=2cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_0$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};
  \end{scope}
  \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
\end{tikzpicture}

\tikzsetnextfilename{repos-line-del}
\begin{tikzpicture}
  \node[inner sep=3](A0) at (0, 0) {A};
  \node[inner sep=3](B0) at (0, -0.8) {B};
  \node[inner sep=3](C0) at (0, -1.6) {C};
  \path[draw, ->](A0) to (B0);
  \path[draw, ->](B0) to (C0);
  \begin{scope}[xshift=2cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_0$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};
  \end{scope}
  \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);

  \begin{scope}[xshift=5cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[dashed, draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_1$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};
  \end{scope}
  \begin{scope}[xshift=3cm, yshift=0cm]
  \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
\end{scope}

\end{tikzpicture}



% \begin{tikzpicture}
%   \node[inner sep=3](A0) at (0, 0) {A};
%   \node[inner sep=3](B0) at (0, -0.8) {B};
%   \node[inner sep=3](C0) at (0, -1.6) {C};
%   \path[draw, ->](A0) to (B0);
%   \path[draw, ->](B0) to (C0);
%   \begin{scope}[xshift=2cm, yshift=0cm]
%     \node[inner sep=3](A1) at (0, 0) {A};
%     \node[inner sep=3](B1) at (0, -1.6) {B};
%     \node[inner sep=3](C1) at (0, -2.4) {C};
%     \node[inner sep=3](D1) at (0.8, -0.8) {D};
%     \path[draw, ->](A1) -- (B1);
%     \path[draw, ->](B1) -- (C1);
%     \path[draw, ->](A1) -- (D1);
%     \path[draw, ->](D1) -- (B1);
%   \end{scope}
%   \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);

%   \begin{scope}[xshift=5cm, yshift=0cm]
%     \node[inner sep=3](A1) at (0, 0) {A};
%     \node[inner sep=3](B1) at (0, -1.6) {B};
%     \node[inner sep=3](C1) at (0, -2.4) {C};
%     \node[inner sep=3](D1) at (0.8, -0.8) {D};
%     \path[draw, ->](A1) -- (B1);
%     \path[draw, ->](B1) -- (C1);
%     \path[dashed, draw, ->](A1) -- (D1);
%     \path[draw, ->](D1) -- (B1);
%   \end{scope}
%   \begin{scope}[xshift=3cm, yshift=0cm]
%     \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
%   \end{scope}

%   \begin{scope}[xshift=3cm]
%     \begin{scope}[xshift=5cm, yshift=0cm]
%       \node[inner sep=3](A1) at (0, 0) {A};
%       \node[inner sep=3](B1) at (0, -1.6) {B};
%       \node[inner sep=3](C1) at (0, -2.4) {C};
%       \node[inner sep=3](D1) at (0.8, -0.8) {D};
%       \path[draw, ->](A1) -- (B1);
%       \path[draw, ->](B1) -- (C1);
%       \path[draw, ->](A1) -- (D1);
%       \path[draw, ->](D1) -- (B1);
%     \end{scope}
%     \begin{scope}[xshift=3cm, yshift=0cm]
%       \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
%     \end{scope}
%   \end{scope}

%   \begin{scope}[xshift=2cm, yshift=-4.5cm]
%     \node[inner sep=3](A1) at (0, 0) {A};
%     \node[inner sep=3](B1) at (0, -1.6) {B};
%     \node[inner sep=3](C1) at (0, -2.4) {C};
%     \node[inner sep=3](D1) at (0.8, -0.8) {D};
%     \path[draw, ->](A1) -- (B1);
%     \path[draw, ->](B1) -- (C1);
%     \path[dashed, draw, ->](A1) -- (D1);
%     \path[draw, ->](D1) -- (B1);

%     \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
%   \end{scope}
%   \begin{scope}[xshift=8cm, yshift=-4.5cm]
%     \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
%   \end{scope}
%   \draw[very thick, ->](4, -5.5) -- (7, -5.5);



%   \begin{scope}[xshift=8cm, yshift=-4.5cm]
%     \node[inner sep=3](A1) at (0, 0) {A};
%     \node[inner sep=3](B1) at (0, -1.6) {B};
%     \node[inner sep=3](C1) at (0, -2.4) {C};
%     \node[inner sep=3](D1) at (0.8, -0.8) {D};
%     \path[draw, ->](A1) -- (B1);
%     \path[draw, ->](B1) -- (C1);
%     \path[dashed, draw, ->](A1) edge[bend right] (D1);
%     \path[draw, ->](A1) edge[bend left] (D1);
%     \path[draw, ->,](D1) -- (B1);
%   \end{scope}
% \end{tikzpicture}

\tikzsetnextfilename{inverse2}
\begin{tikzpicture}
  \node[inner sep=3](A0) at (0, 0) {A};
  \node[inner sep=3](B0) at (0, -0.8) {B};
  \node[inner sep=3](C0) at (0, -1.6) {C};
  \path[draw, ->](A0) to (B0);
  \path[draw, ->](B0) to (C0);
  \begin{scope}[xshift=2cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](A1) -- (D1);
    \path[draw, ->](D1) -- (B1);
  \end{scope}
  \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);

  \begin{scope}[xshift=5cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[dashed, draw, ->](A1) -- (D1);
    \path[draw, ->](D1) -- (B1);
  \end{scope}
  \begin{scope}[xshift=3cm, yshift=0cm]
    \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
  \end{scope}

  \begin{scope}[xshift=3cm]
    \begin{scope}[xshift=5cm, yshift=0cm]
      \node[inner sep=3](A1) at (0, 0) {A};
      \node[inner sep=3](B1) at (0, -1.6) {B};
      \node[inner sep=3](C1) at (0, -2.4) {C};
      \node[inner sep=3](D1) at (0.8, -0.8) {D};
      \path[draw, ->](A1) -- (B1);
      \path[draw, ->](B1) -- (C1);
      \path[draw, ->](A1) -- (D1);
      \path[draw, ->](D1) -- (B1);
    \end{scope}
    \begin{scope}[xshift=3cm, yshift=0cm]
      \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
    \end{scope}
  \end{scope}

  \begin{scope}[xshift=2cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[dashed, draw, ->](A1) -- (D1);
    \path[draw, ->](D1) -- (B1);

    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}
  \begin{scope}[xshift=8cm, yshift=-4.5cm]
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}
  \begin{scope}[xshift=5cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[dashed, draw, ->](A1) edge (D1);
    \path[draw, ->,](D1) -- (B1);
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}


  \begin{scope}[xshift=8cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](A1) edge (D1);
    \path[draw, ->,](D1) -- (B1);
  \end{scope}

  \draw[very thick, ->](3.5, -5.5) -- (4.5, -5.5);
  \draw[very thick, ->](6.5, -5.5) -- (7.5, -5.5);

\end{tikzpicture}


\tikzsetnextfilename{inverse3}
\begin{tikzpicture}
  \node[inner sep=3](A0) at (0, 0) {A};
  \node[inner sep=3](B0) at (0, -0.8) {B};
  \node[inner sep=3](C0) at (0, -1.6) {C};
  \path[draw, ->](A0) to (B0);
  \path[draw, ->](B0) to (C0);
  \begin{scope}[xshift=2cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_0$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};
  \end{scope}
  \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);

  \begin{scope}[xshift=5cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[dashed, draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_1$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};
  \end{scope}
  \begin{scope}[xshift=3cm, yshift=0cm]
    \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
  \end{scope}

  \begin{scope}[xshift=3cm]
    \begin{scope}[xshift=5cm, yshift=0cm]
      \node[inner sep=3](A1) at (0, 0) {A};
      \node[inner sep=3](B1) at (0, -1.6) {B};
      \node[inner sep=3](C1) at (0, -2.4) {C};
      \node[inner sep=3](D1) at (0.8, -0.8) {D};
      \path[draw, ->](A1) -- (B1);
      \path[draw, ->](B1) -- (C1);
      \path[draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_3$};
      \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};
    \end{scope}
    \begin{scope}[xshift=3cm, yshift=0cm]
      \draw[very thick, ->](0.5, -0.8) -- (1.5, -0.8);
    \end{scope}
  \end{scope}

  \begin{scope}[xshift=2cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[dashed, draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_2$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};

    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}
  \begin{scope}[xshift=8cm, yshift=-4.5cm]
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}
  \begin{scope}[xshift=8cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -1.6) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (1, -0.8) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);

    \path[draw, ->](A1) edge[bend left] (D1);
    \path[draw = none](A1) -- (D1) node[midway, above right=0mm]{$c_3$};
    \path[dashed, draw, ->, bend right](A1) edge[bend right] (D1);
    \path[draw = none](A1) -- (D1) node[midway, below left=0mm]{$c_2$};
    \path[draw, ->,](D1) -- (B1) node[midway, below right=-1mm]{$c_0$};
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}


  \begin{scope}[xshift=5cm, yshift=-4.5cm]
    \node[inner sep=3](A3) at (0, 0) {A};
    \node[inner sep=3](B3) at (0, -1.6) {B};
    \node[inner sep=3](C3) at (0, -2.4) {C};
    \node[inner sep=3](D3) at (1, -0.8) {D};
    \path[draw, ->](A3) -- (B3);
    \path[draw, ->](B3) -- (C3);
    \path[draw, ->](B3) -- (C3);
    \path[dashed, draw, ->](A3) edge[bend left] (D3);
    \path[draw = none](A3) -- (D3) node[midway, above right=0mm]{$c_1$};
    \path[dashed, draw, ->, bend right](A3) edge[bend right] (D3);
    \path[draw = none](A3) -- (D3) node[midway, below left=0mm]{$c_2$};
    \path[draw, ->,](D3) -- (B3) node[midway, below right=-1mm]{$c_0$};
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}

  \draw[very thick, ->](3.5, -5.5) -- (4.5, -5.5);
  \draw[very thick, ->](6.5, -5.5) -- (7.5, -5.5);


\end{tikzpicture}



\tikzsetnextfilename{known-vertices0}
\begin{tikzpicture}
  \begin{scope}[xshift=2.4cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -1.6) {C};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
  \end{scope}

  \begin{scope}[xshift=7.4cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -1.6) {C};
    \path[draw, ->](A1) -- (B1);
    \path[dashed, draw, ->](B1) -- (C1);
  \end{scope}

  \draw[very thick, ->](3.5, -0.8) -- (6, -0.8);

  \begin{scope}[xshift=2cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -1.6) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](B1) -- (D1);
    \path[draw, ->](D1) -- (C1);
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}

  \begin{scope}[xshift=7cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -1.6) {D};
    \path[draw, ->](A1) -- (B1);
    \path[dashed, draw, ->](B1) -- (C1);
    \path[draw, ->](B1) -- (D1);
    \path[draw, ->](D1) -- (C1);
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}

  \draw[very thick, ->](3.5, -5.5) -- (6, -5.5);
\end{tikzpicture}




\tikzsetnextfilename{known-vertices1}
\begin{tikzpicture}
  \begin{scope}[xshift=2.4cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -1.6) {C};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
  \end{scope}

  \begin{scope}[xshift=7.4cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -1.6) {C};
    \path[dashed, draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
  \end{scope}

  \draw[very thick, ->](3.5, -0.8) -- (6, -0.8);

  \begin{scope}[xshift=2cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -1.6) {D};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->](B1) -- (D1);
    \path[draw, ->](D1) -- (C1);
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}

  \begin{scope}[xshift=7cm, yshift=-4.5cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -1.6) {D};
    \path[dashed, draw, ->, Magenta](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->, Magenta](B1) -- (D1);
    \path[draw, ->](D1) -- (C1);
    \node[anchor=west, Magenta](C) at (1, -0.5){These edges are in conflict};
    \draw[Magenta](C.west) -- (0.15, -0.4);
    \draw[Magenta](C.west) -- (0.5, -1.1);
    \draw[very thick, ->](0.4, 2) -- (0.4, 0.5);
  \end{scope}

  \draw[very thick, ->](3.5, -5.5) -- (6, -5.5);
\end{tikzpicture}

\tikzsetnextfilename{known-vertices2}
\begin{tikzpicture}
  \begin{scope}[xshift=2.4cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -1.6) {C};
    \path[draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
  \end{scope}

  \begin{scope}[xshift=4.4cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -1.6) {C};
    \path[dashed, draw, ->](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
  \end{scope}

  \draw[very thick, ->](3, -0.8) -- (3.9, -0.8);

  \begin{scope}[xshift=6.4cm, yshift=0cm]
    \node[inner sep=3](A1) at (0, 0) {A};
    \node[inner sep=3](B1) at (0, -0.8) {B};
    \node[inner sep=3](C1) at (0, -2.4) {C};
    \node[inner sep=3](D1) at (0.8, -1.6) {D};
    \path[dashed, draw, ->, Green, thick](A1) -- (B1);
    \path[draw, ->](B1) -- (C1);
    \path[draw, ->, Green, thick](B1) -- (D1);
    \path[draw, ->](D1) -- (C1);
    \node[anchor=west, Green](C) at (1, -0.5){These edges are not in conflict};
    \draw[Green](C.west) -- (0.15, -0.4);
    \draw[Green](C.west) -- (0.5, -1.1);
  \end{scope}

  \draw[very thick, ->](5, -0.8) -- (5.9, -0.8);
\end{tikzpicture}



\tikzsetnextfilename{pseudo0}
\begin{tikzpicture}
  \node[inner sep=3](A0) at (0, 0) {$A_0$};
  \node[inner sep=3](A1) at (0, -0.8) {$A_1$};
  \node[inner sep=3](A) at (0, -2) {$\vdots$};
  \node[inner sep=3](An) at (0, -3.2) {$A_n$};
  \path[draw, ->](A0) -- (A1);
  \path[draw, ->](A1) -- (A);
  \path[draw, ->](A) -- (An);

  \draw[very thick, ->](0.5, -1.6) -- (2.5, -1.6);

  \begin{scope}[xshift=3cm]
    \node[inner sep=3](B) at (0, 0.8) {$B$};
    \node[inner sep=3](A0) at (0, 0) {$A_0$};
    \node[inner sep=3](A1) at (0, -0.8) {$A_1$};
    \node[inner sep=3](A) at (0, -2) {$\vdots$};
    \node[inner sep=3](An) at (0, -3.2) {$A_n$};
    \node[inner sep=3](C) at (0, -4) {$C$};
    \path[draw, ->, dashed](B) -- (A0);
    \path[dashed,draw, ->](A0) -- (A1);
    \path[dashed,draw, ->](A1) -- (A);
    \path[dashed,draw, ->](A) -- (An);
    \path[draw, ->](An) -- (C);
  \end{scope}
\end{tikzpicture}

\tikzsetnextfilename{pseudo1}
\begin{tikzpicture}
  \node[inner sep=3](A0) at (0, 0) {$A_0$};
  \node[inner sep=3](A1) at (0, -0.8) {$A_1$};
  \node[inner sep=3](A) at (0, -2) {$\vdots$};
  \node[inner sep=3](An) at (0, -3.2) {$A_n$};
  \path[draw, ->](A0) -- (A1);
  \path[draw, ->](A1) -- (A);
  \path[draw, ->](A) -- (An);

  \draw[very thick, ->](0.5, -1.6) -- (2.5, -1.6);

  \begin{scope}[xshift=3cm]
    \node[inner sep=3](B) at (0, 0.8) {$B$};
    \node[inner sep=3](A0) at (0, 0) {$A_0$};
    \node[inner sep=3](A1) at (0, -0.8) {$A_1$};
    \node[inner sep=3](A) at (0, -2) {$\vdots$};
    \node[inner sep=3](An) at (0, -3.2) {$A_n$};
    \node[inner sep=3](C) at (0, -4) {$C$};
    \path[draw, ->, dashed](B) -- (A0);
    \path[dashed,draw, ->](A0) -- (A1);
    \path[dashed,draw, ->](A1) -- (A);
    \path[dashed,draw, ->](A) -- (An);
    \path[draw, ->](An) -- (C);
    \draw[->, dotted](B) to[in=45, out=-45] (C);
  \end{scope}
\end{tikzpicture}




\tikzsetnextfilename{new-repos-line-add}
\begin{tikzpicture}
  \node[draw, ellipse, inner sep=3](A0) at (0, -0.8) {$c_0: [0,n[$};
  \begin{scope}[xshift=4cm, yshift=0.8cm, scale=2]
    \node[inner sep=3, draw, ellipse](A1) at (0, -0) {$c_0: [0, i[$};
    \node[inner sep=3, draw, ellipse](B1) at (0, -1.6) {$c_0: [i, n[$};
    \node[inner sep=3, draw, ellipse](D1) at (0.8, -0.8) {$c_1: [0, m[$};
    \path[draw, ->](A1) -- (B1) node[midway, left]{$c_0$};
    \path[draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_1$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_1$};
  \end{scope}
  \draw[very thick, ->](1.5, -0.8) -- (3.2, -0.8);
\end{tikzpicture}

\tikzsetnextfilename{new-repos-line-del}
\begin{tikzpicture}
  \node[draw, ellipse, inner sep=3](A0) at (0, -0.8) {$c_0: [0,n[$};
  \begin{scope}[xshift=4cm, yshift=0.8cm,scale=2]
    \node[inner sep=3, draw, ellipse](A1) at (0, -0) {$c_0: [0, i[$};
    \node[inner sep=3, draw, ellipse](B1) at (0, -1.6) {$c_0: [i, n[$};
    \node[inner sep=3, draw, ellipse](D1) at (0.8, -0.8) {$c_1: [0, m[$};
    \path[draw, ->](A1) -- (B1) node[midway, left]{$c_0$};
    \path[draw, ->](A1) -- (D1) node[midway, above right=-1mm]{$c_1$};
    \path[draw, ->](D1) -- (B1) node[midway, below right=-1mm]{$c_1$};
  \end{scope}
  \draw[very thick, ->](1.5, -0.8) -- (3.2, -0.8);
  \begin{scope}[xshift=9.5cm, yshift=0.8cm,scale=2]
    \node[inner sep=3, draw, ellipse](A1) at (0, 0.8) {$c_0: [0, j[$};
    \node[inner sep=3, draw, ellipse](A2) at (0, -0) {$c_0: [j, i[$};
    \node[inner sep=3, draw, ellipse](B1) at (0, -2.4) {$c_0: [i, n[$};
    \node[inner sep=3, draw, ellipse](D1) at (0.8, -0.8) {$c_1: [0, k[$};
    \node[inner sep=3, draw, ellipse](D2) at (0.8, -1.6) {$c_1: [k, m[$};
    \path[draw, ->, dashed](A1) -- (A2) node[midway, right]{$c_2$};
    \path[draw, ->](A2) -- (B1) node[midway, left]{$c_0$};
    \path[draw, ->, dashed](A2) -- (D1) node[midway, above right=-1mm]{$c_2$};
    \path[draw, ->](D1) -- (D2) node[midway, right]{$c_1$};
    \path[draw, ->](D2) -- (B1) node[midway, below right=-1mm]{$c_1$};
  \end{scope}
  \draw[very thick, ->](7, -0.8) -- (9, -0.8);
\end{tikzpicture}

\end{document}