Ian Jauslin
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jauslin <jauslin@ias.edu>2017-09-13 23:29:54 +0000
committerIan Jauslin <jauslin@ias.edu>2017-09-15 16:34:06 +0000
commit52a5942994007acc29107f036c9b8f386b19399f (patch)
tree70b55d149bb149239b158123d884595440015fe5
Initial commitv0.0
-rw-r--r--Jauslin_Lieb_2017.tex2523
-rw-r--r--Makefile69
-rw-r--r--README49
-rw-r--r--dimer_font/Makefile18
-rw-r--r--dimer_font/dimer.mf65
-rw-r--r--dimer_font/dimer.sty5
-rw-r--r--figs/dimer_example.fig/Makefile32
-rw-r--r--figs/dimer_example.fig/dimer_conf.py289
l---------figs/dimer_example.fig/libs/dimer.sty1
-rw-r--r--figs/libs/Makefile25
-rw-r--r--figs/libs/dimer.sty33
l---------figs/polymer_example.fig/Makefile1
-rw-r--r--figs/polymer_example.fig/contours.tikz.tex69
-rw-r--r--figs/polymer_example.fig/inclusion_tree.tikz.tex45
l---------figs/polymer_example.fig/libs/dimer.sty1
-rw-r--r--figs/polymer_example.fig/lollipops-tree.tikz.tex30
-rw-r--r--figs/polymer_example.fig/lollipops.tikz.tex76
-rw-r--r--figs/polymer_example.fig/loops.tikz.tex34
-rw-r--r--figs/polymer_example.fig/polymers.tikz.tex76
-rw-r--r--figs/polymer_example.fig/segments.tikz.tex132
l---------figs/smallest.fig/Makefile1
l---------figs/smallest.fig/libs/dimer.sty1
-rw-r--r--figs/smallest.fig/smallest-18.tikz.tex16
-rw-r--r--figs/smallest.fig/smallest-6.tikz.tex15
-rw-r--r--libs/constants.sty32
-rw-r--r--libs/ian.cls658
-rw-r--r--libs/iantheo.sty162
-rw-r--r--libs/largearray.sty19
-rw-r--r--libs/point.sty106
29 files changed, 4583 insertions, 0 deletions
diff --git a/Jauslin_Lieb_2017.tex b/Jauslin_Lieb_2017.tex
new file mode 100644
index 0000000..e0b8604
--- /dev/null
+++ b/Jauslin_Lieb_2017.tex
@@ -0,0 +1,2523 @@
+\documentclass{ian}
+
+\usepackage{dimer}
+\usepackage{amssymb}
+\usepackage{dsfont}
+\usepackage{graphicx}
+\usepackage{largearray}
+\usepackage{constants}
+
+\def\define#1{{\bf #1}}
+
+\begin{document}
+
+\hbox{}
+\hfil{\bf\LARGE
+Nematic liquid crystal phase\par
+\vskip10pt
+\hfil in a system of interacting dimers and monomers
+}
+\vfill
+
+\hfil{\bf\large Ian Jauslin}\par
+\hfil{\it School of Mathematics, Institute for Advanced Study}\par
+\vskip20pt
+
+
+\hfil{\bf\large Elliott H. Lieb}\par
+\hfil{\it Departments of Mathematics and Physics, Princeton University}\par
+
+\vfill
+
+
+\hfil {\bf Abstract}\par
+\medskip
+We consider a monomer-dimer system with a strong attractive dimer-dimer interaction that favors alignment. In 1979, Heilmann and Lieb conjectured that this model should exhibit a nematic liquid crystal phase, in which the dimers are mostly aligned, but do not manifest any translational order. We prove this conjecture for large dimer activity and strong interactions. The proof follows a Pirogov-Sinai scheme, in which we map the dimer model to a system of hard-core polymers whose partition function is computed using a convergent cluster expansion.
+\vfill
+
+\tableofcontents
+
+\vfill
+
+\hfil{\footnotesize \copyright\ 2017 by the authors. This paper may be reproduced, in its entirety, for non-commercial purposes.}
+\smallskip
+
+{\footnotesize\hfil e-mail: {\tt jauslin@ias.edu}, {\tt lieb@princeton.edu}}
+
+\eject
+
+\setcounter{page}1
+\pagestyle{plain}
+
+
+\section{Introduction}
+\indent In a 1979 paper, O.J.~\-Heilmann and one of us \cite{HL79} attempted to construct a simple statistical mechanical lattice model of a liquid crystal phase transition. Such a model would have to have the property that the constituent `molecules' would have to show no long-range order at high temperature and, at low temperature, have a transition to a phase in which there is long-range rotational order of the molecules, but {\it no} long-range translational order. In other words, the molecules are nearly parallel, but their centers show no long-range correlations. Such a model had not been constructed before then, although there was the 1949 heuristic ultra-thin, ultra-long molecule model of L.~\-Onsager \cite{On49}.
+
+\indent In the model considered in~\-\cite{HL79} the molecules are represented by interacting dimers or fourmers on a square or cubic lattice. It was shown, by reflection positivity and chessboard estimates, that, for several different models, the system exhibits long-range orientational order at low temperature. Thus, if we specify the orientation of one dimer somewhere in the lattice, any other dimer is oriented in the same way with large probability. It was not proved, however, that this rotational order is {\it not} accompanied by translational order, that is, it was not proved that fixing a dimer somewhere on the lattice does not induce correlations in the position of distant dimers, even though it does induce a preference for their orientation.
+
+\indent Since then, there have been many new developments in the field, though a complete proof of the lack of translational order for any of the models considered in~\-\cite{HL79} was, until now, still lacking. In~\-\cite{AH80}, a new three-dimensional model was added to the list by extending one of the two-dimensional models in~\-\cite{HL79}. In~\-\cite{AZ82,Za96}, the result was extended to a model of elongated molecules on a lattice admitting {\it continuous} orientations, with short- (in three dimensions) and long- (in two dimensions) range attractive interactions. A liquid crystalline (also called {\it nematic}) phase was later proved to exist~\-\cite{BKL84} (that is, both orientational order and a lack of translational order are shown) in a model of infinitely thin long molecules in two dimensions admitting a {\it finite} number of orientations (although the discussion in~\-\cite{BKL84} is limited to a remark in the concluding section of the paper). This behavior was also shown to occur in an integrable lattice model of rods admitting two orientations and of varying length~\-\cite{IVZ06} or of a fixed, long length~\-\cite{DG13}. Finally, in~\-\cite{ACM14}, a mean-field interacting dimer model was introduced and solved.
+
+\indent There has also been some progress towards proving the conjecture in~\-\cite{HL79}. Most efforts have focused on one of the models in~\-\cite{HL79}, model~\-I (see figure~\-\ref{fig:interaction}), which is two-dimensional, and involves an interaction between collinear, neighboring dimers. In~\-\cite{Al16}, D.~\-Alberici tweaked this model by making the activity of horizontal and vertical dimers different, thus favoring one orientation, and showed the emergence of a liquid crystalline phase. There have also been numerical results~\-\cite{PCF14} supporting the conjecture.
+
+\indent In this paper, we shall prove the conjecture in~\-\cite{HL79} that there is no long-range translational order in model~\-I. There is little doubt that similar proofs could be devised for the other models and other dimensions for which orientational order was proved in~\-\cite{HL79}.
+\bigskip
+
+\indent Let us describe the model in more precise terms. It is a monomer-dimer system on the square lattice, in which a dimer is an object that covers exactly two neighboring vertices, and a monomer covers a single vertex. No two objects are permitted to cover the same vertex. Monomers are to be thought of, in this context, as empty sites, whereas dimers represent molecules. The dimer-activity $z$ is large, which favors dimers heavily, but the presence of monomers is crucial. In addition we introduce a strong attractive force that favors alignment. Without this interaction, as was shown in~\-\cite{HL72}, the monomer-dimer model would not have phase transitions at positive temperature, and thus, would exhibit no liquid crystalline ordering.
+
+\indent The attractive interaction assigns a negative energy $-J$ to every pair of dimers that are adjacent and aligned, that is, that are on the same row or the same column, see figure~\-\ref{fig:interaction}. We offer two interpretations of this model. One is of polar molecules of length 1, represented by individual dimers; the other is of molecules of varying length, modeled by chains of adjacent and aligned dimers.
+
+\indent We choose boundary conditions that favors vertical dimers, and focus on the parameter regime $J\gg z\gg 1$. We first prove that horizontal dimers are unlikely in the bulk, in accordance with the result of~\-\cite{HL79}. The method of proof is completely different from that in~\-\cite{HL79}; in particular we do not use reflection positivity. We further show that the probability of finding a vertical dimer on a given edge is, in the thermodynamic limit, independent of the position of the edge. Furthermore, the joint probability of finding a dimer at an edge $e$ and another at $e'$, up to a constant, decays exponentially in the distance between $e$ and $e'$ with a rate $\gtrsim e^{-\frac32 J}z^{-\frac12}$. This proves the absence of translational order.
+
+\indent The proof follows a Pirogov-Sinai~\-\cite{PS75} scheme, which is an extension of the Peierls argument. The main idea is to map the interacting dimer model to a system of hard-core polymers, and show that the effective activity of these polymers decays {\it sufficiently} fast in their size. We then use a cluster expansion to compute the partition function of the model in terms of an absolutely convergent series, and estimate the one- and two-point correlation functions.
+\bigskip
+
+\indent This paper is organized as follows. In section~\-\ref{sec:model}, we define the model in precise terms, state our main theorem and provide a detailed sketch of the proof. Section~\-\ref{sec:1d} describes the solution to an ancillary model in which only one dimer orientation is allowed, which plays an important role in the rest of the proof. In section~\-\ref{sec:polymer_model}, we map the interacting dimer model to the polymer model. In section~\-\ref{sec:cluster} we prove bounds on the polymer activity and entropy, and compute the partition function of the polymer model in terms of an absolutely convergent cluster expansion. Finally, the proof of the main theorem is concluded in section~\-\ref{sec:nematic}.
+\bigskip
+
+\delimtitle{\bf Acknowledgements}
+We thank Alessandro Giuliani, Diego Alberici and Daniel Ueltschi for helpful discussions about this work. The work of E.H.L. was partially supported by U.S. National Science Foundation grant PHY~\-1265118. The work of I.J. was supported by The Giorgio and Elena Petronio Fellowship Fund and The Giorgio and Elena Petronio Fellowship Fund II.
+\enddelim
+
+\section{The Model}\label{sec:model}
+\subsection{Definition of the model}
+\indent A dimer configuration is a collection of non-overlapping edges of $\mathbb Z^2$. In order to define these formally, we denote the set of edges of a subset $\Lambda\subset\mathbb Z^2$ by
+\begin{equation}
+ \mathcal E(\Lambda):=\{\{x,x'\},\ x,x'\in\Lambda,\ \|x-x'\|=1\}
+ \label{mcE}
+\end{equation}
+in which $\|\cdot\|$ denotes the Euclidean distance. The edges of $\Lambda$ are either horizontal ($\mathrm h$-edges) or vertical ($\mathrm v$-edges), and given a set of edges $E\subset\mathcal E(\Lambda)$ and $q\in\{\mathrm{h},\mathrm{v}\}$, we denote the set of \define{$q$-edges} in $E$ by $\mathbb D_q(E)$. We then define the set of \define{dimer configurations} in $\Lambda$ as
+\begin{equation}
+ \Omega(\Lambda):=\{E\subset\mathcal E(\Lambda),\quad \forall e\neq e'\in E,\ e\cap e'=\emptyset\}
+\end{equation}
+(see figure~\-\ref{fig:interaction} for an example).
+\bigskip
+
+\point{\bf Interaction.} We introduce a strong interaction between dimers, that favors configurations in which dimers are aligned, collinear and neighbors (see figure~\-\ref{fig:interaction}). Every such pair of dimers contributes $-J$ to the energy of the configuration, and $J$ will be taken to be large.
+\bigskip
+
+\begin{figure}
+ \hfil\includegraphics[width=8cm]{interaction.pdf}
+ \caption{An example of a dimer configuration. Interacting dimers are depicted as connected by a red (color online) wavy line.}
+ \label{fig:interaction}
+\end{figure}
+
+\point{\bf Boundary condition.} We choose the boundary condition in such a way that either vertical or horizontal dimers are favored. To determine which it is, we introduce a variable $q\in\{\mathrm v,\mathrm h\}$ which is set to $\mathrm v$ if vertical dimers are favored and $\mathrm h$ if horizontal ones are. In addition, we define $-q$ as the {\it opposite} of $q$, that is, if $q=\mathrm h$, then $-q=\mathrm v$ and vice-versa. The boundary condition consists of two forces: first, $-q$-dimers are not allowed to be too close to the boundary, and $q$-dimers may be attracted by certain parts of the boundary.
+
+\indent In order to define the boundary condition precisely, let us first define the \define{boundary} of a bounded subset $\Lambda\subset\mathbb Z^2$, denoted by $\partial\Lambda$, as the set of edges $\{x,x'\}\in\mathcal E(\mathbb Z^2)$ with $x\in\Lambda$ and $x'\in\mathbb Z^2\setminus\Lambda$. In addition, we define the \define{$q$-distance} between two points $x,x'\in\mathbb Z^2$, denoted by $\mathfrak d_q(x,x')\in\mathbb R\cup\{\infty\}$, in the following way. If $x$ and $x'$ are in the same $q$-line (a v-line is a vertical line and an h-line is a horizontal one), then $\mathfrak d_q(x,x')=\|x-x'\|$, and if they are not, then $\mathfrak d_q(x,x')=\infty$. We can now define the boundary condition, which, we recall, consists of two forces (see figure~\-\ref{fig:boundary} for an example).
+\begin{itemize}
+ \item We fix a length scale $\ell_0>1$ and require that every $-q$-dimer in $\Lambda$ be separated from the boundary of $\Lambda$ by a $q$-distance of at least $\ell_0$. We denote the set of dimer configurations satisfying this condition by
+ \begin{equation}
+ \Omega_{q,\ell_0}(\Lambda):=\{\underline\delta\in\Omega(\Lambda),\quad\mathfrak d_q(\mathbb D_{-q}(\underline\delta),\partial\Lambda)\geqslant\ell_0\}.
+ \end{equation}
+
+ \item In addition to this condition, we will allow part or all of $\partial\Lambda$ to be {\it magnetized}, by which we mean that parts of the boundary may attract $q$-dimers, as if there were $q$-dimers right outside it. Formally, we introduce a subset $\varrho\subset\partial\Lambda$ of edges on the boundary which are magnetized, and, given a dimer configuration $\underline\delta\in\Omega_{q,\ell_0}(\Lambda)$, we define the set of dimers that are bound to the boundary as
+ \begin{equation}
+ \mathbb B_q(\underline\delta,\varrho):=
+ \{d\in\underline\delta,\quad \mathfrak d_q(d,\varrho)=0\}.
+ \end{equation}
+ Every dimer in $\mathbb B_q(\underline\delta,\varrho)$ contributes $-J$ to the interaction, as if every such dimer interacted with a phantom dimer outside $\Lambda$.
+\end{itemize}
+
+The boundary condition is thus specified by the triplet $(q,\varrho,\ell_0)\equiv\mathbf q$, and we will use the shorthand $\Omega_{\mathbf q}\equiv\Omega_{q,\ell_0}$ and $\mathbb B_{\mathbf q}(\underline\delta)\equiv\mathbb B_q(\underline\delta,\varrho)$.
+\bigskip
+
+\begin{figure}
+ \hfil\includegraphics[width=8cm]{boundary.pdf}
+ \caption{The boundary condition. Here, we have taken $q=\mathrm v$ and $\ell_0=4$. There can be no horizontal dimers in the cyan (color online) region. Some of the vertices on the boundary, depicted as large red (color online) discs, are {\it magnetized}: they contribute $-J$ to the energy when they are occupied.}
+ \label{fig:boundary}
+\end{figure}
+
+\point{\bf Observables.} In this paper, we will compute the {\it grand-canonical partition function} of the system, defined as
+\begin{equation}
+ Z(\Lambda|\mathbf q)=\sum_{\underline\delta\in\Omega_{\mathbf q}(\Lambda)}z^{|\underline\delta|}e^{-W_0(\underline\delta)}\mathfrak B_{\mathbf q}(\underline\delta)
+ \label{Zmodel}
+\end{equation}
+with
+\begin{equation}
+ e^{-W_0(\underline\delta)}:=\prod_{d_1,d_2\in\underline\delta}e^{\frac12J\mathds1(d_1\sim d_2)}
+ ,\quad
+ \mathfrak B_{\mathbf q}(\underline\delta):=
+ \prod_{d\in\mathbb B_{\mathbf q}(\underline\delta)}e^J
+ \label{eW0}
+\end{equation}
+in which
+\begin{itemize}
+ \item $z>0$ is the {\it dimer activity},
+ \item $J>0$ is the {\it interaction strength},
+ \item $|\underline\delta|$ denotes the number of dimers in $\underline\delta$,
+ \item $\mathds1(d_1\sim d_2)\in\{0,1\}$ identifies which pairs of dimers interact: it is equal to 1 if and only if $\exists q'\in\{\mathrm v,\mathrm h\}$ such that $d_1$ and $d_2$ are both $q'$-dimers and are at $q'$-distance $1$ from one another.
+\end{itemize}
+\bigskip
+
+\indent In addition, we will compute the $\mathfrak n$-point correlation functions, defined as follows. We fix a set of edges $\Upsilon\equiv\{\upsilon_1,\cdots,\upsilon_{\mathfrak n}\}\subset\mathcal E(\Lambda)$, and define
+\begin{equation}
+ \left<\mathds 1_{\upsilon_1}\cdots\mathds 1_{\upsilon_{\mathfrak n}}\right>_{\Lambda,\mathbf q}
+ :=
+ \frac1{Z(\Lambda|\mathbf q)}
+ \sum_{\displaystyle\mathop{\scriptstyle\underline\delta\in\Omega_{\mathbf q}(\Lambda)}_{\delta\supset\Upsilon}}z^{|\underline\delta|}e^{-W_0(\underline\delta)}\mathfrak B_{\mathbf q}(\underline\delta).
+\end{equation}
+The infinite-volume limit of this correlation function is defined by considering a square $L\times L$ box $\Lambda_L$ and taking the $L\to\infty$ limit
+\begin{equation}
+ \left<\mathds 1_{\upsilon_1}\cdots\mathds 1_{\upsilon_{\mathfrak n}}\right>_{\mathbf q}
+ :=\lim_{L\to\infty}
+ \left<\mathds 1_{\upsilon_1}\cdots\mathds 1_{\upsilon_{\mathfrak n}}\right>_{\Lambda_L,\mathbf q}
+ .
+\end{equation}
+We will assume that the different $\upsilon_i$ are at a distance of at least $\ell_0$ from each other. Note that the partition function of dimers in $\Lambda$ that contain $\Upsilon$ can, equivalently, be viewed as the partition function on $\Lambda\setminus(\bigcup_{\upsilon\in\Upsilon}\upsilon)$ with a special boundary condition. Namely, the endpoints of $\upsilon$ are {\it magnetized}, in the sense discussed above, but, unlike the boundary of $\Lambda$, which excludes $-q$-dimers at a distance $\ell_0$, the boundary of $\upsilon$ does not exclude any dimers. Formally, defining
+\begin{equation}
+ \Lambda^{(\Upsilon)}:=\Lambda\setminus\left({\textstyle\bigcup_{\upsilon\in\Upsilon}\upsilon}\right)
+\end{equation}
+and
+\begin{equation}
+ \Omega_{q,\ell_0}^{(\Upsilon)}(\Lambda):=\{\underline\delta\in\Omega_{q,\ell_0}(\Lambda),\quad\forall\delta\in\underline\delta,\ \delta\subset\Lambda^{(\Upsilon)}\}
+\end{equation}
+we have (recall that we assume that different $\upsilon_i$'s are not neighbors)
+\begin{equation}
+ \left<\mathds 1_{\upsilon_1}\cdots\mathds 1_{\upsilon_{\mathfrak n}}\right>_{\Lambda,\mathbf q}
+ =
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf q)}{Z(\Lambda|\mathbf q)}
+ ,\quad
+ Z^{(\Upsilon)}(\Lambda|\mathbf q)
+ :=
+ z^{\mathfrak n}
+ \sum_{\scriptstyle\underline\delta\in\Omega_{\mathbf q}^{(\Upsilon)}(\Lambda)}z^{|\underline\delta|}e^{-W_0(\underline\delta)}\mathfrak B_{\mathbf q}^{(\Upsilon)}(\underline\delta)
+\end{equation}
+in which $\mathfrak B_{\mathbf q}^{(\Upsilon)}(\underline\delta)$ includes the interactions with the sources:
+\begin{equation}
+ \mathfrak B_{\mathbf q}^{(\Upsilon)}(\underline\delta):=
+ \mathfrak B_{\mathbf q}(\underline\delta)
+ \left(\prod_{\upsilon\in \mathbb D_q(\Upsilon)}\mathfrak B_{(q,\partial_q\upsilon,\ell_0)}(\underline\delta)\right)
+ \left(\prod_{\upsilon\in \mathbb D_{-q}(\Upsilon)}\mathfrak B_{(-q,\partial_{-q}\upsilon,\ell_0)}(\underline\delta)\right)
+\end{equation}
+in which $\partial_q\equiv\mathbb D_q(\partial)$.
+\bigskip
+
+\point{\bf Oriented dimer model.} As was shown in \cite{HL79}, when the interaction strength is sufficiently large, the probability of horizontal and vertical dimers coexisting is low. In fact, the main idea is to compute how much the partition function of the model with $q$-boundary conditions differs from that of a similar model in which there are {\it only} $q$-dimers and monomers, and to show that, in a sense to be made precise, this difference is small. We first formally define the {\it oriented dimer model}, in which only one of the two dimer orientations is allowed: let $\Theta_q(\Lambda)\subset\Omega(\Lambda)$ denote the set of $q$-dimer configurations on $\Lambda$:
+\begin{equation}
+ \Theta_q(\Lambda):=\{\underline\delta\in\Omega_q(\Lambda),\ \delta\in\mathbb D_q(\mathcal E(\Lambda))\}
+\end{equation}
+in terms of which the partition function of the $q$-dimer model is
+\begin{equation}
+ \mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)=z^{\mathfrak n}\sum_{\underline\delta\in\Theta_q(\Lambda^{(\Upsilon)})}z^{|\underline\delta|}e^{-W_0(\underline\delta)}\mathfrak B_{\mathbf q}^{(\Upsilon)}(\underline\delta)
+ .
+ \label{Zv}
+\end{equation}
+In order to compare $Z^{(\Upsilon)}(\Lambda|\mathbf q)$ and $\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)$, we will compute the ratio
+\begin{equation}
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf q)}{\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)}.
+ \label{goal}
+\end{equation}
+Note that, in the oriented dimer model, since different columns of vertical dimers and different rows of horizontal dimers do not interact, in order to compute $\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)$, it suffices to compute the partition function of dimers on a one-dimensional chain.
+\bigskip
+
+\subsection{Result}
+\indent Our main result is that, at large activities and yet larger interaction strengths, this model exhibits {\it nematic} order, that is, it exhibits long-range orientational order, yet no long-range translational order. This is stated precisely in the following theorem.
+\bigskip
+
+\theoname{Theorem}{nematic phase}\label{theo:nematic}
+ Let $\mathbf v\equiv(\mathrm v,\emptyset,\ell_0)$, which corresponds to open boundary conditions coupled with the condition that no horizontal dimers come within a distance $\ell_0$ of the boundary. There exist {\it large} constants (which, in principle, can be worked out) $\cst C{cst:ineqJ},\cst C{cst:ineqz}>0$ such that, if
+ \begin{equation}
+ J>\cst C{cst:ineqJ} z
+ \quad\mathrm{and}\quad
+ z>\cst C{cst:ineqz}
+ \end{equation}
+ then, taking $\ell_0=\cst C{cst:ell0}e^{\frac32J}\sqrt z$ for some constant $\cst C{cst:ell0}>0$ ($\ell_0$ is of the order of the correlation length of the oriented dimer model), the following statements hold.
+ \begin{itemize}
+ \item Let $e_{\mathrm v}\in \mathbb D_{\mathrm v}(\mathcal E(\mathbb Z^2))$ be a vertical edge, $\left<\mathds 1_{e_{\mathrm v}}\right>_{\mathbf v}$ is {\it independent} of the position of $e_{\mathrm v}$, and
+ \begin{equation}
+ \left<\mathds 1_{e_{\mathrm v}}\right>_{\mathbf v}=\frac12\left(1+O\left({\textstyle\frac1{\sqrt{ze^J}}}\right)\right).
+ \label{bound_1v}
+ \end{equation}
+ In other words, the probability of finding a dimer at a given edge is independent of the position of that edge, and most vertices are occupied by a vertical dimer (if the lattice were fully packed, then half the edges are occupied).
+
+ \item Let $e_{\mathrm h}\in \mathbb D_{\mathrm h}(\mathcal E(\mathbb Z^2))$ be a horizontal edge,
+ \begin{equation}
+ \left<\mathds 1_{e_{\mathrm h}}\right>_{\mathbf v}=O(e^{-3J}).
+ \label{bound_1h}
+ \end{equation}
+ Thus, horizontal dimers are unlikely.
+
+ \item For any pair of vertical edges $e_{\mathrm v},e_{\mathrm v}'\in \mathbb D_{\mathrm v}(\mathcal E(\mathbb Z^2))$ which are at a distance of at least $\ell_0$,
+ \begin{equation}
+ \left<\mathds 1_{e_{\mathrm v}}\mathds 1_{e_{\mathrm v}'}\right>_{\mathbf v}
+ -
+ \left<\mathds 1_{e_{\mathrm v}}\right>_{\mathbf v}
+ \left<\mathds 1_{e_{\mathrm v}'}\right>_{\mathbf v}
+ =
+ O(e^{-\cst C{cst:exp1vv}\mathrm{dist}_{\mathrm{HL}}(e,e')})
+ \label{bound_1vv}
+ \end{equation}
+ for some constant $\cst C{cst:exp1vv}>0$, in which the distance $\mathrm{dist}_{\mathrm{HL}}$ is that induced by the norm
+ \begin{equation}
+ \|(x,y)\|_{\mathrm{HL}}:=J|x|+e^{-\frac32J}z^{-\frac12}|y|
+ .
+ \end{equation}
+ This means that the probability of placing two vertical dimers at $e_{\mathrm v}$ and $e_{\mathrm v'}$ is equal to a term that does not depend on the position of the edges plus a term that decays exponentially with the distance between them. There is, thus, no long-range translational order between vertical dimers. The decay rate is of order $J\gg 1$ in the horizontal direction and $e^{-\frac32J}z^{-\frac12}\ll 1$ in the vertical.
+
+ \item For any vertical edge $e_{\mathrm v}\in \mathbb D_{\mathrm v}(\mathcal E(\mathbb Z^2))$ and any horizontal edge $e_{\mathrm h}\in \mathbb D_{\mathrm h}(\mathcal E(\mathbb Z^2))$ which is at a distance of at least $\ell_0$ from $e_{\mathrm v}$,
+ \begin{equation}
+ \left<\mathds 1_{e_{\mathrm v}}\mathds 1_{e_{\mathrm h}}\right>_{\mathbf v}
+ -
+ \left<\mathds 1_{e_{\mathrm v}}\right>_{\mathbf v}
+ \left<\mathds 1_{e_{\mathrm h}}\right>_{\mathbf v}
+ =
+ O(e^{-3J}e^{-\cst C{cst:exp1vv}\mathrm{dist}_{\mathrm{HL}}(e,e')})
+ .
+ \label{bound_1vh}
+ \end{equation}
+ Therefore, the probability of finding both a vertical dimer and a horizontal dimer at specified sites is small, which implies long-range orientational order.
+ \nopagebreakafteritemize
+ \end{itemize}
+\restorepagebreakafteritemize
+\endtheo
+
+\subsection{Sketch of the proof}
+\indent Before discussing the proof that is carried out in this paper, let us mention two simpler approaches we have tried which have failed.
+
+\indent In~\-\cite{HL79}, orientational order was proved using reflection positivity and chessboard estimates. The main difficulty with extending this method to prove the lack of translational order is that, as can be seen from theorem~\-\ref{theo:nematic}, the correlation length of the system is very large: $\ell_0\approx e^{\frac32J}\sqrt z$, and the lack of order is only visible on that scale, and seems difficult to see using only reflection positivity.
+
+\indent Another natural approach to the problem is to integrate out the vertical dimers and manipulate the resulting effective horizontal dimer model. The idea being that, if vertical dimers are favored on the boundary, then they should dominate, so the horizontal dimer model would be a rarefied gas, which could be treated by standard cluster expansion methods. However, since horizontal dimers are subjected to a surface tension, they tend to bunch together into large {\it swarms}. In order to control the entropy of these swarms, they would have to pay a price proportional to their volume, which they do not do. Note, however, that if we made the activity of horizontal dimers slightly smaller than that of vertical ones, as in~\-\cite{Al16}, then the horizontal swarms would have a sufficiently large volume cost, and this approach would be successful.
+
+\indent Instead, we opted for a Pirogov-Sinai argument.
+\bigskip
+
+\indent The main idea of the proof is to estimate how much the partition function of the full dimer model differs from that of the oriented dimer model, which is integrable, and to show that the dominant contribution to the observables in theorem~\-\ref{theo:nematic} come from the oriented dimer model. The oriented dimer model is integrable, and one easily shows that the local dimer density is invariant under translations and satisfies~\-(\ref{bound_1v}). In addition, pair correlations decay in the vertical direction with a rate $\ell_0^{-1}\approx e^{-\frac32J}z^{-\frac12}$, and are identically zero in the horizontal direction. Therefore, (\ref{bound_1vv}) holds in the oriented dimer model, with the improvement that the decay rate in the horizontal direction is infinite, rather than of order $J$. The full model does have horizontal correlations, mediated by horizontal dimers. In order to bound the difference in the partition functions of the oriented dimer model and the full one, we will compute the ratio of the dimer partition function to the oriented dimer partition function~\-(\ref{goal}) in terms of absolutely convergent series.
+\bigskip
+
+\indent Obviously, the difference between the full and the oriented dimer models is that there are both horizontal and vertical dimers in the former. With that in mind, we consider dimer configurations in terms of {\it horizontal} and {\it vertical phases} and {\it defects} (see figure~\-\ref{fig:dimer_contour}). A vertical phase is a region of $\mathbb Z^2$ that is occupied only by vertical dimers (and monomers); similarly, a horizontal phase is occupied by horizontal dimers. The interface between a vertical and a horizontal phase is a {\it defect}. This point of view is similar to the {\it Peierls argument} for the ferromagnetic Ising model, in which one can consider a spin configuration as a collection of contours which delineate regions containing only $+$ or $-$ spins. Unlike the Ising model, the configuration in a uniform phase is not unique (because they can contain monomers), but, since the oriented dimer model is integrable, we can compute the partition function in these regions (this is reminiscent of the models considered in~\-\cite{BKL84,BKL85}). In addition, given that we are computing the ratio~\-(\ref{goal}), the partition functions in uniform phases appearing in the numerator are {\it approximately} canceled out by the oriented dimer partition function in the denominator, leaving an effective weight for the defects.
+
+\indent The dominant contribution to the weight of a defect comes from the fact that {\it most} dimers in the denominator of~\-(\ref{goal}) interact with a neighboring dimer (because the dimer activity is large), which means that almost every other vertical edge (we choose $q=\mathrm v$) contributes a factor $e^J$. We can keep track of these factors by assigning a weight $e^{\frac J2}$ to each endpoint of a dimer. On the other hand, the dimers on either side of a defect have different orientations, and, therefore, do not interact. By cutting these interactions, a defect of length $|l|$ contributes a factor $\approx e^{-\frac J2|l|}$ (see figure~\-\ref{fig:dimer_contour}). This is encouraging: in the language of Pirogov-Sinai theory~\-\cite{PS75}, this would indicate that the system satisfies the {\it Peierls condition} with a {\it large decay rate} $\frac J2$, which is a sufficient condition for general Pirogov-Sinai constructions~\-\cite{KP84,BKL84} to apply.
+
+\indent There is, however, one important complication. As was mentioned earlier, the partition functions in the uniform phases only approximately cancel. Indeed, in the numerator, one has a product of oriented partition functions over a partition of $\Lambda$, whereas, in the denominator, there is only one oriented partition function over all of $\Lambda$. However, the partition function in a region depends on its geometry. In addition, while correlations in the oriented dimer model decay exponentially, they have a large correlation length $\ell_0\approx e^{\frac32J}\sqrt z$. There are, therefore, two length scales at play in this system: the microscopic size of a dimer, and the mesoscopic correlation length of the oriented dimer model. Therefore, the dependence of the oriented dimer partition function on the geometry of the region which it describes is strong when the diameter of the region does not exceed $\ell_0$. As a consequence, defects interact with each other, with an exponentially decaying interaction that has a very small decay rate $\ell_0^{-1}$. In order to deal with this interaction, we use the Mayer trick~\-\cite{Ur27,Ma37} (that is, we write the pair interaction $e^{-W}$ as $(e^{-W}-1)+1$ and expand) and split defect configurations into isolated bunches of interacting defects, called {\it polymers}, which interact only via a hard-core repulsion. We represent polymers graphically as a collection of defects connected to each other by lines representing the interaction (see figure~\-\ref{fig:polymers}). The effective activity of the polymers can then be shown to be $\approx e^{-\frac J2|l|-\ell_0^{-1}|\sigma|}$ where $|l|$ is the total length of the defects and $|\sigma|$ is the total length of the interaction lines. This looks much worse than $e^{-\frac J2|l|}$: the decay rate is now $\approx\ell_0^{-1}$ which is extremely small and may not, a priori, suffice to control the entropy of the polymers: in a model of arbitrary polymers with activity $e^{-\ell_0^{-1}|l|}$, it would be likely to find polymers, whereas we need them to be rare.
+
+\indent The key ingredient to overcome this difficulty is that the interaction is one-dimensional: it comes from the oriented dimer model, and takes place over vertical or horizontal lines, so the contribution to the entropy of a polymer from its interactions is only a one-dimensional sum. In addition, interaction lines are always connected to a defect, which has a very small weight. In fact, the smallest possible defect is of length $6$, so the largest possible weight for a defect is $e^{-3J}$. On the other hand, the sum over the length of the interaction lengths yields $\sum_\ell e^{-\ell_0^{-1}\ell}\approx\ell_0$. Now, since every new interaction line must connect to a new defect, the overall contribution of the interaction line along with the defect to which it is connected, is, at most, $\ell_0e^{-3J}\ll 1$. This allows us to control the entropy of the polymers, even though the decay rate of the interaction lines is small. Having done so, we use a cluster expansion~\-\cite{Ru99,GBG04,KP86,BZ00} to compute the partition function of the polymer model and~\-(\ref{goal}).
+
+\indent There are some more technical complications that arise in the proof. One of these is standard in Pirogov-Sinai theory: unlike the Ising model, the partition function of the oriented dimer model may take different values for vertical and horizontal boundary conditions, which prevents us from using a straight Peierls argument. In order to avoid long-range interactions in the defect model, we must {\it flip} the boundary condition inside each defect back to the vertical, and, in doing so, introduce an extra factor in the activity of the defect that depends on the partition function of the full dimer model inside the defect with both boundary conditions. We then show that this term is, at most, exponentially large in the size of the defect with a rate that is much smaller than $\frac J2$, and thereby causes no trouble. To do so, we must bound the partition function inside the defect from above and below, which we do by induction, and is the main reason why we compute the ratio~\-(\ref{goal}) instead of merely bounding it.
+
+\indent In addition, we have found it necessary to avoid interaction lines of length $<\ell_0$. This is due to the fact that the polymer model we have constructed contains {\it trivial polymers}, which do not contain any defect and consist of a single interaction line going all the way through $\Lambda$. Whenever such lines are of length $<\ell_0$ (which may occur since, in order to carry out the inductive argument mentioned above, we cannot restrict our attention to $\Lambda$'s of large volume), their activity can be close to $\pm 1$. This causes a number of issues, which we have opted to remedy by ensuring that no short trivial polymers may arise. This can be accomplished by grouping defects that are closer than $\ell_0$ from each other into bunches, called {\it contours} (see figure~\-\ref{fig:contours}).
+
+\indent Finally, the introduction of sources to compute correlation functions comes with its share of pesky complications, which we will not comment on here. In fact, readers who are not interested in the fine details of the proof are invited to consider only the case $\Upsilon=\emptyset$, and skip the source-specific paragraphs on a first reading.
+
+\section{Solution of the one-dimensional problem}\label{sec:1d}
+\indent In this section, we compute the partition function of the oriented dimer model on a finite, connected chain $\{1,\cdots,\ell\}\subset\mathbb Z$, with various boundary conditions.
+\bigskip
+
+\indent In order to specify the boundary condition, we introduce the following notation. We introduce a real vector space,
+\begin{equation}
+ \Delta:=\mathrm{span}\{\left|\rightdimer\right>,\left|\leftdimer\right>,\left|\times\right>\}
+\end{equation}
+Given a pair of vectors $\omega\equiv(\omega_1,\omega_\ell)\in\Delta^2$, we define the partition function $\Psi^{(\omega)}(\ell)$ in the following way.
+\begin{itemize}
+ \item If $\omega_1=\left|\rightdimer\right>$, $\left|\leftdimer\right>$ or $\left|\times\right>$, then the first vertex must be covered by, respectively, a half-dimer pointing right, a half-dimer pointing left or a monomer;
+ \item For symmetry reasons, $\omega_\ell$ is defined the other way around: if $\omega_\ell=\left|\rightdimer\right>$, $\left|\leftdimer\right>$ or $\left|\times\right>$, then the last vertex must be covered by, respectively, a half-dimer pointing left, a half-dimer pointing right or a monomer.
+ \item $\Psi^{(\omega)}(\ell)$ is bilinear in $\omega$.
+\end{itemize}
+For example, the partition function with open boundary conditions is obtained by taking $\omega=(\left|\rightdimer\right>+\left|\times\right>,\left|\rightdimer\right>+\left|\times\right>)$.
+\bigskip
+
+\theo{Lemma}\label{lemma:1d}
+ For every $\ell\geqslant 1$, we have, for $\omega\equiv(\omega_1,\omega_\ell)\in\Delta^2$,
+ \begin{equation}
+ \Psi^{(\omega)}(\ell)=\nu_+(\omega_1)\nu_+(\omega_\ell)b_+\lambda_+^{\ell}+\nu_-(\omega_1)\nu_-(\omega_\ell)b_-\lambda_-^{\ell}+\nu_0(\omega_1)\nu_0(\omega_\ell)b_0\lambda_0^{\ell}
+ \label{Zv0}
+ \end{equation}
+ with
+ \begin{equation}
+ \begin{array}{>\displaystyle c}
+ \lambda_+=\left(\sqrt{ze^J}+\frac12e^{-J}\right)(1+O(e^{-J}\epsilon^2))
+ ,\quad
+ \lambda_-=\left(-\sqrt{ze^J}+\frac12e^{-J}\right)(1+O(e^{-J}\epsilon^2))
+ ,\\[0.3cm]
+ \lambda_0=1-e^{-J}(1+\epsilon^2)+O(e^{-2J}\epsilon^2)
+ \end{array}
+ \label{eigenvalues}
+ \end{equation}
+ in which
+ \begin{equation}
+ \epsilon:=\frac1{\sqrt{ze^J}}
+ \label{epsilon}
+ \end{equation}
+ and, for $i\in\{+,-,0\}$,
+ \begin{equation}
+ b_i:=\frac z{(2\lambda_i(\lambda_i-1)^2+z)\lambda_i}
+ \label{b}
+ \end{equation}
+ $\nu_i(\omega_j)$ is linear in $\omega_j$, and
+ \nopagebreakaftereq
+ \begin{equation}
+ \nu_i(\left|\rightdimer\right>)=\lambda_i-1
+ ,\quad
+ \nu_i(\left|\leftdimer\right>)=\frac{\lambda_i}z(\lambda_i-1)
+ ,\quad
+ \nu_i(\left|\times\right>)=1.
+ \label{nu}
+ \end{equation}
+\endtheo
+\restorepagebreakaftereq
+\bigskip
+
+\indent\underline{Proof}:
+ We will use a {\it transfer matrix} approach.
+ \bigskip
+
+ \point Every vertex may be in one of three states: it is either covered by a half-dimer pointing right (\rightdimer), a half-dimer pointing left (\leftdimer), or no dimer ($\times$). One easily checks that the partition function can be written as
+ \begin{equation}
+ \Psi^{(\omega_1,\omega_\ell)}(\ell)=\omega_1\cdot T^{\ell-1}\omega_\ell
+ \end{equation}
+ where $T$ is the {\it transfer matrix}, whose expression, in the $(\left|\rightdimer\right>, \left|\leftdimer\right>, \left|\times\right>)$ basis, is
+ \begin{equation}
+ T:=
+ \left(\begin{array}{*{3}{c}}
+ 0&z&0\\
+ e^J&0&1\\
+ 1&0&1
+ \end{array}\right).
+ \end{equation}
+ \bigskip
+
+ \point By straightforward computation, we diagonalize $T$:
+ \begin{equation}
+ T=P
+ \left(\begin{array}{*{3}{c}}
+ \lambda_+&0&0\\
+ 0&\lambda_-&0\\
+ 0&0&\lambda_0
+ \end{array}\right)
+ P^{-1}
+ \end{equation}
+ where $\lambda_\pm$ and $\lambda_0$ satisfy~\-(\ref{eigenvalues}),
+ \begin{equation}
+ P=
+ \left(\begin{array}{*{3}{c}}
+ \lambda_+-1&\lambda_--1&\lambda_0-1\\
+ \frac{\lambda_+}z(\lambda_+-1)&\frac{\lambda_-}z(\lambda_--1)&\frac{\lambda_0}z(\lambda_0-1)\\
+ 1&1&1
+ \end{array}\right)
+ \left(\begin{array}{*{3}{c}}
+ \frac1{N_+}&0&0\\
+ 0&\frac1{N_-}&0\\
+ 0&0&\frac1{N_0}
+ \end{array}\right).
+ \end{equation}
+ and
+ \begin{equation}
+ P^{-1}=
+ \left(\begin{array}{*{3}{c}}
+ \frac1{N_+}&0&0\\
+ 0&\frac1{N_-}&0\\
+ 0&0&\frac1{N_0}
+ \end{array}\right)
+ \left(\begin{array}{*{3}{c}}
+ \frac{\lambda_+}z(\lambda_+-1)&\lambda_+-1&1\\[0.3cm]
+ \frac{\lambda_-}z(\lambda_--1)&\lambda_--1&1\\[0.3cm]
+ \frac{\lambda_0}z(\lambda_0-1)&\lambda_0-1&1
+ \end{array}\right)
+ \end{equation}
+ with, for $i\in\{+,-,0\}$,
+ \begin{equation}
+ N_i:=\sqrt{2\frac{\lambda_i}z(\lambda_i-1)^2+1}.
+ \end{equation}
+ Therefore, the lemma holds with
+ \begin{equation}
+ b_i=\frac1{N_i^2\lambda_i}
+ ,\quad
+ \nu_i(\omega)=(\omega^TP)_i.
+ \end{equation}
+\qed
+
+
+\section{Dilute hard-core polymer model}\label{sec:polymer_model}
+\indent In this section, we will map the dimer model to a dilute gas of {\it polymers}. To do so, we first map it to a model of weakly interacting {\it contours}, which, similarly to Peierls contours, represent the boundary between regions occupied by horizontal dimers, and regions occupied by vertical dimers.
+
+\indent The result is summarized in lemma~\-\ref{lemma:polymer} below. In order to state it, we need several definitions. These appear naturally in the proof of lemma~\-\ref{lemma:polymer}, and readers who are interested in the proof are invited to skip them for the time being, and come back to them as they appear in the proof.
+\bigskip
+
+\subsection{Definitions}
+\indent From now on, we will assume that the set $\Lambda$ is bounded, and that its complement $\mathbb Z^2\setminus\Lambda$ is connected.
+\bigskip
+
+\point{\bf Bounding loops.} The first definition we will need is that of {\it $c$-bounding loops} for $c\in\{\mathrm c,\mathrm h\}$. Roughly, these are loops $l$ that are such that their inner boundary can be covered by $c$-dimers. In order to formalize this, we must first define the notion of a {\it loop}.
+\bigskip
+
+\theoname{Definition}{loops}\label{def:loop}
+ A set of edges $l\subset\mathcal E(\mathbb Z^2)$ is called a \define{loop} if there exists a simply connected set $\bar l\subset\mathbb Z^2$, called the \define{interior} of the loop, such that $l=\partial\bar l$ (we recall that $\partial\bar l$ is the boundary of $\bar l$). Here, the notion of `connectedness' is to be understood as `connected by edges', and a simply connected set is a connected set whose complement is connected. Finally, we let
+ \nopagebreakaftereq
+ \begin{equation}
+ \bar l^{(\Upsilon)}:=\bar l\setminus\left(\textstyle\bigcup_{\upsilon\in\Upsilon}\upsilon\right)
+ .
+ \end{equation}
+\endtheo
+\restorepagebreakaftereq
+\bigskip
+
+Bounding loops are loops that arise as boundaries of sets covered by dimers. This induces certain geometric constraints (see figure~\-\ref{fig:bounding_loop}).
+\bigskip
+
+\theoname{Definition}{bounding loop}\label{def:bounding_loop}
+ Given $c\in\{\mathrm v,\mathrm h\}$ and a loop $l$, we define the \define{core} of $l$ as
+ \begin{equation}
+ \mathbb I^{(\Upsilon)}_{c}(l):=\left\{x\in\bar l^{(\Upsilon)},\quad \mathfrak d_c(x,\mathbb D_c(l))\geqslant 2,\ \mathfrak d_{-c}(x,\mathbb D_{-c}(l))\geqslant 1\right\}
+ \label{bbI}
+ \end{equation}
+ and its \define{mantle} as
+ \begin{equation}
+ \mathbb O_{c}(l):=\bar l\setminus\mathbb I^{(\emptyset)}_{c}(l).
+ \end{equation}
+ A loop $l$ is called a \define{$c$-bounding loop} if its mantle is disjoint from $\Upsilon$ and can be completely covered by $c$-dimers. We denote the set of $c$-bounding loops in $\Lambda$ by $\mathfrak L_{c}^{(\Upsilon)}(\Lambda)$, and the set of bounding loops by $\mathfrak L^{(\Upsilon)}(\Lambda):=\mathfrak L_{\mathrm v}^{(\Upsilon)}(\Lambda)\cup\mathfrak L_{\mathrm h}^{(\Upsilon)}(\Lambda)$. Finally, two bounding loops are said to be \define{compatible} if they are disjoint, and their mantles are disjoint.
+\endtheo
+\bigskip
+
+\begin{figure}
+ \hfil\includegraphics[width=6.667cm]{bounding_loop.pdf}
+ \caption{An $\mathrm h$-bounding loop. The loop is depicted as a thick line running through the edges that make it up. The core of the loop is colored red and its mantle is colored cyan (color online).}
+ \label{fig:bounding_loop}
+\end{figure}
+
+\point{\bf Contours.} Contours are obtained by combining bounding loops and segments, which we will now define.
+\bigskip
+
+\theoname{Definition}{segment}\label{def:segment}
+ For $c\in\{\mathrm v,\mathrm h\}$ and $y\in\mathbb Z$, we denote the \define{$c$-line} at $y$ by $\chi^{(c)}_y$:
+ \begin{equation}
+ \chi_y^{(\mathrm v)}:=\{(y,x),\ x\in\mathbb Z\}
+ ,\quad
+ \chi_y^{(\mathrm h)}:=\{(x,y),\ x\in\mathbb Z\}.
+ \end{equation}
+ Quite simply, a $\mathrm v$-line is a vertical line and an $\mathrm h$-line is a horizontal one. In addition, we define a map $\Sigma_{c}$ that takes a bounded set $\Lambda'\subset\mathbb Z^2$ as an argument, and splits it up into $c$-segments. Formally, given $y\in\mathbb Z$, we denote the set of connected components of $\Lambda'\cap\chi_y^{(c)}$ by $\underline\sigma_{c,y}(\Lambda')$ (that is, $\underline\sigma_{c,y}(\Lambda')$ is a set whose elements are the connected components of $\Lambda'\cap\chi_y^{(c)}$), and define
+ \begin{equation}
+ \Sigma_{c}(\Lambda'):=\bigcup_{y\in\mathbb Z}\underline\sigma_{c,y}(\Lambda').
+ \label{Sigma}
+ \end{equation}
+ In addition, a $c$-segment $s\in\Sigma_c(\Lambda')$ is said to be \define{connected} to a bounding loop $l$ if $\partial_c s\cap \partial\mathbb O_{c(l)}(l)\neq\emptyset$. Similarly, two bounding loops $l,l'$ are said to be connected if $\partial\mathbb O_{c(l)}(l)\cap\partial\mathbb O_{c(l')}(l')\neq\emptyset$. Finally, given a set of segments $\mathcal S\subset\mathbb S(\Lambda^{(\Upsilon)})$ and a set $\mathcal L$ of disjoint loops, $(\mathcal L,\mathcal S)$ is said to be \define{connected} if, for every $x,y\in\mathcal S\cup\mathcal L$, there exists a path from $x$ to $y$, that is, there exists $\underline p\equiv(p_1,\cdots,p_{|\underline p|})$ with $p_i\in\mathcal S\cup\mathcal L$, $p_1=x$, $p_{|\underline p|}=y$, $p_i$ and $p_{i+1}$ are never both segments, and $p_i$ and $p_{i+1}$ are connected.
+\endtheo
+\bigskip
+
+Bounding loops may lie inside one another. This defines a tree structure, in which loops included inside a larger one {\it descend} from it (see figure~\-\ref{fig:inclusion_tree}).
+\bigskip
+
+\theoname{Definition}{inclusion tree}\label{def:inclusion}
+ Given a set of compatible bounding loops $\mathcal L\equiv\{l_1,\cdots,l_{|\mathcal L|}\}\subset\mathfrak L(\Lambda^{(\Upsilon)})$, we construct the \define{inclusion tree} $T(\mathcal L)$ associated to $\mathcal L$ in the following way.
+ \begin{itemize}
+ \item $T(\mathcal L)$ has $|\mathcal L|+1$ nodes. One node corresponds to $\partial\Lambda$, and is called the {\it root} of $T(\mathcal L)$, while the $|\mathcal L|$ others each correspond to a loop $l_i$.
+ \item For each $l_i$, the corresponding node has a unique {\it parent}, chosen in such a way that every loop containing $l_i$ is an {\it ancestor} of $l_i$ (a loop $l$ contains a loop $l'$ if $l'\subset\mathcal E(\bar l)$).
+ \end{itemize}
+ In addition, we introduce the following notions.
+ \begin{itemize}
+ \item The tree $T(\mathcal L)$ is said to be \define{alternating} if the children of a $c$-bounding loop are $-c$-bounding loops and the children of the root are $-q$-bounding loops.
+ \item Whenever $T(\mathcal L)$ is alternating, we define $c(l)\in\{\mathrm v,\mathrm h\}$ as the index such that $l$ is a $c(l)$-bounding loop.
+ \item Given a loop $l\in\mathcal L$, the \define{padding} of $l$, denoted by $\iota_{c(l)}^{(\Upsilon)}(l)$, is defined as the space inside the loop that is external to all other loops:
+ \begin{equation}
+ \iota^{(\Upsilon)}_{c(l)}(l):=\mathbb I^{(\Upsilon)}_{c(l)}(l)\setminus\left({\textstyle\bigcup_{l'\neq l}\bar l'}\right).
+ \label{iota}
+ \end{equation}
+ \item Let $\mathcal S_\Lambda^{(\Upsilon)}(\mathcal L)$ denote the set of segments contained inside or between loops (see figure~\-\ref{fig:segments}). Formally,
+ \end{itemize}
+ \nopagebreakaftereq
+ \begin{equation}
+ \mathcal S_\Lambda^{(\Upsilon)}(\mathcal L):=\left(\Sigma_q\left(\Lambda^{(\Upsilon)}\setminus\left({\textstyle\bigcup_{l\in\mathcal L}\bar l}\right)\right)\right)\cup\left(\bigcup_{l\in\mathcal L}\Sigma_{c(l)}(\iota^{(\Upsilon)}_{c(l)}(l))\right).
+ \label{calS}
+ \end{equation}
+\endtheo
+\restorepagebreakaftereq
+\bigskip
+
+\begin{figure}
+ \hfil\includegraphics[height=8cm]{loops.pdf}
+ \hfil\raise2cm\hbox{\includegraphics[height=4cm]{inclusion_tree.pdf}}
+ \caption{Nested bounding loops and their corresponding inclusion tree. The root of the tree is drawn in black. The colors (color online) and labels of the nodes in the tree match with those of the loops. The tree is {\it alternating} because the blue, teal, orange and green ({\it a}, {\it c}, {\it f} and {\it g}) loops are $\mathrm h$-bounding loops and the red, cyan and magenta ({\it b}, {\it e} and {\it d}) ones are $\mathrm v$-bounding loops.}
+ \label{fig:inclusion_tree}
+\end{figure}
+
+\begin{figure}
+ \hfil\includegraphics[width=8cm]{segments.pdf}
+ \caption{The segments inside and outside the loops. The sets $\iota_{c(l)}(l)$ are depicted in the same color (color online) as the loop to which they correspond. The mantles of the loops are covered in black.}
+ \label{fig:segments}
+\end{figure}
+
+
+Two disjoint bounding loops may be vertically or horizontally aligned, that is, there may exist vertical or horizontal segments that connect them. Whenever these segments are smaller than the characteristic length $\ell_0>0$ we consider that the two loops are part of the same object, which we call a {\it contour} (see figure~\-\ref{fig:contours}).
+\bigskip
+
+\theoname{Definition}{contour}\label{def:contour}
+ A \define{contour} a is non-empty set $\mathcal L\equiv\{l_1,\cdots,l_{|\mathcal L|}\}$ of bounding loops $l_i\in\mathfrak L^{(\Upsilon)}(\Lambda)$ satisfying the following conditions.
+ \begin{itemize}
+ \item For every $l\neq l'\in\mathcal L$, $l$ and $l'$ are compatible (see definition~\-\ref{def:bounding_loop}).
+ \item The inclusion tree $T(\mathcal L)$ (see definition~\-\ref{def:inclusion}) is {\it alternating}.
+ \item We define the \define{support} of $\mathcal L$ as the {\it pair}
+ \begin{equation}
+ \mathrm{supp}_{\Lambda,\ell_0}^{(\Upsilon)}(\mathcal L):=(\mathcal L,\mathcal S_{\Lambda,<\ell_0}^{(\Upsilon)}(\mathcal L))
+ \end{equation}
+ in which $\mathcal S_{\Lambda,<\ell_0}^{(\Upsilon)}(\mathcal L)$ is the set of segments of length $<\ell_0$ that connect the loops to each other or to the boundary:
+ \begin{equation}
+ \mathcal S_{\Lambda,<\ell_0}^{(\Upsilon)}(\mathcal L):=\{\sigma\in\mathcal S_\Lambda^{(\Upsilon)}(\mathcal L),\ |\sigma|<\ell_0\}.
+ \label{Sleell0}
+ \end{equation}
+ The support of $\mathcal L$ is required to be {\it connected}.
+ \end{itemize}
+ We denote the set of contours in $\Lambda$ by $\mathfrak C_q^{(\Upsilon)}(\Lambda)$. In addition, we introduce the following definitions.
+ \begin{itemize}
+ \item Two contours $\mathcal L_1,\mathcal L_2\in\mathfrak C_q^{(\Upsilon)}(\Lambda)$ are said to be \define{compatible} if the support of $\mathcal L_1\cup\mathcal L_2$ is {\it not} connected.
+ \item Given two contours $\mathcal L_1$ and $\mathcal L_2$, $\mathcal L_1$ is said to be \define{external} to $\mathcal L_2$ if they are compatible and, for every $l_1\in\mathcal L_1$ and $l_2\in\mathcal L_2$, $\bar l_2\subset\bar l_1$. In other words, $\mathcal L_1$ is external to $\mathcal L_2$ if there is a path from the interior of $\mathcal L_1$ to infinity that does not cross $\mathcal L_2$.
+ \nopagebreakafteritemize
+ \end{itemize}
+\restorepagebreakafteritemize
+\endtheo
+\bigskip
+
+\begin{figure}
+ \hfil\includegraphics[width=8cm]{contours.pdf}
+ \caption{Two contours, depicted in different colors (color online). Here, we have taken $\ell_0=4$ and $q=\mathrm v$. The segments in the support are drawn as thick lines, and the mantles have been filled in. These two contours are compatible and external to each other.}
+ \label{fig:contours}
+\end{figure}
+
+\point{\bf Polymers.} Thus, contours are unions of loops connected by segments of length $<\ell_0$. {\it Polymers} Consist of sets of contours, connected together by longer segments (see figure~\-\ref{fig:polymers}). We will first define {\it external polymers}, and then fill them in inductively.
+\bigskip
+
+\theoname{Definition}{external polymer}\label{def:external_polymer}
+ An \define{external polymer} is a couple $\xi\equiv(\underline\Gamma(\xi),\underline\sigma(\xi))$ with
+ \begin{itemize}
+ \item $\underline\Gamma(\xi)\equiv\{\Gamma_1,\cdots,\Gamma_{|\underline\Gamma(\xi)|}\}$ is a (possibly empty) set of contours $\Gamma_i\in\mathfrak C_q^{(\Upsilon)}(\Lambda)$, that are pairwise {\it compatible} and {\it external} to each other,
+ \item $\underline\sigma(\xi)\equiv\{\sigma_1(\xi),\cdots,\sigma_{|\underline\sigma(\xi)|}\}$ is a (possibly empty) set of $q$-segments
+ \begin{equation}
+ \textstyle
+ \sigma_i\in\left\{
+ \sigma\in\Sigma_q\left(\Lambda^{(\Upsilon)}\setminus\left(\bigcup_{\Gamma\in\underline\Gamma(\xi)}\bigcup_{l\in\Gamma}\bar l\right)\right)
+ ,\quad
+ |\sigma|\geqslant\ell_0
+ \right\}
+ \end{equation}
+ \end{itemize}
+ satisfying the following conditions.
+ \begin{itemize}
+ \item $\underline\Gamma(\xi)$ and $\underline\sigma(\xi)$ cannot both be empty.
+ \item We define the \define{support} of $\xi$ as
+ \begin{equation}
+ \mathrm{supp}_{\Lambda,\ell_0}^{(\Upsilon)}(\xi):=
+ \left(
+ {\textstyle\bigcup_{\Gamma\in\underline\Gamma(\xi)}\Gamma}
+ ,
+ \mathcal S_{\Lambda}^{(\Upsilon)}(\xi)
+ \right)
+ ,\quad
+ \mathcal S_{\Lambda}^{(\Upsilon)}(\xi):=
+ \underline\sigma(\xi)\cup
+ \left({\textstyle\bigcup_{\Gamma\in\underline\Gamma(\xi)}\mathcal S_{\Lambda,<\ell_0}^{(\Upsilon)}(\Gamma)}\right)
+ \label{supp_polymer}
+ \end{equation}
+ (see~\-(\ref{Sleell0})). The support of $\xi$ is required to be {\it connected}.
+ \end{itemize}
+ We denote the set of external polymers in $\Lambda$ by $\mathfrak X_q^{(\Upsilon)}(\Lambda)$. In addition, we introduce the following notions.
+ \begin{itemize}
+ \item Two external polymers $\xi_1,\xi_2\in\mathfrak X_q^{(\Upsilon)}(\Lambda)$ are said to be \define{compatible} if the support of $\xi_1\cup\xi_2\equiv(\underline\Gamma(\xi_1)\cup\underline\Gamma(\xi_2),\underline\sigma(\xi_1)\cup\underline\sigma(\xi_2))$ is {\it not} connected.
+ \item An external polymer $\xi$ is said to be \define{connected to $\partial\Lambda$} if the support of $(\partial\Lambda\cup\underline\Gamma(\xi),\underline\sigma(\xi))$ is connected.
+ \item The \define{core} of an external polymer $\xi$ is defined as
+ \begin{equation}
+ \mathbb I_q^{(\Upsilon)}(\xi):=\bigcup_{\Gamma\in\underline\Gamma(\xi)}\bigcup_{l\in\Gamma}\mathbb I_{c(l)}^{(\Upsilon)}(l).
+ \end{equation}
+ \item An external polymer than does not contain any contours is called \define{trivial}¸ and the set of trivial polymers is denoted by
+ \begin{equation}
+ \widetilde{\mathfrak X}^{(\Upsilon)}_q(\Lambda):=\{\xi\in\mathfrak X_q^{(\Upsilon)}(\Lambda),\ \underline\Gamma(\xi)=\emptyset\}.
+ \end{equation}
+ \nopagebreakafteritemize
+ \end{itemize}
+\restorepagebreakafteritemize
+\endtheo
+\bigskip
+
+\begin{figure}
+ \hfil\includegraphics[width=8cm]{polymers.pdf}
+ \caption{A polymer. It is obtained by joining the two contours in figure~\-\ref{fig:contours} by segments of length $\geqslant\ell_0$. This polymer is connected to $\partial\Lambda$.}
+ \label{fig:polymers}
+\end{figure}
+
+Finally, we introduce the notion of {\it polymers}, defined inductively by putting polymers inside the loops of an external polymer.
+\bigskip
+
+\theoname{Definition}{polymer}\label{def:polymer}
+ We define the set $\mathfrak P_q^{(\Upsilon)}(\Lambda)$ of \define{polymers} inductively.
+ \begin{itemize}
+ \item An external polymer is, itself, a polymer: $\mathfrak P_q^{(\Upsilon)}(\Lambda)\supset\mathfrak X_q^{(\Upsilon)}(\Lambda)$.
+ \item A polymer $\gamma\in\mathfrak P_q^{(\Upsilon)}(\Lambda)\setminus\mathfrak X_q^{(\Upsilon)}(\Lambda)$ that is not external, is the union of an external polymer $\xi(\gamma)\in\mathfrak X_q^{(\Upsilon)}(\Lambda)$ and of polymers $g_1,\cdots,g_n\in\mathfrak P_q^{(\Upsilon)}(\mathbb I_q^{(\emptyset)}(\xi(\gamma)))$ that are all $q$-connected to $\partial_q\mathbb I_q^{(\emptyset)}(\xi(\gamma))$, and compatible with $\xi(\gamma)$ and with each other (we recall that $\partial_q\equiv\mathbb D_q(\partial)$). In this case, we define $\underline g(\gamma):=\{g_1,\cdots,g_n\}$.
+ \item A polymer $\gamma\in\mathfrak P_q^{(\Upsilon)}(\Lambda)$ is said to be \define{connected to $\partial\Lambda$} if $\xi(\gamma)$ is connected to $\partial\Lambda$.
+ \item Two polymers $\gamma,\gamma'\in\mathfrak P_q^{(\Upsilon)}(\Lambda)$ are said to be \define{compatible} if, for any $g\in\{\xi(\gamma)\}\cup\underline g(\gamma)$ and any $g'\in\{\xi(\gamma')\}\cup\underline g(\gamma')$, $g$ and $g'$ are compatible.
+ \item A polymer that consists of a single trivial external polymer is called \define{trivial}, and the set of trivial polymers is denoted by $\widetilde{\mathfrak P}_q^{(\Upsilon)}(\Lambda)$.
+ \nopagebreakafteritemize
+ \end{itemize}
+\restorepagebreakafteritemize
+\endtheo
+
+\subsection{Hard-core polymer mapping}
+
+\indent We can now state the result of this section: the dimer model can be mapped to a polymer model with a purely hard-core interaction.
+\bigskip
+
+\theoname{Lemma}{polymer model}\label{lemma:polymer}
+ For every bounded subset $\Lambda\subset\mathbb Z^2$ which is such that $\mathbb Z^2\setminus\Lambda$ is connected, and $\partial\Lambda$ is the boundary is a bounding loop, for every boundary condition $\mathbf q$, if every $q$-segment of $\Lambda$ is of length $\geqslant\ell_0$, that is, for every $\sigma\in\Sigma_q(\Lambda)$, $|\sigma|\geqslant\ell_0$, then
+ \begin{equation}
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda)}=
+ \sum_{\underline\gamma\subset\mathfrak P_q(\Lambda)}
+ \left(\prod_{\gamma\neq\gamma'\in\underline\gamma}\Phi(\gamma,\gamma')\right)
+ \prod_{\gamma\in\underline\gamma}\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)
+ \label{Z_polymer}
+ \end{equation}
+ in which $\Phi(\gamma,\gamma')\in\{0,1\}$ is equal to 1 if and only if $\gamma$ and $\gamma'$ are {\it compatible}, and $\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)$ and $\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda)$ are defined in definition~\-\ref{def:miscellaneous} below.
+\endtheo
+\bigskip
+
+We will now define $\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)$ and $\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda)$. The definition is fairly long and tedious, and the readers who are interested in the proof of the lemma are urged to skip it and come back to it as it appears in the proof.
+\bigskip
+
+\theoname{Definition}{definitions needed for lemma \ref{lemma:polymer}}\label{def:miscellaneous}
+ \begin{itemize}
+ \item We define two 1-dimensional boundary conditions: $\omega_0$ and $\omega_1$ which correspond, respectively, to {\it open} and {\it magnetized} boundary conditions:
+ \begin{equation}
+ \omega_0:=\left|\rightdimer\right>+\left|\times\right>
+ ,\quad
+ \omega_1:=e^J\left|\rightdimer\right>+\left|\times\right>.
+ \label{omegabeta}
+ \end{equation}
+ In addition, given a bounded $\Lambda'\subset\mathbb Z^2$, a set of magnetized edges $\varrho$, and any $\sigma\in\Sigma_c(\Lambda')$, we define $\varpi_{\varrho,\Upsilon}(\sigma)\equiv(\varpi^{(0)}_{\varrho,\Upsilon}(\sigma),\varpi^{(1)}_{\varrho,\Upsilon}(\sigma))$ as follows. Let $x_0(\sigma)$ denote the lower-left-most vertex of $\sigma$, and $x_1(\sigma)$ the upper-right-most. For $j\in\{0,1\}$,
+ \begin{equation}
+ \varpi^{(j)}_{\varrho,\Upsilon}(\sigma):=
+ \left\{\begin{array}l
+ \omega_1\mathrm{\ if\ }\exists e\in\varrho\cup \partial^{(\mathrm{mag})}\Upsilon,\ e\ni x_j(\sigma)\\
+ \omega_0\mathrm{\ if\ not}
+ \end{array}\right.
+ \label{varpi}
+ \end{equation}
+ in which $\partial^{(\mathrm{mag})}\Upsilon$ is the {\it magnetized} portion of the boundaries of the sources: $\partial^{(\mathrm{mag})}\Upsilon:=\bigcup_{\upsilon\in \mathbb D_q(\Upsilon)}\mathbb D_q(\partial\upsilon)\cup\bigcup_{\upsilon\in \mathbb D_{-q}(\Upsilon)}\mathbb D_{-q}(\partial\upsilon)$.
+
+ \item For $\omega\equiv(\omega^{(0)},\upsilon^{(1)})\in\Delta^2$ and $\ell\in\{1,2,\cdots\}$, we define
+ \begin{equation}
+ e^{-W_{\omega}(\ell)}:=
+ 1
+ +\frac{\nu_-(\omega^{(0)})\nu_-(\omega^{(1)})b_-}{\nu_+(\omega^{(0)})\nu_+(\omega^{(1)})b_+}
+ \left(\frac{\lambda_-}{\lambda_+}\right)^\ell
+ +\frac{\nu_0(\omega^{(0)})\nu_0(\omega^{(1)})b_0}{\nu_+(\omega^{(0)})\nu_+(\omega^{(1)})b_+}
+ \left(\frac{\lambda_0}{\lambda_+}\right)^\ell
+ \label{eW}
+ \end{equation}
+ in which $\lambda$ and $\nu$ were defined in lemma~\-\ref{lemma:1d}. In addition, let
+ \begin{equation}
+ w_{\omega}(\ell):=
+ e^{-W^{(\omega)}(\ell)}-1.
+ \label{w}
+ \end{equation}
+
+ \item For $\Gamma\in\mathfrak C_c^{(\Upsilon)}(\Lambda)$, let
+ \begin{equation}
+ \begin{largearray}
+ \mathfrak x_{\mathbf q}^{(\Upsilon)}(\Gamma):=
+ \left(\prod_{\sigma\in\mathcal S_{\Lambda,<\ell_0}^{(\Upsilon)}(\Gamma)}e^{-W^{(\varpi_{\bar\varrho,\Upsilon}(\sigma))}(|\sigma|)}\right)
+ \cdot\\[0.75cm]\hfill\cdot
+ \prod_{l\in\Gamma}\left(
+ \left(\sqrt{b_+}\nu_+(\omega_0)e^{\frac12J}\right)^{|\mathbb D_{-c(l)}(l\setminus\mathbb X(\Gamma))|}
+ \left(\sqrt{b_+}\nu_+(\omega_1)e^{-\frac12J}\right)^{|\partial_{c(l)}\mathbb I_{c(l)}^{(\emptyset)}(l)\setminus\mathbb X(\Gamma)|}
+ \left(\frac{\sqrt{ze^J}}{\lambda_+}\right)^{|\mathbb O_{c(l)}(l)|}
+ \right)
+ \end{largearray}
+ \label{frakx}
+ \end{equation}
+ with $\bar\varrho\equiv\varrho\cup\bigcup_{l\in\Gamma}\partial\mathbb I_{c(l)}^{(\emptyset)}(l)$ and $\mathbb X(\Gamma):=\bigcup_{l\neq l'\in\Gamma}l'\cap\partial_{c(l)}\mathbb O_{c(l)}(l)$.
+
+ \item Given a source $\upsilon\in\Upsilon$ and a contour $\Gamma\in\mathfrak C_q(\Lambda)$ the \define{contact points} of $\upsilon$ and $\Gamma$ is the set of edges $e$ that both intersect $\upsilon$ and neighbor the mantle of a loop of $\Gamma$. Formally, given $c\in\{\mathrm v,\mathrm h\}$, we define the set of interior and exterior $c$-contact points of $\upsilon$ and $\Gamma$ as
+ \begin{equation}
+ \mathfrak K_c^{(\mathrm{int})}(\upsilon,\Gamma)
+ :=
+ \bigcup_{\displaystyle\mathop{\scriptstyle l\in\Gamma}_{\upsilon\in\bar l}}\partial_c\upsilon\cap\partial_c \mathbb O_{c(l)}(l)
+ ,\quad
+ \mathfrak K_c^{(\mathrm{ext})}(\upsilon,\Gamma)
+ :=
+ \bigcup_{\displaystyle\mathop{\scriptstyle l\in\Gamma}_{\upsilon\not\in\bar l}}\partial_c\upsilon\cap\partial_c \mathbb O_{c(l)}(l)
+ \label{frakK}
+ \end{equation}
+ and the set of $c$-contact points as
+ \begin{equation}
+ \mathfrak K_c(\upsilon,\Gamma)
+ :=
+ \mathfrak K_c^{(\mathrm{int})}(\upsilon,\Gamma)
+ \cup
+ \mathfrak K_c^{(\mathrm{ext})}(\upsilon,\Gamma)
+ .
+ \end{equation}
+ In addition, the \define{background} $\mathfrak g(\upsilon,\Gamma)\in\{\mathrm v,\mathrm h\}$ of a source $\upsilon$ is defined in the following way: for each $l\in\Gamma$, if $\upsilon\in\mathcal E(\iota_{c(l)}^{(\emptyset)}(l))$, then $\mathfrak g(\upsilon,\Gamma)$ is set to $c(l)$. If there is no such loop, then $\mathfrak g(\upsilon,\Gamma)$ is set to $q$. Correspondingly, we split the set of sources into sources in a vertical and horizontal background:
+ \begin{equation}
+ \Upsilon=\Upsilon_{\mathrm v}\cup\Upsilon_{\mathrm h}
+ ,\quad
+ \Upsilon_c:=\{\upsilon\in\Upsilon,\ \mathfrak g(\upsilon,\Gamma)=c\}
+ .
+ \end{equation}
+ Given a contour $\Gamma\in\mathfrak C_q^{(\Upsilon)}(\Lambda)$, we define
+ \begin{equation}
+ \begin{array}{r@{\ }>\displaystyle l}
+ \mathfrak u_q^{(\Upsilon)}(\Gamma)
+ =&
+ \left(\frac{\nu_+^4(\omega_0)b_+^2}{\nu_+^2(\omega_1)b_+}\right)^{|\mathbb D_q(\Upsilon_{-q})|-|\mathbb D_{-q}(\Upsilon_{-q})|}
+ \left(
+ \prod_{\upsilon\in\Upsilon}
+ b_+^{-|\mathfrak K_{\mathfrak g(\upsilon,\Gamma)}(\upsilon,\Gamma)|}
+ \right)
+ \\[0.75cm]
+ &
+ \left(
+ \prod_{\upsilon\in \mathbb D_q(\Upsilon_q)}
+ \nu_+(\omega_1)^{-|\mathfrak K_q(\upsilon,\Gamma)|}
+ \nu_+(\omega_0)^{-|\mathfrak K_q^{(\mathrm{ext})}(\upsilon,\Gamma)|}
+ \nu_+(\omega_1)^{-|\mathfrak K_q^{(\mathrm{int})}(\upsilon,\Gamma)|}
+ e^{J|\mathfrak K_q^{(\mathrm{int})}(\upsilon,\Gamma)|}
+ \right)
+ \\[0.75cm]
+ &
+ \left(
+ \prod_{\upsilon\in \mathbb D_q(\Upsilon_{-q})}
+ \nu_+(\omega_0)^{-|\mathfrak K_{-q}(\upsilon,\Gamma)|}
+ \nu_+(\omega_0)^{-|\mathfrak K_{-q}^{(\mathrm{ext})}(\upsilon,\Gamma)|}
+ \nu_+(\omega_1)^{-|\mathfrak K_{-q}^{(\mathrm{int})}(\upsilon,\Gamma)|}
+ e^{J|\mathfrak K_q^{(\mathrm{ext})}(\upsilon,\Gamma)|}
+ \right)
+ \\[0.75cm]
+ &
+ \left(
+ \prod_{\upsilon\in \mathbb D_{-q}(\Upsilon_q)}
+ \nu_+(\omega_0)^{-|\mathfrak K_q(\upsilon,\Gamma)|}
+ \nu_+(\omega_0)^{-|\mathfrak K_q^{(\mathrm{ext})}(\upsilon,\Gamma)|}
+ \nu_+(\omega_1)^{-|\mathfrak K_q^{(\mathrm{int})}(\upsilon,\Gamma)|}
+ e^{J|\mathfrak K_{-q}^{(\mathrm{ext})}(\upsilon,\Gamma)|}
+ \right)
+ \\[0.75cm]
+ &
+ \left(
+ \prod_{\upsilon\in \mathbb D_{-q}(\Upsilon_{-q})}
+ \nu_+(\omega_1)^{-|\mathfrak K_{-q}(\upsilon,\Gamma)|}
+ \nu_+(\omega_0)^{-|\mathfrak K_{-q}^{(\mathrm{ext})}(\upsilon,\Gamma)|}
+ \nu_+(\omega_1)^{-|\mathfrak K_{-q}^{(\mathrm{int})}(\upsilon,\Gamma)|}
+ e^{J|\mathfrak K_{-q}^{(\mathrm{int})}(\upsilon,\Gamma)|}
+ \right)
+ .
+ \end{array}
+ \label{fraku}
+ \end{equation}
+
+ \item For any bounded $\Lambda'\subset\mathbb Z^2$ and boundary condition $\mathbf c$,
+ \begin{equation}
+ K^{(\Upsilon)}_{\mathbf q,\mathbf c}(\Lambda'):=
+ \frac{Z^{(\Upsilon)}(\Lambda'|\mathbf c)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf c}(\Lambda')}
+ \frac{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda')}{\widetilde Z^{(\Upsilon)}(\Lambda'|\mathbf q)}
+ \label{K}
+ \end{equation}
+ and, for $\Gamma\in\mathfrak C_q^{(\Upsilon)}(\Lambda)$,
+ \begin{equation}
+ \eta^{(\Upsilon)}_{\mathbf q}(\Gamma):=
+ \mathfrak x_{\mathbf q}^{(\Upsilon)}(\Gamma)
+ \mathfrak u_q^{(\Upsilon)}(\Gamma)
+ \prod_{l\in\Gamma}\left(
+ K_{\mathbf q,\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))
+ e^{-\frac J2|l|}
+ \right)
+ \label{eta}
+ \end{equation}
+ where (see~\-(\ref{iota}))
+ \begin{equation}
+ \iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l):=
+ \bigcup_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_{c(l)}(\iota^{(\Upsilon)}_{c(l)}(l))}_{|\sigma|\geqslant\ell_0}}\sigma
+ .
+ \label{iotagell}
+ \end{equation}
+
+ \item For $\xi\in\mathfrak X_q^{(\Upsilon)}(\Lambda)$, let
+ \begin{equation}
+ \zeta^{(\Upsilon)}_{\mathbf q}(\xi):=
+ \left(
+ \prod_{\Gamma\in\underline\Gamma(\xi)}
+ \eta^{(\Upsilon)}_{\mathbf q}(\Gamma)
+ \right)
+ \left(\prod_{\sigma\in\underline\sigma(\xi)}w_{\varpi_{\varrho,\Upsilon}(\sigma)}(|\sigma|)\right).
+ \label{zeta_external}
+ \end{equation}
+
+ \item Finally, for $\gamma\in\mathfrak P_q(\Lambda)$, we define $\zeta$ inductively:
+ \begin{equation}
+ \zeta_{\mathbf q}^{(\Upsilon)}(\gamma):=
+ \zeta_{\mathbf q}^{(\Upsilon)}(\xi(\gamma))
+ \prod_{g\in\underline g(\gamma)}\zeta_{\mathbf q}^{(\Upsilon)}(g).
+ \label{zeta}
+ \end{equation}
+
+ \item In addition, for any bounded $\Lambda'\subset\mathbb Z^2$, we define
+ \begin{equation}
+ \frac{\widetilde Z^{(\Upsilon)}(\Lambda'|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda')}=
+ \sum_{\underline\gamma\subset\widetilde{\mathfrak P}_q^{(\Upsilon)}(\Lambda')}
+ \left(\prod_{\gamma\neq\gamma'\in\underline\gamma}\Phi(\gamma,\gamma')\right)
+ \prod_{\gamma\in\underline\gamma}\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)
+ \label{tildeZ_polymer}
+ \end{equation}
+ as well as, for any boundary condition $\mathbf c\equiv(c,\varrho,\ell_0)$, we define
+ \begin{equation}
+ \mathfrak y_{\mathbf c}^{(\Upsilon)}(\Lambda'):=
+ \prod_{\sigma\in\Sigma_{\mathbf c}(\Lambda')}\frac1{e^{-W^{(\varpi_{\varrho,\Upsilon}(\sigma))}(|\sigma|)}}
+ \label{fraky}
+ \end{equation}
+ and
+ \begin{equation}
+ \widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf c}(\Lambda'):=
+ \mathfrak Z^{(\Upsilon)}_{\mathbf c}(\Lambda')
+ \mathfrak y^{(\Upsilon)}_{\mathbf c}(\Lambda').
+ \label{tildefrakZ}
+ \end{equation}
+ \nopagebreakafteritemize
+ \end{itemize}
+\restorepagebreakafteritemize
+\endtheo
+\bigskip
+
+\indent\underline{Proof}:
+ We prove the lemma by induction on $|\Lambda|$. We proceed in four steps: we first map the dimer model to an {\it external} contour model, then we compute the activity and interaction of external contours, we map the contour model to a system of {\it external} polymers, and, finally, the proof of the lemma is concluded by induction.
+ \bigskip
+
+ \point{\bf Contours.} We associate an {\it external contour} configuration to every dimer configuration $\underline\delta\in\Omega^{(\Upsilon)}_{\mathbf q}(\Lambda)$ (see figure~\ref{fig:dimer_contour}). First of all, for $c\in\{\mathrm v,\mathrm h\}$, we define the \define{$c$-support} of $\underline\delta$ as the set of vertices that are covered by $c$-dimers:
+ \begin{equation}
+ \mathrm{supp}_{c}(\underline\delta):=\bigcup_{\{x,x'\}\in \mathbb D_{c}(\underline\delta)}\{x,x'\}.
+ \end{equation}
+ \bigskip
+
+ \indent We construct a family $\mathcal L_q(\underline\delta)$ of {\it bounding loops} associated to $\underline\delta$. We proceed by induction. If $\underline\delta$ only consists of $q$-dimers, then $\mathcal L_q(\underline\delta)=\emptyset$. If not, then the boundary of $\mathrm{supp}_{-q}(\underline\delta)$ is a non-empty union of disjoint loops (see definition~\-\ref{def:loop}), denoted by $\underline{\mathfrak l}\equiv\{\mathfrak l_1,\cdots,\mathfrak l_{|\underline{\mathfrak l}|}\}$. From these, we extract the {\it most external} ones $\underline{\mathfrak l}'\equiv\{\mathfrak l'_1,\cdots,\mathfrak l'_{|\underline{\mathfrak l}'|}\}\subset\underline{\mathfrak l}$ by discarding loops that lie inside other loops, that is, $\bar{\mathfrak l}'_i\cap\bar{\mathfrak l}_j\neq\emptyset$ if and only if $\mathfrak l'_i=\mathfrak l_j$. The loops $\mathfrak l'_i$ are $-q$-{\it bounding loops}, in the sense of definition~\-\ref{def:bounding_loop}, and are disjoint. Finally, denoting the set of dimers that are contained inside a bounding loop $\mathfrak l'_j$ by $\underline\delta\cap\bar{\mathfrak l}'_j$, we define, inductively,
+ \begin{equation}
+ \mathcal L_q(\underline\delta):=\underline{\mathfrak l}'\cup\bigcup_{j=1}^{|\underline{\mathfrak l}'|}\mathcal L_{-q}(\underline\delta\cap\bar{\mathfrak l}'_j).
+ \end{equation}
+ Note that the {\it inclusion tree} of $\mathcal L_q(\underline\delta)$, as defined in definition~\-\ref{def:inclusion}, is {\it alternating}.
+ \bigskip
+
+ \indent These bounding loops {\it interact} with each other through the dimers in the space between them. Actually, as we will see in the following, $q$-bounding loops that are at a $-q$-distance of less than $\ell_0$ interact {\it strongly}. In order to avoid dealing with distinct objects that interact strongly, we group these loops together to form a larger object, called a {\it contour}, which is a set of loops that are all at a distance $<\ell_0$ from each other. The formal definition of a contour is given in definition~\-\ref{def:contour}, and the set of contours associated to $\underline\delta$ is defined as the set $\underline\Gamma_q(\underline\delta)\equiv\{\Gamma_1,\cdots,\Gamma_{|\underline\Gamma_q(\underline\delta)|}\}$ that is such that $\Gamma_i\subset\mathcal L_q(\underline\delta)$, $\Gamma_i\cap\Gamma_j=\emptyset$ whenever $i\neq j$, $\Gamma_1\cup\cdots\cup\Gamma_{|\underline\Gamma_q(\underline\delta)|}=\mathcal L_q(\underline\delta)$, $\Gamma_i\in\mathfrak C^{(\Upsilon)}_q(\Lambda)$ and, for every $i\neq j$, $\Gamma_i$ and $\Gamma_j$ are {\it compatible}, in the sense of definition~\-\ref{def:contour}.
+ \bigskip
+
+ \indent The fact that the inclusion tree $T(\mathcal L_q(\underline\delta))$ is alternating induces a long-range interaction between contours: a $q$-bounding loop must lie inside a $-q$-bounding loop, independently of the distance that separates them. In order to avoid this, we will call upon a technique used in Pirogov-Sinai theory~\-\cite{PS75,KP86}. The first step is to focus on the contours that are the most {\it external}, in the sense of definition~\ref{def:contour}. The set of external contours is denoted by $\underline\Gamma'_q(\underline\delta)\equiv\{\Gamma'_1,\cdots,\Gamma'_{|\underline\Gamma'_q(\underline\delta)|}\}$, and defined as the subset of $\underline\Gamma_q(\underline\delta)$ that consists of every contour that is {\it external} to all the other contours in $\underline\Gamma_q(\underline\delta)$.
+ \bigskip
+
+ \begin{figure}
+ \hfil\includegraphics[width=8cm]{dimer_contour.pdf}
+ \caption{The contour configuration associated to the dimer configuration in figure~\-\ref{fig:interaction}. Here, we took $q=\mathrm v$ and $\ell_0=4$. There are three bounding loops. The dimers in the mantle of each loop are gray. The two green (color online) bounding loops form a single contour because the segments that separate the inner loop from the mantle of the outer one (drawn in green in the figure) are of length 1 or 2, which is less than $\ell_0$. The blue (color online) bounding loop forms its own contour, but, since it is not external to the red one, it is dropped.}
+ \label{fig:dimer_contour}
+ \end{figure}
+
+ \indent Thus, given a dimer configuration, we have constructed a set of compatible external contours $\underline\Gamma'_q(\underline\delta)$. Conversely, if we fix a family $\underline\Gamma$ of compatible external contours, the set of dimer configurations $\underline\delta$ such that $\underline\Gamma=\underline\Gamma'_q(\underline\delta)$ is equal to the set of configurations satisfying the following: for every $\Gamma\in\underline\Gamma$, and loop $l\in\Gamma$,
+ \begin{itemize}
+ \item for every $-q$-dimer, there exists $l'\in\Gamma$ such that the dimer is in $\bar l'$,
+ \item the {\it mantle} $\mathbb O_{c(l)}(l)$ (see definition~\-\ref{def:bounding_loop}) of $l$ is completely covered by $c(l)$-dimers,
+ \item every $-c(l)$-dimer in the padding $\iota_{c(l)}^{(\Upsilon)}(l)$ (see definition~\-\ref{def:inclusion}) of $l$ is at a distance $\geqslant\ell_0$ from $l$,
+ \end{itemize}
+ Therefore, we can rewrite the dimer partition function~\-(\ref{goal}) as
+ \begin{equation}
+ \begin{largearray}
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf q)}{\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)}=
+ \sum_{\underline\Gamma\subset\mathfrak C_q^{(\Upsilon)}(\Lambda)}
+ \left(\prod_{\Gamma\neq\Gamma'\in\underline\Gamma}\varphi_{\mathrm{ext}}(\Gamma,\Gamma')\right)
+ \cdot\\[0.5cm]\hfill\cdot
+ \frac{\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda\setminus\mathcal I(\underline\Gamma))}{\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)}
+ \prod_{\Gamma\in\underline{\Gamma}}\prod_{l\in\Gamma}\left(
+ \mathfrak Y_{c(l)}^{(\Upsilon)}(\mathbb O_{c(l)}(l))
+ \mathfrak Z_{\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),<\ell_0}^{(\Upsilon)})Z^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|\mathbf c(l))\right)
+ \end{largearray}
+ \label{external_contour}
+ \end{equation}
+ in which, roughly, $\varphi_{\mathrm{ext}}(\Gamma,\Gamma')$ is a hard-core pair interaction that keeps the contours from overlapping and ensures that they are external to each other, $\mathfrak Z^{(\Upsilon)}_{\mathbf q}(\Lambda\setminus\mathcal I(\underline\Gamma))$ is the partition function of $q$-dimers outside the contours, $\mathfrak Y_{c(l)}^{(\Upsilon)}(\mathbb O_{c(l)}(l))$ is the weight of the $c(l)$-dimers in the mantle of $l$, $\mathfrak Z_{\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),<\ell_0}^{(\Upsilon)}(l))$ is the partition function of $c(l)$-dimers in the segments (see definition~\-\ref{def:segment}) inside the loop that are of length $<\ell_0$, and $Z^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|\mathbf c(l))$ is the partition function of dimers in the remainder of the loops. These quantities are formally defined below.
+ \begin{itemize}
+ \item $\varphi_{\mathrm{ext}}(\Gamma,\Gamma')\in\{0,1\}$ is equal to 1 if and only if $\Gamma$ and $\Gamma'$ are compatible and external to each other, see definition~\-\ref{def:contour}.
+ \item $\mathcal I(\underline\Gamma)$ is the union of the interiors of the loops:
+ \begin{equation}
+ \mathcal I(\underline\Gamma):=\bigcup_{\Gamma\in\underline\Gamma}\bigcup_{l\in\Gamma}\bar l.
+ \end{equation}
+ \item $\iota_{c,<\ell_0}^{(\Upsilon)}(l)$ and $\iota_{c,\geqslant\ell_0}^{(\Upsilon)}(l)$ are the restrictions of $\iota_c^{(\Upsilon)}(l)$ to the parts of the segments that are of length, respectively, $<\ell_0$ and $\geqslant\ell_0$:
+ \begin{equation}
+ \iota_{c,<\ell_0}^{(\Upsilon)}(l):=\bigcup_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_c(\iota_c^{(\Upsilon)}(l))}_{|\sigma|<\ell_0}}\sigma
+ ,\quad
+ \iota_{c,\geqslant\ell_0}^{(\Upsilon)}(l):=\iota_c^{(\Upsilon)}(l)\setminus\iota_{c,<\ell_0}^{(\Upsilon)}(l).
+ \end{equation}
+ \item $\mathbf c(l)$ is the boundary condition of $\iota_{c(l)}^{(\Upsilon)}(l)$. Because the $c(l)$-dimers that are in $\mathbb O_{c(l)}(l)$ can interact with those in $\iota_{c(l)}^{(\Upsilon)}(l)$, the entire boundary is {\it magnetized}: with the notation of section~\-\ref{sec:model}, $\mathbf c(l):=(c(l),\partial_{c(l)}\mathbb I_{c(l)}^{(\emptyset)}(l),\ell_0)$ (we recall that $\partial_{c(l)}\equiv\mathbb D_{c(l)}(\partial)$).
+ \item $\mathfrak Y_{c(l)}^{(\Upsilon)}(\mathbb O_{c(l)}(l))$ is the weight of the dimers in $\mathbb O_{c(l)}(l)$, which is packed with dimers:
+ \begin{equation}
+ \mathfrak Y_{c}(\mathbb O)
+ :=z^{|\underline\delta_c(\mathbb O)|}e^{-W_0(\underline\delta_c(\mathbb O))}\mathfrak B_{\mathbf q}^{(\Upsilon)}(\underline\delta_c(\mathbb O))
+ \end{equation}
+ where $\underline\delta_c(\mathbb O)$ is the unique closely-packed $c$-dimer configuration in $\mathbb O$, and $\mathfrak B_{\mathbf q}^{(\Upsilon)}$ is the boundary term at the sources.
+ \end{itemize}
+ \bigskip
+
+ \point{\bf Effective activity and interaction of external contours.} We will now re-organize and re-express the right side of~\-(\ref{external_contour}). First of all, by inserting trivial identities, we rewrite
+ \begin{equation}
+ \begin{largearray}
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf q)}{\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)}=
+ \sum_{\underline\Gamma\subset\mathfrak C^{(\Upsilon)}_q(\Lambda)}
+ \left(\prod_{\Gamma\neq\Gamma'\in\underline\Gamma}\varphi_{\mathrm{ext}}(\Gamma,\Gamma')\right)
+ \cdot\\[0.5cm]\hfill\cdot
+ A_{\mathbf q}^{(\Upsilon)}(\Lambda,\underline\Gamma)
+ \prod_{\Gamma\in\underline\Gamma}\prod_{l\in\Gamma}\left(B_{\mathbf q,\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))\frac{\widetilde Z^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|\mathbf q)}{\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))}\right)
+ \end{largearray}
+ \label{ZAB}
+ \end{equation}
+ in which $\widetilde Z>0$ will be defined later,
+ \begin{equation}
+ B_{\mathbf q,\mathbf c}^{(\Upsilon)}(\iota):=
+ \frac{Z^{(\Upsilon)}(\iota|\mathbf c)}{\mathfrak Z_{\mathbf c}^{(\Upsilon)}(\iota)}
+ \frac{\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\iota)}{\widetilde Z^{(\Upsilon)}(\iota|\mathbf q)}.
+ \label{B}
+ \end{equation}
+ and
+ \begin{equation}
+ A_{\mathbf q}^{(\Upsilon)}(\Lambda,\underline\Gamma):=
+ \frac1{\mathfrak Z^{(\Upsilon)}_{\mathbf q}(\Lambda)}
+ \mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda\setminus\mathcal I(\underline\Gamma))
+ \prod_{\Gamma\in\underline\Gamma}\prod_{l\in\Gamma}\left(\mathfrak Y_{c(l)}^{(\Upsilon)}(\mathbb O_{c(l)}(l))\mathfrak Z_{\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l)}^{(\Upsilon)}(l))\right)
+ \label{A}
+ \end{equation}
+ (here, we used the fact that $\mathfrak Z_{\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),<\ell_0}^{(\Upsilon)}(l))\mathfrak Z_{\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))=\mathfrak Z_{\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l)}^{(\Upsilon)}(l))$). The factors $B_{\mathbf q,\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)})$ contribute to the {\it activity} of the contour, whereas $A_{\mathbf q}^{(\Upsilon)}(\Lambda,\underline\Gamma)$ contributes to both the activity and the interaction. In order to separate these contributions, we compute $A_{\mathbf q}^{(\Upsilon)}(\Lambda,\underline\Gamma)$ more explicitly.
+ \bigskip
+
+ \subpoint Let us first compute the partition function $\mathfrak Z_{\mathbf c}^{(\Upsilon)}(\Lambda')$ of the oriented dimer model, for any bounded subset $\Lambda'\subset\mathbb Z^2$ and any boundary condition $\mathbf c\equiv(c,\varrho,\ell_0)$. Since different $c$-lines are independent,
+ \begin{equation}
+ \mathfrak Z_{\mathbf c}^{(\Upsilon)}(\Lambda')=z^{|\Upsilon\cap\Lambda'|}\prod_{\sigma\in\Sigma_c(\Lambda'{}^{(\Upsilon)})}\Psi^{(\varpi_{\varrho,\Upsilon}(\sigma))}(|\sigma|)
+ \end{equation}
+ in which $\Sigma_c$ was defined in~\-(\ref{Sigma}), and $\varpi_{\varrho,\Upsilon}(\sigma)\equiv(\varpi^{(0)}_{\varrho,\Upsilon}(\sigma),\varpi^{(1)}_{\varrho,\Upsilon}(\sigma))$ specifies the appropriate boundary conditions, and is defined in~\-(\ref{varpi}). Therefore, by~\-(\ref{Zv0}),
+ \begin{equation}
+ \mathfrak Z_{\mathbf c}^{(\Upsilon)}(\Lambda')=
+ z^{|\Upsilon\cap\Lambda'|}
+ \prod_{\sigma\in\Sigma_c(\Lambda')}\left(\nu_+(\varpi^{(0)}_{\varrho,\Upsilon}(\sigma))\nu_+(\varpi^{(1)}_{\varrho,\Upsilon}(\sigma))b_+\lambda_+^{|\sigma|}e^{-W_{\varpi_{\varrho,\Upsilon}(\sigma)}(|\sigma|)}\right)
+ \label{idfrakZ}
+ \end{equation}
+ where $e^{-W_{\varpi_{\varrho,\Upsilon}(\sigma)}(|\sigma|)}$ is defined in~\-(\ref{eW}).
+ \bigskip
+
+ \subpoint In addition, $\mathfrak Y^{(\Upsilon)}_c(\mathbb O_c)$, which, we recall, is the partition function of close-packed $c$-dimers in $\mathbb O_c$ is equal to
+ \begin{equation}
+ \mathfrak Y^{(\Upsilon)}_c(\mathbb O_c)=(ze^J)^{\frac12|\mathbb O_c|}e^{-\frac12J|\partial_c\mathbb O_c|}
+ \exp\left(J|\{e\in \partial_c\mathbb O_c,\ e\cap\partial_c\mathbb D_c(\Upsilon)\neq\emptyset\}|\right)
+ \label{idfrakY}
+ \end{equation}
+ with $\partial_c\mathbb D_c(\Upsilon):=\bigcup_{\upsilon\in\mathbb D_c(\Upsilon)}\partial_c\upsilon$.
+ \bigskip
+
+ \subpoint We now plug~\-(\ref{idfrakZ}) and~\-(\ref{idfrakY}) into~\-(\ref{A}) to compute $A_{\mathbf q}(\Lambda,\underline\Gamma)$. We split the resulting terms into three contributions as follows.
+ \bigskip
+
+ \subsubpoint First, we focus on the terms involving $\lambda_+$. By definition, for any bounded $\Lambda'\subset\mathbb Z^2$ and $c\in\{\mathrm v,\mathrm h\}$,
+ \begin{equation}
+ \sum_{\sigma\in\Sigma_c(\Lambda')}|\sigma|=|\Lambda'|
+ \end{equation}
+ so
+ \begin{equation}
+ \frac{
+ \prod_{\sigma\in\Sigma_q(\Lambda^{(\Upsilon)}\setminus\mathcal I(\underline\Gamma))}\lambda_+^{|\sigma|}
+ }{
+ \prod_{\sigma\in\Sigma_q(\Lambda^{(\Upsilon)})}\lambda_+^{|\sigma|}
+ }
+ \left(\prod_{\Gamma\in\underline\Gamma}\prod_{l\in\Gamma}\left((ze^J)^{\frac12|\mathbb O_{c(l)}(l)|}\prod_{\sigma\in\Sigma_{c(l)}(\iota_{c(l)}^{(\Upsilon)}(l))}\lambda_+^{|\sigma|}\right)\right)
+ =\left(\frac{\sqrt{ze^J}}{\lambda_+}\right)^{\sum_{\Gamma\in\underline\Gamma}\sum_{l\in\Gamma}|\mathbb O_{c(l)}(l)|}.
+ \label{idlambda}
+ \end{equation}
+ \bigskip
+
+ \subsubpoint We turn, now, to the terms involving $b_+$ and $\nu_+$. For the moment, we will ignore the sources. The factors in
+ \begin{equation}
+ \begin{largearray}
+ \mathfrak N(\underline\Gamma,\Lambda):=\frac{
+ \prod_{\sigma\in\Sigma_q(\Lambda\setminus\mathcal I(\underline\Gamma))}\left(\nu_+(\varpi^{(0)}_{\varrho,\emptyset}(\sigma))\nu_+(\varpi^{(1)}_{\varrho,\emptyset}(\sigma))b_+\right)
+ }{
+ \prod_{\sigma\in\Sigma_q(\Lambda)}\left(\nu_+(\varpi^{(0)}_{\varrho,\emptyset}(\sigma))\nu_+(\varpi^{(1)}_{\varrho,\emptyset}(\sigma))b_+\right)
+ }
+ \cdot\\[1cm]\hfill\cdot
+ \prod_{\Gamma\in\underline\Gamma}\prod_{l\in\Gamma}\left(e^{-\frac12J|\partial_{c(l)}\mathbb O_{c(l)}(l)|}\prod_{\sigma\in\Sigma_{c(l)}(\iota_{c(l)}^{(\emptyset)}(l))}\left(\nu_+(\varpi^{(0)}_{\varrho(l),\emptyset}(\sigma))\nu_+(\varpi^{(1)}_{\varrho(l),\emptyset}(\sigma))b_+\right)\right)
+ \end{largearray}
+ \label{idnu_expr}
+ \end{equation}
+ with $\varrho(l):=\partial_{c(l)}\mathbb I_{c(l)}^{(\emptyset)}(l)$, regard the boundaries of the lines $\sigma$ (see figure~\-\ref{fig:segments}). They fall in one of the following categories.
+ \begin{itemize}
+ \item The terms that are attached to $\partial_q\Lambda$ appear in the numerator and the denominator and cancel each other out.
+ \item In addition, there are factors attached to the contours. These come in two flavors: those coming from {\it outside} the contour, which have open boundary conditions, and those coming from {\it inside},which have magnetized boundary conditions. Thus, there is a factor $\sqrt{b_+}\nu_+(\omega_0)$ associated with each edge of the outer boundary of the mantle of a loop, {\it provided} that edge comes in contact with a segment. And there is a factor $\sqrt{b_+}\nu_+(\omega_1)$ associated with each edge of the inner boundary of the mantle, again, {\it provided} that edge comes in contact with a segment. The latter caveat is not inocuous: there are cases (see figure~\-\ref{fig:segments}) in which a loop in the contour comes in contact with the inner boundary of the mantle of another loop, in which case there are no such terms. To keep track of these events, we introduce the set
+ \begin{equation}
+ \mathbb X(\Gamma):=\bigcup_{l\neq l'\in\Gamma}l'\cap\partial_{c(l)}\mathbb O_{c(l)}(l)
+ .
+ \end{equation}
+ \end{itemize}
+ All in all,
+ \begin{equation}
+ \mathfrak N(\underline\Gamma,\Lambda)
+ =
+ \prod_{\Gamma\in\underline\Gamma}
+ \prod_{l\in\Gamma}
+ \left(
+ e^{-\frac12J|l|}
+ \left(\sqrt{b_+}\nu_+(\omega_0)e^{\frac12J}\right)^{|\mathbb D_{-c(l)}(l\setminus \mathbb X(\Gamma))|}
+ \left(\sqrt{b_+}\nu_+(\omega_1)e^{-\frac12J}\right)^{|\partial_{c(l)}\mathbb I_{c(l)}^{(\emptyset)}(l)\setminus\mathbb X(\Gamma)|}
+ \right)
+ \label{idnu}
+ \end{equation}
+ in which we used the identities
+ \begin{equation}
+ \partial_{c(l)}\mathbb O_{c(l)}(l)=\mathbb D_{c(l)}(l)\cup\partial_{c(l)}\mathbb I_{c(l)}^{(\emptyset)}(l)
+ ,\quad
+ l=\mathbb D_{c(l)}(l)\cup \mathbb D_{-c(l)}(l).
+ \end{equation}
+ \bigskip
+
+ \subsubpoint Let us now take the sources into account. Sources break up the segments, and, in doing so, contribute their own boundary terms. The main contribution comes from the sources $\upsilon$ that are surrounded by an odd number of loops: indeed, in this case, $\upsilon$ contributes to the denominator $\mathfrak Z_{\mathbf q}^{(\Upsilon)}(\Lambda)$ through the boundary terms on its $q$-boundary $\partial_q\upsilon$, whereas, in the numerator, if it is surrounded by an odd number of loops, then it contributes boundary terms on its $-q$-boundary $\partial_{-q}\upsilon$. In addition, in cases where sources come in contact with contours, the boundary of the contour may be erased at the source. Finally, the sources may interact directly with the dimers in the mantle of a contour. We denote the product of all of these factors by $\mathfrak u_q^{(\Upsilon)}(\Gamma)$, in terms of which the actual contribution of the terms involving $b_+$ and $\nu_+$ is
+ \begin{equation}
+ \mathfrak N^{(\Upsilon)}(\underline\Gamma,\Lambda)=
+ \mathfrak N(\underline\Gamma,\Lambda)
+ \prod_{\Gamma\in\underline\Gamma}
+ \mathfrak u_q^{(\Upsilon)}(\Gamma)
+ .
+ \label{idnu_sources}
+ \end{equation}
+ The expression of $\mathfrak u_q^{(\Upsilon)}(\Gamma)$ is given in~\-(\ref{fraku}).
+ \bigskip
+
+ \subsubpoint We now put things together: by plugging~\-(\ref{idlambda}), (\ref{idnu}) and~\-(\ref{idnu_sources}) into~\-(\ref{A}), keeping track of the $e^{-W}$ terms, and noting that the $z^{|\Upsilon\cap\Lambda'|}$ factors in~\-(\ref{idfrakZ}) cancel out, we find
+ \begin{equation}
+ A_{\mathbf q}(\Lambda,\underline\Gamma)=
+ \mathfrak y_{\mathbf q}^{(\Upsilon)}(\Lambda)
+ e^{-\mathfrak W_{\mathbf q}^{(\Upsilon)}(\underline\Gamma)}
+ \prod_{\Gamma\in\underline\Gamma}\left(
+ \mathfrak x_{\mathbf q}^{(\Upsilon)}(\Gamma)
+ \mathfrak u_q^{(\Upsilon)}(\Gamma)
+ \prod_{l\in\Gamma}\frac{e^{-\frac12J|l|}}{\mathfrak y_{\mathbf c(l)}^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))}
+ \right)
+ \label{Acomp}
+ \end{equation}
+ where $\mathfrak y_q^{(\Upsilon)}(\Lambda)$ and $\mathfrak x_{\mathbf q}^{(\Upsilon)}(\Gamma)$ are defined in~\-(\ref{fraky}) and~\-(\ref{frakx}), and $\mathfrak W^{(\Upsilon)}_{\mathbf q}$ is the effective interaction:
+ \begin{equation}
+ e^{-\mathfrak W_{\mathbf q}^{(\Upsilon)}(\underline\Gamma)}:=
+ \prod_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_q(\Lambda^{(\Upsilon)}\setminus\mathcal I(\underline\Gamma))}_{|\sigma|\geqslant\ell_0}}e^{-W^{(\varpi_{\varrho,\Upsilon}(\sigma))}(|\sigma|)}.
+ \label{efrakW}
+ \end{equation}
+ \bigskip
+
+ \subpoint Finally, we are in a position to write the contour model in terms of an effective activity and interaction: by inserting~\-(\ref{Acomp}) into~\-(\ref{ZAB}), and multiplying and dividing $Z/\mathfrak Z_{\mathbf q}$ by $\mathfrak y_{\mathbf q}^{(\Upsilon)}$, we find
+ \begin{equation}
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda)}=
+ \sum_{\underline\Gamma\subset\mathfrak C^{(\Upsilon)}_q(\Lambda)}
+ \left(\prod_{\Gamma\neq\Gamma'\in\underline\Gamma}\varphi_{\mathrm{ext}}(\Gamma,\Gamma')\right)
+ e^{-\mathfrak W^{(\Upsilon)}_{\mathbf q}(\underline\Gamma)}
+ \prod_{\Gamma\in\underline\Gamma}\left(
+ \eta^{(\Upsilon)}_{\mathbf q}(\Gamma)
+ \prod_{l\in\Gamma}
+ \frac{\widetilde Z^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))}
+ \right)
+ \label{Z_contour}
+ \end{equation}
+ in which $\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}$ is defined in~\-(\ref{tildefrakZ}) and $\eta^{(\Upsilon)}_{\mathbf q}$ in~\-(\ref{eta}). The factor $\eta^{(\Upsilon)}_{\mathbf q}(\Gamma)$ is the {\it effective activity} of $\Gamma$, $\varphi_{\mathrm{ext}}$ is a hard-core pair interaction between the contours, and $\mathfrak W^{(\Upsilon)}_{\mathbf q}(\underline\Gamma)$ is a many-body, short-range {\it effective interaction}, arising from the 1-dimensional partition functions of the dimer configurations separating them.
+ \bigskip
+
+ \point{\bf Polymers.} We have mapped the dimer model to a contour model with hard-core and short-range interactions. The next step is to dispense with the short-range interactions. To that end, we re-sum the interaction $e^{-\mathfrak W^{(\Upsilon)}_q}$ by inserting trivial identities into~\-(\ref{efrakW}):
+ \begin{equation}
+ e^{-\mathfrak W^{(\Upsilon)}_{\mathbf q}(\underline\Gamma)}=
+ \prod_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_q(\Lambda^{(\Upsilon)}\setminus\mathcal I(\underline\Gamma))}_{|\sigma|\geqslant\ell_0}}(w_{\varpi_{\varrho,\Upsilon}(\sigma)}(|\sigma|)+1)
+ \end{equation}
+ where $w_{\varpi_{\varrho,\Upsilon}(\sigma)}$ is defined in~\-(\ref{w}), which we expand as
+ \begin{equation}
+ e^{-\mathfrak W^{(\Upsilon)}_{\mathbf q}(\underline\Gamma)}:=
+ \sum_{S\subset\{\sigma\in\Sigma_q(\Lambda^{(\Upsilon)}\setminus\mathcal I(\underline\Gamma)),\ |\sigma|\geqslant\ell_0\}}\ \prod_{\sigma\in S}w_{\varpi_{\varrho,\Upsilon}(\sigma)}(|\sigma|).
+ \end{equation}
+ Having done so, we combine the sum over $S$ and the sum over contours by introducing {\it external polymers}, which are, by definition~\-\ref{def:external_polymer}, unions of contours and segments $\sigma$ (see figure~\-\ref{fig:polymers}). Thus, we rewrite~\-(\ref{Z_contour}) as
+ \begin{equation}
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda)}=
+ \sum_{\underline\xi\subset\mathfrak X^{(\Upsilon)}_q(\Lambda)}
+ \left(\prod_{\xi\neq\xi'\in\underline\xi}\varphi_{\mathrm{ext}}(\xi,\xi')\right)
+ \prod_{\xi\in\underline\xi}\left(
+ \zeta^{(\Upsilon)}_{\mathbf q}(\xi)
+ \prod_{l\in\mathrm{supp}_{\mathcal L}(\xi)}
+ \frac{\widetilde Z^{(\Upsilon)}(\iota_{c(l),\geqslant \ell_0}^{(\Upsilon)}(l)|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q,}(\iota_{c(l),\geqslant \ell_0}^{(\Upsilon)}(l))}
+ \right)
+ \label{Z_external_polymers}
+ \end{equation}
+ in which
+ \begin{itemize}
+ \item $\varphi_{\mathrm{ext}}(\xi,\xi')\in\{0,1\}$ is equal to 1 if and only if $\xi$ and $\xi'$ are {\it compatible},
+ \item $\zeta^{(\Upsilon)}_{\mathbf q}(\xi)$ is the {\it activity} of $\xi$, and is defined in~\-(\ref{zeta_external}).
+ \end{itemize}
+ \bigskip
+
+ \point{\bf Non-trivial polymers.} We will now define $\widetilde Z^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|\mathbf q)$, as the partition function of {\it non-trivial} external polymers. Trivial polymers are $q$-segments that go all the way through $\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)$. By construction, every $c(l)$-segment in $\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)$ is of length $\geqslant\ell_0$, but this is not necessarily true of the $q$-segments. Since short segments give a poor gain, we wish to avoid them, and, simply, define $\widetilde Z^{(\Upsilon)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|\mathbf q)$ without them: for any finite $\Lambda'\subset\mathbb Z^2$,
+ \begin{equation}
+ \frac{\widetilde Z^{(\Upsilon)}(\Lambda'|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda')}:=
+ \sum_{\underline\xi\subset\widetilde{\mathfrak X}^{(\Upsilon)}_q(\Lambda')}
+ \left(\prod_{\xi\neq\xi'\in\underline\xi}\varphi_{\mathrm{ext}}(\xi,\xi')\right)
+ \prod_{\xi\in\underline\xi}\left(
+ \zeta^{(\Upsilon)}_{\mathbf q}(\xi)
+ \prod_{l\in\mathrm{supp}_{\mathcal L}(\xi)}
+ \frac{\widetilde Z^{(\Upsilon)}(\iota_{c(l),\geqslant \ell_0}^{(\Upsilon)}(l)|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q,}(\iota_{c(l),\geqslant \ell_0}^{(\Upsilon)}(l))}
+ \right)
+ \label{tildeZ_external_polymers}
+ \end{equation}
+ obtained from~\-(\ref{Z_external_polymers}) by replacing $\mathfrak X^{(\Upsilon)}_q(\Lambda')$ with $\widetilde{\mathfrak X}^{(\Upsilon)}_q(\Lambda')$ (see definition~\-\ref{def:external_polymer}).
+ \bigskip
+
+ \point{\bf Induction.} We now conclude the proof of~\-(\ref{Z_polymer}). We will actually prove that~\-(\ref{tildeZ_external_polymers}) can be rewritten as~\-(\ref{tildeZ_polymer}), which, along with~\-(\ref{Z_external_polymers}), implies~\-(\ref{Z_polymer}). Equation~\-(\ref{tildeZ_external_polymers}) states that we can deduce the expression of the right side of~\-(\ref{tildeZ_polymer}) from the same expression for smaller sets $\Lambda'\subsetneq\Lambda$. It follows from the principle of mathematical induction, that if we know~\-(\ref{tildeZ_polymer}) for the smallest possible sets, then we can compute the left side of~\-(\ref{tildeZ_polymer}) for sets of any size. If $\Lambda$ is so small that it cannot contain a contour, then~\-(\ref{tildeZ_polymer}) follows immediately from~\-(\ref{tildeZ_external_polymers}). We now assume that~\-(\ref{Z_polymer}) holds for every strict subset of $\Lambda$. By inserting~\-(\ref{tildeZ_polymer}) into~\-(\ref{tildeZ_external_polymers}), we find
+ \begin{equation}
+ \begin{largearray}
+ \frac{\widetilde Z^{(\Upsilon)}(\Lambda|\mathbf q)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda)}=
+ \sum_{\underline\gamma\subset\widetilde{\mathfrak X}^{(\Upsilon)}_q(\Lambda)}
+ \left(\prod_{\gamma\neq\gamma'\in\underline\gamma}\varphi_{\mathrm{ext}}(\gamma,\gamma')\right)
+ \cdot\\[0.5cm]\hfill\cdot
+ \prod_{\gamma\in\underline\gamma}\left(
+ \zeta^{(\Upsilon)}_{\mathbf q}(\gamma)
+ \prod_{l\in\mathrm{supp}_{\mathcal L}(\gamma)}
+ \left(
+ \sum_{\underline\gamma_l\subset\widetilde{\mathfrak P}^{(\Upsilon)}_q(\iota_{c(l)}^{(\Upsilon)}(l))}
+ \left(\prod_{\gamma_l\neq\gamma_l'\in\underline\gamma_l}\Phi(\gamma_l,\gamma_l')\right)
+ \prod_{\gamma_l\in\underline\gamma_l}\zeta_{\mathbf q}^{(\Upsilon)}(\gamma_l)
+ \right)
+ \right).
+ \end{largearray}
+ \label{induction}
+ \end{equation}
+ Following the inductive structure of definition~\-\ref{def:polymer}, we group the unions of external polymers $\underline\gamma$ and polymers $\underline\gamma_l$ into a set of connected polymers that are pairwise compatible. We thus conclude the proof of~\-(\ref{tildeZ_polymer}) for $\Lambda$ from~\-(\ref{tildeZ_polymer}) for strict subsets of $\Lambda$.
+\qed
+
+\section{Cluster expansion of the polymer model}\label{sec:cluster}
+\indent In this section, we will express the partition function of the polymer model~\-(\ref{Z_polymer}) as an absolutely convergent {\it cluster expansion}. To prove the convergence of the expansion, we will proceed by induction: assuming that the cluster expansion is absolutely convergent for strict subsets of $\Lambda$, we will prove that it converges for $\Lambda$. We split this result into three lemmas (see lemmas~\-\ref{lemma:boundzeta}, \ref{lemma:bound_entropy} and~\-\ref{lemma:boundK}). In the first, we prove a bound for the effective activity of polymers, in the second, we bound the entropy of the polymers, and in the third, prove the convergence of the cluster expansion.
+\bigskip
+
+\subsection{Cluster expansion}
+\indent The cluster expansion allows us to compute the logarithm of the partition function~\-(\ref{Z_polymer}) in terms of an absolutely convergent series. This is a rather standard step in Pirogov-Sinai theory, and has been written about extensively. In this work, we will use a result of Bovier and Zahradn\'ik~\-\cite[Theorem~\-1]{BZ00}, which, using our notations, is summed up in the following lemma.
+\bigskip
+
+\theoname{Lemma}{cluster expansion}\label{lemma:bz}
+ If there exist two functions $a,d$ that map polymers $\mathfrak P^{(\Upsilon)}_q(\Lambda)$ to $[0,\infty)$ and a number $\delta\geqslant0$, such that $\forall\gamma\in\mathfrak P^{(\Upsilon)}_q(\Lambda)$,
+ \begin{equation}
+ |\zeta^{(\Upsilon)}_{\mathbf q}(\gamma)|e^{a(\gamma)+d(\gamma)}\leqslant\delta<1
+ ,\quad
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\mathfrak P^{(\Upsilon)}_q(\Lambda)}_{\gamma'\not\sim\gamma}}|\zeta^{(\Upsilon)}_{\mathbf q}(\gamma')|e^{a(\gamma')+d(\gamma')}\leqslant
+ \frac{\delta}{|\log(1-\delta)|}
+ a(\gamma)
+ \label{cvcd}
+ \end{equation}
+ in which $\gamma'\not\sim\gamma$ means that $\gamma'$ and $\gamma$ are {\it not} compatible (see definition~\-\ref{def:polymer}), then
+ \begin{equation}
+ \log\left(
+ \frac{Z(\Lambda|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}(\Lambda)}
+ \right)=
+ \sum_{\underline\gamma\subset\mathfrak P^{(\Upsilon)}_q(\Lambda)}
+ \Phi^T(\underline\gamma)
+ \prod_{\gamma\in\underline\gamma}\zeta^{(\Upsilon)}_{\mathbf q}(\gamma)
+ \label{ce}
+ \end{equation}
+ where $\Phi^T$ is the {\it Ursell function}, defined as (see \cite[(4.9)]{Ru99})
+ \begin{equation}
+ \Phi^T(\{\gamma_1,\cdots,\gamma_n\}):=
+ \sum_{\mathfrak g\in\mathcal G^T(n)}\prod_{\{j,j'\}\in\mathcal E(\mathfrak g)}(\Phi(\gamma_j,\gamma_{j'})-1)
+ \end{equation}
+ in which $\mathcal G^T(n)$ is the set of connected graphs on $n$ vertices and $\mathcal E(\mathfrak g)$ is the set of edges of $\mathfrak g$. In addition, for every $\gamma\in\mathfrak P^{(\Upsilon)}_q(\Lambda)$,
+ \begin{equation}
+ \sum_{\underline\gamma\subset\mathfrak P^{(\Upsilon)}_q(\Lambda)}^*
+ \left|
+ \Phi^T(\gamma\cup\underline\gamma)
+ \prod_{\gamma\in\underline\gamma}
+ \left(\zeta^{(\Upsilon)}_{\mathbf q}(\gamma)e^{d(\gamma)}\right)
+ \right|
+ \leqslant
+ e^{a(\gamma)}
+ \label{ce_remainder}
+ \end{equation}
+ in which the $*$ on the sum over $\underline\gamma$ means that it is a sum over all subsets of $\mathfrak P_q^{(\Upsilon)}(\Lambda)$ {\it including} the empty set.
+\endtheo
+
+\subsection{Bound on the polymer activity}
+\indent We will now prove a bound on the activity $\zeta_{\mathbf q}^{(\Upsilon)}$ of a polymer.
+\bigskip
+
+\theoname{Lemma}{bound on the polymer activity}\label{lemma:boundzeta}
+ If
+ \begin{equation}
+ e^J\gg z\gg1,
+ \label{activityconditions}
+ \end{equation}
+ and, $\exists\cst C{cst:K}>0$ such that, for every $\Lambda'\subsetneq\Lambda$,
+ \begin{equation}
+ \left|K^{(\Upsilon)}_{\mathbf q,\mathbf c}(\Lambda')\right|\leqslant e^{\cst C{cst:K}(|\partial_c\Lambda'|+\ell_0e^{-3J}|\partial_q\Lambda'|)}.
+ \label{assum_K}
+ \end{equation}
+ then, $\forall\gamma\in\mathfrak P^{(\Upsilon)}_q(\Lambda)$,
+ \begin{equation}
+ \left|\zeta^{(\Upsilon)}_{\mathbf q}(\gamma)\right|\leqslant
+ e^{-\Xi^{(\Upsilon)}(\gamma)}
+ \label{boundzeta}
+ \end{equation}
+ where
+ \begin{equation}
+ \Xi^{(\Upsilon)}(\gamma):=
+ \frac12\bar J\mathfrak l(\gamma)
+ +\bar\kappa\mathfrak s(\gamma)
+ -(J+\log\bar\epsilon)\mathfrak m^{(\Upsilon)}(\gamma)
+ -\cst C{cst:K}\ell_0^2e^{-3J}\mathfrak b(\gamma)
+ -J\mathfrak v_1^{(\Upsilon)}(\gamma)
+ -J\mathfrak v_2^{(\Upsilon)}(\gamma)
+ -\cst C{cst:source}|\Upsilon|
+ \label{Xi}
+ \end{equation}
+ for some constant $\cst C{cst:source}>0$, with
+ \begin{equation}
+ \bar J:=J-\cst C{cst:Jexp}
+ ,\quad
+ \bar\kappa:=\kappa\cst C{cst:sigma}
+ ,\quad
+ \bar\epsilon:=\epsilon\cst C{cst:m}
+ \label{bars}
+ \end{equation}
+ in which $\cst C{cst:Jexp}>2\cst C{cst:K}$ and $\cst C{cst:sigma},\cst C{cst:m}>0$ are constants,
+ \begin{equation}
+ \epsilon:=\frac1{\sqrt{ze^J}}\ll1
+ ,\quad
+ \kappa:=\frac1{e^J\sqrt{ze^J}}\ll1.
+ \end{equation}
+ and
+ \begin{equation}
+ \mathfrak l(\gamma):=\sum_{\Gamma\in\underline\Gamma(\xi(\gamma))}\sum_{l\in\Gamma}|l|+\sum_{g\in\underline g(\gamma)}\mathfrak l(g)
+ ,\quad
+ \mathfrak s(\gamma):=\sum_{\sigma\in\underline\sigma(\xi(\gamma))}|\sigma|+\sum_{g\in\underline g(\gamma)}\mathfrak s(g)
+ \end{equation}
+ \begin{equation}
+ \mathfrak m^{(\Upsilon)}(\gamma):=\sum_{\Gamma\in\underline\Gamma(\xi(\gamma))}\sum_{\displaystyle\mathop{\scriptstyle\sigma\in\mathcal S_{\Lambda,<\ell_0}^{(\Upsilon)}(\Gamma)}_{|\sigma|=1}}1+\sum_{g\in\underline g(\gamma)}\mathfrak m^{(\Upsilon)}(g)
+ ,\quad
+ \mathfrak b(\gamma):=\mathds 1_{\mathfrak l(\gamma)-\mathfrak m^{(\Upsilon)}(\gamma)\geqslant\ell_0}(\mathfrak l(\gamma)-\mathfrak m^{(\Upsilon)}(\gamma))
+ .
+ \label{frakm}
+ \end{equation}
+ \begin{equation}
+ \mathfrak v_1^{(\Upsilon)}(\gamma)
+ :=
+ \sum_{\Gamma\in\underline\Gamma(\xi(\gamma))}
+ 3(|\mathbb D_{-q}(\Upsilon_{-q})|-|\mathbb D_q(\Upsilon_{-q})|)
+ +
+ \sum_{g\in\underline g(\gamma)}\mathfrak v_1^{(\Upsilon)}(g)
+ \label{frakv1}
+ \end{equation}
+ \begin{equation}
+ \mathfrak v_2^{(\Upsilon)}(\gamma)
+ :=
+ \sum_{\Gamma\in\underline\Gamma(\xi(\gamma))}
+ \sum_{\upsilon\in \mathbb D_q(\Upsilon_{-q})\cup \mathbb D_{-q}(\Upsilon_q)}
+ |\mathfrak K^{(\Upsilon,\mathrm{ext})}(\upsilon,\Gamma)|
+ +
+ \sum_{g\in\underline g(\gamma)}\mathfrak v_2^{(\Upsilon)}(g)
+ \label{frakv2}
+ \end{equation}
+ in which $\mathfrak K^{(\Upsilon,\mathrm{ext})}(\upsilon,\Gamma):=\mathfrak K^{(\Upsilon,\mathrm{ext})}_{\mathrm v}(\upsilon,\Gamma)\cup\mathfrak K^{(\Upsilon,\mathrm{ext})}_{\mathrm h}(\upsilon,\Gamma)$ (see~\-(\ref{frakK})).
+\endtheo
+\restorepagebreakaftereq
+\bigskip
+
+\indent\underline{Proof}:
+ We recall that $\zeta^{(\Upsilon)}_{\mathbf q}(\gamma)$ was defined in~\-(\ref{zeta}). We proceed by first bounding $\zeta^{(\Upsilon)}_{\mathbf q}(\gamma)$ for $\gamma\equiv\xi\in\mathfrak X^{(\Upsilon)}_q(\Lambda)$, and conclude the proof by induction. To that end we bound the terms appearing in~\-(\ref{zeta_external}) one by one.
+ \bigskip
+
+ \point First of all, by~\-(\ref{eigenvalues}),
+ \begin{equation}
+ \lambda_+=\sqrt{ze^J}(1+\kappa+O(\epsilon^2\kappa))
+ ,\quad
+ \frac{\lambda_-}{\lambda_+}=-(1-\kappa)+O(\kappa\epsilon)
+ ,\quad
+ \frac{\lambda_0}{\lambda_+}=\frac1{\sqrt{ze^J}}(1+O(e^{-J}))
+ \label{bound_lambda}
+ \end{equation}
+ by~\-(\ref{b}),
+ \begin{equation}
+ b_+=\frac1{2ze^{2J}}(1+O(\epsilon))
+ ,\quad
+ \frac{b_-}{b_+}=1-4\epsilon+8\epsilon^2+5\kappa+O(\epsilon^3)
+ ,\quad
+ \frac{b_0}{b_+}=2ze^{2J}(1+O(\epsilon))
+ \label{bound_b}
+ \end{equation}
+ and by~\-(\ref{nu}) and~\-(\ref{omegabeta}),
+ \begin{equation}
+ \nu_+(\omega_0)=\lambda_+
+ ,\quad
+ \frac{\nu_-(\omega_0)}{\nu_+(\omega_0)}=\frac{\lambda_-}{\lambda_+}
+ ,\quad
+ \frac{\nu_0(\omega_0)}{\nu_+(\omega_0)}=\frac{\lambda_0}{\lambda_+}
+ \label{bound_nu0}
+ \end{equation}
+ and
+ \begin{equation}
+ \nu_+(\omega_1)=e^J\sqrt{ze^J}(1+O(\epsilon))
+ ,\quad
+ \frac{\nu_-(\omega_1)}{\nu_+(\omega_1)}=-(1+2\epsilon+2\epsilon^2-3\kappa)+O(\epsilon^3)
+ ,\quad
+ \frac{\nu_0(\omega_1)}{\nu_+(\omega_1)}=-\frac{e^{-\frac52J}}{z^{\frac32}}(1+O(\epsilon)).
+ \label{bound_nu1}
+ \end{equation}
+ \bigskip
+
+ \point We bound $\mathfrak x^{(\Upsilon)}_c(\Gamma)$, which was defined in~\-(\ref{frakx}): by~\-(\ref{bound_lambda}) through~\-(\ref{bound_nu1}),
+ \begin{equation}
+ \sqrt{b_+}\nu_+(\omega_0)e^{\frac12J}<1
+ ,\quad
+ \sqrt{b_+}\nu_+(\omega_1)e^{-\frac12J}<1
+ ,\quad
+ \frac{\sqrt{ze^J}}{\lambda_+}<1.
+ \end{equation}
+ In addition, for any $\omega\equiv(\omega^{(0)},\omega^{(1)})\in\{\omega_0,\omega_1\}^2$,
+ \begin{equation}
+ \frac{\nu_-(\omega^{(0)})\nu_-(\omega^{(1)})b_-}{\nu_+(\omega^{(0)})\nu_+(\omega^{(1)})b_+}
+ <1
+ ,\quad
+ \frac{\nu_0(\omega^{(0)})\nu_0(\omega^{(1)})b_0}{\nu_+(\omega^{(0)})\nu_+(\omega^{(1)})b_+}
+ =O(e^J)
+ \label{bound_nub}
+ \end{equation}
+ so, by~\-(\ref{eW}),
+ \begin{equation}
+ |e^{-W^{(\omega)}(|\sigma|)}|< 1+O(e^J\epsilon^{|\sigma|}).
+ \end{equation}
+ If $|\sigma|\geqslant 2$, then $O(e^J\epsilon^{|\sigma|})<1$, whereas if $|\sigma|=1$, it is of order $O(e^{J+\log\epsilon})$ and may be large. Therefore,
+ \begin{equation}
+ |\mathfrak x^{(\Upsilon)}_{\mathbf q}(\Gamma)|<\left(O(e^{J+\log\epsilon})\right)^{\mathfrak m^{(\Upsilon)}(\Gamma)}
+ \label{bound_frakx}
+ \end{equation}
+ in which $\mathfrak m^{(\Upsilon)}$ was defined in~\-(\ref{frakm}).
+ \bigskip
+
+ \point We now turn to $\mathfrak u_q^{(\Upsilon)}(\Gamma)$, defined in~\-(\ref{fraku}). By~\-(\ref{bound_lambda}) through~\-(\ref{bound_nu1}),
+ \begin{equation}
+ \sqrt{b_+}\nu_+(\omega_0)=\frac{e^{-\frac12J}}{\sqrt2}(1+O(\epsilon))
+ ,\quad
+ \sqrt{b_+}\nu_+(\omega_1)=\frac{e^{\frac12J}}{\sqrt2}(1+O(\epsilon))
+ \end{equation}
+ which we plug into~\-(\ref{fraku}) and find that
+ \begin{equation}
+ |\mathfrak u_q^{(\Upsilon)}(\Gamma)|<O(1)^{|\Upsilon|}e^{J(\mathfrak v_1^{(\Upsilon)}(\Gamma)+\mathfrak v_2^{(\Upsilon)}(\Gamma))}
+ \end{equation}
+ in which $\mathfrak v_i$ was defined in~\-(\ref{frakv1}) and~\-(\ref{frakv2}).
+ \bigskip
+
+ \point We will now bound $K^{(\Upsilon)}_{\mathbf q,\mathbf c(l)}$, which was defined in~\-(\ref{eta}). By~\-(\ref{assum_K}),
+ \begin{equation}
+ \sum_{l\in\Gamma}
+ \log K^{(\Upsilon)}_{\mathbf q,\mathbf c(l)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))
+ \leqslant
+ \cst C{cst:K}\sum_{l\in\Gamma}|\partial_{c(l)}\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|
+ +
+ \cst C{cst:K}\ell_0e^{-3J}\sum_{l\in\Gamma}|\partial_q\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|
+ .
+ \label{bound_K_prel}
+ \end{equation}
+ In addition, since every edge in $\partial_{c(l)}\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)$ is necessarily part of a loop or a source (see~\-(\ref{iotagell})),
+ \begin{equation}
+ \sum_{l\in\Gamma}|\partial_{c(l)}\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|
+ \leqslant
+ \mathfrak l(\Gamma)
+ +4|\Upsilon|
+ .
+ \end{equation}
+ On the other hand, the edges in $\partial_q\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)$ are not necessarily in a loop or a source: if $q\neq c(l)$, then portions of the $q$-boundary of $\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)$ can consist of segments of length $<\ell_0$. Nevertheless, every such segment must be connected to a $c(l)$-edge in a loop, which cannot be one of the edges counted by $\mathfrak m^{(\Upsilon)}(\Gamma)$. In addition, this may only occur if $\Gamma$ is large enough to contain a non-empty $\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}$, that is
+ \begin{equation}
+ \mathfrak l(\Gamma)-\mathfrak m^{(\Upsilon)}(\Gamma)\geqslant \ell_0.
+ \end{equation}
+ Therefore,
+ \begin{equation}
+ \sum_{l\in\Gamma}|\partial_q\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l)|
+ \leqslant
+ \mathfrak l(\Gamma)
+ +4|\Upsilon|
+ +
+ \mathds 1_{\mathfrak l(\Gamma)-\mathfrak m^{(\Upsilon)}(\Gamma)\geqslant\ell_0}\ell_0(\mathfrak l(\Gamma)-\mathfrak m^{(\Upsilon)}(\Gamma))
+ .
+ \end{equation}
+ Thus,
+ \begin{equation}
+ \prod_{l\in\Gamma}
+ K^{(\Upsilon)}_{\mathbf q,\mathbf c(l)}(\iota_{c(l),\geqslant\ell_0}^{(\Upsilon)}(l))
+ \leqslant
+ e^{\cst C{cst:K}(2\mathfrak l(\Gamma)+\mathds 1_{\mathfrak l(\gamma)-\mathfrak m^{(\Upsilon)}(\gamma)\geqslant\ell_0}\ell_0^2e^{-3J}(\mathfrak l(\Gamma)-\mathfrak m^{(\Upsilon)}(\Gamma))}
+ O(1)^{|\Upsilon|}
+ .
+ \end{equation}
+ \bigskip
+
+ \point We turn, now, to $w$, which was defined in~\-(\ref{w}). By~\-(\ref{bound_nub}), since $|\sigma|\geqslant \ell_0$,
+ \begin{equation}
+ |w_\varpi(|\sigma|)|=
+ O(e^{-\kappa(1+O(\epsilon))|\sigma|}).
+ \label{bound_w}
+ \end{equation}
+ \bigskip
+
+ \point By injecting~\-(\ref{bound_frakx}), (\ref{bound_w}) and~\-(\ref{assum_K}) into~\-(\ref{zeta_external}), we find
+ \begin{equation}
+ \begin{largearray}
+ \left|\zeta^{(\Upsilon)}_{\mathbf q}(\xi(\gamma))\right|\leqslant
+ O(e^{J+\log\epsilon})^{\mathfrak m^{(\Upsilon)}(\xi(\gamma))}
+ e^{-\frac12J\mathfrak l(\xi(\gamma))+\cst C{cst:K}(2\mathfrak l(\xi(\gamma))+\ell_0^2e^{-3J}\mathfrak b(\xi(\gamma))+J(\mathfrak v_1^{(\Upsilon)}(\xi(\gamma))+\mathfrak v_2^{(\Upsilon)}(\xi(\gamma)))}
+ \cdot\\[0.5cm]\hfill\cdot
+ O(1)^{|\Upsilon|}
+ \left(\prod_{\sigma\in\underline\sigma(\xi)}O(e^{-\kappa(1+O(\epsilon))|\sigma|})\right).
+ \end{largearray}
+ \label{bound_zeta_inproof}
+ \end{equation}
+ We conclude the proof by induction.
+\qed
+
+\subsection{Bound on the polymer entropy}
+\indent We now bound the number of possible polymers, weighted by their activity.
+\bigskip
+
+\theoname{Lemma}{bound on the polymer entropy}\label{lemma:bound_entropy}
+ For $0<\alpha,\beta<1$ and $\gamma\in\mathfrak P^{(\Upsilon)}_q(\Lambda)$, let
+ \begin{equation}
+ a(\gamma):=\alpha\Xi^{(\Upsilon)}(\gamma)
+ ,\quad
+ d(\gamma):=\beta\Xi^{(\Upsilon)}(\gamma)
+ \end{equation}
+ which are both positive. If
+ \begin{equation}
+ J\gg z\gg 1
+ \end{equation}
+ and
+ \begin{equation}
+ \ell_0=\cst C{cst:ell0}\kappa^{-1}
+ \label{ell0}
+ \end{equation}
+ for some constant $\cst C{cst:ell0}>\max\{1,(\alpha\cst C{cst:sigma})^{-1}\}$ (in which $\cst C{cst:sigma}$ is the constant appearing in~\-(\ref{bars})), and
+ \begin{equation}
+ \theta:=1-\alpha-\beta
+ ,\quad
+ \frac12\mathfrak t\leqslant \theta\leqslant 1
+ ,\quad
+ \mathfrak t=1+O(zJ^{-1})
+ \label{bound_theta}
+ \end{equation}
+ then, for every $\gamma\in\mathfrak P^{(\Upsilon)}_q(\Lambda)$,
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\mathfrak P^{(\Upsilon)}_q(\Lambda)}_{\gamma'\not\sim\gamma}}
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma)}
+ \leqslant
+ a(\gamma)
+ \label{bound_entropy}
+ \end{equation}
+ in which $\gamma'\not\sim\gamma$ means that $\gamma'$ and $\gamma$ are incompatible, which implies that~\-(\ref{cvcd}), and, consequently, lemma~\-\ref{lemma:bz} hold.
+\endtheo
+\bigskip
+
+\indent\underline{Proof}:
+ We will first focus on the sum over non-trivial polymers (see definition~\-\ref{def:polymer}), and then turn to the trivial ones.
+\bigskip
+
+ \point Let us, for the moment, neglect the sources, and discuss their role later on. We will show that for every edge $e\in\mathbb Z^2$,
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\widetilde{\mathfrak P}^{(\emptyset)}_q(\Lambda)}_{\partial\xi(\gamma')\ni e}}
+ e^{-\theta\Xi^{(\emptyset)}(\gamma')}
+ \leqslant
+ e^{-3\theta\bar J}
+ \label{bound_entropy1_nosources}
+ \end{equation}
+ in which $\partial\xi(\gamma'):=\bigcup_{\Gamma\in\underline\Gamma(\xi(\gamma'))}\Gamma$.
+ \bigskip
+
+ \subpoint A polymer $\gamma'\in\widetilde{\mathfrak P}^{(\emptyset)}_q(\Lambda)$ consists of {\it loops} and {\it segments} which are either of length $<\ell_0$, in which case they connect two loops in the same contour, or their length is $\geqslant\ell_0$. By lemma~\-\ref{lemma:boundzeta}, loops come with a gain factor $e^{-\frac12\bar J|l|}$, and segments which are $\geqslant\ell_0$ come with a gain factor $e^{-\bar\kappa|\sigma|}$. Shorter segments do not have such a gain, and segments of length~\-1 actually come with a loss factor $e^{J+\log\bar\epsilon}$. This loss is less dramatic than might seem at first glance: segments of length~\-1 necessarily connect two loops (since loops are at a distance $\geqslant\ell_0$ from the boundary), and, when taking the $e^{-\frac12J}$ factors coming from the endpoints of the segment, one finds that length~\-1 segments actually contribute $O(\epsilon)$, which is small. Nevertheless, this gain factor is much smaller than for longer segments, which is a fact we will have to deal with. The trick is to consider loops that are at distance~\-1 from each other as a single object, and introduce the notion of a \define{head}, which is a contour $\Gamma\in\mathfrak C_q^{(\emptyset)}(\Lambda)$ whose segments (if any) are all of length~\-1: $\forall\sigma\in\mathcal S_{\Lambda,<\ell_0}^{(\emptyset)}(\Gamma)$, $|\sigma|=1$. Thus, a polymer $\gamma'\in\widetilde{\mathfrak P}^{(\emptyset)}_q(\Lambda)$ consists of {\it heads} and {\it segments} (see figure~\-\ref{fig:lollipops}). For simplicity of exposition, we will consider loops that are not separated by a segment (see figure~\-\ref{fig:lollipops}) as belonging to the same head.
+ \bigskip
+
+ \indent We then define the set of {\it backbones} $\underline{\bar\gamma'}$ of $\gamma'$ as the set of polymers obtained from $\gamma'$ by removing segments of length $>1$ in such a way that, while the support of $\bar\gamma'$ is still connected, it would not be if we removed any more segments of length $>1$. Among the backbones in $\underline{\bar\gamma'}$, we pick one arbitrarily, denote it by $\bar\gamma'$ and call it {\it the} \define{backbone} of $\gamma'$ (see figure~\-\ref{fig:lollipops}). The main idea is to bound the entropy of the backbone, after which we bound the entropy of the full polymer.
+ \bigskip
+
+ \begin{figure}
+ \hfil\includegraphics[height=8cm]{lollipops.pdf}
+ \hfil\raise2.5cm\hbox{\includegraphics[height=3cm]{lollipops-tree.pdf}}
+ \caption{A backbone of the polymer in figure~\-\ref{fig:polymers}. The blue ({\it a}) loop is the root. The lollipops are depicted in different colors and labeled by different letters. Each consists of a stem and a head, which consists of loops which are at distance $\leqslant 1$ from each other. The tree structure of the backbone is drawn as well.}
+ \label{fig:lollipops}
+ \end{figure}
+
+ \subpoint The backbone $\bar\gamma'$ consists of $L\geqslant1$ heads and $n_{\mathrm s}$ segments of length $>1$, and has a natural tree structure (see figure~\-\ref{fig:lollipops}): if we associate a node to each head and a branch to every pair of nodes that corresponds to heads that are connected by a segment, then the resulting graph is a tree (a tree is a graph with no loops), denoted by $\mathbb T(\bar\gamma')$. We call the head containing the edge $e$ the \define{root} of the tree. Every other head has a unique \define{parent}, which is defined as the unique neighbor of the head that is closest to the root (using the natural graph distance on the tree). A head together with the segment that connects it to its parent is called a \define{lollipop}, and the segment is called the \define{stem} of the lollipop. The backbone is completely determined by the tree $\mathbb T(\bar\gamma')$, the shape of the root head and the lollipops, and the points on the heads to which the lollipops are attached.
+ \begin{itemize}
+ \item The number of rooted trees with $L$ nodes is bounded by
+ \begin{equation}
+ \#\ \mathrm{trees\ with\ }L\mathrm{\ nodes}\ \leqslant4^{L-1}
+ \label{count_trees}
+ \end{equation}
+ (which can be proved rather easily by mapping the set of trees to 1-dimensional walks with $2(L-1)$ steps, see~\-\cite[lemma~\-A.1]{GM01}).
+ \item The number of possible shapes of a lollipop is estimated as follows. Let us focus on the $i$-th lollipop $\Gamma_i$. It consists of a stem of length $\ell_i$, and a head, which is a union of bounding loops. The head is {\it connected} to the stem at an edge $e_i$ (in the sense of definition~\-\ref{def:segment}). By definition, every segment in $\mathcal S_{\Lambda,<\ell_0}^{(\emptyset)}(\Gamma_i)$ is of length 1, and every such segment is connected (in the sense of definition~\-\ref{def:segment}) to exactly 2 edges of the head. Conversely, every edge in the head may be connected to 0 or 1 length-1 segments. We denote the number of edges in the head that are connected to a length-1 segment by $n_{\mathrm z,i}$, and fix the number of remaining edges to $n_{\mathrm l,i}$. Then, we estimate the number of possible heads with $n_{\mathrm z,i}$ and $n_{\mathrm l,i}$ fixed. A head can be seen as a connected subgraph of a finite-degree graph: for instance, consider the graph $\mathfrak G$ whose vertices correspond to the edges of $\mathbb Z^2$ and whose edges correspond to every pair of edges of $\mathbb Z^2$ that are at distance $\leqslant 2$ from each other. A head is a connected subgraph of this graph and has $n_{\mathrm l,i}+n_{\mathrm z,i}$ vertices. Therefore, the number of possible head shapes is bounded by
+ \begin{equation}
+ \#\ \mathrm{lollipop\ head\ shapes}\ \leqslant\cst c{cst:count_head}^{n_{\mathrm l,i}+n_{\mathrm z,i}}
+ \label{count_heads}
+ \end{equation}
+ for some constant $\cst c{cst:count_head}>0$ (which depends only on the degree of the graph $\mathfrak G$).
+ \item Once the tree structure and the shapes of the lollipops are fixed, we are left with positioning the lollipops. Given a lollipop $\Gamma_i$, the tree structure tells us to which other lollipop $\Gamma_j$ its stem is connected. Therefore, it suffices to bound the number ways $\Gamma_i$ can be connected to $\Gamma_j$ by $2^{n_{\mathrm l,j}}$. Thus,
+ \begin{equation}
+ \#\ \mathrm{lollipop\ positions}\ \leqslant\prod_{i=1}^L2^{n_{\mathrm l,i}}.
+ \label{count_positions}
+ \end{equation}
+ \end{itemize}
+ \bigskip
+
+ \indent We now express the weight $e^{-\theta\Xi^{(\emptyset)}(\bar\gamma')}$ (see~\-(\ref{Xi})) of the backbone in terms of lollipops. We fix the lengths of the stems $\ell_2,\cdots,\ell_L\geqslant 2$ (we take the convention that the first head is the root, which does not have a stem), as well as the numbers $n_{\mathrm l,1},\cdots,n_{\mathrm l,L}$ of edges in each head that are not connected to a length-1 segment, and the numbers $n_{\mathrm z,1},\cdots,n_{\mathrm z,L}$ of edges in each head that are connected to a length-1 segment. We have
+ \begin{equation}
+ \mathfrak l(\gamma')=\sum_{i=1}^L(n_{\mathrm l,i}+n_{\mathrm z,i})
+ ,\quad
+ \mathfrak s(\bar\gamma')=\sum_{i=2}^L\ell_i
+ ,\quad
+ \mathfrak m^{(\emptyset)}(\bar\gamma')=\frac12\sum_{i=1}^Ln_{\mathrm z,i}.
+ \label{backbone_as_walk_h}
+ \end{equation}
+ Therefore, by~\-(\ref{Xi})
+ \begin{equation}
+ \Xi^{(\emptyset)}(\bar\gamma')=
+ \sum_{i=1}^L\left(\frac12\bar Jn_{\mathrm l,i}-\frac12\log\bar\epsilon\ n_{\mathrm z,i}\right)
+ +\bar\kappa\sum_{i=2}^L\ell_i
+ -\chi(n_{\mathrm l})
+ \label{bound_Xi}
+ \end{equation}
+ with
+ \begin{equation}
+ \chi(n_{\mathrm l}):=
+ \cst C{cst:K}\ell_0^2e^{-3J}\mathds 1_{\sum_i n_{\mathrm l,i}\geqslant\ell_0}\sum_{i=1}^L n_{\mathrm{l,i}}
+ .
+ \end{equation}
+ Note that, since $z\ll J$, this shows that $\Xi^{(\emptyset)}(\gamma')\geqslant 0$.
+ \bigskip
+
+ \indent In addition, by simple geometric considerations, for every $i\in\{1,\cdots,L\}$,
+ \begin{equation}
+ n_{\mathrm l,i}\geqslant 6
+ \label{bound_nz}
+ \end{equation}
+ Indeed there are at least 6 edges in every head that can not be connected to a length-1 segment (see figure~\-\ref{fig:smallest}). Those edges are the $q$-edges with the largest $q$-component, the $q$-edges with the smallest $q$-component, and the $-q$-edges with the largest $q$-component. By definition~\-\ref{def:bounding_loop}, there are at least 2 of each, which adds up to 6.
+ \bigskip
+
+ \begin{figure}
+ \hfil\raise0.75cm\hbox{\includegraphics[height=1.5cm]{smallest-6.pdf}}
+ \hfil\includegraphics[height=3cm]{smallest-18.pdf}
+ \caption{Left: the smallest possible head has 6 edges. Right: the smallest $\mathrm h$-loop that can contain an $\mathrm h$-dimer has 18 edges.}
+ \label{fig:smallest}
+ \end{figure}
+
+ \subpoint Given a backbone, we can construct a family of polymers by adding segments to it. The weight of an additional segment of length $\ell$ is $\leqslant 1$. In addition, the number of ways in which on can add segments is bounded by
+ \begin{equation}
+ \#\ \mathrm{polymers\ compatible\ with\ backbone}\ \leqslant\prod_{i=1}^L2^{n_{\mathrm l,i}}
+ \label{count_polymers}
+ \end{equation}
+ (the estimate corresponds to allowing for segments to be added to any point of a loop, which is an over-counting).
+ \bigskip
+
+ \subsubpoint Thus, we bound, by~\-(\ref{count_trees}) through~\-(\ref{count_polymers}),
+ \begin{equation}
+ \begin{largearray}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\widetilde{\mathfrak P}^{(\emptyset)}_q(\Lambda)}_{\partial\gamma'\ni e}}
+ e^{-\theta\Xi^{(\emptyset)}(\gamma')}
+ \leqslant
+ \sum_{L=1}^\infty
+ 4^{L-1}
+ \sum_{n_{\mathrm l,1},\cdots,n_{\mathrm l,L}\geqslant 6}
+ \ \sum_{n_{\mathrm z,1},\cdots,n_{\mathrm z,L}\geqslant 0}
+ \ \sum_{\ell_2,\cdots,\ell_L\geqslant 2}
+ \cdot\\[-0.25cm]\hfill\cdot
+ e^{\theta\chi(n_{\mathrm l})}
+ \left(\prod_{i=1}^L\left(\cst c{cst:lolly}\ e^{-\theta\frac12\bar J}\right)^{n_{\mathrm l,i}}\right)
+ \left(\prod_{i=1}^L\left(\cst c{cst:lolly}\ \bar\epsilon^{\frac12\theta}\right)^{n_{\mathrm z,i}}\right)
+ \prod_{i=2}^{L}F(\ell_i)
+ \end{largearray}
+ \label{bound_entropy_ns1}
+ \end{equation}
+ where $\cst c{cst:lolly}>0$ is a constant, and
+ \begin{equation}
+ F(\ell):=
+ \left\{\begin{array}{ll}
+ e^{-\theta\bar\kappa\ell}&\mathrm{\ if\ }\ell\geqslant\ell_0\\
+ 1&\mathrm{\ otherwise}.
+ \end{array}\right.
+ \label{F}
+ \end{equation}
+ \bigskip
+
+ \subsubpoint Let us now get rid of the $e^{\theta\chi}$ factor. If $\sum_i n_{\mathrm l,i}\geqslant\ell_0$, then the first factor can be rewritten as
+ \begin{equation}
+ e^{\theta\chi(n_{\mathrm l})}
+ \prod_{i=1}^L\left(e^{-\theta\frac12\bar J}\right)^{n_{\mathrm l,i}}
+ =
+ \prod_{i=1}^L\left(e^{-\theta\frac12\bar J+\theta\cst C{cst:K}\ell_0^2e^{3J}}\right)^{n_{\mathrm l,i}}
+ \end{equation}
+ and, since $\ell_0=\cst C{cst:ell0}\kappa^{-1}$ and $\kappa^{-1}=e^{\frac32J}\sqrt z$,
+ \begin{equation}
+ \cst C{cst:K}\ell_0^2e^{-3J}=
+ \cst C{cst:K}\cst C{cst:ell0}^2z
+ .
+ \end{equation}
+ Therefore, we can get rid of $\chi$ by replacing $\theta$ with $\theta(1-2\cst C{cst:K}\cst C{cst:ell0}^2z\bar J^{-1})$:
+ \begin{equation}
+ e^{\theta\chi(n_{\mathrm l})}
+ \prod_{i=1}^L\left(e^{-\theta\frac12\bar J}\right)^{n_{\mathrm l,i}}
+ =
+ \prod_{i=1}^L\left(e^{-\theta(1+O(zJ^{-1}))\frac12\bar J}\right)^{n_{\mathrm l,i}}.
+ \end{equation}
+ \bigskip
+
+ \subsubpoint Therefore, if $z$ and $J$ are large enough, since $\ell_0=\cst C{cst:ell0}\kappa^{-1}$, $\sum_\ell F(\ell)=O(\theta\bar\kappa)^{-1}$ and
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\widetilde{\mathfrak P}^{(\emptyset)}_q(\Lambda)}_{\partial\gamma'\ni e}}
+ e^{-\theta\Xi^{(\emptyset)}(\gamma')}
+ \leqslant
+ e^{-3\theta\bar J}
+ \sum_{L=1}^\infty\cst c{cst:entropy_ii}^L
+ \left(e^{-3\bar\theta\bar J}(\theta\bar\kappa)^{-1}\right)^{L-1}
+ \end{equation}
+ for some constant $\cst c{cst:entropy_ii}>0$, and with $\bar\theta=\theta(1+O(zJ^{-1}))$. Note that the first factor is $e^{-3\theta\bar J}$ instead of $e^{-3\theta(1+O(zJ^{-1}))\bar J}$. This follows from the fact that,
+ \begin{itemize}
+ \item if $L=1$, then the $(1+O(zJ^{-1}))$ correction only arises if $n_{\mathrm l,1}\geqslant\ell_0$, in which case the factor would be $e^{-\frac12\theta(1+O(zJ^{-1}))\bar J\ell_0}\gg e^{-3\theta\bar J}$
+ \item if $L>1$, then the correction can be absorbed in $e^{-3\theta\bar J(1+O(zJ^{-1}))(L-1)}$.
+ \end{itemize}
+ In addition, provided $z\ll e^{(6\bar\theta-3)J}$, which is true if $\bar\theta=\theta(1+O(zJ^{-1}))>\frac12$, we have $\bar\kappa\ll e^{3\bar\theta\bar J}$, from which~\-(\ref{bound_entropy1_nosources}) follows.
+ \bigskip
+
+ \point We now take the sources into account, and show that
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\widetilde{\mathfrak P}^{(\Upsilon)}_q(\Lambda)}_{\partial\xi(\gamma')\ni e}}
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma')}
+ \leqslant
+ \left\{\begin{array}{ll}
+ e^{-3\theta\bar J}&\mathrm{if\ }\mathrm{dist}_1(e,\Upsilon)>3
+ \\
+ e^{-\theta\bar J}&\mathrm{otherwise}
+ \end{array}\right.
+ \label{bound_entropy1}
+ \end{equation}
+ in which $\mathrm{dist}_1$ is the distance induced by the $1$-norm: $|(x,y)|_1=|x|+|y|$. For simplicity of exposition, we will only consider the case in which there are two sources. This is enough for the purpose of computing two-point correlations, and the argument can easily be generalized to an arbitrary number of sources.
+ \bigskip
+
+ \subpoint We will first deal with $\mathfrak v_1$ (see~\-(\ref{frakv1})). The key observation is that, in order for $|\mathbb D_{-q}(\Upsilon_{-q})|>0$, the size of one of the heads of $\Gamma$ must be large enough:
+ \begin{equation}
+ \mathfrak l(\Gamma)-2\mathfrak m^{(\emptyset)}(\Gamma)\geqslant 18|\mathbb D_{-q}(\Upsilon_{-q})|
+ .
+ \end{equation}
+ Indeed, $\Upsilon_{-q}$ is empty unless it is contained inside at least one $-q$-loop, and the smallest $-q$-loop that can contain a $-q$-dimer is of length 18 (see figure~\-\ref{fig:smallest}). Furthermore, since distinct sources are at distance $\geqslant\ell_0$ from each other, if a loop contains two sources, then it is much larger than $2\times 18$. Now, since $\mathfrak l(\Gamma)-2\mathfrak m^{(\emptyset)}(\Gamma)\geqslant 6$ (which is the size of the smallest possible loop, see the discussion above), we have
+ \begin{equation}
+ \frac12\mathfrak l(\Gamma)-\mathfrak m^{(\emptyset)}(\Gamma)-\mathfrak v_1^{(\Upsilon)}(\Gamma)
+ \geqslant
+ \frac12\left(\frac12\mathfrak l(\Gamma)-\mathfrak m^{(\emptyset)}(\Gamma)\right)+\frac32
+ .
+ \label{absorb_frakv1}
+ \end{equation}
+ We can thus absorb $\mathfrak v_1$ by replacing $e^{-\theta\frac12\bar Jn_{\mathrm l,i}}$ in~\-(\ref{bound_entropy_ns1}) by $e^{-\theta\frac14\bar Jn_{\mathrm l,i}-\theta\frac32\bar J}$.
+ \bigskip
+
+ \subpoint After having thus absorbed $\mathfrak v_1$, the remaining contribution of sources comes from loops that are in contact with a source (through $\mathfrak v_2$, see~\-(\ref{frakv2})), or at distance 1 from a source (from the $\Upsilon$-dependence of $\mathfrak m^{(\Upsilon)}$, see~\-(\ref{frakm})). When such an event occurs, $\mathfrak m^{(\Upsilon)}$ and $\mathfrak v_2$ give rise to a large factor, which is counter-balanced by the gain in the entropy coming from the constraint that the loop in question is pinned down by the source.
+
+ \indent The large factor produced by $\mathfrak v_2$ is $e^{J|\mathfrak K^{(\mathrm ext)}|}(\upsilon,\Gamma)$ (see~\-(\ref{frakK})), that is, it is exponentially large in the number of external contact points of each head. Consider a head which is in contact with exactly one source, and does not encircle another source. Denoting its length by $n_{\mathrm l}$ (using the notation introduced above), we note that it can have, at most, $\min(\frac12n_{\mathrm l}-1,6)$ external contact points (since the head has to wind around the source in order to have many contact points). A similar argument holds for the factor produced by $\mathfrak m^{(\Upsilon)}$, which implies that the overall contribution of a head neighboring a source is bounded by $e^{\frac12J\min(n_{\mathrm l}-2,12)}$. Since the head does not encircle another source, there is no need to absorb the contribution of $\mathfrak v_1$ as we did above, and $\frac12\mathfrak l(\Gamma)-\mathfrak m^{(\emptyset)}(\Gamma)$ will contribute $\frac12n_{\mathrm l}$, instead of $\frac14n_{\mathrm l}+\frac32$ as per~\-(\ref{absorb_frakv1}). Thus, the overall contribution of this loop to~\-(\ref{bound_entropy_ns1}) is
+ \begin{equation}
+ e^{\theta\bar J\min(-1,-\frac12n_{\mathrm l}+6)}
+ .
+ \end{equation}
+
+ \indent Now, consider a head that either is in contact with both sources, or touches one and encircles the other. Such a head must, therefore, be quite large: since sources are separated by at least $\ell_0$, $n_{\mathrm l}\geqslant 2\ell_0$. This time, we must absorb $\mathfrak v_1$ as explained above, and, by~\-(\ref{absorb_frakv1}), find that the head will contribute
+ \begin{equation}
+ e^{\theta\bar J(-\frac14n_{\mathrm l}+\frac92)}
+ \mathds 1_{n_{\mathrm l}\geqslant 2\ell_0}
+ .
+ \end{equation}
+
+ \indent When a head that is not the root (recall that, when counting the number of possible backbones, we identified the head containing the edge $e$ as the {\it root}) is in contact with a source, then there is no need to sum over the length of its stem. Equivalently, since the sum over the length of a lollipop stem produces a factor proportional to $\kappa^{-1}$, we can sum over the length of the stem, and correct the weight of the loop by a factor proportional to $\kappa$.
+ \bigskip
+
+ \indent Finally, we turn to the root head. The number of points at which it comes within a distance 1 of a source $\upsilon$ is bounded by $\frac12n_{\mathrm l}+1-\mathrm{dist}_1(e,\upsilon)$. Therefore, provided it only comes in contact with a single source, and does not encircle another, it contributes
+ \begin{equation}
+ e^{\theta\bar J\min(1-\mathrm{dist}_1(e,\upsilon),-1,-\frac12n_{\mathrm l}+6)}
+ .
+ \end{equation}
+ Note that, by a very similar argument, one checks that $\Xi^{(\Upsilon)}(\gamma')\geqslant 0$ even in the presence of sources.
+
+ \subpoint All in all, in the presence of sources, (\ref{bound_entropy_ns1}) becomes
+ \begin{equation}
+ \begin{largearray}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\widetilde{\mathfrak P}^{(\Upsilon)}_q(\Lambda)}_{\partial\gamma'\ni e}}
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma')}
+ \leqslant
+ \cst c{cst:sources_in_entropy}
+ \sum_{L=1}^\infty
+ 4^{L-1}
+ \sum_{n_{\mathrm l,1},\cdots,n_{\mathrm l,L}\geqslant 6}
+ \ \sum_{n_{\mathrm z,1},\cdots,n_{\mathrm z,L}\geqslant 0}
+ \ \sum_{\ell_2,\cdots,\ell_L\geqslant 2}
+ e^{\theta\chi(n_{\mathrm l})}
+ \left(\prod_{i=1}^L\left(\cst c{cst:lolly}\ \bar\epsilon^{\frac12\theta}\right)^{n_{\mathrm z,i}}\right)
+ \cdot\\[-0.25cm]\hfill\cdot
+ \left(\cst c{cst:lolly}^{n_{\mathrm l,1}}\left(e^{-\theta\frac14\bar Jn_{\mathrm l,1}-\theta\frac32\bar J}\left(1+\mathds 1_{n_{\mathrm l,1}\geqslant 2\ell_0}e^{\theta 6\bar J}\right)+e^{-\theta\frac12\bar J\max(2\mathrm{dist}_1(e,\Upsilon)-2,2,n_{\mathrm l,1}-12)}\right)\right)
+ \cdot\\[0.5cm]\hfill\cdot
+ \left(\prod_{i=2}^L\left(\cst c{cst:lolly}^{n_{\mathrm l,i}}\left(e^{-\theta\frac14\bar Jn_{\mathrm l,i}-\theta\frac32\bar J}\left(1+\kappa\mathds 1_{n_{\mathrm l,i}\geqslant 2\ell_0}e^{\theta 6\bar J}\right)+\kappa e^{-\theta\frac12\bar J\max(2,n_{\mathrm l,i}-12)}\right)\right)\right)
+ \prod_{i=2}^{L}F(\ell_i)
+ \label{bound_withsources}
+ \end{largearray}
+ \end{equation}
+ for some constant $\cst c{cst:sources_in_entropy}>0$. The rest of the computation is identical to the case without sources, and yields~\-(\ref{bound_entropy1}).
+ \bigskip
+
+ \point We can now estimate the sum over non-trivial $\gamma'$ that intersect a given $\gamma$ by summing over the position of $e$ in such a way that $\gamma'$ is incompatible with $\gamma$. Such an incompatibility arises only if a loop of $\gamma'$ is at a distance $<\ell_0$ from a loop of $\gamma$, or if a segment or loop of $\gamma'$ intersects a segment or loop of $\gamma$. This yields a factor $O(\ell_0\mathfrak l(\gamma)+\mathfrak s(\gamma))$. However, if $\gamma'$ is at a 1-distance that is $\leqslant 3$ from a source, then the sum over its position yields a constant rather than $O(\ell_0\mathfrak l(\gamma)+\mathfrak s(\gamma))$. Therefore,
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\widetilde{\mathfrak P}^{(\Upsilon)}_q(\Lambda)}_{\gamma'\not\sim\gamma}}
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma')}
+ \leqslant
+ \kappa^{-1}e^{-3\theta\bar J}O(\mathfrak l(\gamma)+\kappa\mathfrak s(\gamma))
+ +O(e^{-\theta\bar J})
+ \ll a(\gamma).
+ \label{bound_cvcd_loop}
+ \end{equation}
+ \bigskip
+
+
+ \point Let us now turn to the contribution of trivial polymers $\gamma'\in\mathfrak P^{(\Upsilon)}_q(\Lambda)\setminus\widetilde{\mathfrak P}^{(\Upsilon)}_q(\Lambda)$. The activity of such polymers is bounded by
+ \begin{equation}
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma')}\leqslant e^{-\theta\bar\kappa\ell_0}=
+ e^{-\theta\cst C{cst:ell0}\cst C{cst:sigma}}
+ \end{equation}
+ where $\cst C{cst:sigma}$ was introduced in~\-(\ref{bars}), and $\cst C{cst:ell0}$ in~\-(\ref{ell0}).
+ \bigskip
+
+ \subpoint If $\gamma$ is non-trivial, then $\gamma'\not\sim\gamma$ only if $\gamma'$ intersects a loop of $\gamma$. Indeed, $\gamma'$ is a $q$-segment, and, in order for it to intersect a $q$-segment of $\gamma$, it will have to intersect the loops at its endpoints, and $-q$-segments of $\gamma$ must lie {\it inside} a loop of $\gamma$. Therefore,
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\mathfrak P^{(\Upsilon)}_q(\Lambda)\setminus\widetilde{\mathfrak P}^{(\Upsilon)}_q(\Lambda)}_{\gamma'\not\sim\gamma}}
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma')}
+ =
+ O(\mathfrak l(\gamma))
+ \ll a(\gamma)
+ \label{bound_cvcd_noloop}
+ \end{equation}
+ \bigskip
+
+ \subpoint If $\gamma$ is trivial, then there is only one position for $\gamma'$ that will intersect $\gamma$, and
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma'\in\mathfrak P^{(\Upsilon)}_q(\Lambda)\setminus\widetilde{\mathfrak P}^{(\Upsilon)}_q(\Lambda)}_{\gamma'\not\sim\gamma}}
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma')}
+ \leqslant
+ e^{-\theta\cst C{cst:ell0}\cst C{cst:sigma}}
+ \label{bound_cvcd_noloop2}
+ \end{equation}
+ whereas
+ \begin{equation}
+ a(\gamma)\geqslant\alpha\bar\kappa\ell_0=\alpha\cst C{cst:ell0}\cst C{cst:sigma}>1.
+ \end{equation}
+ \bigskip
+\qed
+
+\subsection{Polymer-source interaction}
+\indent In this section we introduce the notion of a polymer {\it interacting} with a source, which will be useful in the following to compute observables from the cluster expansion.
+\bigskip
+
+\theoname{Definition}{polymer-source interaction}\label{def:polymer_source_interaction}
+ First of all, we generalize the definition of the polymer activity $\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)$ in~\-(\ref{zeta}), which, so far, has only been defined for polymers $\gamma\in\mathfrak P^{(\Upsilon)}_q(\Lambda)$. We extend this definition to polymers with a different family of sources $\Upsilon'$: if $\gamma\in\mathfrak P_q^{(\Upsilon')}(\Lambda)\setminus\mathfrak P_q^{(\Upsilon)}(\Lambda)$, then we set $\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)\equiv0$.
+ \bigskip
+
+ Given a polymer $\gamma\in\mathfrak P_q^{(\Upsilon)}(\Lambda)$ and a source $E\in\mathcal E(\Lambda)$, we say that $\gamma$ \define{interacts} with $E$ if $\zeta_{\mathbf q}^{(\{E\})}(\gamma)\neq\zeta_{\mathbf q}^{(\emptyset)}(\gamma)$. In this case, we write $\gamma\& E$. Note that, in order for $\gamma$ to interact with $E$, it must either come within a distance $\ell_0$ of it or encircle it.
+\endtheo
+\bigskip
+
+\theoname{Lemma}{entropy of a polymer interacting with a source}\label{lemma:polymer_source_interaction}
+ There exists a constant $\cst C{cst:polymer_source}>0$ such that, for any $E\in\mathcal E(\Lambda)$ and a family of sources $\Upsilon'$,
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma\in\mathfrak P_q^{(\Upsilon')}(\Lambda)}_{\gamma\& E}}
+ |\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)|\ e^{\alpha\Xi^{(\Upsilon)}(\gamma)}
+ \leqslant
+ \cst C{cst:polymer_source}e^{-(1-\alpha)\bar J}
+ +4\max_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_q(\Lambda^{(\Upsilon')})}_{\mathfrak d_q(\sigma,E)\leqslant 1}}e^{-(1-\alpha)\bar\kappa|\sigma|}
+ \label{polymer_source}
+ \end{equation}
+ for $\alpha<\frac12\mathfrak t$ (see~\-(\ref{bound_theta})).
+\endtheo
+\bigskip
+
+\indent\underline{Proof}:
+ As noted in definition~\-\ref{def:polymer_source_interaction}, $\gamma$ may only interact with $E$ if it surrounds it, or comes within a distance $\ell_0$ of it. If $\gamma$ is trivial, then its activity is bounded by
+ \begin{equation}
+ \max_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_q(\Lambda^{(\Upsilon')})}_{\mathfrak d_q(\sigma,E)\leqslant 1}}e^{-(1-\alpha)\bar\kappa|\sigma|}
+ \end{equation}
+ and there are fewer than 4 trivial polymers that interact with $E$. If $\gamma$ is non-trivial, let us fix one edge $e\in\partial\xi(\gamma)$ of one of its external loops. Furthermore, if $\mathrm{dist}_1(e,\Upsilon)>3$, then, since $\gamma\& E$, $\mathfrak l(\gamma)+\mathfrak s(\gamma)\geqslant\mathrm{dist}_1(e,E)-\ell_0$, which implies that,
+ \begin{equation}
+ \Xi^{(\Upsilon)}(\gamma)\geqslant\bar\kappa(\mathrm{dist}_1(e,E)-\ell_0)
+ .
+ \end{equation}
+ Therefore, for $\beta\in(0,\frac12\mathfrak t-\alpha)$ (see~\-(\ref{bound_theta})),
+ \begin{equation}
+ \begin{largearray}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma\in\mathfrak P_q^{(\Upsilon')}(\Lambda)}_{\gamma\& E}}
+ |\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)|\ e^{a(\gamma)}
+ \leqslant
+ \sum_{\displaystyle\mathop{\scriptstyle e\in\mathcal E(\Lambda)}_{\mathrm{dist}_1(e,\Upsilon)>3}}
+ e^{-\beta\bar\kappa(\mathrm{dist}_1(e,E)-\ell_0)}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma\in\widetilde{\mathfrak P}_q^{(\Upsilon)}(\Lambda)}_{\scriptstyle\partial\xi(\gamma)\ni e}}
+ e^{-(1-\alpha-\beta)\Xi^{(\Upsilon)}(\gamma)}
+ \\[1.5cm]\hfill
+ +
+ \sum_{\displaystyle\mathop{\scriptstyle e\in\mathcal E(\Lambda)}_{\mathrm{dist}_1(e,\Upsilon)\leqslant 3}}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma\in\widetilde{\mathfrak P}_q^{(\Upsilon)}(\Lambda)}_{\scriptstyle\partial\xi(\gamma)\ni e}}
+ e^{-(1-\alpha)\Xi^{(\Upsilon)}(\gamma)}
+ +
+ 4\max_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_q(\Lambda^{(\Upsilon')})}_{\mathfrak d_q(\sigma,E)\leqslant 1}}e^{-(1-\alpha)\bar\kappa|\sigma|}
+ .
+ \end{largearray}
+ \label{polymer_source1}
+ \end{equation}
+ Thus, by~\-(\ref{bound_entropy1}),
+ \begin{equation}
+ \begin{largearray}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma\in\mathfrak P_q^{(\Upsilon')}(\Lambda)}_{\gamma\& E}}
+ |\zeta_{\mathbf q}^{(\Upsilon)}(\gamma)|\ e^{a(\gamma)}
+ \leqslant
+ e^{-(1-\alpha-\beta)3\bar J}
+ \sum_{\displaystyle\mathop{\scriptstyle e\in\mathcal E(\Lambda)}_{\mathrm{dist}_1(e,\Upsilon)>3}}
+ e^{-\beta\bar\kappa(\mathrm{dist}_1(e,E)-\ell_0)}
+ \\[0.5cm]\hfill
+ +
+ e^{-(1-\alpha)\bar J}
+ \sum_{\displaystyle\mathop{\scriptstyle e\in\mathcal E(\Lambda)}_{\mathrm{dist}_1(e,\Upsilon)\leqslant 3}}1
+ +4\max_{\displaystyle\mathop{\scriptstyle\sigma\in\Sigma_q(\Lambda^{(\Upsilon')})}_{\mathfrak d_q(\sigma,E)\leqslant 1}}e^{-(1-\alpha)\bar\kappa|\sigma|}
+ .
+ \end{largearray}
+ \label{polymer_source2}
+ \end{equation}
+ Finally, using~\-(\ref{ell0}),
+ \begin{equation}
+ \sum_{\displaystyle\mathop{\scriptstyle e\in\mathcal E(\Lambda)}_{\mathrm{dist}_1(e,\Upsilon)>3}}
+ e^{-\beta\bar\kappa(\mathrm{dist}_1(e,E)-\ell_0)}
+ =
+ O(\beta\kappa)^{-1}
+ \end{equation}
+ from which~\-(\ref{polymer_source}) follows, using $\kappa<e^{2J}$ and taking $3\beta\leqslant 1-2\alpha$.
+\qed
+
+\subsection{Flipping term}
+\indent We will now conclude the proof of the convergence of the cluster expansion, by proving~\-(\ref{assum_K}).
+\bigskip
+
+\theoname{Lemma}{bound on the flipping term}\label{lemma:boundK}
+ There exists a constant $\cst C{cst:K}>0$ such that, for every boundary condition $\mathbf c\equiv(c,\varsigma,\ell_0)$,
+ \nopagebreakaftereq
+ \begin{equation}
+ \left|K^{(\Upsilon)}_{\mathbf q,\mathbf c}(\Lambda)\right|\leqslant e^{\cst C{cst:K}(|\partial_c\Lambda|+\ell_0e^{-3J}|\partial_q\Lambda|)}.
+ \label{assum_K_lemma}
+ \end{equation}
+\endtheo
+\restorepagebreakaftereq
+\bigskip
+
+\indent\underline{Proof}:
+ The main idea of the proof is to compute $Z^{(\Upsilon)}(\Lambda'|\mathbf \mathbf c)/\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf c}(\Lambda')$ and $\widetilde Z^{(\Upsilon)}(\Lambda'|\mathbf \mathbf q)/\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda')$ using the cluster expansion presented in lemma~\-\ref{lemma:bz} whose convergence is ensured by lemmas~\-\ref{lemma:boundzeta} and~\-\ref{lemma:bound_entropy}. We then isolate the {\it bulk} terms, which cancel out, and the {\it boundary} terms, which yield~\-(\ref{assum_K_lemma}). As we will see, it suffices to consider only the first term in~\-(\ref{ce}) and bound the remainder according to~\-(\ref{ce_remainder}).
+ \bigskip
+
+ \point{\bf Sources.} The first step is to eliminate the sources. We will focus on $Z^{(\Upsilon)}(\Lambda'|\mathbf \mathbf c)/\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf c}(\Lambda')$, the argument for the other ratio is very similar. Let, for $t\in[0,1]$,
+ \begin{equation}
+ \bar\zeta_{\mathbf c}^{(\Upsilon,\emptyset)}(\gamma|t):=
+ t\zeta_{\mathbf c}^{(\Upsilon)}(\gamma)
+ +
+ (1-t)\zeta_{\mathbf c}^{(\emptyset)}(\gamma)
+ \end{equation}
+ and
+ \begin{equation}
+ \overline{\mathfrak P}_c^{(\Upsilon,\emptyset)}(\Lambda)
+ :=
+ \mathfrak P_c^{(\Upsilon)}(\Lambda)
+ \cup
+ \mathfrak P_c^{(\emptyset)}(\Lambda)
+ \end{equation}
+ in terms of which
+ \begin{equation}
+ \begin{largearray}
+ \log\left(
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf c)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf c}(\Lambda)}
+ \right)
+ -
+ \log\left(
+ \frac{Z^{(\emptyset)}(\Lambda|\mathbf c)}{\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf c}(\Lambda)}
+ \right)
+ \\[0.5cm]\hfill
+ =
+ \int_0^1dt
+ \sum_{\gamma\in\overline{\mathfrak P}_c^{(\Upsilon,\emptyset)}(\Lambda)}
+ \sum_{\underline\gamma\subset\overline{\mathfrak P}_c^{(\Upsilon,\emptyset)}(\Lambda)}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \left(\zeta^{(\Upsilon)}_{\mathbf c}(\gamma)-\zeta^{(\emptyset)}_{\mathbf c}(\gamma)\right)
+ \prod_{\gamma'\in\underline\gamma}\bar\zeta^{(\Upsilon,\emptyset)}_{\mathbf c}(\gamma'|t)
+ \end{largearray}
+ \label{logZ_cluster}
+ \end{equation}
+ where we recall that the $*$ over the sum over $\underline\gamma$ means that $\underline\gamma=\emptyset$ is one of the terms to be summed over. Now, by~\-(\ref{ce_remainder}), we bound
+ \begin{equation}
+ \left|
+ \log\left(
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf c)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf c}(\Lambda)}
+ \right)
+ -
+ \log\left(
+ \frac{Z^{(\emptyset)}(\Lambda|\mathbf c)}{\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf c}(\Lambda)}
+ \right)
+ \right|
+ \leqslant
+ \sum_{\gamma\in\overline{\mathfrak P}_c^{(\emptyset)}(\Lambda)}
+ \left|\zeta^{(\Upsilon)}_{\mathbf c}(\gamma)-\zeta^{(\emptyset)}_{\mathbf c}(\gamma)\right|
+ e^{a(\gamma)}
+ .
+ \end{equation}
+ Furthermore, $\zeta_{\mathbf c}^{(\Upsilon)}(\gamma)-\zeta_{\mathbf c}^{(\emptyset)}(\gamma)$ differs from 0 only if $\gamma$ interacts with at least one source in $\Upsilon$ (see definition~\-\ref{def:polymer_source_interaction}). Therefore, by lemma~\-\ref{lemma:polymer_source_interaction},
+ \begin{equation}
+ \left|
+ \log\left(
+ \frac{Z^{(\Upsilon)}(\Lambda|\mathbf c)}{\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf c}(\Lambda)}
+ \right)
+ -
+ \log\left(
+ \frac{Z^{(\emptyset)}(\Lambda|\mathbf c)}{\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf c}(\Lambda)}
+ \right)
+ \right|
+ =O(1)
+ .
+ \label{bound_ratio_sources}
+ \end{equation}
+ The same bound holds for $\log(\widetilde Z^{(\Upsilon)}(\Lambda'|\mathbf \mathbf q)/\widetilde{\mathfrak Z}^{(\Upsilon)}_{\mathbf q}(\Lambda'))$. We are thus left with estimating $K_{\mathbf q,\mathbf c}^{(\emptyset)}(\Lambda)$.
+ \bigskip
+
+ \point{\bf Bulk terms.} Some of the terms in the cluster expansion~\-(\ref{ce}) are independent of the boundary, and cannot contribute to $K^{(\emptyset)}_{\mathbf q,\mathbf c}(\Lambda)$ since it only involves boundary terms (since the two ratios in~\-(\ref{K}) only differ through their boundary conditions). Let us now make this idea more precise.
+ \bigskip
+
+ \subpoint Among the polymers, some are connected to the boundary (see definition~\-\ref{def:external_polymer}), which we call {\it boundary polymers}, while the others are not, and are called {\it bulk polymers}. Boundary polymers depend on the boundary, since they are connected to it, so we partition
+ \begin{equation}
+ \mathfrak P^{(\emptyset)}_c(\Lambda)=\mathfrak P_c^{(\partial)}(\Lambda)\cup\mathfrak P_c^{(\circ)}(\Lambda)
+ ,\quad
+ \widetilde{\mathfrak P}^{(\emptyset)}_q(\Lambda)=\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda)\cup\mathfrak P_q^{(\circ)}(\Lambda)
+ \end{equation}
+ in which $\mathfrak P_c^{(\partial)}(\Lambda)$ and $\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda)$ are sets of boundary polymers, and rewrite~\-(\ref{ce}) as
+ \begin{equation}
+ \log\left(
+ \frac{Z^{(\emptyset)}(\Lambda|\mathbf c)}{\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf c}(\Lambda)}
+ \right)=
+ \mathfrak B_{\mathbf c}(\mathfrak P^{(\circ)}_c(\Lambda))
+ +\overline{\mathfrak B}_{\mathbf c}(\mathfrak P^{(\partial)}_c(\Lambda),\mathfrak P^{(\circ)}_c(\Lambda))
+ \end{equation}
+ and
+ \begin{equation}
+ \log\left(
+ \frac{\widetilde Z^{(\emptyset)}(\Lambda|\mathbf q)}{\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf q}(\Lambda)}
+ \right)=
+ \mathfrak B_{\mathbf q}(\mathfrak P^{(\circ)}_q(\Lambda))
+ +\overline{\mathfrak B}_{\mathbf q}(\widetilde{\mathfrak P}^{(\partial)}_q(\Lambda),\mathfrak P^{(\circ)}_q(\Lambda))
+ \end{equation}
+ with
+ \begin{equation}
+ \mathfrak B_{\mathbf q}(\mathfrak P):=
+ \sum_{\underline\gamma\subset\mathfrak P}
+ \Phi^T(\underline\gamma)
+ \prod_{\gamma\in\underline\gamma}\zeta^{(\emptyset)}_{\mathbf q}(\gamma).
+ \label{frakB}
+ \end{equation}
+ and
+ \begin{equation}
+ \overline{\mathfrak B}_{\mathbf q}(\mathfrak P,\mathfrak Q):=
+ \sum_{n=1}^\infty\frac1{n!}
+ \sum_{\gamma\in\mathfrak P}
+ \sum_{\underline\gamma\subset\mathfrak P\cup\mathfrak Q}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \zeta^{(\emptyset)}_{\mathbf q}(\gamma)
+ \prod_{\gamma'\in\underline\gamma}\zeta^{(\emptyset)}_{\mathbf q}(\gamma').
+ \label{frakB_overline}
+ \end{equation}
+ \bigskip
+
+ \subpoint Bulk polymers still depend on the boundary, because it restricts the polymers to be inside $\Lambda$. To remove this dependence, we introduce the set of {\it infinite-volume} polymers: $\mathfrak P_q^{(\circ)}(\infty)$ is the set of finite polymers, defined as in definition~\-\ref{def:polymer}, except that, instead of requiring that the polymers be inside $\Lambda$, they are merely required to be finite. In addition, given a vertex $\mathbf v\in\mathbb Z^2$, we define $\mathfrak P_q^{(\circ)}(\infty|\mathbf v)$ as the set of polymers whose upper-leftmost vertex is $\mathbf v$. We then rewrite~\-(\ref{ce}) as the sum over clusters of infinite-volume polymers minus the sum over clusters of infinite-volume polymers which are not contained within $\Lambda$:
+ \begin{equation}
+ \mathfrak B_{\mathbf q}(\mathfrak P_q^{(\circ)}(\Lambda))=
+ \mathfrak F_q(|\Lambda|)
+ -\mathfrak G_q(\Lambda)
+ ,\quad
+ \mathfrak B_{\mathbf c}(\mathfrak P_c^{(\circ)}(\Lambda))=
+ \mathfrak F_c(|\Lambda|)
+ -\mathfrak G_c(\Lambda)
+ \end{equation}
+ with
+ \begin{equation}
+ \mathfrak F_q(|\Lambda|):=
+ \sum_{\mathbf v\in \Lambda}
+ \sum_{\gamma\in\mathfrak P_q^{(\circ)}(\infty|\mathbf v)}
+ \zeta^{(\emptyset)}_{\mathbf q}(\gamma)
+ \sum_{\underline\gamma\subset\mathfrak P_q^{(\circ)}(\infty)}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \prod_{\gamma'\in\underline\gamma}\zeta^{(\emptyset)}_{\mathbf q}(\gamma')
+ \end{equation}
+ which, by translation invariance, only depends on $\Lambda$ through $|\Lambda|$, and
+ \begin{equation}
+ \mathfrak G_q(\Lambda):=
+ \sum_{\mathbf v\in\Lambda}
+ \sum_{\gamma\in\mathfrak P_q^{(\circ)}(\infty|\mathbf v)}
+ \zeta^{(\emptyset)}_{\mathbf q}(\gamma)
+ \sum_{\displaystyle\mathop{\underline\gamma\subset\mathfrak P_q^{(\circ)}(\infty)}_{\gamma\cup\underline\gamma\not\subset\mathfrak P^{(\circ)}_q(\Lambda)}}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \prod_{\gamma'\in\underline\gamma}\zeta^{(\emptyset)}_{\mathbf q}(\gamma').
+ \end{equation}
+ Thus,
+ \begin{equation}
+ \begin{largearray}
+ \log K^{(\emptyset)}_{\mathbf q,\mathbf c}(\Lambda)
+ \\[0.5cm]\hfill
+ =
+ \left(
+ \overline{\mathfrak B}_{\mathbf c}(\mathfrak P^{(\partial)}_c(\Lambda),\mathfrak P_c^{(\circ)}(\Lambda))
+ -
+ \overline{\mathfrak B}_{\mathbf q}(\widetilde{\mathfrak P}^{(\partial)}_q(\Lambda),\mathfrak P_q^{(\circ)}(\Lambda))
+ \right)
+ +\left(
+ \mathfrak F_c(|\Lambda|)
+ -
+ \mathfrak F_q(|\Lambda|)
+ \right)
+ +\left(
+ \mathfrak G_c(\Lambda)
+ -
+ \mathfrak G_q(\Lambda)
+ \right).
+ \end{largearray}
+ \label{K_BFG}
+ \end{equation}
+ \bigskip
+
+ \subpoint The cancellation of the bulk terms follows from the observation that
+ \begin{equation}
+ \mathfrak F_q(|\Lambda|)=\mathfrak F_c(|\Lambda|)
+ \label{symmetry_frakF}
+ \end{equation}
+ which is obvious if $c=q$, and follows from the invariance of the system under $\frac\pi2$ rotations if $c\neq q$.
+ \bigskip
+
+ \point{\bf Boundary terms.} We now bound $\overline{\mathfrak B}(\mathfrak P^{(\partial)},\mathfrak P^{(\circ)})$ and $\mathfrak G$.
+ \bigskip
+
+ \subpoint We isolate the dominant term in~\-(\ref{frakB_overline}):
+ \begin{equation}
+ \overline{\mathfrak B}_{\mathbf q}(\mathfrak P,\mathfrak Q)=
+ \sum_{\gamma\in\mathfrak P}
+ \zeta^{(\emptyset)}_{\mathbf q}(\gamma)
+ +
+ \sum_{\gamma\in\mathfrak P}
+ \zeta^{(\emptyset)}_{\mathbf q}(\gamma)
+ \sum_{\underline\gamma\subset\mathfrak P\cup\mathfrak Q}
+ \Phi^T(\gamma\cup\underline\gamma)
+ \prod_{\gamma'\in\underline\gamma}\left(e^{-d(\gamma')+d(\gamma')}\zeta^{(\emptyset)}_{\mathbf q}(\gamma')\right)
+ \end{equation}
+ in which we set $d(\gamma):=\beta\Xi^{(\Upsilon)}(\gamma)$ as in lemma~\-\ref{lemma:bound_entropy}.
+ \bigskip
+
+ \subsubpoint Let us consider $\overline{\mathfrak B}_{\mathbf q}(\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda),\mathfrak P_q^{(\circ)}(\Lambda))$. By lemma~\-\ref{lemma:bound_entropy} and, more precisely, (\ref{bound_entropy1_nosources}), for any $\theta\in(\frac12\mathfrak t,1]$,
+ \begin{equation}
+ \sum_{\gamma\in\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda)}e^{-\theta\Xi^{(\Upsilon)}(\gamma)}
+ \leqslant
+ \sum_{e\in\Lambda}
+ \sum_{\displaystyle\mathop{\scriptstyle\gamma\in\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda)}_{\xi(\gamma)\ni e}}
+ F(\mathfrak d_q(e,\partial_q\Lambda))
+ e^{-\theta\Xi^{(\Upsilon)}(\gamma)}
+ \leqslant
+ \cst c{cst:kappa}\kappa^{-1}e^{-3\theta\bar J}|\partial_q\Lambda|
+ \label{bound_1part_q}
+ \end{equation}
+ for some constant $\cst c{cst:kappa}>0$, where $F$ was defined in~\-(\ref{F}). In addition using the fact that, by~\-(\ref{Xi}), for $\gamma\in\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda)$,
+ \begin{equation}
+ d(\gamma)\equiv\beta\Xi^{(\Upsilon)}(\gamma)\geqslant 3\beta\bar J
+ \end{equation}
+ so that, by~\-(\ref{ce_remainder}),
+ \begin{equation}
+ \left|
+ \sum_{\underline\gamma\subset\widetilde{\mathfrak P}_q^{(\emptyset)}(\Lambda)}
+ \Phi^T(\gamma\cup\underline\gamma)
+ \prod_{\gamma'\in\underline\gamma}\left(e^{-d(\gamma')+d(\gamma')}\zeta^{(\emptyset)}_{\mathbf q}(\gamma')\right)
+ \right|
+ \leqslant e^{a(\gamma)}e^{-3\beta\bar J}
+ \end{equation}
+ in which we recall that $a(\gamma)=\alpha\Xi^{(\Upsilon)}(\gamma)$, and, by~\-(\ref{bound_1part_q}),
+ \begin{equation}
+ \sum_{\gamma\in\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda)}e^{a(\gamma)}|\zeta^{(\emptyset)}_{\mathbf q}(\gamma)|
+ \leqslant \cst c{cst:kappa}\kappa^{-1}e^{-3(1-\alpha)\bar J}|\partial_q\Lambda|.
+ \end{equation}
+ Thus
+ \begin{equation}
+ |\overline{\mathfrak B}_q(\widetilde{\mathfrak P}_q^{(\partial)}(\Lambda),\mathfrak P_q^{(\circ)}(\Lambda))|\leqslant
+ \cst c{cst:kappa}\kappa^{-1}e^{-3\bar J}|\partial_q\Lambda|\left(1+e^{-3(\beta-\alpha)\bar J}\right).
+ \label{bound_frakB_q}
+ \end{equation}
+ \bigskip
+
+ \subsubpoint We now turn to $\overline{\mathfrak B}_{\mathbf c}(\mathfrak P_c^{(\partial)}(\Lambda)\mathfrak P_c^{(\circ)}(\Lambda))$. By lemma~\-\ref{lemma:bound_entropy},
+ \begin{equation}
+ \sum_{\gamma\in\mathfrak P_c^{(\partial)}(\Lambda)}e^{-\theta\Xi^{(\Upsilon)}(\gamma)}
+ =
+ \sum_{\gamma\in\widetilde{\mathfrak P}_c^{(\partial)}(\Lambda)}e^{-\theta\Xi^{(\Upsilon)}(\gamma)}
+ +
+ \sum_{\gamma\in\mathfrak P_c^{(\partial)}(\Lambda)\setminus\widetilde{\mathfrak P}_c^{(\partial)}(\Lambda)}e^{-\theta\Xi^{(\Upsilon)}(\gamma)}
+ \leqslant
+ \cst c{cst:kappa}\kappa^{-1}e^{-3\theta\bar J}|\partial_c\Lambda|
+ +
+ e^{-\theta\bar\kappa\ell_0}|\partial_c\Lambda|
+ \label{bound_frakB_c_clusters}
+ \end{equation}
+ so, by a similar reasoning as in the previous paragraph,
+ \begin{equation}
+ |\overline{\mathfrak B}_c(\mathfrak P_c^{(\partial)}(\Lambda),\mathfrak P_c^{(\circ)}(\Lambda))|\leqslant
+ |\partial_c\Lambda|
+ \left(
+ \left(e^{-\bar\kappa\ell_0}+\cst c{cst:kappa}\kappa^{-1}e^{-3\bar J}\right)
+ +
+ e^{-\beta\bar\kappa\ell_0}\left(e^{-\bar\kappa\ell_0(1-\alpha)}+\cst c{cst:kappa}\kappa^{-1}e^{-3\bar J(1-\alpha)}\right)
+ \right).
+ \label{bound_frakB_c}
+ \end{equation}
+ \bigskip
+
+ \subpoint We now turn to $\mathfrak G$. We fix a vertex $\mathbf v\in\Lambda$. If $\mathfrak d_q(\mathbf v,\partial_q\Lambda)<\ell_0$, then, proceeding in the same way as for $\mathfrak B$, we bound
+ \begin{equation}
+ \sum_{\gamma\in\mathfrak P_q^{(\circ)}(\infty|\mathbf v)}
+ |\zeta^{(\emptyset)}_{\mathbf q}(\gamma)|
+ \sum_{\displaystyle\mathop{\scriptstyle\underline\gamma\subset\mathfrak P_q^{(\circ)}(\infty)}_{\gamma\cup\underline\gamma\not\subset\mathfrak P^{(\circ)}_q(\Lambda)}}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \prod_{\gamma'\in\underline\gamma}|\zeta^{(\emptyset)}_{\mathbf q}(\gamma')|
+ \leqslant
+ e^{-3\bar J}
+ \left(
+ 1+e^{-3(1-\alpha)\bar J}
+ \right).
+ \end{equation}
+ If $\mathfrak d_q(\mathbf v,\partial_q\Lambda)\geqslant\ell_0$, then the condition $\gamma\cup\underline\gamma\not\subset(\mathfrak P^{(\circ)}_q(\Lambda)$ implies that
+ \begin{equation}
+ \sum_{\gamma'\in\gamma\cup\underline\gamma}(\mathfrak l(\gamma')+\mathfrak s(\gamma'))\geqslant \mathfrak d_q(\mathbf v,\partial_q\Lambda)-\ell_0.
+ \end{equation}
+ In addition, $\mathfrak l(\gamma)\geqslant 6$. Therefore
+ \begin{equation}
+ \sum_{\gamma'\in\underline\gamma}\Xi^{(\Upsilon)}(\gamma)
+ \geqslant
+ 3\bar J|\underline\gamma|
+ +
+ \bar\kappa(\mathfrak d_q(\mathbf v,\partial_q\Lambda)-\ell_0-4)
+ .
+ \end{equation}
+ Therefore, proceeding as for $\mathfrak B$,
+ \begin{equation}
+ \begin{largearray}
+ \sum_{\gamma\in\mathfrak P_q^{(\circ)}(\infty|\mathbf v)}
+ |\zeta^{(\emptyset)}_{\mathbf q}(\gamma)|
+ \sum_{\displaystyle\mathop{\scriptstyle\underline\gamma\subset\mathfrak P_q^{(\circ)}(\infty)}_{\gamma\cup\underline\gamma\not\subset\mathfrak P^{(\circ)}_q(\Lambda)}}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \prod_{\gamma'\in\underline\gamma}|\zeta^{(\emptyset)}_{\mathbf q}(\gamma')|
+ \\[-0.5cm]\hfill
+ \leqslant
+ e^{-\beta\bar\kappa(\mathfrak d_q(\mathbf v,\partial_q\Lambda)-\ell_0)}
+ e^{-3\bar J}
+ \left(
+ 1+e^{-3(1-\alpha)\bar J}
+ \right).
+ \end{largearray}
+ \label{bound_frakG_clusters}
+ \end{equation}
+ Therefore,
+ \begin{equation}
+ |\mathfrak G_q(\Lambda)|\leqslant\cst c{cst:kappa2}\ell_0e^{-3\bar J}|\partial_q\Lambda|\left(1+e^{-3(1-\alpha)\bar J}\right)
+ \label{bound_frakG}
+ \end{equation}
+ for some constant $\cst c{cst:kappa2}>0$.
+ \bigskip
+
+ \point We conclude the proof by injecting~\-(\ref{symmetry_frakF}), (\ref{bound_frakB_q}), (\ref{bound_frakB_c}) and~\-(\ref{bound_frakG}) into~\-(\ref{K_BFG}), and using the fact that $\kappa^{-1}<\ell_0$ (\ref{ell0}).
+\qed
+
+\section{Nematic phase}\label{sec:nematic}
+\indent We are now ready to prove theorem~\-\ref{theo:nematic}. Let $\Lambda_L$ by a square box of side-length $L$.
+\bigskip
+
+\point Given an edge $e\in\mathcal E(\Lambda_L)$, we have
+\begin{equation}
+ \left<\mathds 1_e\right>_{\Lambda_L,\mathbf q}=
+ \frac{\widetilde{\mathfrak Z}_{\mathbf q}^{(\{e\})}(\Lambda_L)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\emptyset)}(\Lambda_L)}
+ \exp\left(
+ \log\left(\frac{Z^{(\{e\})}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\{e\})}(\Lambda_L)}\right)
+ -
+ \log\left(\frac{Z^{(\emptyset)}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\emptyset)}(\Lambda_L)}\right)
+ \right)
+\end{equation}
+\bigskip
+
+\subpoint Let us first bound the exponent in the thermodynamic limit. As in lemma~\-\ref{lemma:boundK}, we define
+\begin{equation}
+ \bar\zeta_{\mathbf c}^{(\{e\},\emptyset)}(\gamma|t):=
+ t\zeta_{\mathbf c}^{(\{e\})}(\gamma_0)
+ +
+ (1-t)\zeta_{\mathbf c}^{(\emptyset)}(\gamma_0)
+\end{equation}
+and
+\begin{equation}
+ \overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\Lambda_L)
+ :=
+ \mathfrak P_q^{(\{e\})}(\Lambda_L)
+ \cup
+ \mathfrak P_q^{(\emptyset)}(\Lambda_L)
+\end{equation}
+and, using the cluster expansion~\-(\ref{ce}), we write
+\begin{equation}
+ \begin{largearray}
+ \log\left(
+ \frac{Z^{(\{e\})}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}^{(\{e\})}_{\mathbf q}(\Lambda_L)}
+ \right)
+ -
+ \log\left(
+ \frac{Z^{(\emptyset)}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf q}(\Lambda_L)}
+ \right)
+ \\[1.0cm]\hfill
+ =
+ \int_0^1dt
+ \sum_{\gamma\in\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\Lambda_L)}
+ \sum_{\underline\gamma\subset\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\Lambda_L)}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \left(\zeta^{(\{e\})}_{\mathbf q}(\gamma)-\zeta^{(\emptyset)}_{\mathbf q}(\gamma)\right)
+ \prod_{\gamma'\in\underline\gamma}\bar\zeta^{(\{e\},\emptyset)}_{\mathbf q}(\gamma'|t)
+ .
+ \end{largearray}
+ \label{1v_cluster}
+\end{equation}
+We split the sum into a {\it bulk} and a {\it boundary} contribution, similarly to lemma~\-\ref{lemma:boundK}. We define $\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\infty)$ as the set of polymers $\gamma$ for which $\exists L$ such that $\gamma$ is in $\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\Lambda_L)$ while not being connected to the boundary, in the sense of definition~\-\ref{def:polymer}. We then split
+\begin{equation}
+ \log\left(
+ \frac{Z^{(\{e\})}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}^{(\{e\})}_{\mathbf q}(\Lambda_L)}
+ \right)
+ -
+ \log\left(
+ \frac{Z^{(\emptyset)}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf q}(\Lambda_L)}
+ \right)
+ =
+ I^{(e)}-R_1^{(e)}(\Lambda_L)+R_2^{(e)}(\Lambda_L)
+\end{equation}
+where
+\begin{equation}
+ I^{(e)}
+ :=
+ \int_0^1dt
+ \sum_{\gamma\in\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\infty)}
+ \sum_{\underline\gamma\subset\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\infty)}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \left(\zeta^{(\{e\})}_{\mathbf q}(\gamma)-\zeta^{(\emptyset)}_{\mathbf q}(\gamma)\right)
+ \prod_{\gamma'\in\underline\gamma}\bar\zeta^{(\{e\},\emptyset)}_{\mathbf q}(\gamma'|t)
+ \label{I_cluster}
+\end{equation}
+\begin{equation}
+ R_1^{(e)}(\Lambda_L)
+ :=
+ \int_0^1dt
+ \sum_{\gamma\in\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\infty)}
+ \sum_{\displaystyle\mathop{\scriptstyle\underline\gamma\subset\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\infty)}_{\gamma\cup\underline\gamma\not\subset\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\Lambda_L)}}^*
+ \Phi^T(\gamma\cup\underline\gamma)
+ \left(\zeta^{(\{e\})}_{\mathbf q}(\gamma)-\zeta^{(\emptyset)}_{\mathbf q}(\gamma)\right)
+ \prod_{\gamma'\in\underline\gamma}\bar\zeta^{(\{e\},\emptyset)}_{\mathbf q}(\gamma'|t)
+ \label{R_cluster}
+\end{equation}
+and
+\begin{equation}
+ R_2^{(e)}(\Lambda_L)
+ :=
+ \int_0^1dt
+ \sum_{\gamma\in\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\Lambda_L)}
+ \sum_{\displaystyle\mathop{\scriptstyle\underline\gamma\subset\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\Lambda_L)}_{\gamma\cup\underline\gamma\not\subset\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\infty)}}
+ \Phi^T(\gamma\cup\underline\gamma)
+ \left(\zeta^{(\{e\})}_{\mathbf q}(\gamma)-\zeta^{(\emptyset)}_{\mathbf q}(\gamma)\right)
+ \prod_{\gamma'\in\underline\gamma}\bar\zeta^{(\{e\},\emptyset)}_{\mathbf q}(\gamma'|t)
+ .
+ \label{R2_cluster}
+\end{equation}
+By~\-(\ref{ce_remainder}),
+\begin{equation}
+ |I^{(e)}|
+ \leqslant
+ \sum_{\gamma\in\overline{\mathfrak P}_q^{(\{e\},\emptyset)}(\infty)}
+ \left|\zeta^{(\{e\})}_{\mathbf q}(\gamma)-\zeta^{(\emptyset)}_{\mathbf q}(\gamma)\right|
+ e^{a(\gamma)}
+ .
+\end{equation}
+Furthermore, $\zeta_{\mathbf q}^{(\{e\})}(\gamma)-\zeta_{\mathbf q}^{(\emptyset)}(\gamma)$ differs from 0 only if $\gamma$ interacts with $e$ (see definition~\-\ref{def:polymer_source_interaction}), so, by lemma~\-\ref{lemma:polymer_source_interaction},
+\begin{equation}
+ |I^{(e)}|
+ \leqslant
+ 2\cst C{cst:polymer_source}e^{-(1-\alpha)\bar J}
+ .
+ \label{bound_I}
+\end{equation}
+In addition, the clusters $\gamma_0,\cdots,\gamma_n$ that contribute to $R_1$ or $R_2$ interact with $e$ as well as with the boundary of $\Lambda_L$. Therefore, for such clusters,
+\begin{equation}
+ \sum_{i=0}^n\Xi(\gamma_i)\geqslant\bar\kappa\left(\mathrm{dist}_1(e,\partial\Lambda)-2\ell_0\right)
+\end{equation}
+which goes to $\infty$ as $L\to\infty$. Therefore,
+\begin{equation}
+ \prod_{j=0}^n|\zeta_{\mathbf q}^{(\Upsilon)}(\gamma_j)|
+ \leqslant
+ e^{-\beta\bar\kappa(\mathrm{dist}_1(e,\partial\Lambda)-2\ell_0)}
+ \prod_{j=0}^n
+ e^{-(1-\beta)\Xi^{(\Upsilon)}(\gamma_j)}
+\end{equation}
+for $\beta\in(0,\frac12\mathfrak t-\alpha)$. We then use lemma~\-\ref{lemma:bz} and~\-\ref{lemma:polymer_source_interaction} to bound
+\begin{equation}
+ |R_i^{(e)}(\Lambda_L)|=
+ O\left(e^{-\beta\bar\kappa(\mathrm{dist}_1(e,\partial\Lambda)-2\ell_0)}\right)
+\end{equation}
+so
+\begin{equation}
+ |R_1^{(e)}(\Lambda_L)|+|R_2^{(e)}(\Lambda_L)|\mathop{\longrightarrow}_{L\to\infty}0
+ .
+\end{equation}
+Therefore,
+\begin{equation}
+ \log\left(\frac{Z^{(\{e\})}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\{e\})}(\Lambda_L)}\right)
+ -
+ \log\left(\frac{Z^{(\emptyset)}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\emptyset)}(\Lambda_L)}\right)
+ \mathop{\longrightarrow}_{L\to\infty}
+ I^{(e)}
+\end{equation}
+which is independent of the position of $e$, and is bounded as per~\-(\ref{bound_I}).
+\bigskip
+
+\subpoint We turn, now, to the ratio of $\widetilde{\mathfrak Z}$'s, which can be computed explicitly from~\-(\ref{tildefrakZ}) and~\-(\ref{idfrakZ}): if $e$ is vertical and $L$ is large enough, then
+\begin{equation}
+ \frac{\widetilde{\mathfrak Z}_{\mathbf v}^{(\{e\})}(\Lambda_L)}{\widetilde{\mathfrak Z}_{\mathbf v}^{(\emptyset)}(\Lambda_L)}
+ =
+ z\nu_+^2(\omega_1)b_+\lambda_+^{-2}
+ =
+ \frac12(1+O(\epsilon))
+\end{equation}
+in which we used~\-(\ref{bound_lambda}) through~\-(\ref{bound_nu1}). If $e$ is horizontal, then
+\begin{equation}
+ \frac{\widetilde{\mathfrak Z}_{\mathbf v}^{(\{e\})}(\Lambda_L)}{\widetilde{\mathfrak Z}_{\mathbf v}^{(\emptyset)}(\Lambda_L)}
+ =
+ z\nu_+^4(\omega_0)b_+^2\lambda_+^{-2}
+ =
+ O(e^{-3J})
+ .
+\end{equation}
+This proves that $\left<\mathds 1_e\right>_{\mathbf v}$ is independent of the position of $e$, as well as~\-(\ref{bound_1v}) and~\-(\ref{bound_1h}).
+\bigskip
+
+\point We now consider two edges $e,e'\in\mathcal E(\Lambda_L)$ which are at a distance of at least $\ell_0$. We have
+\begin{equation}
+ \left<\mathds 1_e\mathds 1_{e'}\right>_{\Lambda_L,\mathbf q}
+ -
+ \left<\mathds 1_e\right>_{\Lambda_L,\mathbf q}
+ \left<\mathds 1_{e'}\right>_{\Lambda_L,\mathbf q}
+ =
+ \left<\mathds 1_e\right>_{\Lambda_L,\mathbf q}
+ \left<\mathds 1_{e'}\right>_{\Lambda_L,\mathbf q}
+ \left(
+ \frac{\widetilde{\mathfrak Z}^{(\{e,e'\})}_{\mathbf q}(\Lambda_L)\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf q}(\Lambda_L)}{\widetilde{\mathfrak Z}^{(\{e\})}_{\mathbf q}(\Lambda_L)\widetilde{\mathfrak Z}^{(\{e'\})}_{\mathbf q}(\Lambda_L)}
+ e^{\mathbb K^{(e,e')}_{\mathbf q}(\Lambda_L)}
+ -1
+ \right)
+ \label{1vv_cluster}
+\end{equation}
+with
+\begin{equation}
+ \begin{largearray}
+ \mathbb K_{\mathbf q}^{(e,e')}(\Lambda_L)
+ :=
+ \log\left(\frac{Z^{(\{e,e'\})}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\{e,e'\})}(\Lambda_L)}\right)
+ +
+ \log\left(\frac{Z^{(\emptyset)}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\emptyset)}(\Lambda_L)}\right)
+ \\[0.5cm]\hfill
+ -
+ \log\left(\frac{Z^{(\{e\})}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\{e\})}(\Lambda_L)}\right)
+ -
+ \log\left(\frac{Z^{(\{e'\})}(\Lambda_L|\mathbf q)}{\widetilde{\mathfrak Z}_{\mathbf q}^{(\{e'\})}(\Lambda_L)}\right)
+ .
+ \end{largearray}
+ \label{bbK_cluster}
+\end{equation}
+First of all, by~\-(\ref{tildefrakZ}) and~\-(\ref{idfrakZ}),
+\begin{equation}
+ \frac{\widetilde{\mathfrak Z}^{(\{e,e'\})}_{\mathbf q}(\Lambda_L)\widetilde{\mathfrak Z}^{(\emptyset)}_{\mathbf q}(\Lambda_L)}{\widetilde{\mathfrak Z}^{(\{e\})}_{\mathbf q}(\Lambda_L)\widetilde{\mathfrak Z}^{(\{e'\})}_{\mathbf q}(\Lambda_L)}=1
+ .
+\end{equation}
+We then write $\mathbb K_{\mathbf q}^{(e,e')}(\Lambda_L)$ using the cluster expansion~\-(\ref{ce}), and note that the only clusters $\gamma_0,\cdots,\gamma_n$ that contribute are those that interact with {\it both} $e$ and $e'$. For such clusters, denoting the vertical and horizontal distances by $\mathrm{dist}_{\mathrm v}$ and $\mathrm{dist}_{\mathrm h}$ (these are the induced by the semi-norms $\|(x,y)\|_{\mathrm v}:=|y|$ and $\|(x,y)\|_{\mathrm h}:=|x|$),
+\begin{equation}
+ \sum_{i=0}^n\Xi(\gamma_i)
+ \geqslant
+ \bar\kappa\left(\mathrm{dist}_{\mathrm v}(e,e')-2\ell_0\right)
+ +
+ \bar J\mathrm{dist}_{\mathrm h}(e,e')
+\end{equation}
+so, by once again estimating
+\begin{equation}
+ \prod_{j=0}^n|\zeta_{\mathbf q}^{(\Upsilon)}(\gamma_j)|
+ \leqslant
+ e^{-\beta(\bar\kappa(\mathrm{dist}_1(e,e')-2\ell_0)+\bar J\mathrm{dist}_{\mathrm h}(e,e'))}
+ \prod_{j=0}^n
+ e^{-(1-\beta)\Xi^{(\Upsilon)}(\gamma_j)}
+\end{equation}
+for $\beta\in(0,\frac12\mathfrak t-\alpha)$, and using lemma~\-\ref{lemma:bz} and~\-\ref{lemma:polymer_source_interaction} to bound
+\begin{equation}
+ |\mathbb K_{\mathbf q}^{(e,e')}(\Lambda_L)|
+ =
+ O\left(e^{-\beta(\bar\kappa(\mathrm{dist}_{\mathrm v}(e,e')-2\ell_0)+\bar J\mathrm{dist}_{\mathrm h}(e,e'))}\right)
+\end{equation}
+from which~\-(\ref{bound_1vv}) and~\-(\ref{bound_1vh}) follow.
+\qed
+
+\vfill
+\eject
+
+\begin{thebibliography}{WWW99}
+\small
+\bibitem[AH80]{AH80}D.B. Abraham, O.J. Heilmann - {\it Interacting dimers on the simple cubic lattice as a model for liquid crystals}, Journal of Physics A: Mathematical and General, volume~\-13, number~\-3, pages~\-1051-1062, 1980,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1088/0305-4470/13/3/038}{10.1088/0305-4470/13/3/038}}.\par\medskip
+
+\bibitem[ACM14]{ACM14}D. Alberici, P. Contucci, E. Mingione - {\it A mean-field monomer-dimer model with attractive interaction: Exact solution and rigorous results}, Journal of Mathematical Physics, volume~\-55, page~\-063301, 2014,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1063/1.4881725}{10.1063/1.4881725}}, arxiv:{\tt\color{blue}\href{http://arxiv.org/abs/1311.6551}{1311.6551}}.\par\medskip
+
+\bibitem[Al16]{Al16}D. Alberici - {\it A Cluster Expansion Approach to the Heilmann-Lieb Liquid Crystal Model}, Journal of Statistical Physics, volume~\-162, issue~\-3, pages~\-761-791, 2016,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/s10955-015-1421-8}{10.1007/s10955-015-1421-8}}, arxiv:{\tt\color{blue}\href{http://arxiv.org/abs/1506.02255}{1506.02255}}.\par\medskip
+
+\bibitem[AZ82]{AZ82}N. Angelescu, V.A. Zagrebnov - {\it A lattice model of liquid crystals with matrix order parameter}, Journal of Physics A: Mathematical and General, volume~\-15, issue~\-11, pages L639-L643, 1982,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1088/0305-4470/15/11/012}{10.1088/0305-4470/15/11/012}}.\par\medskip
+
+\bibitem[BZ00]{BZ00}A. Bovier, M. Zahradn\'\i k - {\it A Simple Inductive Approach to the Problem of Convergence of Cluster Expansions of Polymer Models}, Journal of Statistical Physics, volume~\-100, issue~\-3-4, pages~\-765-778, 2000,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1023/A:1018631710626}{10.1023/A:1018631710626}}.\par\medskip
+
+\bibitem[BKL84]{BKL84}J. Bricmont, K. Kuroda, J.L. Lebowitz - {\it The struture of Gibbs states and phase coexistence for non-symmetric continuum Widom-Rowlinson models}, Zeitschrift f\"ur Wahrscheinlichkeitstheorie und Verwandte Gebiete, volume~\-67, issue~\-2, pages~\-121-138, 1984,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/BF00535264}{10.1007/BF00535264}}.\par\medskip
+
+\bibitem[BKL85]{BKL85}J. Bricmont, K. Kuroda, J.L. Lebowitz - {\it First order phase transitions in lattice and continuous systems: extension of Pirogov-Sinai theory}, Communications in Mathematical Physics, volume~\-101, issue~\-4, pages~\-501-538, 1985,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/BF01210743}{10.1007/BF01210743}}.\par\medskip
+
+\bibitem[DG13]{DG13}M. Disertori, A. Giuliani - {\it The nematic phase of a system of long hard rods}, Communications in Mathematical Physics, volume~\-323, pages~\-143-175, 2013,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/s00220-013-1767-1}{10.1007/s00220-013-1767-1}}, arxiv:{\tt\color{blue}\href{http://arxiv.org/abs/1112.5564}{1112.5564}}.\par\medskip
+
+\bibitem[GBG04]{GBG04}G. Gallavotti, F. Bonetto, G. Gentile - {\it Aspects of Ergodic, Qualitative and Statistical Theory of Motion}, Springer, 2004.\par\medskip
+
+\bibitem[GM01]{GM01}G. Gentile, V. Mastropietro - {\it Renormalization group for one-dimensional fermions - a review on mathematical results}, Physics Reports, volume~\-352, pages~\-273-437, 2001,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1016/S0370-1573(01)00041-2}{10.1016/S0370-1573(01)00041-2}}.\par\medskip
+
+\bibitem[HL72]{HL72}O.J. Heilmann, E.H. Lieb - {\it Theory of monomer-dimer systems}, Communications in Mathematical Physics, volume~\-25, issue~\-3, pages~\-190-232, 1972,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/BF01877590}{10.1007/BF01877590}}.\par\medskip
+
+\bibitem[HL79]{HL79}O.J. Heilmann, E.H. Lieb - {\it Lattice models for liquid crystals}, Journal of Statistical Physics, volume~\-20, issue~\-6, pages~\-679-693, 1979,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/BF01009518}{10.1007/BF01009518}}.\par\medskip
+
+\bibitem[IVZ06]{IVZ06}D. Ioffe, Y. Velenik, M. Zahradn\'\i k - {\it Entropy-Driven Phase Transition in a Polydisperse Hard-Rods Lattice System}, Journal of Statistical Physics, volume~\-122, issue~\-4, pages~\-761-786, 2006,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/s10955-005-8085-8}{10.1007/s10955-005-8085-8}}, arxiv:{\tt\color{blue}\href{http://arxiv.org/abs/math/0503222}{math/0503222}}.\par\medskip
+
+\bibitem[KP84]{KP84}R. Koteck\'y, D. Preiss - {\it An inductive approach to the Pirogov-Sinai theory}, Proceedings of the~\-11th Winter School on Abstract Analysis, Rendiconti del Circolo Matematico di Palermo, Serie II, supplemento~\-3, pages~\-161-164, 1984.\par\medskip
+
+\bibitem[KP86]{KP86}R. Koteck\'y, D. Preiss - {\it Cluster expansion for abstract polymer models}, Communications in Mathematical Physics, volume~\-103, issue~\-3, pages~\-491-498, 1986,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/BF01211762}{10.1007/BF01211762}}.\par\medskip
+
+\bibitem[Ma37]{Ma37}J.E. Mayer - {\it The Statistical Mechanics of Condensing Systems. I}, The Journal of Chemical Physics, volume~\-5, issue~\-67, pages~\-67-73, 1937,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1063/1.1749933}{10.1063/1.1749933}}.\par\medskip
+
+\bibitem[On49]{On49}L. Onsager - {\it The effects of shape on the interaction of colloidal particles}, Annals of the New York Academy of Sciences, volume~\-51, pages~\-627-659, 1949,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1111/j.1749-6632.1949.tb27296.x}{10.1111/j.1749-6632.1949.tb27296.x}}.\par\medskip
+
+\bibitem[PCF14]{PCF14}S. Papanikolaou, D. Charrier, E. Fradkin - {\it Ising nematic fluid phase of hard-core dimers on the square lattice}, Physical Review B, volume~\-89, page~\-035128, 2014,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1103/PhysRevB.89.035128}{10.1103/PhysRevB.89.035128}}, arxiv:{\tt\color{blue}\href{http://arxiv.org/abs/1310.4173}{1310.4173}}.\par\medskip
+
+\bibitem[PS75]{PS75}S.A. Pirogov, Y.G. Sinai - {\it Phase diagrams of classical lattice systems}, Theoretical and Mathematical Physics, volume~\-25, pages~\-1185-1192, 1975,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1007/BF01040127}{10.1007/BF01040127}}.\par\medskip
+
+\bibitem[Ru99]{Ru99}D. Ruelle - {\it Statistical mechanics: rigorous results}, Imperial College Press, World Scientific, (first edition: Benjamin, 1969), 1999.\par\medskip
+
+\bibitem[Ur27]{Ur27}H.D. Ursell - {\it The evaluation of Gibbs' phase-integral for imperfect gases}, Mathematical Proceedings of the Cambridge Philosophical Society, volume~\-23, issue~\-6, pages~\-685-697, 1927,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1017/S0305004100011191}{10.1017/S0305004100011191}}.\par\medskip
+
+\bibitem[Za96]{Za96}V.A. Zagrebnov - {\it Long-range order in a lattice-gas model of nematic liquid crystals}, Physica A: Statistical Mechanics and its Applications, volume~\-232, issues~\-3-4, pages~\-737-746, 1996,\par\penalty10000
+doi:{\tt\color{blue}\href{http://dx.doi.org/10.1016/0378-4371(96)00181-1}{10.1016/0378-4371(96)00181-1}}.\par\medskip
+
+\end{thebibliography}
+
+
+\end{document}
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..665719a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,69 @@
+PROJECTNAME=$(basename $(wildcard *.tex))
+LIBS=$(notdir $(wildcard libs/*))
+FIGS=$(notdir $(wildcard figs/*.fig))
+DIMER_LIBS=dimer.600pk dimer.tfm dimer.sty
+
+PDFS=$(addsuffix .pdf, $(PROJECTNAME))
+SYNCTEXS=$(addsuffix .synctex.gz, $(PROJECTNAME))
+
+all: $(PROJECTNAME)
+
+$(PROJECTNAME): $(LIBS) $(FIGS) $(DIMER_LIBS)
+ pdflatex -file-line-error $@.tex
+ pdflatex -file-line-error $@.tex
+ pdflatex -synctex=1 $@.tex
+
+$(PROJECTNAME).aux: $(LIBS) $(FIGS) $(DIMER_LIBS)
+ pdflatex -file-line-error -draftmode $(PROJECTNAME).tex
+
+
+$(SYNCTEXS): $(LIBS) $(FIGS) $(DIMER_LIBS)
+ pdflatex -synctex=1 $(patsubst %.synctex.gz, %.tex, $@)
+
+
+libs: $(LIBS)
+
+$(LIBS):
+ ln -fs libs/$@ ./
+
+dimer_font: $(DIMER_LIBS)
+
+$(DIMER_LIBS):
+ $(MAKE) -C dimer_font
+ ln -fs dimer_font/$@ ./
+
+figs: $(FIGS)
+
+$(FIGS):
+ make -C figs/$@
+ ln -fs figs/$@/*.pdf ./
+
+
+clean-aux: clean-figs-aux clean-dimer-aux
+ rm -f $(addsuffix .aux, $(PROJECTNAME))
+ rm -f $(addsuffix .log, $(PROJECTNAME))
+ rm -f $(addsuffix .out, $(PROJECTNAME))
+ rm -f $(addsuffix .toc, $(PROJECTNAME))
+
+clean-libs:
+ rm -f $(LIBS)
+
+clean-figs:
+ $(foreach fig,$(addprefix figs/, $(FIGS)), make -C $(fig) clean; )
+ rm -f $(notdir $(wildcard figs/*.fig/*.pdf))
+
+clean-figs-aux:
+ $(foreach fig,$(addprefix figs/, $(FIGS)), make -C $(fig) clean-aux; )
+
+clean-dimer:
+ $(MAKE) -C dimer_font clean
+ rm -f $(DIMER_LIBS)
+
+clean-dimer-aux:
+ $(MAKE) -C dimer_font clean-aux
+
+
+clean-tex:
+ rm -f $(PDFS) $(SYNCTEXS)
+
+clean: clean-aux clean-tex clean-libs clean-figs clean-dimer
diff --git a/README b/README
new file mode 100644
index 0000000..7420bdc
--- /dev/null
+++ b/README
@@ -0,0 +1,49 @@
+This directory contains the source files to typeset the article, and generate
+the figures. This can be accomplished by running
+ make
+
+This document uses a custom class file, located in the 'libs' directory, which
+defines a number of commands. Most of these are drop-in replacements for those
+defined in the 'article' class.
+
+Some extra functionality is provided in custom style files, located in the
+'libs' directory.
+
+
+* Dependencies:
+
+ pdflatex
+ TeXlive packages:
+ amsfonts
+ color
+ doublestroke
+ graphics
+ hyperref
+ latex
+ marginnote
+ pgf
+ standalone
+ metafont
+ mfware
+ GNU make
+ python3
+
+* Files:
+
+ Jauslin_Lieb_2017.tex:
+ main LaTeX file
+
+ libs:
+ custom LaTeX class and style files
+
+ figs:
+ source code for the figures
+
+ figs/dimer_example.fig/dimer_conf.py:
+ this python script randomly generates a suitable dimer configuration for
+ the figures interaction.pdf boundary.pdf bounding_loop.pdf and
+ dimer_contour.pdf
+
+ dimer_font:
+ metafont font with dimer symbols
+
diff --git a/dimer_font/Makefile b/dimer_font/Makefile
new file mode 100644
index 0000000..d538fdf
--- /dev/null
+++ b/dimer_font/Makefile
@@ -0,0 +1,18 @@
+PROJECTNAME=dimer
+
+dist: $(PROJECTNAME).600pk
+
+$(PROJECTNAME).600gf:
+ mf '\mode=ljfour; mode_setup; input $(PROJECTNAME).mf'
+
+$(PROJECTNAME).600pk: $(PROJECTNAME).600gf
+ gftopk $(PROJECTNAME).600gf $(PROJECTNAME).600pk
+
+clean-aux:
+ rm -f $(PROJECTNAME).600gf
+ rm -f $(PROJECTNAME).log
+
+clean: clean-aux
+ rm -f $(PROJECTNAME).600pk
+ rm -f $(PROJECTNAME).tfm
+
diff --git a/dimer_font/dimer.mf b/dimer_font/dimer.mf
new file mode 100644
index 0000000..8f0e49b
--- /dev/null
+++ b/dimer_font/dimer.mf
@@ -0,0 +1,65 @@
+%% half-dimer pointing up
+% name, width, height, depth
+beginchar("a",1.5pt#,7pt#,0);
+ pickup pencircle scaled 4;
+
+ x1=y1=x2=x3=0;
+ y2=h;
+ x4=-x5=-y4=-y5=w;
+ y3=2y4;
+
+ draw z1..z2;
+ draw z1..z4..z3..z5..cycle;
+endchar;
+
+%% half-dimer pointing down
+beginchar("b",1.5pt#,7pt#,0);
+ pickup pencircle scaled 4;
+
+ x1=x2=x3=0;
+ y1=h-2w;
+ y2=-2w;
+ x4=-x5=w;
+ y4=y5=h-w;
+ y3=h;
+
+ draw z1..z2;
+ draw z1..z4..z3..z5..cycle;
+endchar;
+
+%% radius for horizontal dimers
+r=1.5pt;
+
+%% half-dimer pointing right
+beginchar("c",10pt#,4.5pt#,0);
+ pickup pencircle scaled 4;
+
+ y1=y2=y3=h-r;
+ x3=0;
+ y4=h;
+ y5=h-2r;
+ x4=x5=r;
+ x1=2r;
+ x2=w;
+
+ draw z1..z2;
+ draw z1..z4..z3..z5..cycle;
+endchar;
+
+%% half-dimer pointing left
+beginchar("d",10pt#,4.5pt#,0);
+ pickup pencircle scaled 4;
+
+ y1=y2=y3=h-r;
+ x3=w;
+ y4=h;
+ y5=h-2r;
+ x4=x5=w-r;
+ x1=w-2r;
+ x2=0;
+
+ draw z1..z2;
+ draw z1..z4..z3..z5..cycle;
+endchar;
+
+end
diff --git a/dimer_font/dimer.sty b/dimer_font/dimer.sty
new file mode 100644
index 0000000..ba9631d
--- /dev/null
+++ b/dimer_font/dimer.sty
@@ -0,0 +1,5 @@
+\newfont{\dimer}{dimer}
+\def\updimer{\kern3pt\hbox{\dimer a}\kern2pt}
+\def\downdimer{\kern3pt\hbox{\dimer b}\kern2pt}
+\def\rightdimer{\hbox{\dimer c}}
+\def\leftdimer{\hbox{\dimer d}}
diff --git a/figs/dimer_example.fig/Makefile b/figs/dimer_example.fig/Makefile
new file mode 100644
index 0000000..8ed4891
--- /dev/null
+++ b/figs/dimer_example.fig/Makefile
@@ -0,0 +1,32 @@
+PROJECTNAME=interaction boundary bounding_loop dimer_contour
+LIBS=$(notdir $(wildcard libs/*))
+
+PDFS=$(addsuffix .pdf, $(PROJECTNAME))
+SOURCES=$(addsuffix .tikz.tex, $(PROJECTNAME))
+
+all: $(PDFS)
+
+$(PDFS): $(SOURCES) $(LIBS)
+ echo $(LIBS)
+ pdflatex -jobname $(basename $@) -file-line-error $(patsubst %.pdf, %.tikz.tex, $@)
+
+$(SOURCES):
+ python3 dimer_conf.py
+
+$(LIBS):
+ ln -fs libs/$@ ./
+
+clean-libs:
+ rm -f $(LIBS)
+
+clean-aux:
+ rm -f $(addsuffix .aux, $(PROJECTNAME))
+ rm -f $(addsuffix .log, $(PROJECTNAME))
+
+clean-tex:
+ rm -f $(PDFS)
+
+clean-sources:
+ rm -f $(SOURCES)
+
+clean: clean-libs clean-aux clean-tex clean-sources
diff --git a/figs/dimer_example.fig/dimer_conf.py b/figs/dimer_example.fig/dimer_conf.py
new file mode 100644
index 0000000..7cff9f1
--- /dev/null
+++ b/figs/dimer_example.fig/dimer_conf.py
@@ -0,0 +1,289 @@
+#!/usr/bin/env python3
+
+import random
+from math import *
+
+# size of the grid
+L=24
+# boundary thickness (must be even)
+l0=4
+# activity and interaction
+z=3
+J=5
+
+
+# draw random dimers in a select area
+def fill_dimers(mask,direction):
+ if(direction=="h"):
+ d=[1,0]
+ else:
+ d=[0,1]
+
+ dimers=[]
+
+ # keep track of which sites are occupied
+ occupied=[]
+ for i in range(L):
+ occupied.append([])
+ for j in range(L):
+ occupied[i].append(0)
+
+ for i in range(10000):
+ # pick a random edge (indexed by its lower-left corner)
+ e=None
+ while(e==None or e[0]+d[0]>=L or e[1]+d[1]>=L or mask[e[0]][e[1]]==0 or mask[e[0]+d[0]][e[1]+d[1]]==0):
+ e=[random.randint(0,L-1),random.randint(0,L-1)]
+ # check whether a dimer can be added to the edge
+ if(occupied[e[0]][e[1]]==0 and occupied[e[0]+d[0]][e[1]+d[1]]==0):
+ # number of interactions
+ interactions=0
+ if(e[0]+2*d[0]<L and e[1]+2*d[1]<L and occupied[e[0]+2*d[0]][e[1]+2*d[1]]==1):
+ interactions=interactions+1
+ if(e[0]-d[0]>=0 and e[1]-d[1]>=0 and occupied[e[0]-d[0]][e[1]-d[1]]==1):
+ interactions=interactions+1
+ # probability of adding the dimer
+ p=1/(1+1/z*exp(-J*interactions))
+ if(p>random.random()):
+ # add dimer
+ dimers.append(e)
+ occupied[e[0]][e[1]]=1
+ occupied[e[0]+d[0]][e[1]+d[1]]=1
+
+ return(dimers)
+
+# find interactions
+def interactions(dimers,direction):
+ if(direction=="h"):
+ d=[1,0]
+ else:
+ d=[0,1]
+
+ out=[]
+ for d1 in dimers:
+ for d2 in dimers:
+ if(d1[0]-d2[0]==2*d[0] and d1[1]-d2[1]==2*d[1]):
+ out.append([d2[0]+d[0],d2[1]+d[1]])
+ return(out)
+
+# find interactions with boundary
+def boundary_interactions(dimers,rho):
+ out=[]
+ for d in dimers:
+ for v in rho:
+ if(d[0]==v[0] and d[1]==v[1]):
+ out.append([d[0],d[1]-1])
+ elif(d[0]==v[0] and d[1]==v[1]-1):
+ out.append([d[0],d[1]+1])
+ return(out)
+
+
+# draw dimers
+def draw_dimers(v_dimers,h_dimers,file_desc,color):
+ for d in v_dimers:
+ print("\\dimer{[color="+color+"]("+str(d[0])+","+str(d[1])+")}v", file=file_desc)
+ print("", file=file_desc)
+ for d in h_dimers:
+ print("\\dimer{[color="+color+"]("+str(d[0])+","+str(d[1])+")}h", file=file_desc)
+ print("", file=file_desc)
+
+# draw interactions
+def draw_interactions(v_interactions,h_interactions,file_desc):
+ for d in v_interactions:
+ print("\\interaction{("+str(d[0])+","+str(d[1])+")}v", file=file_desc)
+ print("", file=file_desc)
+ for d in h_interactions:
+ print("\\interaction{("+str(d[0])+","+str(d[1])+")}h", file=file_desc)
+ print("", file=file_desc)
+
+# draw magnetized part of boundary
+def draw_boundary(rho, file_desc):
+ for v in rho:
+ print("\\fill[color=red]("+str(v[0])+","+str(v[1])+")circle(10pt);", file=file_desc)
+
+
+# draw loops
+def draw_loops(loops,file_desc,color):
+ for loop in loops:
+ print("\\draw[color="+color+", line width=3pt]",end="",file=file_desc)
+ for e in loop:
+ print("("+str(e[0])+","+str(e[1])+")--",end="",file=file_desc)
+ print("cycle;",file=file_desc)
+
+# init tikz file
+def init_tikz(filename):
+ file_desc=open(filename,"w")
+ print("\\documentclass{standalone}\n\n\\usepackage{tikz}\n\\usepackage{dimer}\n\\usetikzlibrary{decorations.pathmorphing}\n\n\\begin{document}\n\\begin{tikzpicture}\n\n", file=file_desc)
+ return(file_desc)
+
+# close tikz file
+def close_tikz(file_desc):
+ print("\\end{tikzpicture}\n\\end{document}", file=file_desc)
+ file_desc.close()
+
+
+mu=int(L/2)
+
+# loops
+loop1=[]
+for i in range(0,2*l0):
+ loop1.append([mu-l0+i,mu+4.5])
+for i in range(0,4):
+ loop1.append([mu+l0-1+0.5,mu+4-i])
+for i in range(0,l0):
+ loop1.append([mu+l0+i,mu+0.5])
+for i in range(0,6):
+ loop1.append([mu+2*l0-1+0.5,mu-i])
+for i in range(0,4*l0):
+ loop1.append([mu+2*l0-1-i,mu-5.5])
+for i in range(0,6):
+ loop1.append([mu-2*l0-0.5,mu-5+i])
+for i in range(0,l0):
+ loop1.append([mu-2*l0+i,mu+0.5])
+for i in range(0,4):
+ loop1.append([mu-l0-0.5,mu+1+i])
+# core of loop1
+core_loop1=[]
+for i in range(0,2*l0-4):
+ core_loop1.append([mu-l0+2+i,mu+3.5])
+for i in range(0,3):
+ core_loop1.append([mu+l0-3+0.5,mu+3-i])
+core_loop1.append([mu+l0-2,mu+0.5])
+core_loop1.append([mu+l0-1,mu+0.5])
+for i in range(0,l0-2):
+ core_loop1.append([mu+l0+i,mu-1+0.5])
+for i in range(0,4):
+ core_loop1.append([mu+2*l0-3+0.5,mu-1-i])
+for i in range(0,4*l0-4):
+ core_loop1.append([mu+2*l0-3-i,mu-4.5])
+for i in range(0,4):
+ core_loop1.append([mu-2*l0+2-0.5,mu-4+i])
+for i in range(0,l0-2):
+ core_loop1.append([mu-2*l0+2+i,mu-1+0.5])
+core_loop1.append([mu-l0,mu+0.5])
+core_loop1.append([mu-l0+1,mu+0.5])
+for i in range(0,3):
+ core_loop1.append([mu-l0+2-0.5,mu+1+i])
+
+loop2=[[mu-1,mu+2.5],[mu-0.5,mu+2],[mu-0.5,mu+1],[mu-1,mu+0.5],[mu-1.5,mu+1],[mu-1.5,mu+2]]
+loop3=[[mu-1,mu-1.5],[mu,mu-1.5],[mu+0.5,mu-2],[mu+0.5,mu-3],[mu,mu-3.5],[mu-1,mu-3.5],[mu-1.5,mu-3],[mu-1.5,mu-2]]
+
+
+loops=[loop1,loop2,loop3]
+
+# masks
+# init
+v_mask=[]
+h_mask=[]
+for i in range(L):
+ v_mask.append([])
+ h_mask.append([])
+ for j in range(L):
+ v_mask[i].append(1)
+ h_mask[i].append(0)
+# draw masks
+for i in range(mu-l0,mu+l0):
+ for j in range(mu+1,mu+5):
+ v_mask[i][j]=0
+for i in range(mu-2*l0,mu+2*l0):
+ for j in range(mu-5,mu+1):
+ v_mask[i][j]=0
+for i in range(mu-l0+2,mu+l0-2):
+ for j in range(mu+1,mu+4):
+ h_mask[i][j]=1
+for i in range(mu-l0,mu+l0):
+ h_mask[i][mu]=1
+for i in range(mu-2*l0+2,mu+2*l0-2):
+ for j in range(mu-4,mu):
+ h_mask[i][j]=1
+h_mask[mu-1][mu+1]=0
+h_mask[mu-1][mu+2]=0
+h_mask[mu-1][mu-3]=0
+h_mask[mu-1][mu-2]=0
+h_mask[mu][mu-3]=0
+h_mask[mu][mu-2]=0
+
+# random dimers in mask
+v_dimers=fill_dimers(v_mask,"v")
+h_dimers=fill_dimers(h_mask,"h")
+
+# mantle dimers
+h_mantle=[]
+for i in range(0,l0):
+ h_mantle.append([mu-l0+2*i,mu+4])
+for i in range(0,4):
+ h_mantle.append([mu+l0-2,mu+4-i])
+ h_mantle.append([mu-l0,mu+4-i])
+for i in range(0,int(l0/2)):
+ h_mantle.append([mu+l0+2*i,mu])
+ h_mantle.append([mu-l0-2-2*i,mu])
+for i in range(0,5):
+ h_mantle.append([mu+2*l0-2,mu-i])
+ h_mantle.append([mu-2*l0,mu-i])
+for i in range(0,2*l0):
+ h_mantle.append([mu-2*l0+2*i,mu-5])
+
+v_mantle=[]
+v_mantle.append([mu-1,mu+1])
+v_mantle.append([mu-1,mu-3])
+v_mantle.append([mu,mu-3])
+
+# interactions
+v_interactions=interactions(v_dimers+v_mantle,"v")
+h_interactions=interactions(h_dimers+h_mantle,"h")
+
+# magnetized part of the boundary
+rho=[]
+for i in range(0,L):
+ if(random.randint(0,1)==0):
+ rho.append([i,0])
+ if(random.randint(0,1)==0):
+ rho.append([i,L-1])
+
+
+# files
+
+interaction=init_tikz("interaction.tikz.tex")
+print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=interaction)
+draw_interactions(v_interactions,h_interactions,interaction)
+draw_dimers(v_dimers+v_mantle,h_dimers+h_mantle,interaction,"black")
+close_tikz(interaction)
+
+boundary=init_tikz("boundary.tikz.tex")
+print("\\fill[color=cyan](-0.5,-0.5)--++("+str(L)+",0)--++(0,"+str(l0)+")--++("+str(-L)+",0)--cycle;", file=boundary)
+print("\\fill[color=cyan](-0.5,"+str(L-l0-0.5)+")--++("+str(L)+",0)--++(0,"+str(l0)+")--++("+str(-L)+",0)--cycle;", file=boundary)
+print("", file=boundary)
+draw_boundary(rho,boundary)
+print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=boundary)
+draw_interactions(boundary_interactions(v_dimers,rho),[],boundary)
+draw_dimers(v_dimers+v_mantle,h_dimers+h_mantle,boundary,"black")
+close_tikz(boundary)
+
+bounding_loop=init_tikz("bounding_loop.tikz.tex")
+print("\\begin{scope}", file=bounding_loop)
+print(" \\clip", end="", file=bounding_loop)
+for e in loop1:
+ print("("+str(e[0])+","+str(e[1])+")--", end="", file=bounding_loop)
+print("cycle;",file=bounding_loop)
+print(" \\fill[color=cyan]("+str(mu-2*l0-2)+","+str(mu-7)+")--++("+str(4*l0+3)+",0)--++(0,13)--++("+str(-4*l0-3)+",0);", file=bounding_loop)
+print(" \\fill[color=red]", end="", file=bounding_loop)
+for e in core_loop1:
+ print("("+str(e[0])+","+str(e[1])+")--", end="", file=bounding_loop)
+print("cycle;",file=bounding_loop)
+print("\\end{scope}\n", file=bounding_loop)
+print("\\grid{"+str(4*l0+3)+"}{"+str(13)+"}{("+str(mu-2*l0-2)+","+str(mu-7)+")}\n", file=bounding_loop)
+draw_loops([loop1],bounding_loop,"black")
+close_tikz(bounding_loop)
+
+contour=init_tikz("dimer_contour.tikz.tex")
+print("\\draw[color=green, line width=15pt]("+str(mu-2-0.5)+","+str(mu+1)+")--++(1,0);", file=contour)
+print("\\draw[color=green, line width=15pt]("+str(mu-2-0.5)+","+str(mu+2)+")--++(1,0);", file=contour)
+print("\\draw[color=green, line width=15pt]("+str(mu-0.5)+","+str(mu+1)+")--++(2,0);", file=contour)
+print("\\draw[color=green, line width=15pt]("+str(mu-0.5)+","+str(mu+2)+")--++(2,0);", file=contour)
+print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=contour)
+draw_loops([loop1,loop2],contour,"green")
+draw_loops([loop3],contour,"blue")
+draw_interactions(v_interactions,h_interactions,contour)
+draw_dimers(v_dimers,h_dimers,contour,"black")
+draw_dimers(v_mantle,h_mantle,contour,"gray")
+close_tikz(contour)
+
diff --git a/figs/dimer_example.fig/libs/dimer.sty b/figs/dimer_example.fig/libs/dimer.sty
new file mode 120000
index 0000000..2d83c8a
--- /dev/null
+++ b/figs/dimer_example.fig/libs/dimer.sty
@@ -0,0 +1 @@
+../../libs/dimer.sty \ No newline at end of file
diff --git a/figs/libs/Makefile b/figs/libs/Makefile
new file mode 100644
index 0000000..994463b
--- /dev/null
+++ b/figs/libs/Makefile
@@ -0,0 +1,25 @@
+PROJECTNAME=$(basename $(basename $(wildcard *.tikz.tex)))
+LIBS=$(notdir $(wildcard libs/*))
+
+PDFS=$(addsuffix .pdf, $(PROJECTNAME))
+
+all: $(PDFS)
+
+$(PDFS): $(LIBS)
+ echo $(LIBS)
+ pdflatex -jobname $(basename $@) -file-line-error $(patsubst %.pdf, %.tikz.tex, $@)
+
+$(LIBS):
+ ln -fs libs/$@ ./
+
+clean-libs:
+ rm -f $(LIBS)
+
+clean-aux:
+ rm -f $(addsuffix .aux, $(PROJECTNAME))
+ rm -f $(addsuffix .log, $(PROJECTNAME))
+
+clean-tex:
+ rm -f $(PDFS)
+
+clean: clean-libs clean-aux clean-tex
diff --git a/figs/libs/dimer.sty b/figs/libs/dimer.sty
new file mode 100644
index 0000000..0f087ef
--- /dev/null
+++ b/figs/libs/dimer.sty
@@ -0,0 +1,33 @@
+% square lattice (width #1, height #2, origin #3)
+\def\grid#1#2#3{
+ \foreach\i in {0,...,#2}{
+ \draw#3++(0,\i)--++(#1,0);
+ }
+ \foreach\i in {0,...,#1}{
+ \draw#3++(\i,0)--++(0,#2);
+ }
+}
+
+% dimer (bottom-left vertex #1, vertical or horizontal #2)
+\def\dimer#1#2{
+ \if#2h
+ \draw[line width=5pt]#1--++(1,0);
+ \fill#1circle(7pt);
+ \fill#1++(1,0)circle(7pt);
+ \else
+ \draw[line width=5pt]#1--++(0,1);
+ \fill#1circle(7pt);
+ \fill#1++(0,1)circle(7pt);
+ \fi
+}
+
+% interactions (bottom-left vertex #1, vertical or horizontal #2)
+\def\interaction#1#2{
+ \if#2h
+ \draw[line width=5pt, color=white]#1--++(1,0);
+ \draw[line width=4pt, decorate, decoration={snake}, color=red]#1--++(1,0);
+ \else
+ \draw[line width=5pt, color=white]#1--++(0,1);
+ \draw[line width=4pt, decorate, decoration={snake}, color=red]#1--++(0,1);
+ \fi
+}
diff --git a/figs/polymer_example.fig/Makefile b/figs/polymer_example.fig/Makefile
new file mode 120000
index 0000000..704310e
--- /dev/null
+++ b/figs/polymer_example.fig/Makefile
@@ -0,0 +1 @@
+../libs/Makefile \ No newline at end of file
diff --git a/figs/polymer_example.fig/contours.tikz.tex b/figs/polymer_example.fig/contours.tikz.tex
new file mode 100644
index 0000000..c49c0cc
--- /dev/null
+++ b/figs/polymer_example.fig/contours.tikz.tex
@@ -0,0 +1,69 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}
+
+%% mantles
+
+% blue
+\fill[color=red](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\fill[color=white](4,7.5)--++(9,0)--++(0.5,0.5)--++(0,6)--++(-0.5,0.5)--++(-9,0)--++(-0.5,-0.5)--++(0,-6)--cycle;
+% red
+\fill[color=red](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](7,10.5)--++(2,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-2,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% teal
+\fill[color=blue](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\fill[color=white](11,20.5)--++(7,0)--++(0.5,-0.5)--++(0.5,-0.5)--++(1,0)--++(0.5,-0.5)--++(0,-9)--++(0.5,-0.5)--++(11,0)--++(0.5,0.5)--++(0,20)--++(-0.5,0.5)--++(-21,0)--++(-0.5,-0.5)--++(0,-9)--cycle;
+% magenta
+\fill[color=blue](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+\fill[color=white](14,23.5)--++(16,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-16,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+% cyan
+\fill[color=blue](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](24,13.5)--++(5,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% orange
+\fill[color=blue](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+\fill[color=white](17,24.5)--++(1,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% green
+\fill[color=blue](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+
+%% segments
+
+\foreach \i in {9,...,14}{
+ \draw[color=red, line width=15pt](3.5,\i)--++(2,0);
+ \draw[color=red, line width=15pt](10.5,\i)--++(3,0);
+}
+
+\foreach \i in {12,...,17}{
+ \draw[color=blue, line width=15pt](20.5,\i)--++(2,0);
+ \draw[color=blue, line width=15pt](30.5,\i)--++(2,0);
+}
+\foreach \i in {22,...,29}{
+ \draw[color=blue, line width=15pt](10.5,\i)--++(2,0);
+ \draw[color=blue, line width=15pt](31.5,\i)--++(1,0);
+}
+
+\foreach \i in {23,...,26}{
+ \draw[color=blue, line width=15pt](\i,23.5)--++(0,1);
+ \draw[color=blue, line width=15pt](\i,26.5)--++(0,1);
+}
+
+%% grid
+\grid{36}{36}{[color=lightgray](0,0)}
+
+
+%% loops
+\draw[color=black, line width=5pt](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\draw[color=black, line width=5pt](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\draw[color=black, line width=5pt](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\draw[color=black, line width=5pt](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+\draw[color=black, line width=5pt](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\draw[color=black, line width=5pt](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+\draw[color=black, line width=5pt](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/polymer_example.fig/inclusion_tree.tikz.tex b/figs/polymer_example.fig/inclusion_tree.tikz.tex
new file mode 100644
index 0000000..6394979
--- /dev/null
+++ b/figs/polymer_example.fig/inclusion_tree.tikz.tex
@@ -0,0 +1,45 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}
+
+\path(0,0)coordinate(root);
+\path(root)++(45:1)coordinate(teal);
+\path(root)++(135:1)coordinate(blue);
+\path(blue)++(135:1)coordinate(red);
+\path(teal)++(135:1)coordinate(cyan);
+\path(teal)++(45:1)coordinate(magenta);
+\path(magenta)++(135:1)coordinate(orange);
+\path(magenta)++(45:1)coordinate(green);
+
+\draw(root)--(teal);
+\draw(root)--(blue);
+\draw(blue)--(red);
+\draw(teal)--(cyan);
+\draw(teal)--(magenta);
+\draw(magenta)--(orange);
+\draw(magenta)--(green);
+
+\fill[color=black](root)circle(3pt);
+\fill[color=teal](teal)circle(3pt);
+\fill[color=blue](blue)circle(3pt);
+\fill[color=red](red)circle(3pt);
+\fill[color=cyan](cyan)circle(3pt);
+\fill[color=magenta](magenta)circle(3pt);
+\fill[color=orange](orange)circle(3pt);
+\fill[color=green](green)circle(3pt);
+
+\draw[color=black](blue)++(-135:0.3)node{\footnotesize\it a};
+\draw[color=black](red)++(-135:0.3)node{\footnotesize\it b};
+\draw[color=black](teal)++(-45:0.3)node{\footnotesize\it c};
+\draw[color=black](magenta)++(-45:0.3)node{\footnotesize\it d};
+\draw[color=black](cyan)++(-135:0.3)node{\footnotesize\it e};
+\draw[color=black](orange)++(-135:0.3)node{\footnotesize\it f};
+\draw[color=black](green)++(-45:0.3)node{\footnotesize\it g};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/polymer_example.fig/libs/dimer.sty b/figs/polymer_example.fig/libs/dimer.sty
new file mode 120000
index 0000000..2d83c8a
--- /dev/null
+++ b/figs/polymer_example.fig/libs/dimer.sty
@@ -0,0 +1 @@
+../../libs/dimer.sty \ No newline at end of file
diff --git a/figs/polymer_example.fig/lollipops-tree.tikz.tex b/figs/polymer_example.fig/lollipops-tree.tikz.tex
new file mode 100644
index 0000000..c8b617c
--- /dev/null
+++ b/figs/polymer_example.fig/lollipops-tree.tikz.tex
@@ -0,0 +1,30 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}
+
+\path(0,0)coordinate(blue);
+\path(blue)++(45:1)coordinate(red);
+\path(blue)++(135:1)coordinate(teal);
+\path(teal)++(135:1)coordinate(cyan);
+
+\draw(blue)--(red);
+\draw(blue)--(teal);
+\draw(teal)--(cyan);
+
+\fill[color=blue](blue)circle(3pt);
+\fill[color=red](red)circle(3pt);
+\fill[color=teal](teal)circle(3pt);
+\fill[color=cyan](cyan)circle(3pt);
+
+\draw[color=black](blue)++(-135:0.3)node{\footnotesize\it a};
+\draw[color=black](red)++(-45:0.3)node{\footnotesize\it b};
+\draw[color=black](teal)++(-135:0.3)node{\footnotesize\it c};
+\draw[color=black](cyan)++(-135:0.3)node{\footnotesize\it e};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/polymer_example.fig/lollipops.tikz.tex b/figs/polymer_example.fig/lollipops.tikz.tex
new file mode 100644
index 0000000..6b6a058
--- /dev/null
+++ b/figs/polymer_example.fig/lollipops.tikz.tex
@@ -0,0 +1,76 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}[scale=0.2]
+
+%% mantles
+
+% blue
+\fill[color=blue](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\fill[color=white](4,7.5)--++(9,0)--++(0.5,0.5)--++(0,6)--++(-0.5,0.5)--++(-9,0)--++(-0.5,-0.5)--++(0,-6)--cycle;
+% red
+\fill[color=red](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](7,10.5)--++(2,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-2,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% teal
+\fill[color=teal](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\fill[color=white](11,20.5)--++(7,0)--++(0.5,-0.5)--++(0.5,-0.5)--++(1,0)--++(0.5,-0.5)--++(0,-9)--++(0.5,-0.5)--++(11,0)--++(0.5,0.5)--++(0,20)--++(-0.5,0.5)--++(-21,0)--++(-0.5,-0.5)--++(0,-9)--cycle;
+% magenta
+\fill[color=teal](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+\fill[color=white](14,23.5)--++(16,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-16,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+% cyan
+\fill[color=cyan](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](24,13.5)--++(5,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% orange
+\fill[color=teal](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+\fill[color=white](17,24.5)--++(1,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% green
+\fill[color=teal](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+
+%% segments
+
+\draw[color=teal, line width=3pt](10,15.5)--++(0,4);
+
+\draw[color=red, line width=3pt](3.5,12)--++(2,0);
+
+\draw[color=cyan, line width=3pt](20.5,14)--++(2,0);
+
+\foreach \i in {22,...,29}{
+ \draw[color=teal, line width=3pt](31.5,\i)--++(1,0);
+}
+
+\foreach \i in {23,...,26}{
+ \draw[color=teal, line width=3pt](\i,23.5)--++(0,1);
+ \draw[color=teal, line width=3pt](\i,26.5)--++(0,1);
+}
+
+%% grid
+\grid{36}{36}{[color=lightgray](0,0)}
+
+
+%% loops
+
+\draw[color=black, line width=1pt](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\draw[color=black](2,16.5)node{\it a};
+
+\draw[color=black, line width=1pt](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\draw[color=black](4.5,13)node{\it b};
+
+\draw[color=black, line width=1pt](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\draw[color=black](9,32.5)node{\it c};
+
+\draw[color=black, line width=1pt](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+
+\draw[color=black, line width=1pt](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\draw[color=black](23,18.5)node{\it e};
+
+\draw[color=black, line width=1pt](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+
+\draw[color=black, line width=1pt](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/polymer_example.fig/loops.tikz.tex b/figs/polymer_example.fig/loops.tikz.tex
new file mode 100644
index 0000000..db06058
--- /dev/null
+++ b/figs/polymer_example.fig/loops.tikz.tex
@@ -0,0 +1,34 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}[scale=0.2]
+
+\grid{36}{36}{[color=lightgray](0,0)}
+
+\draw[color=blue, line width=1pt](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\draw[color=black](2,16.5)node{\it a};
+
+\draw[color=red, line width=1pt](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\draw[color=black](4.5,13)node{\it b};
+
+\draw[color=teal, line width=1pt](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\draw[color=black](9,32.5)node{\it c};
+
+\draw[color=magenta, line width=1pt](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+\draw[color=black](13,30.5)node{\it d};
+
+\draw[color=cyan, line width=1pt](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\draw[color=black](23,18.5)node{\it e};
+
+\draw[color=orange, line width=1pt](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+\draw[color=black](15,28.5)node{\it f};
+
+\draw[color=green, line width=1pt](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+\draw[color=black](23,27.5)node{\it g};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/polymer_example.fig/polymers.tikz.tex b/figs/polymer_example.fig/polymers.tikz.tex
new file mode 100644
index 0000000..e2f688a
--- /dev/null
+++ b/figs/polymer_example.fig/polymers.tikz.tex
@@ -0,0 +1,76 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}
+
+%% mantles
+
+% blue
+\fill[color=gray](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\fill[color=white](4,7.5)--++(9,0)--++(0.5,0.5)--++(0,6)--++(-0.5,0.5)--++(-9,0)--++(-0.5,-0.5)--++(0,-6)--cycle;
+% red
+\fill[color=gray](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](7,10.5)--++(2,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-2,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% teal
+\fill[color=gray](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\fill[color=white](11,20.5)--++(7,0)--++(0.5,-0.5)--++(0.5,-0.5)--++(1,0)--++(0.5,-0.5)--++(0,-9)--++(0.5,-0.5)--++(11,0)--++(0.5,0.5)--++(0,20)--++(-0.5,0.5)--++(-21,0)--++(-0.5,-0.5)--++(0,-9)--cycle;
+% magenta
+\fill[color=gray](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+\fill[color=white](14,23.5)--++(16,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-16,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+% cyan
+\fill[color=gray](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](24,13.5)--++(5,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% orange
+\fill[color=gray](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+\fill[color=white](17,24.5)--++(1,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% green
+\fill[color=gray](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+
+%% segments
+
+\draw[color=gray, line width=15pt](4,-0.5)--++(0,7);
+\draw[color=gray, line width=15pt](10,15.5)--++(0,4);
+\draw[color=gray, line width=15pt](11,15.5)--++(0,4);
+\draw[color=gray, line width=15pt](9,31.5)--++(0,5);
+
+\foreach \i in {9,...,14}{
+ \draw[color=gray, line width=15pt](3.5,\i)--++(2,0);
+ \draw[color=gray, line width=15pt](10.5,\i)--++(3,0);
+}
+
+\foreach \i in {12,...,17}{
+ \draw[color=gray, line width=15pt](20.5,\i)--++(2,0);
+ \draw[color=gray, line width=15pt](30.5,\i)--++(2,0);
+}
+\foreach \i in {22,...,29}{
+ \draw[color=gray, line width=15pt](10.5,\i)--++(2,0);
+ \draw[color=gray, line width=15pt](31.5,\i)--++(1,0);
+}
+
+\foreach \i in {23,...,26}{
+ \draw[color=gray, line width=15pt](\i,23.5)--++(0,1);
+ \draw[color=gray, line width=15pt](\i,26.5)--++(0,1);
+}
+
+%% grid
+\grid{36}{36}{[color=lightgray](0,0)}
+
+
+%% loops
+
+\draw[color=black, line width=5pt](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\draw[color=black, line width=5pt](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+
+\draw[color=black, line width=5pt](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\draw[color=black, line width=5pt](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+\draw[color=black, line width=5pt](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\draw[color=black, line width=5pt](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+\draw[color=black, line width=5pt](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/polymer_example.fig/segments.tikz.tex b/figs/polymer_example.fig/segments.tikz.tex
new file mode 100644
index 0000000..9669e3b
--- /dev/null
+++ b/figs/polymer_example.fig/segments.tikz.tex
@@ -0,0 +1,132 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}
+
+
+%% mantles
+
+% blue
+\fill[color=blue](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+\fill[color=white](4,7.5)--++(9,0)--++(0.5,0.5)--++(0,6)--++(-0.5,0.5)--++(-9,0)--++(-0.5,-0.5)--++(0,-6)--cycle;
+% red
+\fill[color=red](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](7,10.5)--++(2,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-2,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% teal
+\fill[color=teal](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+\fill[color=white](11,20.5)--++(7,0)--++(0.5,-0.5)--++(0.5,-0.5)--++(1,0)--++(0.5,-0.5)--++(0,-9)--++(0.5,-0.5)--++(11,0)--++(0.5,0.5)--++(0,20)--++(-0.5,0.5)--++(-21,0)--++(-0.5,-0.5)--++(0,-9)--cycle;
+% magenta
+\fill[color=magenta](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+\fill[color=white](14,23.5)--++(16,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-16,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+% cyan
+\fill[color=cyan](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+\fill[color=white](24,13.5)--++(5,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% orange
+\fill[color=orange](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+\fill[color=white](17,24.5)--++(1,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+% green
+\fill[color=green](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+
+%% segments
+
+\foreach \i in {0,...,1}{
+ \draw[color=gray, line width=15pt](\i,-0.5)--++(0,37);
+}
+\foreach \i in {2,...,8}{
+ \draw[color=gray, line width=15pt](\i,-0.5)--++(0,7);
+ \draw[color=gray, line width=15pt](\i,15.5)--++(0,21);
+}
+\foreach \i in {9,...,15}{
+ \draw[color=gray, line width=15pt](\i,-0.5)--++(0,7);
+ \draw[color=gray, line width=15pt](\i,15.5)--++(0,4);
+ \draw[color=gray, line width=15pt](\i,31.5)--++(0,5);
+}
+\foreach \i in {16,...,18}{
+ \draw[color=gray, line width=15pt](\i,-0.5)--++(0,20);
+ \draw[color=gray, line width=15pt](\i,31.5)--++(0,5);
+}
+\foreach \i in {19,...,34}{
+ \draw[color=gray, line width=15pt](\i,-0.5)--++(0,9);
+ \draw[color=gray, line width=15pt](\i,31.5)--++(0,5);
+}
+\foreach \i in {35,...,36}{
+ \draw[color=gray, line width=15pt](\i,-0.5)--++(0,37);
+}
+
+\draw[color=blue, line width=15pt](3.5,8)--++(10,0);
+\foreach \i in {9,...,14}{
+ \draw[color=blue, line width=15pt](3.5,\i)--++(2,0);
+ \draw[color=blue, line width=15pt](10.5,\i)--++(3,0);
+}
+
+\foreach \i in {7,...,9}{
+ \draw[color=red, line width=15pt](\i,10.5)--++(0,2);
+}
+
+\foreach \i in {10,...,11}{
+ \draw[color=teal, line width=15pt](20.5,\i)--++(12,0);
+}
+\foreach \i in {12,...,17}{
+ \draw[color=teal, line width=15pt](20.5,\i)--++(2,0);
+ \draw[color=teal, line width=15pt](30.5,\i)--++(2,0);
+}
+\foreach \i in {18,...,19}{
+ \draw[color=teal, line width=15pt](20.5,\i)--++(12,0);
+}
+\draw[color=teal, line width=15pt](18.5,20)--++(14,0);
+\draw[color=teal, line width=15pt](10.5,21)--++(22,0);
+\foreach \i in {22,...,29}{
+ \draw[color=teal, line width=15pt](10.5,\i)--++(2,0);
+ \draw[color=teal, line width=15pt](31.5,\i)--++(1,0);
+}
+\draw[color=teal, line width=15pt](10.5,30)--++(22,0);
+
+\foreach \i in {24,...,29}{
+ \draw[color=cyan, line width=15pt](\i,13.5)--++(0,2);
+}
+
+\draw[color=magenta, line width=15pt](14,23.5)--++(0,4);
+\foreach \i in {21,...,22}{
+ \draw[color=magenta, line width=15pt](\i,23.5)--++(0,4);
+}
+\foreach \i in {23,...,26}{
+ \draw[color=magenta, line width=15pt](\i,23.5)--++(0,1);
+ \draw[color=magenta, line width=15pt](\i,26.5)--++(0,1);
+}
+\foreach \i in {27,...,30}{
+ \draw[color=magenta, line width=15pt](\i,23.5)--++(0,4);
+}
+
+\foreach \i in {25,...,26}{
+ \draw[color=orange, line width=15pt](16.5,\i)--++(2,0);
+}
+
+
+
+%% grid
+\grid{36}{36}{[color=lightgray](0,0)}
+
+%% loops
+% blue
+\draw[color=black, line width=5pt](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle;
+% red
+\draw[color=black, line width=5pt](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+% teal
+\draw[color=black, line width=5pt](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle;
+% magenta
+\draw[color=black, line width=5pt](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle;
+% cyan
+\draw[color=black, line width=5pt](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle;
+% orange
+\draw[color=black, line width=5pt](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle;
+%green
+\draw[color=black, line width=5pt](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle;
+
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/smallest.fig/Makefile b/figs/smallest.fig/Makefile
new file mode 120000
index 0000000..704310e
--- /dev/null
+++ b/figs/smallest.fig/Makefile
@@ -0,0 +1 @@
+../libs/Makefile \ No newline at end of file
diff --git a/figs/smallest.fig/libs/dimer.sty b/figs/smallest.fig/libs/dimer.sty
new file mode 120000
index 0000000..2d83c8a
--- /dev/null
+++ b/figs/smallest.fig/libs/dimer.sty
@@ -0,0 +1 @@
+../../libs/dimer.sty \ No newline at end of file
diff --git a/figs/smallest.fig/smallest-18.tikz.tex b/figs/smallest.fig/smallest-18.tikz.tex
new file mode 100644
index 0000000..756f1e6
--- /dev/null
+++ b/figs/smallest.fig/smallest-18.tikz.tex
@@ -0,0 +1,16 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}
+
+\fill[color=gray](2,0.5)--++(3,0)--++(1.5,1.5)--++(-1.5,1.5)--++(-3,0)--++(-1.5,-1.5)--cycle;
+\fill[color=white](3,1.5)--++(1,0)--++(0.5,0.5)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--cycle;
+\grid{7}{4}{[color=lightgray](0,0)}
+\draw[color=black, line width=5pt](2,0.5)--++(3,0)--++(1.5,1.5)--++(-1.5,1.5)--++(-3,0)--++(-1.5,-1.5)--cycle;
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/figs/smallest.fig/smallest-6.tikz.tex b/figs/smallest.fig/smallest-6.tikz.tex
new file mode 100644
index 0000000..a231606
--- /dev/null
+++ b/figs/smallest.fig/smallest-6.tikz.tex
@@ -0,0 +1,15 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usepackage{dimer}
+
+\begin{document}
+\begin{tikzpicture}
+
+\fill[color=gray](1,0.5)--++(1,0)--++(0.5,0.5)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--cycle;
+\grid{3}{2}{[color=lightgray](0,0)}
+\draw[color=black, line width=5pt](1,0.5)--++(1,0)--++(0.5,0.5)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--cycle;
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/libs/constants.sty b/libs/constants.sty
new file mode 100644
index 0000000..d15deb5
--- /dev/null
+++ b/libs/constants.sty
@@ -0,0 +1,32 @@
+%%
+%% constants package:
+%% automatically numbered constants
+%%
+
+%% TeX format
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+%% package name
+\ProvidesPackage{constants}[2016/11/19]
+
+%% declare new constant
+\def\cst#1#2{%
+ % check whether the constant was defined
+ \ifcsname cst@#1@#2\endcsname%
+ #1_{\csname cst@#1@#2\endcsname}%
+ \else%
+ % check whether this character has a counter associated to it
+ \ifcsname thecst@#1@@count\endcsname%
+ \else%
+ \newcounter{cst@#1@@count}%
+ \fi%
+ % increment counter
+ \stepcounter{cst@#1@@count}%
+ \expandafter\xdef\csname cst@#1@#2\endcsname{\csname thecst@#1@@count\endcsname}#1_{\csname thecst@#1@@count\endcsname}%
+ \fi
+}
+
+
+%% end
+\endinput
+
diff --git a/libs/ian.cls b/libs/ian.cls
new file mode 100644
index 0000000..f847d0a
--- /dev/null
+++ b/libs/ian.cls
@@ -0,0 +1,658 @@
+%%
+%% Ian's class file
+%%
+
+%% TeX format
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+%% class name
+\ProvidesClass{ian}[2017/09/15]
+
+%% boolean to signal that this class is being used
+\newif\ifianclass
+
+%% options
+% no section numbering in equations
+\DeclareOption{section_in_eq}{\sectionsineqtrue}
+\DeclareOption{section_in_fig}{\sectionsinfigtrue}
+\DeclareOption{section_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
+\DeclareOption{section_in_all}{\sectionsineqtrue\sectionsinfigtrue\PassOptionsToPackage{section_in_theo}{iantheo}}
+\DeclareOption{subsection_in_eq}{\subsectionsineqtrue}
+\DeclareOption{subsection_in_fig}{\subsectionsinfigtrue}
+\DeclareOption{subsection_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
+\DeclareOption{subsection_in_all}{\subsectionsineqtrue\subsectionsinfigtrue\PassOptionsToPackage{subsection_in_theo}{iantheo}}
+\DeclareOption{no_section_in_eq}{\sectionsineqfalse}
+\DeclareOption{no_section_in_fig}{\sectionsinfigfalse}
+\DeclareOption{no_section_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
+\DeclareOption{no_section_in_all}{\sectionsineqfalse\sectionsinfigfalse\PassOptionsToPackage{no_section_in_theo}{iantheo}}
+\DeclareOption{no_subsection_in_eq}{\subsectionsineqfalse}
+\DeclareOption{no_subsection_in_fig}{\subsectionsinfigfalse}
+\DeclareOption{no_subsection_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
+\DeclareOption{no_subsection_in_all}{\subsectionsineqfalse\subsectionsinfigfalse\PassOptionsToPackage{no_subsection_in_theo}{iantheo}}
+% reset point
+\DeclareOption{point_reset_at_section}{\PassOptionsToPackage{reset_at_section}{point}}
+\DeclareOption{point_no_reset_at_section}{\PassOptionsToPackage{no_reset_at_section}{point}}
+\DeclareOption{point_reset_at_theo}{\PassOptionsToPackage{reset_at_theo}{point}}
+\DeclareOption{point_no_reset_at_theo}{\PassOptionsToPackage{no_reset_at_theo}{point}}
+
+\def\ian@defaultoptions{
+ \ExecuteOptions{section_in_all, no_subsection_in_all}
+ \ProcessOptions
+
+ %% required packages
+ \RequirePackage{iantheo}
+ \RequirePackage{point}
+ \RequirePackage{color}
+ \RequirePackage{marginnote}
+ \PassOptionsToPackage{hidelinks}{hyperref}
+ \RequirePackage{hyperref}
+}
+
+%% paper dimensions
+\setlength\paperheight{297mm}
+\setlength\paperwidth{210mm}
+
+%% fonts
+\input{size11.clo}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+
+%% text dimensions
+\hoffset=-50pt
+\voffset=-72pt
+\textwidth=460pt
+\textheight=704pt
+
+
+%% remove default indentation
+\parindent=0pt
+%% indent command
+\def\indent{\hskip20pt}
+
+%% something is wrong with \thepage, redefine it
+\gdef\thepage{\the\c@page}
+
+%% array lines (to use the array environment)
+\setlength\arraycolsep{5\p@}
+\setlength\arrayrulewidth{.4\p@}
+
+
+%% correct vertical alignment at the end of a document
+\AtEndDocument{
+ \vfill
+ \eject
+}
+
+
+%% hyperlinks
+% hyperlinkcounter
+\newcounter{lncount}
+% hyperref anchor
+\def\hrefanchor{%
+\stepcounter{lncount}%
+\hypertarget{ln.\thelncount}{}%
+}
+
+%% define a command and write it to aux file
+\def\outdef#1#2{%
+ % define command%
+ \expandafter\xdef\csname #1\endcsname{#2}%
+ % hyperlink number%
+ \expandafter\xdef\csname #1@hl\endcsname{\thelncount}%
+ % write command to aux%
+ \immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1\endcsname{\csname #1\endcsname}}%
+ \immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1@hl\endcsname{\thelncount}}%
+}
+
+%% can call commands even when they are not defined
+\def\safe#1{%
+ \ifdefined#1%
+ #1%
+ \else%
+ {\color{red}\bf?}%
+ \fi%
+}
+
+%% define a label for the latest tag
+%% label defines a command containing the string stored in \tag
+\def\deflabel{
+ \def\label##1{\expandafter\outdef{label@##1}{\safe\tag}}
+
+ \def\ref##1{%
+ % check whether the label is defined (hyperlink runs into errors if this check is omitted)
+ \ifcsname label@##1@hl\endcsname%
+ \hyperlink{ln.\csname label@##1@hl\endcsname}{{\color{blue}\safe\csname label@##1\endcsname}}%
+ \else%
+ \ifcsname label@##1\endcsname%
+ {\color{blue}\csname ##1\endcsname}%
+ \else%
+ {\bf ??}%
+ \fi%
+ \fi%
+ }
+}
+
+
+%% make a custom link at any given location in the document
+\def\makelink#1#2{%
+ \hrefanchor%
+ \outdef{label@#1}{#2}%
+}
+
+
+%% section command
+% counter
+\newcounter{sectioncount}
+% space before section
+\newlength\secskip
+\setlength\secskip{40pt}
+% a prefix to put before the section number, e.g. A for appendices
+\def\sectionprefix{}
+% define some lengths
+\newlength\secnumwidth
+\newlength\sectitlewidth
+\def\section#1{
+ % reset counters
+ \stepcounter{sectioncount}
+ \setcounter{subsectioncount}{0}
+ \ifsectionsineq
+ \setcounter{seqcount}0
+ \fi
+ \ifsectionsinfig
+ \setcounter{figcount}0
+ \fi
+
+ % space before section (if not first)
+ \ifnum\thesectioncount>1
+ \vskip\secskip
+ \penalty-1000
+ \fi
+
+ % hyperref anchor
+ \hrefanchor
+ % define tag (for \label)
+ \xdef\tag{\sectionprefix\thesectioncount}
+
+ % get widths
+ \def\@secnum{{\bf\Large\sectionprefix\thesectioncount.\hskip10pt}}
+ \settowidth\secnumwidth{\@secnum}
+ \setlength\sectitlewidth\textwidth
+ \addtolength\sectitlewidth{-\secnumwidth}
+
+ % print name
+ \parbox{\textwidth}{
+ \@secnum
+ \parbox[t]{\sectitlewidth}{\Large\bf #1}}
+
+ % write to table of contents
+ \iftoc
+ % save lncount in aux variable which is written to toc
+ \immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@sec.\thesectioncount\endcsname{\thelncount}}
+ \write\tocoutput{\noexpand\tocsection{#1}{\thepage}}
+ \fi
+
+ %space
+ \par\penalty10000
+ \bigskip\penalty10000
+}
+
+%% subsection
+% counter
+\newcounter{subsectioncount}
+% space before subsection
+\newlength\subsecskip
+\setlength\subsecskip{30pt}
+\def\subsection#1{
+ % counters
+ \stepcounter{subsectioncount}
+ \setcounter{subsubsectioncount}{0}
+ \ifsubsectionsineq
+ \setcounter{seqcount}0
+ \fi
+ \ifsubsectionsinfig
+ \setcounter{figcount}0
+ \fi
+
+ % space before subsection (if not first)
+ \ifnum\thesubsectioncount>1
+ \vskip\subsecskip
+ \penalty-500
+ \fi
+
+ % hyperref anchor
+ \hrefanchor
+ % define tag (for \label)
+ \xdef\tag{\sectionprefix\thesectioncount.\thesubsectioncount}
+
+ % get widths
+ \def\@secnum{{\bf\large\hskip.5cm\sectionprefix\thesectioncount.\thesubsectioncount.\hskip5pt}}
+ \settowidth\secnumwidth{\@secnum}
+ \setlength\sectitlewidth\textwidth
+ \addtolength\sectitlewidth{-\secnumwidth}
+ % print name
+ \parbox{\textwidth}{
+ \@secnum
+ \parbox[t]{\sectitlewidth}{\large\bf #1}}
+
+ % write to table of contents
+ \iftoc
+ % save lncount in aux variable which is written to toc
+ \immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@subsec.\thesectioncount.\thesubsectioncount\endcsname{\thelncount}}
+ \write\tocoutput{\noexpand\tocsubsection{#1}{\thepage}}
+ \fi
+
+ % space
+ \par\penalty10000
+ \medskip\penalty10000
+}
+
+%% subsubsection
+% counter
+\newcounter{subsubsectioncount}
+% space before subsubsection
+\newlength\subsubsecskip
+\setlength\subsubsecskip{20pt}
+\def\subsubsection#1{
+ % counters
+ \stepcounter{subsubsectioncount}
+
+ % space before subsubsection (if not first)
+ \ifnum\thesubsubsectioncount>1
+ \vskip\subsubsecskip
+ \penalty-500
+ \fi
+
+ % hyperref anchor
+ \hrefanchor
+ % define tag (for \label)
+ \xdef\tag{\sectionprefix\thesectioncount.\thesubsectioncount.\thesubsubsectioncount}
+
+ % get widths
+ \def\@secnum{{\bf\hskip1.cm\sectionprefix\thesectioncount.\thesubsectioncount.\thesubsubsectioncount.\hskip5pt}}
+ \settowidth\secnumwidth{\@secnum}
+ \setlength\sectitlewidth\textwidth
+ \addtolength\sectitlewidth{-\secnumwidth}
+ % print name
+ \parbox{\textwidth}{
+ \@secnum
+ \parbox[t]{\sectitlewidth}{\large\bf #1}}
+
+ % write to table of contents
+ \iftoc
+ % save lncount in aux variable which is written to toc
+ \immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@subsubsec.\thesectioncount.\thesubsectioncount.\thesubsubsectioncount\endcsname{\thelncount}}
+ \write\tocoutput{\noexpand\tocsubsubsection{#1}{\thepage}}
+ \fi
+
+ % space
+ \par\penalty10000
+ \medskip\penalty10000
+}
+
+%% itemize
+\newlength\itemizeskip
+% left margin for items
+\setlength\itemizeskip{20pt}
+\newlength\itemizeseparator
+% space between the item symbol and the text
+\setlength\itemizeseparator{5pt}
+% penalty preceding an itemize
+\newcount\itemizepenalty
+\itemizepenalty=0
+% counter counting the itemize level
+\newcounter{itemizecount}
+
+% item symbol
+\def\itemizept#1{
+ \ifnum#1=1
+ \textbullet
+ \else
+ $\scriptstyle\blacktriangleright$
+ \fi
+}
+
+
+\newlength\current@itemizeskip
+\setlength\current@itemizeskip{0pt}
+\def\itemize{%
+ \par\expandafter\penalty\the\itemizepenalty\medskip\expandafter\penalty\the\itemizepenalty%
+ \addtocounter{itemizecount}{1}%
+ \addtolength\current@itemizeskip{\itemizeskip}%
+ \leftskip\current@itemizeskip%
+}
+\def\enditemize{%
+ \addtocounter{itemizecount}{-1}%
+ \addtolength\current@itemizeskip{-\itemizeskip}%
+ \par\expandafter\penalty\the\itemizepenalty\leftskip\current@itemizeskip%
+ \medskip\expandafter\penalty\the\itemizepenalty%
+}
+\newlength\itempt@total
+\def\item{
+ \settowidth\itempt@total{\itemizept\theitemizecount}
+ \addtolength\itempt@total{\itemizeseparator}
+ \par
+ \medskip
+ \hskip-\itempt@total\itemizept\theitemizecount\hskip\itemizeseparator
+}
+
+
+%% prevent page breaks after itemize
+\newcount\previtemizepenalty
+\def\nopagebreakafteritemize{
+ \previtemizepenalty=\itemizepenalty
+ \itemizepenalty=10000
+}
+%% back to previous value
+\def\restorepagebreakafteritemize{
+ \itemizepenalty=\previtemizepenalty
+}
+
+%% enumerate
+\newcounter{enumerate@count}
+\def\enumerate{
+ \setcounter{enumerate@count}0
+ \let\olditem\item
+ \let\olditemizept\itemizept
+ \def\item{
+ % counter
+ \stepcounter{enumerate@count}
+ % set header
+ \def\itemizept{\theenumerate@count.}
+ % hyperref anchor
+ \hrefanchor
+ % define tag (for \label)
+ \xdef\tag{\theenumerate@count}
+ \olditem
+ }
+ \itemize
+}
+\def\endenumerate{
+ \enditemize
+ \let\item\olditem
+ \let\itemizept\olditemizept
+}
+
+
+%% equation numbering
+% counter
+\newcounter{seqcount}
+% booleans (write section or subsection in equation number)
+\newif\ifsectionsineq
+\newif\ifsubsectionsineq
+\def\seqcount{
+ \stepcounter{seqcount}
+ % the output
+ \edef\seqformat{\theseqcount}
+ % add subsection number
+ \ifsubsectionsineq
+ \let\tmp\seqformat
+ \edef\seqformat{\thesubsectioncount.\tmp}
+ \fi
+ % add section number
+ \ifsectionsineq
+ \let\tmp\seqformat
+ \edef\seqformat{\sectionprefix\thesectioncount.\tmp}
+ \fi
+ % define tag (for \label)
+ \xdef\tag{\seqformat}
+ % write number
+ \marginnote{\hfill(\seqformat)}
+}
+%% equation environment compatibility
+\def\equation{\hrefanchor$$\seqcount}
+\def\endequation{$$\@ignoretrue}
+
+
+%% figures
+% counter
+\newcounter{figcount}
+% booleans (write section or subsection in equation number)
+\newif\ifsectionsinfig
+\newif\ifsubsectionsinfig
+% width of figures
+\newlength\figwidth
+\setlength\figwidth\textwidth
+\addtolength\figwidth{-2.5cm}
+% caption
+\def\defcaption{
+ \long\def\caption##1{
+ \stepcounter{figcount}
+
+ % hyperref anchor
+ \hrefanchor
+
+ % the number of the figure
+ \edef\figformat{\thefigcount}
+ % add subsection number
+ \ifsubsectionsinfig
+ \let\tmp\figformat
+ \edef\figformat{\thesubsectioncount.\tmp}
+ \fi
+ % add section number
+ \ifsectionsinfig
+ \let\tmp\figformat
+ \edef\figformat{\sectionprefix\thesectioncount.\tmp}
+ \fi
+
+ % define tag (for \label)
+ \xdef\tag{\figformat}
+
+ % write
+ \hfil fig \figformat: \parbox[t]{\figwidth}{\leavevmode\small##1}
+
+ % space
+ \par\bigskip
+ }
+}
+%% short caption: centered
+\def\captionshort#1{
+ \stepcounter{figcount}
+
+ % hyperref anchor
+ \hrefanchor
+
+ % the number of the figure
+ \edef\figformat{\thefigcount}
+ % add section number
+ \ifsectionsinfig
+ \let\tmp\figformat
+ \edef\figformat{\sectionprefix\thesectioncount.\tmp}
+ \fi
+
+ % define tag (for \label)
+ \xdef\tag{\figformat}
+
+ % write
+ \hfil fig \figformat: {\small#1}
+
+ %space
+ \par\bigskip
+}
+
+%% environment
+\def\figure{
+ \par
+ \vfil\penalty100\vfilneg
+ \bigskip
+}
+\def\endfigure{
+ \par
+ \vfil\penalty100\vfilneg
+ \bigskip
+}
+
+
+%% start appendices
+\def\appendix{
+ \vfill
+ \pagebreak
+
+ % counter
+ \setcounter{sectioncount}0
+
+ % prefix
+ \def\sectionprefix{A}
+
+ % write
+ {\bf \LARGE Appendices}\par\penalty10000\bigskip\penalty10000
+
+ % add a mention in the table of contents
+ \iftoc
+ \immediate\write\tocoutput{\noexpand\tocappendices}\penalty10000
+ \fi
+
+ %% uncomment for new page for each appendix
+ %\def\seqskip{\vfill\pagebreak}
+}
+
+
+%% bibliography
+% size of header
+\newlength\bibheader
+\def\thebibliography#1{
+ \hrefanchor
+
+ % add a mention in the table of contents
+ \iftoc
+ % save lncount in aux variable which is written to toc
+ \immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@references\endcsname{\thelncount}}
+ \write\tocoutput{\noexpand\tocreferences{\thepage}}\penalty10000
+ \fi
+
+ % write
+ {\bf \LARGE References}\par\penalty10000\bigskip\penalty10000
+ % width of header
+ \settowidth\bibheader{[#1]}
+ \leftskip\bibheader
+}
+% end environment
+\def\endthebibliography{
+ \par\leftskip0pt
+}
+
+%% bibitem command
+\def\bibitem[#1]#2{%
+ \hrefanchor%
+ \outdef{label@cite#2}{#1}%
+ \hskip-\bibheader%
+ \makebox[\bibheader]{\cite{#2}\hfill}%
+}
+
+%% cite command (adapted from latex.ltx)
+% @tempswa is set to true when there is an optional argument
+\newif\@tempswa
+\def\cite{%
+ % check whether there is an optional argument (if there is none, add on empty '[]')
+ \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}%
+}
+% command with optional argument
+\def\@citex[#1]#2{\leavevmode%
+ % initialize loop
+ \let\@citea\@empty%
+ % format
+ \@cite{%
+ % loop over ',' separated list
+ \@for\@citeb:=#2\do{%
+ % text to add at each iteration of the loop (separator between citations)
+ \@citea\def\@citea{,\ }%
+ % add entry to citelist
+ \@writecitation{\@citeb}%
+ \ref{cite\@citeb}%
+ }%
+ }%
+ % add optional argument text (as an argument to '\@cite')
+ {#1}%
+}
+\def\@cite#1#2{%
+ [#1\if@tempswa , #2\fi]%
+}
+%% add entry to citelist after checking it has not already been added
+\def\@writecitation#1{%
+ \ifcsname if#1cited\endcsname%
+ \else%
+ \expandafter\newif\csname if#1cited\endcsname%
+ \immediate\write\@auxout{\string\citation{#1}}%
+ \fi%
+}
+
+%% table of contents
+% boolean
+\newif\iftoc
+\def\tableofcontents{
+ {\bf \large Table of contents:}\par\penalty10000\bigskip\penalty10000
+
+ % copy content from file
+ \IfFileExists{\jobname.toc}{\input{\jobname.toc}}{{\tt error: table of contents missing}}
+
+ % open new toc
+ \newwrite\tocoutput
+ \immediate\openout\tocoutput=\jobname.toc
+
+ \toctrue
+}
+%% close file
+\AtEndDocument{
+ % close toc
+ \iftoc
+ \immediate\closeout\tocoutput
+ \fi
+}
+
+
+%% fill line with dots
+\def\leaderfill{\leaders\hbox to 1em {\hss. \hss}\hfill}
+
+%% same as sectionprefix
+\def\tocsectionprefix{}
+
+%% toc formats
+\newcounter{tocsectioncount}
+\def\tocsection #1#2{
+ \stepcounter{tocsectioncount}
+ \setcounter{tocsubsectioncount}{0}
+ \setcounter{tocsubsubsectioncount}{0}
+ % write
+ \smallskip\hyperlink{ln.\csname toc@sec.\thetocsectioncount\endcsname}{{\bf \tocsectionprefix\thetocsectioncount}.\hskip5pt {\color{blue}#1}\leaderfill#2}\par
+}
+\newcounter{tocsubsectioncount}
+\def\tocsubsection #1#2{
+ \stepcounter{tocsubsectioncount}
+ \setcounter{tocsubsubsectioncount}{0}
+ % write
+ {\hskip10pt\hyperlink{ln.\csname toc@subsec.\thetocsectioncount.\thetocsubsectioncount\endcsname}{{\bf \thetocsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par
+}
+\newcounter{tocsubsubsectioncount}
+\def\tocsubsubsection #1#2{
+ \stepcounter{tocsubsubsectioncount}
+ % write
+ {\hskip20pt\hyperlink{ln.\csname toc@subsubsec.\thetocsectioncount.\thetocsubsectioncount.\thetocsubsubsectioncount\endcsname}{{\bf \thetocsubsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par
+}
+\def\tocappendices{
+ \medskip
+ \setcounter{tocsectioncount}0
+ {\bf Appendices}\par
+ \smallskip
+ \def\tocsectionprefix{A}
+}
+\def\tocreferences#1{
+ \medskip
+ {\hyperlink{ln.\csname toc@references\endcsname}{{\color{blue}\bf References}\leaderfill#1}}\par
+ \smallskip
+}
+
+
+%% definitions that must be loaded at begin document
+\let\ian@olddocument\document
+\def\document{
+ \ian@olddocument
+
+ \deflabel
+ \defcaption
+}
+
+%% end
+\ian@defaultoptions
+\endinput
diff --git a/libs/iantheo.sty b/libs/iantheo.sty
new file mode 100644
index 0000000..d33a93d
--- /dev/null
+++ b/libs/iantheo.sty
@@ -0,0 +1,162 @@
+%%
+%% iantheorem package:
+%% Ian's customized theorem command
+%%
+
+%% boolean to signal that this package was loaded
+\newif\ifiantheo
+
+%% TeX format
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+%% package name
+\ProvidesPackage{iantheo}[2016/11/10]
+
+%% options
+\newif\ifsectionintheo
+\DeclareOption{section_in_theo}{\sectionintheotrue}
+\DeclareOption{no_section_in_theo}{\sectionintheofalse}
+\newif\ifsubsectionintheo
+\DeclareOption{subsection_in_theo}{\subsectionintheotrue}
+\DeclareOption{no_subsection_in_theo}{\subsectionintheofalse}
+
+\def\iantheo@defaultoptions{
+ \ExecuteOptions{section_in_theo, no_subsection_in_theo}
+ \ProcessOptions
+
+ %%% reset at every new section
+ \ifsectionintheo
+ \let\iantheo@oldsection\section
+ \gdef\section{\setcounter{theocount}{0}\iantheo@oldsection}
+ \fi
+
+ %% reset at every new subsection
+ \ifsubsectionintheo
+ \let\iantheo@oldsubsection\subsection
+ \gdef\subsection{\setcounter{theocount}{0}\iantheo@oldsubsection}
+ \fi
+}
+
+
+%% delimiters
+\def\delimtitle#1{
+ \par%
+ \leavevmode%
+ \raise.3em\hbox to\hsize{%
+ \lower0.3em\hbox{\vrule height0.3em}%
+ \hrulefill%
+ \ \lower.3em\hbox{#1}\ %
+ \hrulefill%
+ \lower0.3em\hbox{\vrule height0.3em}%
+ }%
+ \par\penalty10000%
+}
+
+%% callable by ref
+\def\delimtitleref#1{
+ \par%
+%
+ \ifdefined\ianclass%
+ % hyperref anchor%
+ \hrefanchor%
+ % define tag (for \label)%
+ \xdef\tag{#1}%
+ \fi%
+%
+ \leavevmode%
+ \raise.3em\hbox to\hsize{%
+ \lower0.3em\hbox{\vrule height0.3em}%
+ \hrulefill%
+ \ \lower.3em\hbox{\bf #1}\ %
+ \hrulefill%
+ \lower0.3em\hbox{\vrule height0.3em}%
+ }%
+ \par\penalty10000%
+}
+
+%% no title
+\def\delim{
+ \par%
+ \leavevmode\raise.3em\hbox to\hsize{%
+ \lower0.3em\hbox{\vrule height0.3em}%
+ \hrulefill%
+ \lower0.3em\hbox{\vrule height0.3em}%
+ }%
+ \par\penalty10000%
+}
+
+%% end delim
+\def\enddelim{
+ \par\penalty10000%
+ \leavevmode%
+ \raise.3em\hbox to\hsize{%
+ \vrule height0.3em\hrulefill\vrule height0.3em%
+ }%
+ \par%
+}
+
+
+%% theorem
+% counter
+\newcounter{theocount}
+% booleans (write section or subsection in equation number)
+\def\theo#1{
+ \stepcounter{theocount}
+ \ifdefined\ianclass
+ % hyperref anchor
+ \hrefanchor
+ \fi
+ % the number
+ \def\formattheo{\thetheocount}
+ % add subsection number
+ \ifsubsectionintheo
+ \let\tmp\formattheo
+ \edef\formattheo{\thesubsectioncount.\tmp}
+ \fi
+ % add section number
+ \ifsectionintheo
+ \let\tmp\formattheo
+ \edef\formattheo{\sectionprefix\thesectioncount.\tmp}
+ \fi
+ % define tag (for \label)
+ \xdef\tag{\formattheo}
+ % write
+ \delimtitle{\bf #1 \formattheo}
+}
+\let\endtheo\enddelim
+%% theorem headers with name
+\def\theoname#1#2{
+ \theo{#1}\hfil({\it #2})\par\penalty10000\medskip%
+}
+
+
+%% qed symbol
+\def\qedsymbol{$\square$}
+\def\qed{\penalty10000\hfill\penalty10000\qedsymbol}
+
+
+%% compatibility with article class
+\ifdefined\ianclasstrue
+ \relax
+\else
+ \def\thesectioncount{\thesection}
+ \def\thesubsectioncount{\thesubsection}
+ \def\sectionprefix{}
+\fi
+
+
+%% prevent page breaks after displayed equations
+\newcount\prevpostdisplaypenalty
+\def\nopagebreakaftereq{
+ \prevpostdisplaypenalty=\postdisplaypenalty
+ \postdisplaypenalty=10000
+}
+%% back to previous value
+\def\restorepagebreakaftereq{
+ \postdisplaypenalty=\prevpostdisplaypenalty
+}
+
+
+%% end
+\iantheo@defaultoptions
+\endinput
diff --git a/libs/largearray.sty b/libs/largearray.sty
new file mode 100644
index 0000000..ad5753b
--- /dev/null
+++ b/libs/largearray.sty
@@ -0,0 +1,19 @@
+%%
+%% largearray package:
+%% Array spanning the entire line
+%%
+
+%% TeX format
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+%% package name
+\ProvidesPackage{largearray}[2016/11/10]
+
+\RequirePackage{array}
+
+%% array spanning the entire line
+\newlength\largearray@width
+\setlength\largearray@width\textwidth
+\addtolength\largearray@width{-10pt}
+\def\largearray{\begin{array}{@{}>{\displaystyle}l@{}}\hphantom{\hspace{\largearray@width}}\\[-.5cm]}
+\def\endlargearray{\end{array}}
diff --git a/libs/point.sty b/libs/point.sty
new file mode 100644
index 0000000..9f983dc
--- /dev/null
+++ b/libs/point.sty
@@ -0,0 +1,106 @@
+%%
+%% Points package:
+%% \point commands
+%%
+
+%% TeX format
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+%% package name
+\ProvidesPackage{point}[2017/06/13]
+
+%% options
+\newif\ifresetatsection
+\DeclareOption{reset_at_section}{\resetatsectiontrue}
+\DeclareOption{no_reset_at_section}{\resetatsectionfalse}
+\newif\ifresetatsubsection
+\DeclareOption{reset_at_subsection}{\resetatsubsectiontrue}
+\DeclareOption{no_reset_at_subsection}{\resetatsubsectionfalse}
+\newif\ifresetattheo
+\DeclareOption{reset_at_theo}{\resetattheotrue}
+\DeclareOption{no_reset_at_theo}{\resetattheofalse}
+
+\def\point@defaultoptions{
+ \ExecuteOptions{reset_at_section, reset_at_subsection, no_reset_at_theo}
+ \ProcessOptions
+
+ %% reset at every new section
+ \ifresetatsection
+ \let\point@oldsection\section
+ \gdef\section{\resetpointcounter\point@oldsection}
+ \fi
+ %% reset at every new subsection
+ \ifresetatsubsection
+ \let\point@oldsubsection\subsection
+ \gdef\subsection{\resetpointcounter\point@oldsubsection}
+ \fi
+
+ %% reset at every new theorem
+ \ifresetattheo
+ \ifdefined\iantheotrue
+ \let\point@oldtheo\theo
+ \gdef\theo{\resetpointcounter\point@oldtheo}
+ \fi
+ \fi
+}
+
+
+%% point
+% counter
+\newcounter{pointcount}
+\def\point{
+ \stepcounter{pointcount}
+ \setcounter{subpointcount}{0}
+ % hyperref anchor (only if the class is 'ian')
+ \ifdefined\ifianclass
+ \hrefanchor
+ % define tag (for \label)
+ \xdef\tag{\thepointcount}
+ \fi
+ % header
+ \indent{\bf \thepointcount\ - }
+}
+
+%% subpoint
+% counter
+\newcounter{subpointcount}
+\def\subpoint{
+ \stepcounter{subpointcount}
+ \setcounter{subsubpointcount}0
+ % hyperref anchor (only if the class is 'ian')
+ \ifdefined\ifianclass
+ \hrefanchor
+ % define tag (for \label)
+ \xdef\tag{\thepointcount-\thesubpointcount}
+ \fi
+ % header
+ \indent\hskip.5cm{\bf \thepointcount-\thesubpointcount\ - }
+}
+
+%% subsubpoint
+% counter
+\newcounter{subsubpointcount}
+\def\subsubpoint{
+ \stepcounter{subsubpointcount}
+ % hyperref anchor (only if the class is 'ian')
+ \ifdefined\ifianclass
+ \hrefanchor
+ % define tag (for \label)
+ \xdef\tag{\thepointcount-\thesubpointcount-\thesubsubpointcount}
+ \fi
+ \indent\hskip1cm{\bf \thepointcount-\thesubpointcount-\thesubsubpointcount\ - }
+}
+
+
+%% reset point counters
+\def\resetpointcounter{
+ \setcounter{pointcount}{0}
+ \setcounter{subpointcount}{0}
+ \setcounter{subsubpointcount}{0}
+}
+
+
+
+%% end
+\point@defaultoptions
+\endinput