\begin{tabular}{|l|l|}
\hline
Parity &  $d^{(x)}_{(r,s)} = d^{(x)}_{(r,-s)} $
\\
\hline
Permutation & $d^{(s)}_{(r,s)} = (-1)^{rs} d^{(s)}_{(r,s)}$ \ , \
$  d^{(t)}_{(r,s)} = (-)^{rs} d^{(u)}_{(r,s)} $
\\
\hline
Shift &  $d^{(x)}_{(r,s)} = d^{(x)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}

\begin{subequations}
\label{011}
\begin{align}
d^{(s)}_\text{diag} &= 1
\ , \\
d^{(s)}_{(2, 0)} &=n^2 -4
\ ,\\
d^{(s)}_{(2, 1)} &= -(n^2 - 4)
\ ,\\
3d^{(s)}_{(3, 0)} &= -8n^2(n-2)^2(n+2)
\ ,\\
3d^{(s)}_{(3,  \frac23)} &= 4(n^2 - 1)(n^2 - 3)(n - 2)
\ , \\
2d^{(s)}_{(4, 0)} &=  n^2(n - 2)^3(n+1)^2(n+ 2)
\nonumber
\\&\hspace{3cm}
\times
\left[
+2n^4 -6n^2 -8n + 16
\right]
\ , \\
2d^{(s)}_{(4, \frac12)}
\nonumber
\\&\hspace{1.5cm}
\times
\left[w_sn(n^2-2)(n^2-3)-4n^4+4n^3+8n^2+4n-16\right]
\, , \\
2d^{(s)}_{(4,1)} &=
n^2(n^2-4)^3(n-1)^2\left[w_s (n+1)^2 -2n^2-8n-10\right]
\ .
\end{align}
\aline
\begin{align}
d^{(t)}_{(1,0)} &= 1
\ , \\
d^{(t)}_{(1,1)} &= -1
\ , \\
2d^{(t)}_{(2, 0)} &= (n - 2)\left[w_s(n + 2) - 8\right]
\ ,\\
2d^{(t)}_{(2, \frac12)} &= -n(w_sn-4)
\ ,\\
2d^{(t)}_{(2, 1)} &=  w_s(n^2-4)
\ ,\\
3d^{(t)}_{(3, 0)} &=  n^2(n-2)^2
\left[
w^2_s(n+2)^2 - 4w_s(n+2)+ n^2 +8
\right]
\ ,\\
3d^{(t)}_{(3,  \frac13)} &=
-(n-1)^2(n + 1)
\nonumber
\\
\times
\left[
(n^2 - 3)(n + 1)w^2_s
-2(n+1)(2n - 3)w_s
\right]
\ , \\
3d^{(t)}_{(3,  \frac23)} &=
(n^2 - 3)(n^2 - 1)
\left[w^2_s(n^2-1)-2w_s(2n-1)-2(n+1)(n-2)
\right]
\ , \\
3d^{(t)}_{(3, 1)} &=
-(n^2 - 4)^2
\left[
w^2_sn^2 -4w_sn + (n+2)^2
\right]
\ .
\end{align}
\end{subequations}

\DeclareRobustCommand\picf{
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices
\draw (0, 0) -- (0, 3);
\draw (3, 0) -- (3, 3);
\draw (3, 3) to [out = -60, in = 60] (3, 0);
\end{tikzpicture}

\subsubsection{Case of $\left< V_{(\frac12,0)}V_{(\frac12,0)}V_{(1,0)}V_{(1, 0)} \right>$ and  $\left< V_{(\frac12,0)}V_{(\frac12,0)}V_{(1,1)}V_{(1,1)} \right>$ with $\sigma = (0, \frac32, \frac32)$\ \picf}

\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
Parity &  $d^{(x)}_{(r,s)} = d^{(x)}_{(r,-s)} $
\\
\hline
Permutation &
d^{(s)}_{(r,s)} =(-)^{rs} d^{(s)}_{(r,s)} \  , \
d^{(t)}_{(r,s)} = (-)^{rs} d^{(u)}_{(r,s)}
\\
\hline
Shift &  $d^{(s)}_{(r,s)} = (-)^{\delta_{r\geq 2}} d^{(s)}_{(r,s+2)}$\ , \ $d^{(t,u)}_{(r,s)} = -d^{(t,u)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}
Vanishing structure constants due to symmetry: $d^{(s)}_\text{odd-spin} = d^{(s)}_{(r,1)} =0$.

We find that the normalized structure constants $d^{(x)}_{(r,s)}$ for the two 4-point functions that we consider are identical to the leading order in $w_s$. In particular, the structure constants of the types $d^{(s)}_{(r\leq 3,s)}$ and $d^{(t)}_{(r\leq \frac32,s)}$ coincide, as they do not depend on $w_s$. In the analytic results that we will display, only the structure constants $d^{(t)}_{(\frac52,0)},d^{(t)}_{(\frac52,\frac25)}$ and $d^{(t)}_{(\frac52,\frac45)}$ differ, in which case we indicate the results for $\left< V_{(\frac12,0)}V_{(\frac12,0)}V_{(1,0)}V_{(1, 0)} \right>$ above the results for $\left< V_{(\frac12,0)}V_{(\frac12,0)}V_{(1,1)}V_{(1,1)} \right>$.

\begin{subequations}
\begin{align}
d^{(s)}_{\text{diag}} & = 1
\ , \\
3d^{(s)}_{(3,0)} & = 2n^2(n^2 - 4)^2
\ , \\
3d^{(s)}_{(3,\frac23)} & = -2(n^2 -3)(n^2 -1)^2
\ .
\end{align}
\aline
\begin{align}
3d^{(t)}_{(\frac32,0)} &= -(n+ 2)
\ ,
\\
3d^{(t)}_{(\frac32,\frac23)} &= -2(n - 1)
\ ,
\\
5d^{(t)}_{(\frac52,0)} &= (n+2)^2(n-1)^2w_s - \left\{\begin{array}{l} 8n(n+2)(n-1) \ ,
\\ 0 \ ,
\end{array}\right.
\\
5d^{(t)}_{(\frac52,\frac25)} &= -2(n^2-n-1)\left[\varphi n^2 -n-2\varphi-1\right]w_s
\nonumber
\\ & \hspace{3cm}
+2(n-1) \left\{\begin{array}{l}
\left[(4\varphi+2)n^2-(3\varphi+3)n-4\varphi-3\right] \ ,
\\
\left[(4\varphi-2)n^2 +(\varphi-3)n-4\varphi-3\right] \ ,
\end{array}\right.
\\
5d^{(t)}_{(\frac52,\frac45)} &=
-2(n^2-n-1)\varphi^{-1}\left[n^2+\varphi n +\varphi-2\right]w_s
\nonumber
\\ & \hspace{3cm}
\left[(4\varphi-6)n^2 -(3\varphi-6)n-4\varphi+7\right] \ ,
\\
\left[(4\varphi-2)n^2 +(\varphi+2)n -4\varphi+7\right]\ .
\end{array}\right.
\end{align}
\label{0320}
\end{subequations}

\DeclareRobustCommand\picg{
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices
\draw (0, 3) -- (3, 3) -- (3, 0) -- (0, 0);
\end{tikzpicture}

\subsubsection{Case of
$\left< V_{(\frac12,0)}V_{(\frac12,0)}V_{(1,0)}V_{(1, 0)} \right>$  with $\sigma = (1,\frac12, \frac32)$\ \picg}

We again consider the 4-point functions $\left< V_{(\frac12,0)}^2V_{(\frac12,0)}^2 \right>$ and $\left< V_{(\frac12,0)}^2V_{(1,1)}^2 \right>$, but with a different signature. This signature breaks the permutation symmetry, so that there is no longer a simpler relation between the $t$- and $u$-channels, and the $s$-channel spectrum is no longer even-spin. Moreover, the structure constants for our two 4-point functions are less similar.
\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
Parity &  $d^{(x)}_{(r,s)} = d^{(x)}_{(r,-s)} $
\\
\hline
Shift &  $d^{(s)}_{(r,s)} = (-)^{\delta_{r\geq 2}} d^{(s)}_{(r,s+2)}$\ , \ $d^{(t,u)}_{(r,s)} = -d^{(t,u)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}
The shift and parity relations imply $d^{(s)}_{(r\geq 2,1)}=0$.
\begin{subequations}
\begin{align}
d_{(1,0)}^{(s)} & = 1
\ , \\
d_{(1,1)}^{(s)} & = - 1
\ , \\
d_{(2,0)}^{(s)} & = n(n-2)
\ , \\
2d_{(2,\frac12)}^{(s)} & = -\sqrt{2}n(n - 2)
\ , \\
3d_{(3,0)}^{(s)} &= 2 n^3(n-4)(n-2)(n+1)
\ , \\
& =
-\sqrt{3} (n-2) (n-1)^2 (n+1) \left(n^2+1\right)
\ ,\\
3d_{(3,\frac23)}^{(s)} &= n (n-1) (n+1)^2 (n^2-3)
\ , \\
-\sqrt{2}n^5 \left(n^2-3\right) \left(n^2-2\right)^2
\ , \\
n^3(n-2)^3 (n+1)^2 \left(n^4+2 n^3+n^2-n-2\right)\ .
\end{align}
\aline
\begin{align}
d_{(\frac12,0)}^{(t)} &=1
\ ,\\
3d_{(\frac32, 0)}^{(t)} & = 4
\  , \\
3d_{(\frac32, \frac23)}^{(t)} & = 2
\  , \\
5d_{(\frac52, 0)}^{(t)} &=
\right]
\  , \\
5d_{(\frac52,\frac25)}^{(t)} &=
2\left[-n^4+2n^2+2n-1\right] +2\varphi\left[n^3-2n^2-2\right]
\ , \\
5d_{(\frac52, \frac45)}^{(t)} &
2\left[n^4-n^3-2n+3\right] +2\varphi\left[n^3-2n^2-2\right]
\ .
\end{align}
\aline
\begin{align}
3d_{(\frac32,0)}^{(u)} &= -2(n + 2)
\ ,
\\
3d_{(\frac32,\frac23)}^{(u)} &= -2(n - 1)
\ ,
\\
5d_{(\frac52, 0)}^{(u)} &=
2 (n-1) (n+2) \left[n^2-3 n+6\right]
\ ,
\\
-2\left[n^4-3n^3+n+1\right]-2\varphi\left[n^4-5 n^3+3 n^2+4 n+2\right]
\ ,
\\
-2\left[2n^4-8n^3+3n^2+5n+3\right]+2\varphi\left[n^4-5 n^3+3 n^2+4 n+2\right]
\ .
\end{align}
\label{1320}
\end{subequations}

\subsubsection{Case of
$\left< V_{(\frac12,0)}V_{(\frac12,0)}V_{(1,1)}V_{(1, 1)} \right>$  with $\sigma = (1,\frac12, \frac32)$\ \picg}

The symmetries and vanishing structure constants are as in the case $\left<V_{(\frac12,0)}^2 V_{(1,0)}^2\right>$, except that we notice the additional vanishing $d^{(t)}_{(\frac32,0)}=0$ -- a rare example of a vanishing for no known reason.
\begin{subequations}
\begin{align}
d_{(1,0)}^{(s)} &= 1
\ , \\
d_{(1,1)}^{(s)} &= -1
\ , \\
d_{(2,0)}^{(s)} &= -(n-2)(n + 4)
\ , \\
2d_{(2,\frac12)}^{(s)} &= \sqrt{2}n(n + 2)
\ ,\\
3d_{(3,0)}^{(s)} &= -2n^2 (n-2)(n+4)(n^2 + n - 8)
\ , \\
& =
\sqrt{3}(n-1)^2(n+1)(n+2)(n^2 -7)
\ ,\\
3d_{(3,\frac23)}^{(s)} &= -(n - 4)(n-1)(n+1)^2(n^2 - 3)
\ .
\end{align}
\aline
\begin{align}
d_{(\frac12,0)}^{(t)} &=1
\ ,\\
\ , \\
d_{(\frac32,\frac23)}^{(t)} &= 2
\  , \\
5d_{(\frac52, 0)}^{(t)} &=
-2 (n+2)^2(n-1)^2
\  , \\
5d_{(\frac52,\frac25)}^{(t)} & =
2\left[n^4-2n^2-6n+5\right]-2\varphi\left[n^3 + 2n^2 -4n +2\right]
\ , \\
5d_{(\frac52,\frac45)}^{(t)} &
= 2\left[-n^4+n^3+4n^2+2n-3\right]-2\varphi\left[n^3 + 2n^2 -4n +2\right]
\ .
\end{align}
\aline
\begin{align}
3d_{(\frac32,0)}^{(u)} &=
\  , \\
3d_{(\frac32,\pm\frac23)}^{(u)} &=
\  , \\
5d_{(\frac52, 0)}^{(u)} &=
2 (n+2)^2(n-1)^2
\  , \\
5d_{(\frac52,\frac25)}^{(u)} &=
-2\left[n^4+n^3-12n^2-3n+9\right]-2\varphi\left[n^4 -n^3 -5n^2 + 4n + 14\right]
\ , \\
5d_{(\frac52,\frac45)}^{(u)} &=
-2\left[2n^4-17n^2+n+23\right]+2\varphi\left[n^4 -n^3 -5n^2 + 4n + 14\right]
\ .
\end{align}
\label{1321}
\end{subequations}

\DeclareRobustCommand\pich{
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices
\draw (0, 0) -- (0, 3);
\draw (3, 0) -- (3, 3);
\draw (3, 3) to [out = -60, in = 60] (3, 0);
\draw (0, 3) to [out = -60, in = 60] (0, 0);
\end{tikzpicture}

\subsubsection{Case of $\left < V_{(1,0)}V_{(1,0)}V_{(1,0)}V_{(1,0)} \right > $ and $\left < V_{(1,1)}V_{(1,1)}V_{(1,1)}V_{(1,1)} \right > $ with $\sigma = (0, 2, 2)$\ \pich}

By reflection symmetry, these two 4-point functions have the same normalized structure constants.
\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
Parity &  $d^{(x)}_{(r,s)} = d^{(x)}_{(r,-s)} $
\\
\hline
d^{(s)}_{(r,s)} =(-)^{rs} d^{(s)}_{(r,s)} \  , \
d^{(t)}_{(r,s)} = (-)^{rs} d^{(u)}_{(r,s)}
\\
\hline
Shift &  $d^{(x)}_{(r,s)} = d^{(x)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}
Vanishing structure constants: $d^{(s)}_\text{odd-spin}=0$.
\begin{subequations}
\begin{align}
d^{(s)}_\text{diag} &=1
\ , \\
& =  n^2 \left(n^2-4\right)^3 \left(n^2-1\right)^2
\ ,\\
2d_{(4,\frac12)}^{(s)}&= -n^4(n^2 -3)^2(n^2 - 2)^2
\ ,\\
& =  n^2 \left(n^2-4\right)^3 \left(n^2-1\right)^2
\ .
\end{align}
\aline
\begin{align}
2d_{(2,0)}^{(t)} &=
n^2 - 4
\ ,\\
2d_{(2,\frac12)}^{(t)}&= -n^2
\ ,\\
2d_{(2,1)}^{(t)} &=
n^2 - 4
\ ,\\
3d_{(3,0)}^{(t)} &=  n^2 (n^2-4)^2w_s -8n^3(n^2-4)
\ ,\\
3d_{(3, \frac13)}^{(t)}
&= - (n^2-1)^2(n^2-3)w_s +6n(n^2-1)^2
\ , \\
3d_{(3, \frac23)}^{(t)}
&= (n^2-1)^2(n^2-3)w_s-2n(n^2-1)(n^2-3)
\ ,\\
& =
-n^2(n^2 - 4)^2w_s
\ .
\end{align}
\label{022}
\end{subequations}

\DeclareRobustCommand\pici{
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices
\draw (0, 0) -- (3, 0) -- (0, 3) -- (3, 3);
\draw (0, 0) to [out = -30, in = -135] (3.5, -0.5) to [out = 45, in = -60] (3, 3);
\end{tikzpicture}

\subsubsection{Case of $\left < V_{(1,0)}V_{(1,0)}V_{(1,0)}V_{(1,0)} \right > $ and $\left < V_{(1,1)}V_{(1,1)}V_{(1,1)}V_{(1,1)} \right > $ with $\sigma = (2, 1, 1)$ \ \pici}

The symmetries are the same as with $\sigma = (0,2,2)$, leading again to $d^{(s)}_\text{odd-spin}=0$.
\begin{subequations}
\begin{align}
&= n^2-4
\ ,\\
&= -(n^2-4)
\ ,\\
&= 32n^2(n^2-4)
\ ,\\
-4(n^2 - 1)(n^2 - 3)
\ , \\
&= (n-2)^3 (n+1)^2 (n+2) \left[n^6+2 n^5-2 n^4-8 n^3+9 n^2-4 n+4\right]
\ ,
\\
d_{(4, \frac12)}^{(s)}
&= 2n^5(n^2 -3)(n^2 - 2)
\ ,
\\
-(n-2) (n-1)^2 (n+2)^3 \left[n^6-2 n^5-2 n^4+8 n^3+9 n^2+4 n+4\right]
\end{align}
\aline
\begin{align}
d_{(1,0)}^{(t)} &= 1
\ ,\\
d_{(1,1)}^{(t)} &= 1
\ ,\\
d_{(2,0)}^{(t)} &= -(n - 2)
\ ,\\
d_{(2,\frac12)}^{(t)} &= -n
\ ,\\
d_{(2,1)}^{(t)} &= -(n + 2)
\ ,\\
3d_{(3,0)}^{(t)} &=2n^2(n^4 - 6n^2 + 32)
\ ,\\
3d_{(3,\frac13)}^{(t)} &=(n^2 - 1)(n^4 -n^2 + 18)
\ ,\\
3d_{(3,\frac23)}^{(t)} &=-(n^2 - 1)(n^2 - 2)(n^2 - 3)
\ ,\\
3d_{(3,1)}^{(t)} &= -2n^2(n^2 - 4)^2
\ .
\end{align}
\label{211}
\end{subequations}

\DeclareRobustCommand\picj{
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices
\draw (0, 0) -- (3, 3) to [out = -120, in = 30] (0, 0);
\draw (0,0) -- (0, 3);
\draw (0, 3) to [out = 30, in = 135] (3.5, 3.5) to [out = -45, in =60] (3, 0);
\end{tikzpicture}

\subsubsection{Case of $\left<V_{(\frac32,0)}V_{(1,1)}V_{(1,0)}V_{(\frac12,0)}\right>$ with $\sigma = (\frac32, 2,\frac12)$\ \picj}

\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
Parity &  $d^{(s)}_{(r,s)} = (-)^{\delta_{r\neq \frac32}} d^{(s)}_{(r,-s)} $,\, $d^{(t)}_{(r,s)}=(-)^{\delta_{r\geq 2}}d^{(t)}_{(r,s)}$,\, $d^{(u)}_{(r,s)} = (-)^{\delta_{r\geq \frac32}} d^{(u)}_{(r,-s)} $
\\
\hline
Shift &  $d^{(s,u)}_{(r,s)} = (-)^{\delta_{r\geq \frac52}} d^{(s,u)}_{(r,s+2)}$  \ , \ $d^{(t)}_{(r,s)}=-d^{(t)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\label{sym:3221}
\end{align}
The parity equations are obtained with the help of the shift equation for $V_{(1,1)}$. This equation suffers from an overall ambiguity from the relative normalizations of the solutions for the two 4-point functions $\left<V_{(\frac32,0)}V_{(1,\pm 1)}V_{(1,0)}V_{(\frac12,0)}\right>$. This ambiguity is lifted by the observation that $d^{(u)}_{(\frac12,0)}\neq 0$ in our numerical solution. Then parity implies the vanishings
$d^{(s)}_{(\frac12,0)} = d^{(u)}_{(\frac32,0)} = d^{(s,u)}_{(r\geq \frac52,0)} = d^{(t)}_{(r\geq 2,0)}=0$.
\begin{subequations}
\label{3221}
\begin{align}
3d^{(s)}_{(\frac32, 0)}
&= n + 2
\ , \\
3d^{(s)}_{(\frac32, \frac23)}
&= -2(n -1 )
\ , \\
5d^{(s)}_{(\frac52, \frac25)}
&= 4\cos\left(\tfrac{\pi}{10}\right)\left[-n^4+4n^2-2 + \varphi(n+1)(n^2-3)\right]
\ ,\\
d^{(s)}_{(\frac52, \frac45)}
&= 4\cos\left(\tfrac{3\pi}{10}\right)
\left[n^4 - 4n^2 +2 +\varphi^{-1}(n + 1)(n^2 - 3)\right]
\ .
\end{align}
\aline
\begin{align}
2d_{(2, \frac12)}^{(t)}
& = \sqrt{2}n^2
\ ,\\
d_{(2, 1)}^{(t)}
&=n^2 - 4
\ ,\\
3d_{(3, \frac13)}^{(t)}
(n -4)(n-1)(n+1)^2(n^2 - 3)
\ , \\
3d_{(3, \frac23)}^{(t)}
\sqrt{3}(n^2 - 1)^2(n + 2)(n -3)
\ , \\
3d_{(3, 1)}^{(t)}
2n^2(n^2 - 4)^2
\ .
\end{align}
\aline
\begin{align}
d^{(u)}_{(\frac12, 0)}
\ , \\
3d^{(u)}_{(\frac32, \frac23)}
&= -2\sqrt{3}
\ , \\
5d^{(u)}_{(\frac52, \frac25)}
&= 4\cos\left(\tfrac{\pi}{10}\right)\left[n^2-2+\varphi\right]
\ ,\\
d^{(s)}_{(\frac52, \frac45)}
&= 4\cos\left(\tfrac{3\pi}{10}\right)
\left[-n^2+2+\varphi^{-1}\right]
\ .
\end{align}
\end{subequations}

\subsubsection{Case of $\left<V_{(\frac32,\frac23)}V_{(1,1)}V_{(1,0)}V_{(\frac12,0)}\right>$ with $\sigma = (\frac32, 2,\frac12)$\ \picj}

In this case we have the same shift equations as in Table \eqref{sym:3221}, but no parity symmetry due to the presence of the field $V_{(\frac32,\frac23)}$. We observe the vanishings $d^{(u)}_{(\frac32,0)}=d^{(u)}_{(\frac52,0)}=0$. This suggests that the structure constants of the type $d^{(u)}_{(r\geq \frac32,0)}$ vanish, even though there is no symmetry that requires it.
\begin{subequations}
\label{3223}
\begin{align}
3d_{(\frac32, 0)}^{(s)}
&= (n+1)
\ ,\\
3d_{(\frac32, \frac23)}^{(s)}
&= -2(n -1)
\ , \\
3d_{(\frac32, -\frac23)}^{(s)}
&= -2(n-1)
\ , \\
5d_{(\frac52, 0)}^{(s)}
&= \sqrt{3}(n - 1)(n + 2)(n^2 + 3n - 2)
\ .
\end{align}
\aline
\begin{align}
d_{(2, 0)}^{(t)}
&= \cos\left(\tfrac{\pi}{6}\right)(n^2 - 4)
\ ,\\
d_{(2, \frac12)}^{(t)}
&= \cos\left(\tfrac{5\pi}{12}\right)n^2
\ ,\\
d_{(2, -\frac12)}^{(t)}
&= \cos\left(\tfrac{\pi}{12}\right)n^2
\ ,\\
2d_{(2, 1)}^{(t)}
&=-(n^2 - 4)
\ ,\\
3d_{(3, 0)}^{(t)}
&= \sqrt{3}
n^2(n^2 - 4)
\ , \\
3d_{(3, \frac13)}^{(t)}
(n^2 - 3)(n + 4)(n + 1)(n - 1)
\ , \\
3d_{(3, -\frac13)}^{(t)}
2(n^2 - 3)(n^2 - 1)^2
\ , \\
3d_{(3, \frac23)}^{(t)}
2\sqrt{3}n(n^2 -1)^2
\ , \\
3d_{(3, -\frac23)}^{(t)}
\sqrt{3}(n^2 - 1)^2(n+ 3)(n -2)
\ , \\
3d_{(3, 1)}^{(t)}
-n^2(n^2 - 16)(n^2 -4)
\ .
\end{align}
\aline
\begin{align}
d_{(\frac12,0)}^{(u)} & = 1
\ , \\
d_{(\frac32, 0)}^{(u)}
&= 0
\ ,\\
3d_{(\frac32, \frac23)}^{(u)}
&= -4\sqrt{3}
\ ,\\
3d_{(\frac32, -\frac23)}^{(u)}
&= -2\sqrt{3}
\ ,\\
d_{(\frac52, 0)}^{(u)}
&= 0
\ ,\\
5d_{(\frac52, \frac25)}^{(u)}
\left(n + \varphi^{-1}\right)\left(n -2\cos\left(\tfrac{4\pi}{15}\right) \right)
\ , \\
5d_{(\frac52, -\frac25)}^{(u)}
\left(n + \varphi^{-1}\right)\left(-n +2\cos\left(\tfrac{14\pi}{15}\right) \right)
\ , \\
5d_{(\frac52, \frac45)}^{(u)}
&= 4\varphi^{-1} \cos\left(\tfrac{\pi}{10}\right)(n -\varphi)\left(-n + 2\cos\left(\tfrac{2\pi}{15}\right)\right)
\ , \\
5d_{(\frac52, -\frac45)}^{(u)}
&=4\varphi^{-1} \cos\left(\tfrac{\pi}{10}\right)(n -\varphi)\left(n -2\cos\left(\tfrac{8\pi}{15}\right) \right)
\ .
%5d_{(\frac52, \frac25)}^{(u)}
%&= 4\cos\left(\tfrac{\pi}{10}\right)\left[n^2 + (\psi^2-\varphi-1)n+\psi-1\right]
%\ , \\
%5d_{(\frac52, -\frac25)}^{(u)}
%&=- 4\cos\left(\tfrac{\pi}{10}\right)\left[n^2+(\psi^2+2\varphi-2)n+\varphi-\psi-1\right]
%\ ,\\
%5d_{(\frac52, \frac45)}^{(u)}
%\ ,\\
%5d_{(\frac52, -\frac45)}^{(u)}
%&= 4\cos\left(\tfrac{\pi}{10}\right)\varphi^{-1}\left[n^2+(\psi-2\varphi)n+3-\psi^2\right]
\end{align}
\end{subequations}

\subsection{Some even-spin and odd-spin solutions}\label{sec:esos}

Let us consider the 4-point functions $\left< V_{(\frac32,0)}V_{(\frac12,0)}^3\right>$ and $\left< V_{(\frac32,\frac23)}V_{(\frac12,0)}^3\right>$, where we do not allow any diagonal field to propagate. In both cases, the space of solutions of crossing symmetry is two-dimensional, and the solutions correspond to the combinatorial maps \cite{gjnrs23}
\begin{align}
\begin{tikzpicture}[baseline=(base), scale = .3]
\vertices
\draw (0, 0) -- (0, 3);
\draw (0, 0) -- (3, 3);
\draw (0, 0) -- (3, 0);
\end{tikzpicture}
\qquad \text{and} \qquad
\begin{tikzpicture}[baseline=(base), scale = .3]
\vertices
\draw (0, 0) -- (3, 0);
\draw (0, 0) -- (0, 3);
\draw (0, 0) to [out = -30, in = -135] (3.5, -.5) to [out = 45, in = -80] (3, 3);
\end{tikzpicture}
\end{align}
Both maps have the same signature $\sigma = (1,1,1)$, and we do not know how to characterize the corresponding solutions by imposing constraints on the structure constants. We will focus on another basis of solutions, defined by their behaviour under permuting the third and fourth fields. In other words, we will consider $s$-channel odd-spin and even-spin solutions, as defined in Section \ref{sec:ps}. It will turn out that the normalized structure constants for these solutions are polynomial.

\subsubsection{Case of $\left< V_{(\frac32,0)}V_{(\frac12,0)}V_{(\frac12,0)}V_{(\frac12,0)} \right>$: even-spin solution}

This solution turns out to be even-spin in all channels. We deduce the permutation symmetries of structure constants from Table \eqref{drels}.
\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
Parity &  $d^{(x)}_{(r,s)} = d^{(x)}_{(r,-s)} $
\\
\hline
$d^{(s)}_{(r,s)} = (-)^{rs}d^{(s)}_{(r,s)} = d^{(t)}_{(r,s)} = d^{(u)}_{(r,s)}
\\
\hline
Shift &  $d^{(x)}_{(r,s)} = (-)^{\delta_{r=1}} d^{(x)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}
\begin{subequations}
\label{320e}
\begin{align}
d^{(s)}_{(1,0)} &= 1
\ , \\
2d^{(s)}_{(2,0)} &= (n-2)^2
\ , \\
2d^{(s)}_{(2,1)} &= -(n^2 - 4)
\ , \\
3d^{(s)}_{(3,0)} &= 2n^2(n-2)^2(n^2 + 2n + 3)
\ , \\
3d^{(s)}_{(3,\frac23)} &= - n(n - 2)(n^2 - 1)(n^2 - 3)
\ .
\end{align}
\end{subequations}

\subsubsection{Case of $\left< V_{(\frac32,0)}V_{(\frac12,0)}V_{(\frac12,0)}V_{(\frac12,0)} \right>$: odd-spin solution}

This solution turns out to be odd-spin in all channels. It also turns out to be parity-odd. Combined with the shift equations, this implies the vanishings $d^{(x)}_{(r\geq 2,1)}=0$.
\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
Parity &  $d^{(x)}_{(r,s)} = -d^{(x)}_{(r,-s)} $
\\
\hline
$d^{(s)}_{(r,s)} = -(-)^{rs}d^{(s)}_{(r,s)} = -d^{(t)}_{(r,s)} = -d^{(u)}_{(r,s)}
\\
\hline
Shift &  $d^{(x)}_{(r,s)} = (-)^{\delta_{r=1}} d^{(x)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}
\begin{subequations}
\label{320o}
\begin{align}
d^{(s)}_{(1,1)} &= 1
\ , \\
2d^{(s)}_{(2,\frac12)} &= -n(n+2)
\ , \\
3d^{(s)}_{(3,\frac13)} &=
\sqrt{3}
(n-1)^2 (n+1) (n+2) \left(n^2+n-4\right)
\ .
\end{align}
\end{subequations}

\subsubsection{Case of $\left< V_{(\frac32,\frac23)}V_{(\frac12,0)}V_{(\frac12,0)}V_{(\frac12,0)} \right>$: even-spin solution}

This solution is even-spin in the $s$-channel only.
\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
$d^{(s)}_{(r,s)} = (-)^{rs}d^{(s)}_{(r,s)}\ , \ d^{(t)}_{(r,s)} = (-)^{rs}d^{(u)}_{(r,s)}
\\
\hline
Shift &  $d^{(x)}_{(r,s)} = (-)^{\delta_{r=1}} d^{(x)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}
\begin{subequations}
\label{3223e}
\begin{align}
d^{(s)}_{(1,0)} &= 2
\ , \\
2d^{(s)}_{(2,0)} &= -2(n-2)(n+4)
\ , \\
2d^{(s)}_{(2,1)} &= 2(n^2 - 4)
\ , \\
3d^{(s)}_{(3,0)} &= 2n^2(n-2)\left[n^3+3n^2-n-9\right]
\ , \\
3d^{(s}_{(3,\frac23)} &= 2(n^2 - 1)(n^2 - 3)
\left[n^2-2n+3\right]
\ , \\
3d^{(s}_{(3,-\frac23)} &= -2(n^2 - 3)(n^2 - 1)
(n + 1)(2n - 3)
\ .
\end{align}
We observe the relations
\begin{equation}
rs \in 2\mathbb{Z} \implies d^{(s)}_{(r,s)}=2d^{(t)}_{(r,s)} = 2d^{(u)}_{(r,s)}
\ ,
\end{equation}
so we only need to write the odd-spin $t$-channel structure constants,
\begin{align}
d^{(t)}_{(1,1)} &= -\sqrt{3}
\ ,\\
2d^{(t)}_{(2,\frac12)} &=
-\sqrt{3}n(n - 1 - \sqrt{3})
\ ,\\
2d^{(t)}_{(2,-\frac12)} &=
\sqrt{3}n(n - 1 + \sqrt{3})
\ , \\
d^{(t)}_{(3,\frac13)} &=
(n-1)(n^2 - 1)(n^2 - 4n - 1)
\ , \\
d^{(t)}_{(3,-\frac13)} &=
(n^2 - 1)^2(n^2 - 3)
\ , \\
d^{(t)}_{(3, 1)} &= -
(n+2)(n^2 - 4)(n^3 - n^2 -n -1)
\ .
\end{align}
\end{subequations}

\subsubsection{Case of $\left< V_{(\frac32,\frac23)}V_{(\frac12,0)}V_{(\frac12,0)}V_{(\frac12,0)} \right>$: odd-spin solution}

This solution is odd-spin in the $s$-channel only.
\begin{align}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|l|}
\hline
$d^{(s)}_{(r,s)} = -(-)^{rs}d^{(s)}_{(r,s)}\ , \ d^{(t)}_{(r,s)} = -(-)^{rs}d^{(u)}_{(r,s)}
\\
\hline
Shift &  $d^{(x)}_{(r,s)} = (-)^{\delta_{r=1}} d^{(x)}_{(r,s+2)}$
\\
\hline
\end{tabular}
\end{align}
\begin{subequations}
\label{3223o}
\begin{align}
d^{(s)}_{(1,1)} &= 2
\ , \\
d^{(s)}_{(2,\frac12)} &=
n(n-1 - \sqrt{3})
\ , \\
d^{(s)}_{(2,-\frac12)} &=
\ , \\
3d^{(s)}_{(3,\frac13)} &=
-2\sqrt{3}(n - 1)(n^2 - 1)(n^2 - 4n - 1)
\ , \\
3d^{(s)}_{(3,-\frac13)} &=
-2\sqrt{3}(n^2 - 1)^2(n^2 - 3)
\ , \\
3d^{(s)}_{(3, 1)} &=
2\sqrt{3}(n + 2)(n^2 - 4)(n^3 - n^2 - n - 1)
\ .
\end{align}
We observe the relations
\begin{equation}
rs \in 2\mathbb{Z} + 1 \implies d^{(s)}_{(r,s)}
= -2 d^{(t)}_{(r,s)}
= -2 d^{(u)}_{(r,s)}
\ ,
\end{equation}
so we only need to write the $t$-channel even-spin structure constants,
\begin{align}
d^{(t)}_{(1,0)} &= -\sqrt{3}
\ , \\
2d^{(t)}_{(2,0)} &= \sqrt{3}(n-2)(n+4)
\ , \\
2d^{(t)}_{(2,1)} &= -\sqrt{3}(n^2 - 4)
\ , \\
3d^{(t)}_{(3,0)} &= -\sqrt{3}n^2(n-2)\left[n^3+3n^2-n-9\right]
\ , \\
3d^{(t)}_{(3,\frac23)} &= -\sqrt{3}(n^2 - 1)(n^2 - 3)
\left[n^2-2n+3\right]
\ , \\
3d^{(t)}_{(3,-\frac23)} &= \sqrt{3}(n^2 - 3)(n^2 - 1)
(n + 1)(2n - 3)
\ .
\end{align}
\end{subequations}
Finally, notice that the odd-spin and even-spin solutions for $\left< V_{(\frac32,\frac23)}V_{(\frac12,0)}V_{(\frac12,0)}V_{(\frac12,0)} \right>$ have a simple relation to one another:
\begin{align}
rs \in 2\mathbb{Z}  \implies \sqrt{3}d^{(s)}_{(r,s)}\Big\vert_{\text{even-spin}}&=-2d^{(t)}_{(r,s)}\Big\vert_{\text{odd-spin}} = -2d^{(u)}_{(r,s)}\Big\vert_{\text{odd-spin}} \ ,
\\
rs \in 2\mathbb{Z} + 1 \implies \sqrt{3}d^{(s)}_{(r,s)}\Big\vert_{\text{odd-spin}}&=-2d^{(t)}_{(r,s)}\Big\vert_{\text{even-spin}} = -2d^{(u)}_{(r,s)} \Big\vert_{\text{even-spin}}
\ .
\end{align}
Thanks to this relation, it is easy to write solutions that are even-spin or odd-spin the the $t$-channel or in the $u$-channel, by taking simple linear combinations of our two solutions.

\section{Lattice models}\label{sec:lattice}

\subsection{The two lattice models}\label{sec:ttlm}

We will now introduce two lattice models:
\begin{itemize}
\item The Nienhuis loop model, which we already sketched in Section \ref{sec:intloop}. The model lives on a honeycomb lattice, and has $4$ possible configurations \eqref{nk} at each trivalent vertex. We call its partition function $Z^\text{loop}$.
\item The Fortuin--Kasteleyn cluster model, which lives on a square lattice, and has $2$ possible configurations
\begin{tikzpicture}[baseline=(base), scale = .3]
\coordinate (base) at (0, .5);
\draw[gray] (0,0) -- (2,2);
\draw[gray] (0,2) -- (2,0);
\draw[very thick,blue] (0,0) to (0.7,0.7) arc (-45:45:0.42) to (0,2);
\draw[very thick,blue] (2,0) to (1.3,0.7) arc (-135:-225:0.42) to (2,2);
\end{tikzpicture}\
\begin{tikzpicture}[baseline=(base), scale = .3]
\coordinate (base) at (0, .5);
\draw[gray] (0,0) -- (2,2);
\draw[gray] (0,2) -- (2,0);
\draw[very thick,blue] (0,0) to (0.7,0.7) arc (135:45:0.42) to (2,0);
\draw[very thick,blue] (0,2) to (0.7,1.3) arc (-135:-45:0.42) to (2,2);
\end{tikzpicture}
at each tetravalent vertex. We call its partition function $Z^\text{cluster}$.
\end{itemize}
Both models come with a parameter $n$, which is the weight of loops. If $n\in\mathbb{N}$, the partition function of the loop model coincides with that of the $O(n)$ model, which has a global symmetry group  $O(n)$. In fact it is possible to make sense of the $O(n)$ symmetry even if $n$ is not integer. However, we will consider correlation functions that involve loops with arbitrary weights, and this breaks the $O(n)$ symmetry in general. We therefore avoid referring to the loop model as an $O(n)$ model. Similarly, if $Q=n^2\in\mathbb{N}$, the partition function of the cluster model coincides with that of the $Q$-state Potts model, with its global symmetry group $S_Q$. Again, introducing loops with arbitrary weights breaks that symmetry.

\subsubsection{Loop model}

The loop model is most conveniently defined on a honeycomb lattice $\mathcal{L}$ that is obtained from the square lattice $\mathcal{S}$
by deforming each of its vertices into a pair of degree-three vertices separated by a new horizontal edge:
\begin{align}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .5]
\draw[gray] (0.5,0.5) -- (1.5,1.5);
\draw[gray] (0.5,1.5) -- (1.5,0.5);
\end{tikzpicture} \ \mapsto \
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .6]
\draw[gray] (0,0) -- (0.25,0.433) -- (0,0.866);
\draw[gray] (1,0) -- (0.75,0.433) -- (1,0.866);
\draw[gray] (0.25,0.433) -- (0.75,0.433);
\end{tikzpicture}
\qquad \implies \qquad
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .35]
\foreach\x in {0,2,4,6}
\foreach\y in {0,2,4,6}
\draw[gray] (\x+0.5,\y+0.5) -- (\x+1.5,\y+1.5);
\draw[gray] (\x+0.5,\y+1.5) -- (\x+1.5,\y+0.5);
\foreach\x in {1,3,5}
\foreach\y in {1,3,5}
\draw[gray] (\x+0.5,\y+0.5) -- (\x+1.5,\y+1.5);
\draw[gray] (\x+0.5,\y+1.5) -- (\x+1.5,\y+0.5);
\end{tikzpicture} \quad \mapsto \quad
\begin{tikzpicture}[baseline=(current  bounding  box.center), xscale = .7, yscale= .4]
\foreach\x in {0,2,4,6}
\foreach\y in {0,1.732,3.464,5.196}
\draw[gray] (\x,\y) -- (\x+0.25,\y+0.433) -- (\x,\y+0.866);
\draw[gray] (\x+1,\y) -- (\x+0.75,\y+0.433) -- (\x+1,\y+0.866);
\draw[gray] (\x+0.25,\y+0.433) -- (\x+0.75,\y+0.433);
\foreach\x in {1,3,5}
\foreach\y in {0.866,2.598,4.330}
\draw[gray] (\x,\y) -- (\x+0.25,\y+0.433) -- (\x,\y+0.866);
\draw[gray] (\x+1,\y) -- (\x+0.75,\y+0.433) -- (\x+1,\y+0.866);
\draw[gray] (\x+0.25,\y+0.433) -- (\x+0.75,\y+0.433);
\end{tikzpicture}
\label{sq2hex}
\end{align}
Each configuration $\mathcal{C}$ is a set of loops, obtained by occupying some of the edges of $\mathcal{L}$, subject to the constraint that each vertex
be adjacent to 0 or 2 occupied edges: the curves do not end or bifurcate.
The partition function is defined by attributing a local weight $K$ to each occupied edge and a non-local weight $n$ to each loop:
\begin{align}
Z^\text{loop}(K,n) = \sum_{\mathcal{C}} K^{|\mathcal{C}|} n^{\ell(\mathcal{C})} \ ,
\label{ZOnloop}
\end{align}
where $|\mathcal{C}|$ is the number of occupied edges and $\ell(\mathcal{C})$ is the number of loops.

Let us build diagonal correlation functions. We give a lattice implementation of the general idea from \cite{rib22}. We mark $N$ distinct faces of our lattice $\{\mathbf{x}_1,\ldots,\mathbf{x}_N\}$. Each loop partitions these faces into two (possibly empty) subsets, and we allow the loop's weight to depend on this partition. In the case $N=4$, there are $8$ possible partitions, and we write the corresponding weights as follows:
\begin{align}
\begin{tabular}{ll|ll}
$w_1$ & (1)(234) & $w_s$ & (12)(34) \\
$w_2$ & (2)(134) & $w_u$ & (13)(24) \\
$w_3$ & (3)(124) & $w_t$ & (14)(23) \\
$w_4$ & (4)(123) & $n$ & (1234) \\
\end{tabular}
\label{pw}
\end{align}
The diagonal 4-point function of the lattice loop model then reads
\begin{align}
C^\text{loop}(\mathbf{x}_i | K,n,w_i,w_x) = \frac{1}{Z^\text{loop}(K,n)} \sum_{\mathcal{C}} K^{|\mathcal{C}|} n^{\ell_0(\mathcal{C})} \prod_{i=1,2,3,4} w_i^{\ell_i(\mathcal{C})} \prod_{x=s,t,u} w_x^{\ell_x(\mathcal{C})}\ .
\label{ClattOn}
\end{align}
Here $\ell_0(A)$ is the number of contractible loops,
while $\ell_i(A)$ and $\ell_x(A)$ denote the numbers of various types of non-contractible loops, with $i=1,2,3,4$
and $x=s,t,u$.

Since loops are non-intersecting, at most one of the three integers $\ell_s,\ell_t,\ell_u$ can be non-vanishing, in other words $\ell_s\ell_t + \ell_s\ell_u+\ell_t\ell_u=0$. This leads to the decomposition
\begin{align}
C^\text{loop}(w_s,w_t,w_u) = C^{(0)} + C^{(s)}(w_s)+C^{(t)}(w_t)+C^{(u)}(w_u)\ ,
\label{cccc}
\end{align}
\begin{subequations}
\label{Csubtr}
\begin{align}
C^{(0)} &= C^\text{loop}(0,0,0)\ , \\
C^{(s)}(w_s) &= C^\text{loop}(w_s,0,0)-C^\text{loop}(0,0,0)\ , \\
C^{(t)}(w_t) &= C^\text{loop}(0,w_t,0)-C^\text{loop}(0,0,0)\ , \\
C^{(u)}(w_u) &= C^\text{loop}(0,0,w_u)-C^\text{loop}(0,0,0)\ .
\end{align}
\end{subequations}

\subsubsection{Cluster model}

The cluster model is in fact a model of completely packed loops, which we call cluster model to distinguish it from the previously considered loop model. The loops live on a diagonally oriented square lattice $\mathcal{S}$. Here is a sample configuration:
\begin{align}
\newcommand{\verti}[2]{
\draw[ultra thick, blue] (#1-.5, #2-.5) to [out=45, in = -90] (#1-.18, #2) to [out=90, in=-45] (#1-.5, #2+.5);
\draw[ultra thick, blue] (#1+.5, #2-.5) to [out=135, in = -90] (#1+.18, #2) to [out=90, in=-135] (#1+.5, #2+.5);
\ifodd#1\relax\draw[thick, green!70!black] (#1, #2-1) -- (#1, #2+1);
\else\draw[thick, red!85!black] (#1, #2-1) -- (#1, #2+1);\fi
\newcommand{\horiz}[2]{
\draw[ultra thick, blue] (#1-.5, #2-.5) to [out=45, in = 180] (#1, #2-.18) to [out = 0, in=135] (#1+.5, #2-.5);
\draw[ultra thick, blue] (#1-.5, #2+.5) to [out=-45, in = 180] (#1, #2+.18) to [out = 0, in=-135] (#1+.5, #2+.5);
\ifodd#1\relax\draw[thick, red!85!black] (#1-1, #2) -- (#1+1, #2);
\else\draw[thick, green!70!black] (#1-1, #2) -- (#1+1, #2);\fi
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .6]
\clip (-.2, -.2) rectangle (16.2, 10.2);
\foreach\i in {0,...,14}{
\draw (-10+2*\i+.8, -.2) -- (2*\i+1.2, 10.2);
\draw (-10+2*\i+.8, 10.2) -- (2*\i+1.2, -.2);}
\foreach\i in {0,...,8}{
%\draw (2*\i, 0) -- (2*\i, 10);
\draw[ultra thick, blue] (2*\i+.5, 9.5) to [out=45, in = 180] (2*\i+1, 9.82) to [out = 0, in=135] (2*\i+1.5, 9.5);
\draw[ultra thick, blue] (2*\i+.5, .5) to [out=-45, in = 180] (2*\i+1, .18) to [out = 0, in=-135] (2*\i+1.5, .5);
\foreach\j in {0,...,5}{
%\draw (0, 2*\j) -- (16, 2*\j);
\draw[ultra thick, blue] (15.5, 2*\j+.5) to [out=45, in=-90] (15.82, 2*\j+1) to [out=90, in=-45] (15.5, 2*\j+1.5);
\draw[ultra thick, blue] (.5, 2*\j+.5) to [out=135, in=-90] (.18,2*\j+1) to [out = 90, in=-135] (.5, 2*\j+1.5);
\foreach\i in {0,...,8}{\foreach\j in {0,...,5}{
\node[red!85!black] at (2*\i, 2*\j) [fill, circle, scale = .5] {};}}
\foreach\i in {0,...,7}{\foreach\j in {0,...,4}{
\node[green!70!black] at (2*\i+1, 2*\j+1) [fill, circle, scale = .5] {};}}
\horiz{1}{2};\horiz{3}{2};\horiz{5}{2};\verti{7}{2};\horiz{9}{2};\verti{11}{2};\horiz{13}{2};\horiz{15}{2};
\verti{1}{4};\horiz{3}{4};\verti{5}{4};\verti{7}{4};\verti{9}{4};\verti{11}{4};\horiz{13}{4};\horiz{15}{4};
\verti{1}{6};,\verti{3}{6};\verti{5}{6};\horiz{7}{6};\horiz{9}{6};\horiz{11}{6};
\verti{13}{6};\horiz{15}{6};
\horiz{1}{8};\verti{3}{8};\horiz{5}{8};\verti{7}{8};\horiz{9}{8};\horiz{11}{8};\verti{13}{8};\verti{15}{8};
\horiz{2}{1};\horiz{2}{3};\verti{2}{5};\verti{2}{7};\verti{2}{9};
\horiz{4}{1};\horiz{4}{3};\horiz{4}{5};\horiz{4}{7};\horiz{4}{9};
\verti{6}{1};\horiz{6}{3};\verti{6}{5};\verti{6}{7};\horiz{6}{9};
\verti{8}{1};\horiz{8}{3};\horiz{8}{5};\verti{8}{7};\verti{8}{9};
\horiz{10}{1};\verti{10}{3};\verti{10}{5};\horiz{10}{7};\horiz{10}{9};
\verti{12}{1};\verti{12}{3};\horiz{12}{5};\verti{12}{7};\verti{12}{9};
\horiz{14}{1};\verti{14}{3};\horiz{14}{5};\verti{14}{7};\verti{14}{9};
\end{tikzpicture}
\label{plat}
\end{align}
Loops are shown as blue curves that jointly cover all the edges of $\mathcal{S}$ and split in one of two ways at its vertices.
Each configuration of loops on $\mathcal{S}$ is bijectively related to a set
of clusters (in red) on an axially oriented square lattice $\mathcal{L}$, and to a corresponding set of dual clusters (in green) on a shifted axially oriented square lattice $\mathcal{L}^*$. In other words, $\mathcal{L}$ and $\mathcal{L}^*$
are mutually dual lattices, and $\mathcal{S}$ is their common medial lattice, with a vertex of $\mathcal{S}$ standing on each pair of
intersecting edges of $\mathcal{L}$ and $\mathcal{L}^*$. Each loop on $\mathcal{S}$ then forms the boundary between
a cluster on $\mathcal{L}$ and a dual cluster on $\mathcal{L}^*$. The partition function $Z$ is defined by attributing a weight $\frac{v}{n}$ to
each occupied (red) edge of $\mathcal{L}$ and a weight $n$ to each (blue) loop:
\begin{align}
Z^{\text{cluster}}(v,n) = \sum_{A \subseteq E} \left( \frac{v}{n} \right)^{|A|} n^{\ell(A)} \ ,
\label{ZPloop}
\end{align}
where the sum runs over subsets $A$ of the edges $E$ in $\mathcal{L}$, and $\ell(A)$ denotes the number of loops on $\mathcal{S}$ as determined by $A$. The critical value of the lattice weight $v$ is $v_c=n$.
This corresponds to the ferromagnetic critical point of the Potts model.

Diagonal correlation functions are defined as in the loop model, with the points $\{\mathbf{x}_1,\ldots,\mathbf{x}_N\}$ now being nodes of the lattice $\mathcal{L}$. In the case of 4-point functions, the expression is
\begin{align}
C^{\text{cluster}}(\mathbf{x}_i | v,n,w_i,w_x) = \frac{1}{Z^{\text{cluster}}(v,n)} \sum_{A \subseteq E} \left( \frac{v}{n} \right)^{|A|} n^{\ell_0(A)} \prod_{i=1,2,3,4} w_i^{\ell_i(A)} \prod_{x=s,t,u} w_x^{\ell_x(A)}\, .
\label{ClattPotts}
\end{align}
Since the points $\{\mathbf{x}_1,\ldots,\mathbf{x}_4\}$ belong to clusters, and loops separate clusters from dual clusters, any two points are separated by an even number of loops. This leads to the following $6$ parity constraints on loop numbers, $3$ of which are independent:
\begin{align}
\ell_{12tu},\ell_{34tu},\ell_{13st},\ell_{24st},\ell_{14su},\ell_{23su}\in 2\mathbb{N}\ ,
\label{labcd}
\end{align}
where $\ell_{abcd}=\ell_a+\ell_b+\ell_c+\ell_d$. Now, our numerical calculations will turn out to require the stronger constraint that all $7$ loop numbers $\ell_i,\ell_x$ have a well-defined parity. In particular, without this constraint, ratios of amplitude would depend on lattice size.
To illustrate this constraint, let us sketch two configurations near the points $\{\mathbf{x}_1,\mathbf{x}_2\}$, with loops in blue, clusters in red and dual clusters in white:
\begin{align}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .45]
\filldraw[red!35] (-3,-2) -- (11,-2) -- (11,6) -- (-3,6) -- cycle;
\filldraw[white] (1,2) circle (2.5);
\filldraw[white] (7,2) circle (2.5);
\filldraw[red!35] (1,2) circle (1.5);
\filldraw[red!35] (7,2) circle (1.5);
\draw[very thick, blue] (1,2) circle (1.5);
\draw[very thick, blue] (1,2) circle (2.5);
\draw[very thick, blue] (7,2) circle (1.5);
\draw[very thick, blue] (7,2) circle (2.5);
\filldraw (1,2) circle (3pt);
\draw (1,2) node[below] {$\mathbf{x}_1$};
\filldraw (7,2) circle (3pt);
\draw (7,2) node[below] {$\mathbf{x}_2$};
\begin{scope}[xshift=18cm]
\filldraw[red!35] (2,2) circle (3.0);
\filldraw[white] (2,2) circle (2.0);
\filldraw[red!35] (2,2) circle (1.0);
\filldraw[red!35] (7,2) circle (1.5);
\draw[very thick, blue] (2,2) circle (1.0);
\draw[very thick, blue] (2,2) circle (2.0);
\draw[very thick, blue] (2,2) circle (3.0);
\draw[very thick, blue] (7,2) circle (1.5);
\filldraw (2,2) circle (3pt);
\draw (2,2) node[below] {$\mathbf{x}_1$};
\filldraw (7,2) circle (3pt);
\draw (7,2) node[below] {$\mathbf{x}_2$};
\end{scope}
\end{tikzpicture}
\end{align}
We have $(\ell_1,\ell_2)=(2,2)$ on the left and $(3,1)$ on the right. The common parity of $\ell_1$ and $\ell_2$ determines whether the smallest object that contains both points is a cluster (left) or a dual cluster (right). We want our correlation functions to distinguish these two cases.

Equivalently, our constraint means that the 4-point function must be an eigenvector of all $7$ reflections $w_i\to -w_i,w_x\to -w_x$. We therefore consider the combinations
\begin{align}
C^{\nu_1,\nu_s,\nu_t,\nu_u}(\mathbf{x}_i | v,n,w_i,w_x) = \frac{1}{16}\sum_{\epsilon_a\in\{+,-\}} \left[\prod_{a\in\{1,s,t,u\}}\epsilon_a^{\nu_a}\right] C^{\text{cluster}}(\mathbf{x}_i | v,n,\epsilon_i w_i,\epsilon_x w_x)\ ,
\label{cna}
\end{align}
where $\nu_a\in \{0, 1\}$, and by convention $\epsilon_2=\epsilon_3=\epsilon_4=1$. This is the sum over lattice configurations such that $\forall a\in \{1,s,t,u\}, \ell_a \equiv \nu_a\bmod 2$, with the parities of $\ell_2,\ell_3,\ell_4$ then determined by Eq. \eqref{labcd}. Since loops do not intersect, only the $8$ combinations such that $\nu_s+\nu_t+\nu_u\in\{0, 1\}$ are in fact non-vanishing. Then, if we decompose $C^\text{cluster}$ as in Eq. \eqref{cccc}, we have
\begin{align}
C^{\nu_1,\nu_s,\nu_t,\nu_u} = \delta_{\nu_s}\delta_{\nu_t}\delta_{\nu_u} C^{(0),\nu_1} + \delta_{\nu_t}\delta_{\nu_u} C^{(s),\nu_1,\nu_s} + \delta_{\nu_s}\delta_{\nu_u} C^{(t),\nu_1,\nu_t} + \delta_{\nu_t}\delta_{\nu_u}  C^{(u),\nu_1,\nu_u}\ ,
\label{csnn}
\end{align}
where $\delta_\nu$ is the Kronecker delta function, and in each term we only sum over the signs of the weights that do appear, for example $C^{(s),\nu_1,\nu_s} = \frac14\sum_{\epsilon_1,\epsilon_s\in\{+,-\}} \epsilon_1^{\nu_1}\epsilon_s^{\nu_s} C^{(s)}(\epsilon_1w_1,\epsilon_sw_s)$.

\subsection{Transfer matrix formalism}

\subsubsection{Construction of the transfer matrix}

For both lattice models we define a time slice as a horizontal line just below a row of horizontal edges in $\mathcal{L}$. If we take the width of $\mathcal{L}$ to be $L$ lattice spacings,
the time slice intersects $2L$ loop strands. The transfer matrix $T$ constructs loop configurations from the bottum up, by adding one row together with its Boltzmann weights. We write the transfer matrix as
\begin{align}
T = \left( \prod_{i=1}^L \check{R}_{2i,2i+1} \right) \times \left( \prod_{i=1}^L \check{R}_{2i-1,2i} \right) \,,
\label{TMR}
\end{align}
where $\check{R}_{k,k+1}$ is an operator that propagates through a single vertex of $\mathcal{S}$ by acting on a pair of neighbouring loop strands $k$ and $k+1$. We apply periodic boundary conditions horizontally, meaning that the strands labelled $2L+1$ and $1$ are identified.

The explicit expression of the operator $\check{R}_{k,k+1}$ depends on the model. In the loop model, $\check{R}_{k,k+1}$ is obtained by gluing two vertices, which gives rise to $8$ possible diagrams:
\begin{align}
\check{R}_{k,k+1}^\text{loop} =
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\end{tikzpicture} + K\bigg[
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (0,1.732);
\end{tikzpicture}  +
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (2,0) -- (1.5,0.866) -- (2,1.732);
\end{tikzpicture}
\bigg]
+ K^2\bigg[
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,1.732) -- (0.5,0.866) -- (1.5,0.866) -- (2,1.732);
\node at (1, -1) {cup};
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (1.5,0.866) -- (2,1.732);
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (2,0) -- (1.5,0.866) -- (0.5,0.866) -- (0,1.732);
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[very thick,blue] (2,0) -- (1.5,0.866) -- (2,1.732);
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (1.5,0.866) -- (2,0);
\node at (1, -1) {cap};
\end{tikzpicture}\bigg]\ .
\label{RcheckOn}
\end{align}
In particular, we call a cap the concatenation of two loop strands, and a cup the creation of two connected loop strands.
In the cluster model, the operator $\check{R}^\text{cluster}_{k,k+1}$ takes two forms, depending on the parity of $k$:
\begin{align}
\check{R}_{2i,2i+1}^{\text{cluster}} = \frac{v}{n}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[gray] (0,0) -- (2,2);
\draw[gray] (0,2) -- (2,0);
\draw[very thick,blue] (0,0) to (0.7,0.7) arc (-45:45:0.42) to (0,2);
\draw[very thick,blue] (2,0) to (1.3,0.7) arc (-135:-225:0.42) to (2,2);
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[gray] (0,0) -- (2,2);
\draw[gray] (0,2) -- (2,0);
\draw[very thick,blue] (0,0) to (0.7,0.7) arc (135:45:0.42) to (2,0);
\draw[very thick,blue] (0,2) to (0.7,1.3) arc (-135:-45:0.42) to (2,2);
\end{tikzpicture}
\qquad , \qquad
\check{R}_{2i-1,2i}^{\text{cluster}} =
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[gray] (0,0) -- (2,2);
\draw[gray] (0,2) -- (2,0);
\draw[very thick,blue] (0,0) to (0.7,0.7) arc (-45:45:0.42) to (0,2);
\draw[very thick,blue] (2,0) to (1.3,0.7) arc (-135:-225:0.42) to (2,2);
\end{tikzpicture} + \frac{v}{n}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[gray] (0,0) -- (2,2);
\draw[gray] (0,2) -- (2,0);
\draw[very thick,blue] (0,0) to (0.7,0.7) arc (135:45:0.42) to (2,0);
\draw[very thick,blue] (0,2) to (0.7,1.3) arc (-135:-45:0.42) to (2,2);
\end{tikzpicture}
\ .
\label{RcheckPotts}
\end{align}
In both forms, the second diagram is a cap with a cup on top.

\subsubsection{Space of states and the partition function}

Let us now define the space of states on which the transfer matrix acts.
In the loop model, the space of states has a basis made of dilute defect-free link patterns over the set of sites $\{1,2,\ldots,2L\}$. Such a link pattern is a collection of  $p$ arcs with $0 \le p \le L$, such that each arc connects two distinct sites, each site is connected by $0$ or $1$ arc, and arcs do not cross. Therefore, $2(L-p)$ sites are left empty.
The link patterns can be depicted by arranging sites on a line (the time slice) and drawing a set of $p$ non-intersecting arcs in the half-space below that line.
For example, here is a dilute link pattern with $p=4$ arcs in the case $L=6$:
\begin{align}
\begin{tikzpicture}[scale =.4]
\draw[very thick,blue] (1,0) arc(-180:0:3.0 and 2.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw[very thick,blue] (3,0) arc(-180:0:1.5);
\draw[very thick,blue] (4,0) arc(-180:0:0.5);
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture}
\label{lpOn}
\end{align}
In order to define the action of the transfer matrix on dilute link patterns, we need only define the action of the operator $\check{R}_{k,k+1}^\text{loop}$ \eqref{RcheckOn}. This operator is written as a linear combination of diagrams, which act by diagram concatenation. Any diagram that does not respect the occupancy of the link pattern for the sites $k$ and $k+1$ acts as zero by definition, so there are always $2$ out of $8$ diagrams in \eqref{RcheckOn} that contribute.
In our example \eqref{lpOn}, the sites $2$ and $3$ are respectively occupied and empty, so that the diagrams $2$ and $5$ in \eqref{RcheckOn} contribute to the action of $\check{R}_{2,3}^\text{loop}$. Similarly, the action of $\check{R}_{4,5}^\text{loop}$ reduces to the contributions of the diagrams $7$ and $8$.
As a result, the loop model's transfer matrix is an element of the Motzkin algebra \cite{bh11}, also known \cite{jrs22} as the
dilute affine Temperley--Lieb algebra \cite{gri95, bs13}. The space of states is a standard module of that algebra.

In the case of the cluster model, the states are still defect-free link patterns over the set of sites $\{1,2,\ldots,2L\}$, but they are no longer dilute: there are always $L$ arcs, which connect all the sites pairwise. Here is an example with $L=6$:
\begin{align}
\begin{tikzpicture}[scale =.4]
\draw[very thick,blue] (0,0) arc(-180:0:3.5 and 2.5);
\draw[very thick,blue] (8,0) arc(-180:0:1.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw[very thick,blue] (1,0) arc(-180:0:1.5);
\draw[very thick,blue] (2,0) arc(-180:0:0.5);
\draw[very thick,blue] (5,0) arc(-180:0:0.5);
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture}
\end{align}
As a result, the cluster model's transfer matrix is an element of the affine Temperley--Lieb algebra. The space of states is a standard module of that algebra.

For both models, the least trivial diagram of $\check{R}_{k,k+1}^\text{loop}$ or $\check{R}^\text{cluster}_{k,k+1}$ is the one that involves a cap, i.e. that
contracts the sites $k$ and $k+1$. If these two sites were already connected by the link pattern, connecting them again produces a closed loop, which is erased from the pattern and replaced with a factor of $n$. If the sites $k$ and $k+1$ were not connected by the link pattern, we obtain situations where two arcs are concatenated, like in the following example:
\begin{align}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[very thick,blue] (1,0) arc(-180:0:3.0 and 2.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw[very thick,blue] (3,0) arc(-180:0:1.5);
\draw[very thick,blue] (4,0) arc(-180:0:0.5);
\draw[gray] (3,0) -- (3.25,0.866) -- (3,1.732);
\draw[gray] (4,0) -- (3.75,0.866) -- (4,1.732);
\draw[gray] (3.25,0.866) -- (3.75,0.866);
\draw[very thick,blue] (3,0) -- (3.25,0.866) -- (3.75,0.866) -- (4,0);
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture} \quad = \quad
\begin{tikzpicture}[baseline={([yshift=-6pt]current  bounding  box.north)}, scale = .4]
\draw[very thick,blue] (1,0) arc(-180:0:3.0 and 2.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw[very thick,blue] (5,0) arc(-180:0:0.5);
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture}
\end{align}

The link patterns that we have described allow us to compute the partition functions $Z^\text{loop}(K,n)$ \eqref{ZOnloop} and $Z^\text{cluster}(v,n)$ \eqref{ZPloop}. In particular, the local Boltzmann weights $K$ and $\frac{v}{n}$ come from the prefactors in the operators $\check{R}_{k,k+1}^\text{loop}$ \eqref{RcheckOn} and $\check{R}^\text{cluster}_{k,k+1}$ \eqref{RcheckPotts}, while the non-local loop weight $n$ arises whenever a closed loop is produced. We will now turn to computing correlation functions, which involve more variables and therefore require more complicated constructions.

\subsubsection{Diagonal 4-point functions}

For concreteness, let us focus on the lattice model's diagonal 4-point function \eqref{ClattOn} or \eqref{ClattPotts}. The weight of each closed loop depends on how it partitions the set $\{\mathbf{x}_1,\mathbf{x}_2,\mathbf{x}_3,\mathbf{x}_4\}$, according to Eq. \eqref{pw}. In order to take this information into account in the transfer matrix formalism, we
introduce three seam lines $\Sigma_0, \Sigma_1,\Sigma_2$:
\begin{align}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[thick,dashed] (-1,0) -- (-1,11);
\draw[thick,dashed] (9,0) -- (9,11);
\draw[thick] (-1, 11) -- (9, 11);
\draw[thick] (-1, 0) -- (9, 0);
\filldraw (2,2) circle (3pt);
\draw (2,2) node[below] {$\mathbf{x}_1$};
\filldraw (6,2) circle (3pt);
\draw (6,2) node[below] {$\mathbf{x}_2$};
\filldraw (2,8) circle (3pt);
\draw (2,8) node[above] {$\mathbf{x}_4$};
\filldraw (6,8) circle (3pt);
\draw (6,8) node[above] {$\mathbf{x}_3$};
\draw[red,dashed] (2,8) -- (2,2) -- (6,2) -- (6,8);
\draw (2,5) node[left] {$\Sigma_1$};
\draw (4,2) node[above] {$\Sigma_0$};
\draw (6,5) node[right] {$\Sigma_2$};
\draw[very thick,blue,rotate=30] (7.9,3) arc(0:360:2 and 5.5);
\draw[very thick,green] (2,1.8) circle(1.1);
\end{tikzpicture}
\label{3seamspic}
\end{align}
Our picture is in the cylinder geometry with the left and right boundaries being identified. The seam lines are of combinatorial nature: they can be deformed at will, and can even cross one another, as long as their
endpoints are unchanged. These lines are only accounting devices: in spite of this they were called defect lines by Gamsa and Cardy \cite{gc06}.

Given a closed loop, knowing how it partitions the set $\left\{\mathbf{x}_1,\mathbf{x}_2,\mathbf{x}_3,\mathbf{x}_4\right\}$ is equivalent to knowing its characteristic $(\sigma_0,\sigma_1,\sigma_2)\in \mathbb{Z}_2^3$, where $\sigma_i\in\mathbb{Z}_2$ is the number of times the loop crosses the seam line $\Sigma_i$, modulo $2$. For instance, in the picture, the blue loop has characteristic $(1,1,1)$ and is hence of type $(13)(24)$ with weight $w_t$,
while the green loop has characteristic $(1,1,0)$ and is hence of type $(1)(234)$ with weight $w_1$.

For the transfer matrix to assign the correct loop weights, we associate a characteristic $(\sigma_0,\sigma_1,\sigma_2)$ to each arc. When the transfer matrix acts on the link pattern, we determine the characteristic of the resulting link pattern via local rules:
\begin{itemize}
\item When two arcs are concatenated by a cap, their characteristics add.
\item When an arc is created by a cup, its initial characteristic is $(0,0,0)$.
\item Each time the seam line crosses an arc, that arc's characteristic is modified as $\sigma_i\to \sigma_i+1$.
\item When an arc between $k$ and $k+1$ is turned into a loop by the cap, the corresponding loop weight \eqref{pw} is inferred from the characteristics of the arc.
\end{itemize}
In particular, the operator $\check{R}^\text{loop}_{k,k+1}$ acts on the characteristics, whenever a seam line is present where it is applied. In the presence of the horizontal seam line $\Sigma_0$, the operator $\check{R}_{k,k+1}^\text{loop}$ becomes
\begin{align}
\check{R}_{k,k+1}^\text{loop} =
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture} + K\bigg[
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture}\bigg]  + K^2\bigg[
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,1.732) -- (0.5,0.866) -- (1.5,0.866) -- (2,1.732);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture}  +
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (1.5,0.866) -- (2,1.732);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture}+
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (2,0) -- (1.5,0.866) -- (0.5,0.866) -- (0,1.732);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[very thick,blue] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture} +
\begin{tikzpicture}[baseline=(base),  scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (1.5,0.866) -- (2,0);
\draw[red,dashed] (0,1.2) -- (2,1.2);
\end{tikzpicture}\bigg]\ .
\label{RcheckOnseam}
\end{align}
It might be of interest to formalize these characteristics in the representation theory of the affine (dilute) Temperley--Lieb algebra.

To be complete, we still have to specify the boundary conditions at the top and bottom of the cylinder. In the loop model, we take the top and bottom boundaries to consist of rows of empty sites. To achieve this in the transfer matrix formalism,
\begin{itemize}
\item we take the initial state to be the empty link pattern $\begin{tikzpicture}[scale =.4]
\foreach\i in {0,2,4}
\draw[very thick,white] (\i,0) arc(-180:0:0.5);
\foreach\i in {0,1,2,3,4,5}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture} \cdots$,
\item in the last transfer matrix, $\check{R}_{k,k+1}^\text{loop}$ with $k$ even becomes
$\check{R}_{2i,2i+1}^\text{loop, last} =
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\end{tikzpicture} + K^2
\begin{tikzpicture}[baseline=(base), scale = .4]
\coordinate (base) at (0, .6);
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0,0) -- (0.5,0.866) -- (1.5,0.866) -- (2,0);
\end{tikzpicture}$.
\end{itemize}
In the cluster model, we take the top and bottom boundaries to reflect the loops, as in Figure \eqref{plat}. To achieve this in the transfer matrix formalism,
\begin{itemize}
\item we take the inital state to be the all-cups link pattern $\begin{tikzpicture}[scale =.4]
\foreach\i in {0,2,4}
\draw[very thick,blue] (\i,0) arc(-180:0:0.5);
\foreach\i in {0,1,2,3,4,5}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture} \cdots$,
\item we build the last transfer matrix from the cap with a cup operator $\check{R}_{k,k+1}^{\text{cluster, last}} =
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[gray] (0,0) -- (2,2);
\draw[gray] (0,2) -- (2,0);
\draw[very thick,blue] (0,0) to (0.7,0.7) arc (135:45:0.42) to (2,0);
\draw[very thick,blue] (0,2) to (0.7,1.3) arc (-135:-45:0.42) to (2,2);
\end{tikzpicture}$, i.e. one of the two terms of the operator $\check{R}_{k,k+1}^{\text{cluster}}$
\eqref{RcheckPotts}.
\end{itemize}
In both models, after repeatedly acting with the transfer matrix on the initial state, we obtain a final state that is proportional to that initial state, and the value of the correlation function is the coefficient of proportionality.

\subsubsection{Non-diagonal 4-point functions}

We believe that it is possible to modify the transfer matrix formalism to compute the correlation function associated with any combinatorial
map. We first sketch the general idea before turning to the only case that we will study in this article.

A combinatorial map that is associated to the 4-point function $\left<\prod_{i=1}^4 V_{(r_i,s_i)}\right>$ has four vertices of valencies $2r_i$. This map defines constraints on loop configurations: in particular, there must exist open loops that end at vertices, according to their valencies. A vertex of valency zero corresponds to a diagonal field, which modifies the weights of surrounding loops. A vertex that corresponds to the non-diagonal field $V_{(r,s)}$ comes with a weight that depends on the angles of the loops that end there, see the diagram \eqref{vlat}.

In the transfer matrix formalism, we have to add information about the open loops. In a link pattern, some sites may come with labels that indicate to which open loop they belong. When acting with the transfer matrix, this information must be carried to the resulting link pattern. Terms that would be inconsistent with the desired combinatorial map are set to zero using local rules.

Let us focus on the 4-point function $\left<V_{(\frac12,0)}^4\right>$, in the context of the loop model. There are three possible combinatorial maps:
\begin{align}
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices{(213,1,1)}
\draw (0, 0) -- (0, 3);
\draw (3, 0) -- (3, 3);
\end{tikzpicture}
\quad , \quad
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 0);
\draw (3, 3) -- (0, 3);
\end{tikzpicture}
\quad , \quad
\begin{tikzpicture}[baseline=(base), scale = .25]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 3);
\draw (0, 3) to [out = 30, in = 135] (3.4, 3.4) to [out = -45, in = 60] (3, 0);
\end{tikzpicture}
\label{3maps}
\end{align}
In the case of the first map, the open loops on the cylinder are as follows:
\begin{align}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[thick,dashed] (-1,-1) -- (-1,11);
\draw[thick,dashed] (9,-1) -- (9,11);
\draw[thick] (-1, 11) -- (9, 11);
\draw[thick] (-1, -1) -- (9, -1);
\filldraw (2,2) circle (3pt);
\draw (2,2) node[below] {$\mathbf{x}_1$};
\filldraw (6,2) circle (3pt);
\draw (6,2) node[below] {$\mathbf{x}_2$};
\filldraw (2,8) circle (3pt);
\draw (2,8) node[above] {$\mathbf{x}_4$};
\filldraw (6,8) circle (3pt);
\draw (6,8) node[above] {$\mathbf{x}_3$};
\draw[red,dashed] (2,8) -- (2,2) -- (6,2) -- (6,8);
\draw (2,5) node[left] {$\Sigma_1$};
\draw (4,2) node[above] {$\Sigma_0$};
\draw (6,5) node[right] {$\Sigma_2$};
\draw [very thick,blue] plot [smooth, tension=1] coordinates { (2,2) (1.5,3) (2.5,7) (2,8)};
\draw [very thick,blue] plot [smooth, tension=1] coordinates { (6,2) (6.5,3) (5.5,7) (6,8)};
\draw[very thick,green] (7.6,5) arc(0:360:2.3 and 5.2);
\end{tikzpicture}
\end{align}
The existence of these two open loops forbids closed loops of type $(12)(34)$ and $(13)(24)$, while allowing closed loops of type $(14)(23)$, such as the green loop in the figure. We still need the seam $\Sigma_0$ to distinguish such loops from contractible loops, but the seams $\Sigma_1$ and $\Sigma_2$ are no longer needed.
Any link pattern that occurs after the two bottom vertices but before the two top vertices must include two labelled empty sites, with labels $1$ and $2$ that indicate which bottom vertex the site is connected to. For example:
\begin{align}
\begin{tikzpicture}[scale =.4]
\draw[very thick,blue] (1,0) arc(-180:0:3.0 and 2.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw[very thick,blue] (3,0) arc(-180:0:1.5);
\draw (2,0) node[below] {$1$};
\draw (5,0) node[below] {$2$};
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture}
\end{align}
The label $i$ appears when we insert
an open loop that ends at $\mathbf{x}_i$. Our convention is to do this insertion using the operator
\begin{align}
\check{R}_{k,k+1}^\text{loop}(\mathbf{x}_i) = K^{\frac12}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0.5,0.866) -- (0,1.732);
\draw (0.6,1) node[below] {\scriptsize $i$};
\end{tikzpicture} + K^{\frac32}
\begin{tikzpicture}[baseline=(current  bounding  box.center), scale = .4]
\draw[gray] (0,0) -- (0.5,0.866) -- (0,1.732);
\draw[gray] (2,0) -- (1.5,0.866) -- (2,1.732);
\draw[gray] (0.5,0.866) -- (1.5,0.866);
\draw[very thick,blue] (0.5,0.866) -- (0,1.732);
\draw (0.6,1) node[below] {\scriptsize $i$};
\draw[very thick,blue] (2,0) -- (1.5,0.866) -- (2,1.732);
\end{tikzpicture}
\ .
\end{align}
Then the labels can move when the transfer matrix is applied. For example, if we act with the cap term of $\check{R}_{3,4}$, the label $1$ moves $4$ sites to the right, and the arc that ends there is erased:
\begin{align}
\begin{tikzpicture}[baseline = (base), scale =.4]
\coordinate (base) at (0, -.5);
\draw[very thick,blue] (1,0) arc(-180:0:3.0 and 2.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw[very thick,blue] (3,0) arc(-180:0:1.5);
\draw (2,0) node[below] {$1$};
\draw (5,0) node[below] {$2$};
% Start cap
\draw[gray] (2,0) -- (2.25,0.433) -- (2,0.866);
\draw[gray] (3,0) -- (2.75,0.433) -- (3,0.866);
\draw[gray] (2.25,0.433) -- (2.75,0.433);
\draw[very thick,blue] (2,0) -- (2.25,0.433) -- (2.75,0.433) -- (3,0);
\foreach\i in {2,3}
\filldraw (\i,0.866) circle (3pt);
% End cap
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\draw (13,0.0) node {$=$};
\begin{scope}[xshift=15cm]
\draw[very thick,blue] (1,0) arc(-180:0:3.0 and 2.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw (6,0) node[below] {$1$};
\draw (5,0) node[below] {$2$};
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\end{scope}
\end{tikzpicture}
\ .
\end{align}
If the two marked sites are neighbours, acting with a cap that would connect them annihilates the state:
\begin{align}
\begin{tikzpicture}[baseline = (base), scale =.4]
\coordinate (base) at (0, -.5);
\draw[very thick,blue] (1,0) arc(-180:0:3.0 and 2.5);
\draw[very thick,blue] (9,0) arc(-180:0:0.5);
\draw (6,0) node[below] {$1$};
\draw (5,0) node[below] {$2$};
\begin{scope}[xshift=3cm]
% Start cap
\draw[gray] (2,0) -- (2.25,0.433) -- (2,0.866);
\draw[gray] (3,0) -- (2.75,0.433) -- (3,0.866);
\draw[gray] (2.25,0.433) -- (2.75,0.433);
\draw[very thick,blue] (2,0) -- (2.25,0.433) -- (2.75,0.433) -- (3,0);
\foreach\i in {2,3}
\filldraw (\i,0.866) circle (3pt);
% End cap
\end{scope}
\foreach\i in {0,1,2,3,4,5,6,7,8,9,10,11}
\filldraw (\i,0) circle (3pt);
\end{tikzpicture}
\ \ =\ 0 \ .
\label{nocontr}
\end{align}
A link pattern that occurs above the two top sites includes four labelled empty sites. It is now allowed to connect site $1$ with site $4$ and site $2$ with site $3$, in which case the two corresponding labels disappear. When reaching the top boundary, no labels must remain, so that we obtain the empty link pattern after having generated the desired combinatorial map.

\subsubsection{Tests of the formalism}

We have implemented transfer matrix algorithms for computing 4-point correlation functions, using
sparse-matrix factorisation, hashing techniques and arbitrary-precision arithmetics, as described in \cite{js18}.
We have performed a number of stringent tests to make sure that the implementations are correct:
\begin{itemize}
\item Comparison with
exact enumeration results for small systems.
\item Checks of the asymptotic decay of the correlation functions for large systems.
\item Changing the transfer direction from vertically to horizontally, we find that the results do not change, provided free boundary conditions are imposed in both directions.
\item Deforming the seams does not lead to different results.
\item In the case of diagonal 4-point functions, comparing with results that are already known in special cases \cite{hgjs20}.
\end{itemize}

\subsection{Amplitudes}

Four-point functions are complicated quantities whose lattice computation leads to finite-size effects. A direct comparison with conformal field theory could therefore only succeed to good precision if the lattice was large. However, the size of the transfer matrix grows exponentially with the size of the lattice, so we only have access to small lattices.

Fortunately, it is possible to extract lattice observables that are much less sensitive to finite-size effects, called amplitudes. Four-point amplitudes depend on the choice of a channel $x\in\{s,t,u\}$. Roughly speaking, the decomposition of a lattice 4-point function into $x$-channel amplitudes corresponds to the $x$-channel decomposition of a conformal 4-point functions into structure constants and conformal blocks. We will therefore compare amplitudes with 4-point structure constants.

\subsubsection{Definition of 4-point amplitudes}

We consider a 4-point function on a finite cylindrical lattice, represented as a rectangle with the left and right sides identified. The size of the cylinder and the positions of the punctures $\mathbf{x}_1,\dots,\mathbf{x}_4$ are determined by four lengths $L,\ell,M,d$, where the points form a rectangle of size $d\times \ell$ in a cylinder of size $L\times (2M+\ell)$. In the transfer matrix formalism, with time running upwards, the horizontal size $L$ must be small, since it determines the dimension of the space of states. However, the vertical size $2M+\ell$ can be large. We choose $M$ large enough for the results not to depend on it. Moreover, we choose $d = \lfloor \frac{L}{2} \rfloor$, which gives the richest possible spectrum. Our results will therefore only depend on the two variables $L,\ell$.
\begin{align}
\begin{tikzpicture}[baseline=(current bounding box.center), scale = .4]
\draw[thick,dashed, black] (0,-1) -- (0,11);
\draw[thick,dashed, black] (8,-1) -- (8,11);
\draw[thick,black] (0,-1) -- (8,-1);
\draw[thick,black] (0,11) -- (8,11);
\filldraw (2.5,3) circle (3pt);
\draw (2.5,3) node[below] {$\mathbf{x}_1$};
\filldraw (5.5,3) circle (3pt);
\draw (5.5,3) node[below] {$\mathbf{x}_2$};
\filldraw (2.5,7) circle (3pt);
\draw (2.5,7) node[above] {$\mathbf{x}_4$};
\filldraw (5.5,7) circle (3pt);
\draw (5.5,7) node[above] {$\mathbf{x}_3$};
\draw [thick,decorate,decoration = {brace,amplitude=5pt,mirror}] (8.5,-1) --  (8.5,3);
\draw (8.7,1) node[right] {$M\sim\infty$};
\draw [thick,decorate,decoration = {brace,amplitude=5pt}] (-0.5,3) --  (-0.5,7);
\draw (-0.7,5) node[left] {$\ell$};
\draw [thick,decorate,decoration = {brace,amplitude=5pt,mirror}] (8.5,7) --  (8.5,11);
\draw (8.7,9) node[right] {$M\sim\infty$};
\draw [thick,decorate,decoration = {brace,amplitude=5pt,mirror}] (2.5,-1.5) --  (5.5,-1.5);
\draw (4,-1.8) node[below] {$d=\lfloor \frac{L}{2} \rfloor$};
\draw [thick,decorate,decoration = {brace,amplitude=5pt}] (0,11.5) --  (8,11.5);
\draw (4,11.8) node[above] {$L$};
\end{tikzpicture}
\label{cylgeo}
\end{align}
Now, the idea is to expand the 4-point function on the eigenvalues of a simplified transfer matrix $T_0$, which describes the propagation on the cylinder in the absence of the punctures $\mathbf{x}_1,\dots,\mathbf{x}_4$. The simplified transfer matrix therefore depends on the weights of contractible loops $n$ and of $s$-channel loops $w_s$, but not on the other loop weights $w_1,\dots, w_4,w_t,w_u$. Contractible loops and $s$-channel loops are the only loops whose numbers are extensive in the cylinder length $\ell$. We therefore write the expansion \eqref{expamp},
where $\Lambda_\omega$ are the eigenvalues of $T_0$, including the largest eigenvalue $\Lambda_\text{max}$, $S(L)$ is the $s$-channel spectrum, and $A_\omega$ are the $s$-channel amplitudes.

\subsubsection{Comparison with the CFT}

The eigenvalues $\Lambda_\omega$ of the simplified transfer matrix $T_0$ are plagued by finite-size effects, and can be compared with CFT quantities only at the critical coupling $K=K_\text{c}$, and in the limit $L\to \infty$. In this limit, they behave as \cite{bcn86}
\begin{align}
-\log \Lambda_\text{max}(L,K_\text{c},n,w_s) &\underset{L\to\infty}{=} f_\infty(n,w_s) L - \frac{\pi c_\text{eff}(n,w_s)}{6 L} + o(L^{-1}) \,,
\\
-\log \frac{\Lambda_\omega(L,K_\text{c},n,w_s)}{\Lambda_\text{max}(L,K_\text{c},n,w_s)} &\underset{L\to\infty}{=} \frac{2 \pi \Delta_\omega(n,w_s)}{L} + o(L^{-1}) \, ,
\end{align}
where $f_\infty$ is the free energy per unit area, $c_\text{eff}$ is the effective central charge, and
$\Delta_\omega$ is an effective critical exponent.

On the other hand, it turns out that the spectrum $S(L)$ and amplitudes $A_\omega$ are much less dependent on the coupling $K$ and size $L$, and therefore better suited to a comparison with the CFT.
In the case of the spectrum $S(L)$, let us relate the labels $\omega$ of the states to CFT parameters. In the case of the loop model, the simplified transfer matrix $T_0$ belongs to the dilute affine Temperley--Lieb algebra, whose representations are parametrized by the number of through-lines $2r\in\mathbb{N}$, and the pseudomomentum $s\in \frac{1}{r}\mathbb{Z}\bmod 2$ \cite{js18, jrs22}. Since we have $2L$ loop strands on each time slice, the value of $r$ must obey
\begin{align}
r\leq L  \ .
\label{ril}
\end{align}
This truncation is the only $L$-dependence of the spectrum.

As our notations suggest, the numbers $r,s$ coincide with the Kac table indices of conformal field theory. In addition, the momentum that is associated to rotations around the cylinder (described by the cyclic group $\mathbb{Z}_L$) corresponds to the conformal spin $\Delta-\bar\Delta\bmod L$. For simplicity, we will omit the conformal spin, and write states as $\omega = (r,s),\rho$, where $\rho$ labels states that share the same quantum numbers $r,s$.

\subsubsection{Computation of 4-point amplitudes}

The amplitude $A_\omega$ is associated to the eigenvalue $\Lambda_\omega$ of the simplified transfer matrix $T_0$, and we could deduce it from the corresponding left and right eigenvectors \cite{js18}. However, to do this, we would need to find local operators that create the punctures  $\mathbf{x}_i$. This is not easy, and we will use an approach that does not require us to compute eigenvectors, at the price of having to use large values of the geometric parameters $\ell,M$: we compute the 4-point function $C^\text{loop}$ for as many values of $\ell$ as the size of the spectrum $|S(L)|$, and solve the resulting linear system for $A_\omega$.

In practice, we compute $C^\text{loop}$ to a precision of 2\,000 digits for as many as $N_\ell = 500$ different values of $\ell$.
This requires taking $M \sim 10^3 L$, a value that is chosen such that
$\left(\frac{\Lambda_\text{sub}}{\Lambda_\text{max}}\right)^M \lessapprox 10^{-2000}$, where $\Lambda_\text{sub}$ is the second-largest eigenvalue. This ensures that further increasing $M$ does not change the first 2\,000 digits of $C^\text{loop}$. The computation of the the eigenvalues $\Lambda_\omega$ is much easier, so we compute them to 4\,000 digits, although in principle 2\,000 digits could suffice.

We reach $L\le 4$ in the lattice loop model and $L\le 5$ in the lattice cluster model. This leads to spectra that are in fact too large, with $|S(L)|\sim 3\,000>N_\ell$.
Moreover $\left(\frac{\Lambda_\text{min}}{\Lambda_\text{max}}\right)^{N_\ell} \ll 10^{-2000}$, making the smallest contribution $\Lambda_\text{min}$ to \eqref{expamp}
indetectable. In order to make the linear system invertible, we truncate it by keeping only the $N_\ell$ largest eigenvalues.
We call an amplitude
$A_\omega$ well-determined if its relative variation upon a small change of $\ell_\text{min}$ is less than $10^{-20}$. In practice, we find that a fraction  of about $\tfrac12$ to $\tfrac23$ of the computed amplitudes are well-determined. This fraction turns out to be optimal for $\ell_\text{min} \sim 100$.

In fact, we cannot access amplitudes that saturate the bound \eqref{ril}, because for $r=L$ through-lines do not have any wiggle room in our lattice, and this prevents us from distinguishing modules with different values of $s$ \cite{js18}. In the loop model, this means that we would need $L\ge 4$ in order to access $r=3$. But in this case, the $r=3$ eigenvalues are buried too deeply in the transfer matrix spectrum to be accessible in practice. This is why we will only give results for $r\leq 2$.

With these choices, it nevertheless remains true that the considerable range of magnitudes of the terms in \eqref{expamp} adversely affects the numerical
stability of the linear system if $N_\ell$ is taken too large. In order for the results to have a good precision, we find it necessary to keep $N_\ell < 390$.

\subsection{Wonderful simplification of amplitude ratios}

To summarize Section \ref{sec:lattice} so far, we have defined two lattice models, introduced a transfer matrix formalism for computing correlation functions, and advertised amplitudes as the right observables to be extracted from numerical results. We will justify these constructions by displaying our numerical results for amplitudes in Section \ref{sec:nr}. Here, we will qualitatively sketch these results, and compare them to earlier results in the same spirit \cite{js18, hgjs20}.

\subsubsection{Main results and conjecture}

Our main observation is that ratios of amplitudes at different values of the channel weights $w_x$ depend neither on the lattice size $L$, nor on the coupling $K$, nor on the state $\rho$, and coincide with the corresponding ratios of 4-point structure constants. We have observed this in all the examples that we have investigated, which are not many because lattice computations are numerically heavy. We conjecture that this holds for all amplitudes in all 4-point correlation functions. This conjecture is summarized in Eq. \eqref{aww}.

The conjecture first means that our amplitude ratio does not depend on the label $\rho$ of states within a given module of the affine Jones--Temperley--Lieb algebra. To be independent from $\rho$, which we also call to be \textit{constant over the module}, is necessary for an amplitude ratio to be comparable to conformal field theory. The reason is that while modules correspond to representations of the interchiral algebra (with parameters $(r,s)$), states within modules correspond to CFT states only in the critical limit.

The corresponding CFT quantity is a ratio of $s$-channel 4-point structure constants $D_{(r,s)}$. According to the conjecture of Section \ref{conj}, $D_{(r,s)}$ is the product of a reference structure constant that does not depend on channel momenta, with a rational function of the weights $n,w_i,w_x$. Therefore, in our ratio of 4-point structure constants, the reference structure constants cancel, the result is a function of weights (rather than momenta), and this function is rational.

\subsubsection{Further puzzling results}

It is also tempting to study ratios of amplitudes of the type $A_{(r,s),\rho}\left(L\middle|K,n:n',w_i,w_x\right)$, where we vary the weight of contractible loops. We will now give a lattice argument why this ratio should not be constant over the module. In Eq. \eqref{expamp}, amplitudes are defined by expanding a 4-point function over eigenvalues of the simplified transfer matrix $T_0$. Changing $n$ changes $T_0$ itself and all its eigenvalues, in a way that also depends on the variables $\rho,L,K$. In particular, our ratio is not expected to be constant over the module, and this is what we find numerically.

One may object that the simplified transfer matrix $T_0$ and its eigenvalues also depend on the $s$-channel weight $w_s$, whereas our conjecture \eqref{aww} predicts the simplification of ratios $w_s:w_s'$. However, the dependence of $T_0$ on $w_s$ is only visible in modules with $r=0$. Whenever $r>0$, the presence of $2r$ through-lines forbids $s$-channel loops (of weight $w_s$). Therefore, our conjecture should be understood to apply only if $r\neq 0$ or $x\neq s$, which is a minor caveat.

When it comes to ratios of the type $A_{(r,s),\rho}\left(L\middle|K,n,w_i:w'_i,w_x\right)$, our lattice argument does not apply. However, there is a CFT argument why this cannot agree with a ratio of structure constants. In the critical limit, the lattice 4-point function \eqref{expamp} should agree with a CFT 4-point function. This 4-point function depends non-trivially on $w_i$ not only through structure constants, but also through conformal blocks. On the lattice side, the only dependence on $w_i$ is through amplitudes, and this dependence should therefore account for the conformal blocks. Since a conformal block is a sum over states in a module, we do not expect $A_{(r,s),\rho}\left(L\middle|K,n,w_i:w'_i,w_x\right)$ to be constant over the module.

However, in some (but not all) cases, we find that $A_{(r,s),\rho}\left(L\middle|K,n,w_i:w'_i,w_x\right)$ is in fact constant over the module, and does not depend on $L,K$. On top of that, it agrees with the corresponding ratio of 4-point structure constants, stripped of their reference prefactors as in Eq. \eqref{dddf}. In such cases, the ratio is therefore a rational function of $n,w_i,w_i', w_x$. We have no explanation for these puzzling results, which seem too good to be true.

\subsubsection{Comparison with previous work}

There is a priori little reason to suppose that lattice correlation functions
could be more than crude approximations of their CFT counterparts, in particular for lattice sizes as small as $L \le 5$. Nevertheless, in certain 4-point functions of the lattice cluster model, it was found that the $s$-channel spectrum at finite $L$ coincides with the CFT spectrum up to the truncation \eqref{ril} \cite{js18}. In the same work, amplitudes were also introduced, but were found to agree with CFT results only in the critical limit, since ratios of the type $w_x:w_x'$ were not computed. Examples of such ratios were considered in \cite{hgjs20}: not by explicitly introducing the variables $w_x$, but by studying various 4-point connectivities in the Potts model. These ratios were
found to be constant over the module, $L$-independent, and rational in $Q=n^2$.

We are now generalizing these results by introducing the variables $w_i,w_x$ in diagonal 4-point functions, studying the non-diagonal 4-point function $\Big<V_{(\frac12, 0)}^4\Big>$, considering non-critical couplings, and comparing lattice results with CFT predictions.

\subsection{Numerical results}\label{sec:nr}

\subsubsection{Loop model diagonal 4-point functions $\left<\prod_{i=1}^4 V_{P_i}\right>$}

The diagonal 4-point function depends on $8$ loop weights $n,\{w_i\},\{w_x\}$. However, we use the decomposition \eqref{cccc}, which is valid for 4-point functions as well as for the corresponding amplitudes, and reduce the problem to studying the amplitures $A^{(0)}, \{A^{(x)}\}$, which depend on $5$ loop weights for $A^{(0)}$ (namely $n,\{w_i\}$) and $6$ for $A^{(x)}$ (namely $n,\{w_i\},w_x$). We choose the following reference values and alternative values for the loop weights:
\begin{align}
w_1 &= \sqrt{0.61} \,,\ w_2 = \sqrt{0.71} \,,\ w_3 = \sqrt{0.81} \,,\ w_4 = \sqrt{0.91} \,,\ w_x = \sqrt{1.21} \,, \ n = \sqrt{0.51} \ ,
\nonumber
\\
w'_1 &= \sqrt{1.61} \,,\ w'_2 = \sqrt{1.71} \,,\ w'_3 = \sqrt{1.81} \,,\ w'_4 = \sqrt{1.91} \,,\ w'_x = \sqrt{1.41} \ . \label{weights1}
\end{align}
%\textcolor{red}{JJ: Double-check this, there seems to be some misunderstanding in the labelling.}
%\textcolor{blue}{RN: I have corrected labels on the tables below. the correct one should be $w'_x:w_x$ and $w'_i:w_i$. I have checked that below agrees with the bootstrap.}
Let us first display the amplitude ratios that are obtained by varying the channel weight $w_x$. We display the first $15$ digits, although we actually computed hundreds of digits:
\begin{align}\renewcommand{\arraystretch}{1.3}
\begin{tabular}{|l|lll|}
\hline
$(r,s)$ & $\phantom{-}A^{(s)}(w'_s:w_s)$ & $A^{(t)}(w'_t:w_t)$ & $A^{(u)}(w'_u:w_u)$ \\ \hline
diag & \phantom{-} not constant & zero & zero \\
$(1,0)$& $\phantom{-}1.029851066998826$ & $1.079485644276174$ & $1.079485644276174$ \\
$(1,1)$ & $\phantom{-}0.880065202821509$ & $1.079485644276174$ & $1.079485644276174$ \\
$(2,0)$ & $\phantom{-}1.110388044669465$ & $1.252108197040402$ & $1.252927747824670$ \\
$(2,\pm\tfrac12)$ & \phantom{-} zero & $0.986021203400590$ & $0.986021203400590$  \\
$(2,1)$ & $-8.924478873210560$ & $1.121066979295078$ & $1.121044569052319$\\
\hline
\end{tabular}
\label{Cstu_wx}
\end{align}
\begin{itemize}
\item The amplitude for the channel diagonal field i.e. $r=0$ is labelled 'diag'.
\item Amplitudes that are not constant over the module are labelled 'not constant'.
\item When an amplitude vanishes, there is no ratio to compute, and we write 'zero'.
\end{itemize}
These results are consistent with the conjecture \eqref{aww}: all amplitude ratios are constant on the module, except $A^{(s)}_\text{diag}$, since we are computing $s$-channel amplitudes. Moreover, these ratios agree with the 4-point structure constants
\begin{subequations}
\label{ddl}
\begin{align}
\frac{D_{(1,0)}}{D_{(1,0)}^\text{ref}}
&\propto- \frac{(w_1 + w_2)(w_3 + w_4)}{w_s +n} +
w_t + w_u \ ,
\\
\frac{D_{(1,1)}}{D_{(1,1)}^\text{ref}}
&\propto\frac{(w_1 - w_2)(w_4 - w_3)}{w_s -n} +
w_t - w_u \ ,
\end{align}
\begin{multline}
\frac{D_{(2,0)}}{D_{(2,0)}^\text{ref}}  \propto  -\frac{4(w_1^2+w_2^2-nw_1w_2+n^2-4)(w_4^2+w_3^2-nw_4w_3+n^2-4)}{w_s-n^2+2}
\\
-(n-2)(w_t+w_u)(w_1 + w_2)(w_3 + w_4)-(n+2)(w_t-w_u)(w_1 - w_2)(w_4 - w_3)
\\ +2(n^2-4)(w_t^2 + w_u^2 +2w_s -4) \ ,
\end{multline}
\begin{align}
\frac{D_{(2,\frac12)}}{D_{(2,\frac12)}^\text{ref}} \propto n (w_t^2 - w_u^2)
- w_t(w_1w_4 + w_2w_3)
+ w_u(w_1w_3 + w_2w_4)\ ,
\end{align}
\begin{multline}
\frac{D_{(2,1)}}{D_{(2,1)}^\text{ref}}\propto \frac{4(w_1^2+w_2^2+nw_1w_2+n^2-4)(w_4^2+w_3^2+nw_4w_3+n^2-4)}{w_s+n^2-2}
\\
-(n+2)(w_t+w_u)(w_1 + w_2)(w_3 + w_4)-(n-2)(w_t-w_u)(w_1 - w_2)(w_4 - w_3)
\\
+2(n^2-4)(w_t^2 + w_u^2 -2w_s -4)\ .
\end{multline}
\end{subequations}
These formulas are special cases of Eq. \eqref{dddf}, with the polynomial terms given by the bootstrap results \eqref{0000}. We have omitted constant or $n$-dependent overall factors, which cancel when taking ratios $w_i:w'_i$ or $w_x:w'_x$. The entries of \eqref{Cstu_wx} follow from inserting \eqref{ddl} into \eqref{Csubtr} before taking the ratios.

In addition, we have computed ratios of amplitudes at different weights $w_i$. In contrast to ratios at different $w_x$, this makes sense for $A^{(0)}$ as well as for $A^{(x)}$. The results are
\begin{align}\renewcommand{\arraystretch}{1.3}
\begin{tabular}{|l|llll|}
\hline
$(r,s)$ & $A^{(s)}(w'_i:w_i)$ & $A^{(t)}(w'_i:w_i)$ & $A^{(u)}(w'_i:w_i)$ & $A^{(0)}(w'_i:w_i)$ \\ \hline
diag &  not constant  & \phantom{-} zero & \phantom{-} zero & zero \\
$(1,0)$& not constant & \phantom{-} not constant & \phantom{-} not constant & not constant \\
$(1,1)$ & not constant & \phantom{-} not constant & \phantom{-} not constant & not constant \\
$(2,0)$ & $1.66936126690$ & $-0.35481068436$ & $-0.35852887492$ & $2.16917615486$ \\
$(2,\pm\tfrac12)$ & zero & $\phantom{-}3.78379075932$ & $\phantom{-}3.79931935182$ & zero \\
$(2,1)$ & $7.28790351811$ & $\phantom{-}1.68830922070$ & $\phantom{-}1.68763016857$ & $1.04572417389$ \\ \hline
\end{tabular}
\label{Cstu_wi}
\end{align}
%\textcolor{red}{SR: It would be nice to know the missing entry in this table.}
The ratios that are constant on the module do agree with ratios of 4-point structure constants \eqref{ddl}. But we did not expect such ratios to be constant, and these results are puzzling.

Finally, after doing our computations at the critical coupling $K_\text{c}(n = \sqrt{0.51}) = 0.564\,877\cdots$, we repeated them at the coupling $K = 0.25$, which is well into the
non-critical low-density phase. This did not change the results for the constant ratios.

\subsubsection{A loop model non-diagonal 4-point function $\Big<V_{(\frac12, 0)}^4\Big>$}

There are three distinct 4-point functions of the type $\Big<V_{(\frac12, 0)}^4\Big>$, corresponding to the combinatorial maps \eqref{3maps}. There are two types of closed loops: contractible loops, with weight $n$, and non-contractible loops, with weight $w_x$. We have computed ratios of amplitudes for $n=\sqrt{0.51}$ and $w_x,w'_x = \sqrt{1.21},\sqrt{1.41}$. Permutation symmetry leads to the vanishing of the amplitudes with $rs$ odd for $\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (0, 3);
\draw (3, 0) -- (3, 3);
\end{tikzpicture}$ and
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 0);
\draw (3, 3) -- (0, 3);
\end{tikzpicture}
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 3);
\draw (0, 3) to [out = 30, in = 135] (3.4, 3.4) to [out = -45, in = 60] (3, 0);
\end{tikzpicture}
$, and to the vanishing of the amplitudes with $rs$ even for $
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 0);
\draw (3, 3) -- (0, 3);
\end{tikzpicture}
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 3);
\draw (0, 3) to [out = 30, in = 135] (3.4, 3.4) to [out = -45, in = 60] (3, 0);
\end{tikzpicture}
$. These vanishings make the $s$-channel spectra sparser, which allows us to access amplitudes for all $r\leq 3$, whereas we were limited to $r\leq 2$ in the case of diagonal 4-point functions. The results are:
% {\color{blue}RN: I have corrected the labels in the table below}
\begin{align}\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|l|ll|}
\hline
$(r,s)$ & $\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (0, 3);
\draw (3, 0) -- (3, 3);
\end{tikzpicture}(w'_x:w_x)$ & $
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 0);
\draw (3, 3) -- (0, 3);
\end{tikzpicture}
$ or $
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 3);
\draw (0, 3) to [out = 30, in = 135] (3.4, 3.4) to [out = -45, in = 60] (3, 0);
\end{tikzpicture}(w'_x:w_x)
$ \\ \hline
diag & not constant & zero \\
$(1,0)$& 0.954020159934012 & 1 \\
$(1,1)$ & zero & 1 \\
$(2,0)$ & 0.986202017764047 & 0.952674915680381 \\
$(2,\pm\tfrac12)$ & zero & 0.980575011958174 \\
$(2,1)$ & 1 & 1.079485644276174 \\
$(3,0)$ & 0.894756612775786 & 1.095611691091229 \\
$(3,\pm \tfrac13)$ & zero & 0.968102239881201 \\
$(3,\pm \tfrac23)$ & 1 & 0.939824510321535 \\
$(3,1)$ & zero & 0.969479747742282 \\ \hline
\end{tabular}
\end{align}
These amplitude ratios agree with the 4-point structure constants from the conformal bootstrap. In the case of $\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (0, 3);
\draw (3, 0) -- (3, 3);
\end{tikzpicture}$, the relevant results are the $s$-channel structure constants in Eq. \eqref{011}. We omit constant or $n$-dependent prefactors, including the reference structure constants, but restore the pole terms from Eq. \eqref{dddf}:
\begin{subequations}
\begin{align}
D_{(1,0)}^{(s)}& \propto \frac{1}{n + w_s}
\ , \\
D_{(2,0)}^{(s)}& \propto  n^2-4
-\frac{4 (n-2)^2}{w_s-n^2+2}
\ , \\
D_{(2,1)}^{(s)}& \propto  1
\ , \\
D_{(3, 0)}^{(s)}& \propto
-\frac{8}{3} (n-2)^2 (n+2) n^2-\frac{4 (n-2)^2 n^4}{n \left(n^2-3\right)+w_s}
\ , \\
D_{(3, \frac23)}^{(s)} & \propto 1
\ .
\end{align}
\end{subequations}
In the cases of $
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 0);
\draw (3, 3) -- (0, 3);
\end{tikzpicture}
$ and $
\begin{tikzpicture}[baseline=(base), scale = .15]
\vertices{(213,1,1)}
\draw (0, 0) -- (3, 3);
\draw (0, 3) to [out = 30, in = 135] (3.4, 3.4) to [out = -45, in = 60] (3, 0);
\end{tikzpicture}
$, the relevant results are the $t$-channel structure constants in Eq. \eqref{011}. Since there is no diagonal field in this channel, the polynomials do not have to be supplemented with pole terms, and can be directly compared with the lattice results.

\subsubsection{Cluster model diagonal 4-point functions $\left<\prod_{i=1}^4 V_{P_i}\right>$}

In the cluster model, we consider combinations of diagonal 4-point functions \eqref{cna} that are even or odd under the reflections $w_i\to -w_i$. In the conformal field theory, such combinations would not make sense, since reflections do not preserve conformal dimensions. It is only normalized structure constants that behave reasonably under reflections, see Eq. \eqref{dsym}. Fortunately, it is the normalized structure constants that we want to compare with the amplitudes from the cluster model. We therefore have to consider combinations of the type \eqref{cna} for normalized structure constants. A subtlety is that we have only $2$ reflection equations for a given structure constant, since the third reflection equation in Eq. \eqref{dsym} relates $d^{(s)}_{(r,s)}$ to $d^{(s)}_{(r,s+1)}$. These $2$ reflection equations are one fewer than the cluster model's $3$ independent parity constraints \eqref{labcd}. In order to obtain a third reflection equation, we consider the $s\to s+1$ eigenvectors
\begin{align}
\frac12\left( d_{(r,s)}^{(s)}+(-)^r d_{(r,s+1)}^{(s)} \right)
% \quad , \quad \frac12\left( d_{(r,s)}^{(t)}+d_{(r,s+1)}^{(t)} \right)
% \quad , \quad \frac12\left( d_{(r,s)}^{(u)}+(-)^r d_{(r,s+1)}^{(u)} \right)
\ .
\label{ddsp}
\end{align}
Equivalently, these eigenvectors can be defined as invariants under the simultaneous reflection of $w_1,w_4,w_s,w_u$.
After taking combinations of the type \eqref{cna}, these become eigenvectors of all $7$ reflections $w_i\to -w_i,w_x\to -w_x$, and can be compared with lattice results. Admittedly, we do not know a priori whether we should consider eigenvectors of $s\to s+1$ for the eigenvalue $+1$ or $-1$: our choice of the eigenvalue $(-)^r$ is what will make the comparison work.

From our results \eqref{0000} for normalized $s$-channel structure constants, let us deduce the relevant combinations. We add the pole terms whenever required by Eq. \eqref{dddf} in order to obtain ratios $\frac{D}{D^\text{ref}}$. Taking combinations as in Eqs. \eqref{ddsp} and \eqref{cna}, we obtain objects that we call $D^{\nu_1,\nu_s,\nu_t,\nu_u}$. We decompose these objects according to Eq. \eqref{csnn}, and focus on the term $D^{(s),\nu_1,\nu_s}(w_s)$, while neglecting any factors that do not depend on $w_s$:
\begin{subequations}
\begin{align}
\frac{w_s^{2-\nu_s}}{w_s^2-n^2}
\ , \\
\frac{w_s^{2-\nu_s}}{\left(n^2-2\right)^2-
\ , \\
& \propto
\frac{w^2_s}{n^2 \left(n^2-3\right)^2-w^2_s}
\ , \\
& \propto \delta_{1-\nu_s} w_s
\ ,
\end{align}
These results are simple and $w_i$-independent, but this is not true for general $(r,s)$, as we can already see in the cases
\begin{multline}
D_{(3,0)}^{(s),1,1}(w_s)\propto\tfrac23 n^2(n^2-4)w_s
\\
+ \frac{\big[(n^2-1)w_1^2+w_2^2+n^2(n^2-4)\big]\big[(n^2-1)w_3^2+w_4^2+n^2(n^2-4)\big]}{n^2(n^2-3)^2-w_s^2}w_s
\ ,
\end{multline}
\begin{multline}
D_{(3,0)}^{(s),0,1}(w_s)\propto\tfrac23 n^2(n^2-4)w_s
\\
+ \frac{\big[(n^2-1)w_2^2+w_1^2+n^2(n^2-4)\big]\big[(n^2-1)w_4^2+w_3^2+n^2(n^2-4)\big]}{n^2(n^2-3)^2-w_s^2}w_s
\ .
\end{multline}
\label{30as}
\end{subequations}
Moreover, for $r=4$, we could infer the analytic expressions of a few structure constants from numerical lattice results:
\begin{subequations}
\begin{align}
D_{(4,0)}^{(s),1,0}(w_s) &\propto
\frac{w_s^2}{\left(n^4-4 n^2+2\right)^2- w_s^2}
\ , \\
D_{(4, \frac12)}^{(s),\nu_1, 0}(w_s)
& \propto
\ , \\
D_{(4,\frac12)}^{(s),0,1}(w_s) &\propto  w_s
\ .
\end{align}
\end{subequations}
Let us now display numerical lattice results for the amplitude ratios $A^{(s),\nu_1,\nu_s}$, which correspond to the 4-point functions $C^{(s),\nu_1,\nu_s}$ via Eq. \eqref{expamp}. (In that expression, the eigenvalues $\Lambda_\omega$ are invariant under $w_s\to -w_s$, so we can combine amplitudes just like we combine 4-point functions in Eq. \eqref{cna}.)
We choose the following parameters:
\begin{align}
w_1 &= \sqrt{0.81} \,,\ w_2 = \sqrt{1.11} \,,\ w_3 = \sqrt{0.71} \,,\ w_4 = \sqrt{0.91} \,, \nonumber \\
w_s &= \sqrt{1.21} \,, \ w'_s = \sqrt{1.27}\,, \ \ \, n = \sqrt{0.51} \ ,
\label{mrw}
\end{align}
\begin{align}\renewcommand{\arraystretch}{1.3}
\begin{tabular}{|l|llll|}
\hline
$(r,s)$ & $A^{(s),0,0}(w'_s:w_s)$ & $A^{(s),1,1}(w'_s:w_s)$ & $A^{(s),0,1}(w'_s:w_s)$ & $A^{(s),1,0}(w'_s:w_s)$ \\ \hline
diag & 1 & zero & zero & 1 \\
$(1,0)$ & 0.966724662896 & 0.943612364678 & 0.943612364678 & 0.966724662896 \\
$(2,0)$ & 1.115869490901 & not constant & not constant & 1.115869490901 \\
$(3,0)$ & 1.082870872590 & not constant & not constant & 1.082870872590 \\
$(3,\frac13)$ & zero & 1.024493424507 & 1.024493424507 & zero \\
$(4,0)$ & 1.002830912628 & 0.988626236815 & 0.989211641764 & 0.998033506172 \\
$(4,\tfrac12)$ & 1.049586776859 & 1.024493424507 & 1.024493424507 & zero \\
\hline
\end{tabular}
\label{Cs_wx}
\end{align}
We find that all amplitude ratios that are constant over the module perfectly agree with the analytic formulas, or with numerical bootstrap formulas when no analytic formulas are available: $A^{(s),\nu_1,\nu_s}(w'_s:w_s)=D^{(s),\nu_1,\nu_s}(w'_s:w_s)$. It is mysterious to us why the ratios are not constant in a few cases. (This phenomenon persists when we consider other combinations of structure constants, such as $A^{(s),1,1}+A^{(s),0,1}$.) We conjecture that the non-constant ratios are numerical artefacts, and that in fact the lattice and bootstrap results exactly coincide for all $r,s$.

For the other terms $A^{(t),\nu_1,\nu_t}, A^{(u),\nu_1,\nu_u}$, the lattice results are similar to those for $A^{(s),\nu_1,\nu_s}$, but they match the bootstrap results only for certain values of the indices $\nu_1,\nu_t,\nu_u$. We believe that this is not a fundamental problem: rather, we may not be considering the correct linear combinations and/or $s\to s+1$ eigenvectors.

\section{Outlook}

\subsubsection{Exactly solving critical loop models}

We have provided strong evidence for the exact solvability of critical loop models, by exactly determining a fair number of 4-point structure constants. In order to actually solve the models, it may seem that the next logical step is to determine all 4-point structure constants. Given the complexity of the polynomial factors, this looks difficult. And even if this could be done, we would still know only the 4-point functions.

In order to solve a conformal field theory and compute all correlation functions, we actually need 3-point functions. Therefore, we need to decompose 4-point structure constants into 3-point structure constants. It is not clear how to do this in loop models. Certainly this question should be addressed in terms of combinatorial maps, since these objects describe the solutions of crossing symmetry \cite{gjnrs23}.

Having exact epressions is particularly useful for cases where the central charge is rational i.e. $\beta^2\in\mathbb{Q}$. These cases include physically interesting systems such as polymers and percolation. However, they are hard to study numerically, because structure constants and conformal blocks can have poles, which cancel when computing 4-point functions. Our results on 4-point structure constants could be useful for understanding rational values of $\beta^2$ as limits from non-rational $\beta^2$.

\subsubsection{Exact solvability and degenerate fields}

We have demonstrated exact solvability in two-dimensional CFTs that include only one degenerate field $V^d_{\langle 1,2\rangle}$, and not the second independent degenerate field $V^d_{\langle 2, 1\rangle}$. However, it turns out that the resulting structure constants are still built from the double Gamma function, which is defined by two independent shift equations \eqref{gshift}.

This suggests that the field $V^d_{\langle 2, 1\rangle}$ might actually be present in the theory, while playing a more discrete role than in say Liouville theory. And indeed, this degenerate field is known to live at the endpoints of certain topological defects \cite{js23}. This suggests that these defects might be used for constraining structure constants, and explaining the appearance of the double Gamma function.

Much further in that direction, we would hope to find conformal field theories with no degenerate field at all, which would nevertheless still be solvable. Even further, two-dimensional theories with only global conformal symmetry.

\subsubsection{Non-unitarity and logarithms}

In the literature, much attention has focussed on CFTs such as critical loop models being non-unitary and/or logarithmic. However, as we have demonstrated, what really matters for solvability is the existence of degenerate fields.

From this point of view, unitarity may be reassuring, as it implies that null vectors vanish. In a unitary CFT, any field that has a null vector is therefore degenerate. However, as the examples of minimal models and critical loop models illustrate, unitarity is not a necessary condition for the existence of degenerate fields.

Logarithmic CFTs are a particular class of non-unitary CFTs. They may be frightening because their spaces of states can have complicated algebraic structures. However, when it comes to structure constants, there is no difference between logarithmic and non-logarithmic representations. The non-diagonal primary field $V_{(r,s)}$ belongs to a logarithmic representation if $(r,s)\in \mathbb{N}^*\times \mathbb{Z}^*$, but this does not affect the reference three-point structure constant \eqref{cref}. In fact, if $r\in \mathbb{N}^*$, the OPE $V^d_{\langle 2, 1\rangle}V_{(r,0)}\sim \sum_\pm V_{(r,\pm 1)}$ \eqref{votv} produces fields that belong to a logarithmic representation, from $V_{(r,0)}$ which does not. And the OPE determines the structure of that representation \cite{nr20, gz20}. Therefore, logarithms can be both conjured and tamed by degenerate fields.
This should still be true if $\beta^2\in\mathbb{Q}$, although logarithmic representations become more intricate \cite{hs21}.

\subsubsection{Exactly solving lattice loop models?}

From lattice results, we have extracted certain amplitude ratios that depend neither on lattice size nor on lattice coupling, and exactly coincide with ratios of normalized structure constants. Is this a hint that the lattice models are exactly solvable off-criticality?
Maybe not, in view of our results' limitations:
\begin{itemize}
\item We have only determined ratios of amplitudes at different values of a channel weight $w_x$. But in generic solutions of crossing symmetry, there is no channel weight, and our results say nothing on the dependence on the contractible loop weight $n$.
\item Our results do not depend on lattice size, whereas solving lattice models must involve determining finite-size effects.
\end{itemize}
Nevertheless, these limitations could conceivably be overcome:
\begin{itemize}
\item The truncation \eqref{ril} is an important finite-size effect that does not contradict the size-independence of amplitudes.
\item Our polynomials may well be manifestations of the representation theory of diagram algebra, and/or of the combinatorics of finite ensembles of loops. Then they could be computed even in the absence of a channel weight.
\end{itemize}

\iffalse
\subsubsection{Cluster models and reflection symmetry}

The idea of reflecting loop weights in order to detect the parity of loop numbers was already used in the $O(n)$ model by Gamsa and Cardy, who used the degenerate field $V^d_{\langle 1,2\rangle}$ with weight $-n$ \cite{gc06}. We have used similar ideas not for gaining a finer understanding of loop models, but for describing cluster models, whose construction implies constraints on parity. In particular, the weight $-n$ appeared in our description of cluster connectivities in Section \ref{sec:ccpm}, and more general weights $-w_i,-w_x$ appeared in our description of diagonal 4-point functions of the cluster model in Section \ref{sec:ttlm}.

Admittely, our use of reflection symmetry was guided more by the search for amplitude ratios that are constant over the module and coincide with bootstrap results, than by a deep conceptual understanding of the cluster model. Quite a few questions remain open. To begin with, in the space of solutions of crossing symmetry for a given 4-point function, which subspace corresponds to the cluster model? Is it the subspace of solutions that obey the shift equations \eqref{tppt} in addition to \eqref{tpt}, or a smaller subspace? Are these solutions invariant under $n\to -n$, and why? And does the CFT agree with lattice results when it comes to 4-point functions, rather than amplitude ratios?
\fi

\section*{Acknowledgements}

We are grateful to Hubert Saleur for many enlightening discussion, for his constant encouragement, and for collaboration on related problems. Moreover, we benefited from useful discussions with John Cardy and Didina Serban. We wish to thank Hubert Saleur, Paul Roux and Yifei He for helpful comments on the draft text.

This work is partly a result of
the project ReNewQuantum, which received funding from the European Research Council.
It was also supported by the French Agence Nationale de la Recherche (ANR) under grant ANR-21-CE40-0003 (project CONFICA).

\bibliographystyle{../inputs/morder7}
\bibliography{../inputs/992}

\end{document}