\chapter{The in-medium similarity renormalization group}\label{ch:imsrg}

The in-medium similarity renormalization group
is a modern \abinitio{} many-body method
that extends the renormalization group approach of decoupling energy scales
to many-body calculations.
It is a non-perturbative many-body expansion method,
in the same vein as coupled cluster,
but it operates on the operators rather than the wave function.
It is remarkably flexible,
with favorable scaling with system size
and the ability to target many different observables,
and its invention and development has contributed strongly
to the rapid expansion of \abinitio{} theoretical calculations of medium-mass nuclei.
In this chapter, we introduce the IMSRG formalism.
We then discuss the topics of truncation scheme, generator selection,
and approaches to solving the flow equations.

\section{Basic formalism}

As a reminder from Section~\ref{sec:srg},
the idea behind the SRG is
the construction of a continuous unitary transformation of the Hamiltonian
\begin{equation}
  H(s) = U(s) H U^{\dagger}(s)\,,
\end{equation}
which can be obtained by solving the flow equation
\begin{equation}\label{eq:srg_flow_equation_imsrg}
  \frac{d H(s)}{ds} = [\eta(s), H(s)]\,,
\end{equation}
with the anti-Hermitian generator $\eta(s)$.
The solution of this flow equation with vacuum normal-ordered operators,
the free-space SRG,
is appealing in that the evolved operators are not system specific
and can be generally used for many-body calculations of nuclei and nuclear matter.
However, the free-space SRG evolution can only be done consistently
in the two- and three-body spaces for nuclear systems,
leaving out induced higher-body operators.

The idea behind the IMSRG is to solve Eq.~\eqref{eq:srg_flow_equation_imsrg} in-medium,
that is, to normal order with respect to a reference state before solving the flow equations.
Starting from a Hamiltonian with a one-, two- and three-body part
\begin{equation}
  H = \onebodyop{H} + \twobodyop{H} + \threebodyop{H}\,,
\end{equation}
our normal-ordered Hamiltonian matrix elements are given by
\begin{align}
  E             & \equiv \hnozero = \sum_i \onebodyop{H}_{ii} + \frac{1}{2}\sum_{ij} \twobodyop{H}_{ijij} + \frac{1}{6} \sum_{ijk} \threebodyop{H}_{ijkijk}\,, \\
  f_{pq}        & \equiv \hnoone_{pq} = \onebodyop{H}_{pq} + \sum_i \twobodyop{H}_{piqi} + \frac{1}{2} \sum_{ij} \threebodyop{H}_{pijqij} \,,                  \\
  \Gamma_{pqrs} & \equiv \hnotwo_{pqrs} = \twobodyop{H}_{pqrs} + \sum_i \threebodyop{H}_{pqirsi} \,,                                                           \\
  W_{pqrstu}    & \equiv \hnothree_{pqrstu} = \threebodyop{H}_{pqrstu} \,,
\end{align}
where we have introduced the conventional names
for zero-, one-, two-, and three-body normal-ordered parts of the Hamiltonian,
$E$, $f$, $\Gamma$, and $W$,
used in the literature.
As a reminder,
indices $p$, $q$, $r$, \ldots\ run over all single-particle states,
indices $i$, $j$, $k$, \ldots\ run over holes,
single-particle states occupied in the reference state,
and indices $a$, $b$, $c$, \ldots\ run over particles,
single-particle states unoccupied in the reference state.

In general, the generator $\eta(s)$ has one- through $A$-body normal-ordered parts
\begin{equation}
  \eta(s) = \sum_{i=1}^A \eta^{(i)}(s)\,.
\end{equation}
For now, we leave $\eta(s)$ unspecified beyond its required anti-Hermiticity,
which causes it to not have a zero-body part.
We discuss the choice of generator in Section~\ref{sec:imsrg_generator}.
Concretely, our initial normal-ordered Hamiltonian is
\begin{equation}
  \begin{split}
    H = &\,E
    + \sum_{pq} f_{pq} \noref{\crea{p} \annih{q}} \\
    &+ \frac{1}{{(2!)}^2} \sum_{pqrs} \Gamma_{pqrs} \noref{\crea{p} \crea{q} \annih{s} \annih{r}}\\
    &+ \frac{1}{{(3!)}^2} \sum_{pqrstu} W_{pqrstu} \noref{\crea{p} \crea{q} \crea{r} \annih{u} \annih{t} \annih{s}}\,,
  \end{split}
\end{equation}
and our generator is
\begin{equation}
  \begin{split}
    \eta(s) = &
    \sum_{pq} \eta^{(1)}_{pq}(s) \noref{\crea{p} \annih{q}} \\
    &+ \frac{1}{{(2!)}^2} \sum_{pqrs} \eta^{(2)}_{pqrs}(s) \noref{\crea{p} \crea{q} \annih{s} \annih{r}}\\
    &+ \frac{1}{{(3!)}^2} \sum_{pqrstu} \eta^{(3)}_{pqrstu}(s) \noref{\crea{p} \crea{q} \crea{r} \annih{u} \annih{t} \annih{s}}\\
    &+ \ldots \,.
  \end{split}
\end{equation}

The evaluation of the right-hand side of Eq.~\eqref{eq:srg_flow_equation_imsrg} then reduces to
the evaluation of commutators of normal-ordered products,
\begin{equation}
  \left[\noref{\crea{p_1} \ldots \crea{p_M} \annih{q_M} \ldots \annih{q_1}},
    \noref{\crea{r_1} \ldots \crea{r_N} \annih{s_N} \ldots \annih{s_1}}\right]\,,
\end{equation}
which can be simplified into a sum of normal-ordered operators
using the generalized Wick's theorem [see Eq.~\eqref{eq:gen_wicks_theorem}].
The commutator of a $K$-body operator $A^{(K)}$ and an $L$-body operator $B^{(L)}$
will in general have contributions of $|K-L|$-body operators through $K+L-1$-body operators,
\begin{equation}
  [A^{(K)}, B^{(L)}] = \sum_{M=|K-L|}^{K+L-1}C^{(M)}\,.
\end{equation}

The right-hand side can then be broken up into zero- through $A$-body parts.
We then identify the zero-body part of the right-hand side with $dE/ds$,
the one-body part with $df_{pq}/ds$, and so on.
This makes it obvious that
even if the initial Hamiltonian and generator contain only up to three-body operators
the IMSRG evolution induces higher-body operators,
all the way up to $A$-body operators after a couple integration steps,
resulting in coupled flow equations for the zero- through $A$-body parts
of the Hamiltonian.
Note that one must also ensure the antisymmetry of the right-hand sides of the two-,
three-, and higher-body flow equations
so the matrix elements remain antisymmetric.

The discussion here has been focused on the Hamiltonian,
but the IMSRG can also be used to evolve other operators,
\begin{equation}
  \frac{dO}{ds} = \comm{\eta(s)}{O(s)}\,,
\end{equation}
where $O$ has also been normal ordered with respect to our reference state $\refgnd$.
Since the generator $\eta(s)$ should be the same for the evolution of $H$ and $O$
and the reconstruction of the unitary transformation from the evolved form of $H$
is not possible,
$H$ and $O$ must naively be evolved simultaneously.
In Section~\ref{sec:imsrg_magnus}, we discuss an alternative approach to solving the IMSRG flow equations
that allows for the construction of the unitary transformation,
resulting in easy evolution of other operators along with the Hamiltonian.

\section{Truncation schemes}

As is the case with the free-space SRG,
it is not feasible to do the full $A$-body evolution,
and the flow equations must be truncated at some $B$-body level.
However, the situation is not quite the same as with the free-space SRG.\@
Because the initial normal ordering shifts information about higher-body operators
into lower-body normal-ordered operators
and the continuous normal ordering absorbs information about induced higher-body operators
into lower-body normal-ordered operators,
the truncated IMSRG flow equations still approximately evolve higher-body operators
(in the free-space sense)
using only the reduced $B$-body flow equations.
In the following sections,
we discuss truncating the IMSRG at the two-body and three-body level,
yielding the so-called IMSRG(2) and IMSRG(3) truncations respectively.

\subsection{IMSRG(2)}

Truncating the flow equation at the two-body level amounts to assuming
\begin{align}
  H(s)    & \approx E(s) + f(s) + \Gamma(s)\,,       \\
  \eta(s) & \approx \eta^{(1)}(s) + \eta^{(2)}(s)\,.
\end{align}
In this approximation,
we are not including the three-body part of the initial Hamiltonian exactly.
However, the three-body force \textit{does} contribute
as it was used in obtaining the normal-ordered zero-, one-, and two-body parts
of the Hamiltonian.
The only part that is being discarded is the residual three-body part, $W$.
This is known as the normal-ordered two-body (NO2B) approximation,
which has been quite successful in nuclear many-body applications.

Using the generalized Wick's theorem,
which yields the fundamental commutators in Appendix~\ref{app:mscheme_fundamental_commutators}
or also in Appendix A of Ref.~\cite{Herg15imsrgphysrep},
one arrives at the flow equations for the Hamiltonian
\begin{align}
  \phantom{\frac{d\Gamma_{ijkl}}{ds}}
   & \begin{aligned}
    \mathllap{\frac{dE}{ds}} & = \sum_{ab} n_{a} \bar{n}_{b}
    (\genone_{ab} f_{ba} - f_{ab} \genone_{ba})                                              \\
                             & \quad + \frac{1}{4} \sum_{abcd} n_{a}n_{b}\bar{n}_c \bar{n}_d
    (\gentwo_{abcd} \Gamma_{cdab} - \Gamma_{abcd}\gentwo_{cdab})\,,
  \end{aligned}\label{eq:imsrg2_0body} \\
   & \begin{aligned}
    \mathllap{\frac{df_{ij}}{ds}} & =
    \sum_{a}(\genone_{ia} f_{aj} - f_{ia} \genone_{aj})                                                          \\
                                  & \quad+\sum_{ab}(n_a - n_b)(\genone_{ab}\Gamma_{biaj} - f_{ab}\gentwo_{biaj}) \\
                                  & \quad+\frac{1}{2}\sum_{abc}(\bar{n}_a \bar{n}_b n_c + n_a n_b \bar{n}_c)
    (\gentwo_{ciab} \Gamma_{abcj} - \Gamma_{ciab} \gentwo_{abcj})\,,
  \end{aligned}\label{eq:imsrg2_1body} \\
   & \begin{aligned}
    \mathllap{\frac{d\Gamma_{ijkl}}{ds}} & =
    \sum_{a}(1 - P_{ij})(\genone_{ia}\Gamma_{ajkl} - f_{ia}\gentwo_{ajkl})                                                                            \\
                                         & \quad - \sum_{a}(1 - P_{kl})(\genone_{ak}\Gamma_{ijal} - f_{ak}\gentwo_{ijal})                             \\
                                         & \quad + \frac{1}{2}\sum_{ab}(1 - n_{a} - n_{b})(\gentwo_{ijab}\Gamma_{abkl} - \Gamma_{ijab}\gentwo_{abkl}) \\
                                         & \quad + \sum_{ab} (n_a - n_b)(1 - P_{ij})(1 - P_{kl})\gentwo_{aibk}\Gamma_{bjal}\,,
  \end{aligned}\label{eq:imsrg2_2body}
\end{align}
where $n_p$ are the occupation numbers of the reference state,
$\bar{n}_p \equiv 1 - n_p$,
the $s$-dependence has been suppressed,
and the permutation operator $P_{pq}$ exchanges the indices $p$ and $q$
in the following expression.
We have broken our usual notation for single-particle index labels
to adopt the following convention for the IMSRG flow equations:
the indices $i$,~$j$,~\ldots\ are for external indices
(indices on the flowing Hamiltonian),
and the indices $a$,~$b$,~\ldots\ are for contracted indices,
which are summed over in the flow equation.

Eqs.~\eqref{eq:imsrg2_0body}-\eqref{eq:imsrg2_2body} are solved by integrating
from $s=0$ towards $s\rightarrow\infty$ with the initial conditions
$E(0) = E$, $f(0) = f$, and $\Gamma(0)=\Gamma$.
Given appropriate decoupling (see Section~\ref{sec:imsrg_generator}),
$E(\infty)$ gives the energy of the state targeted by the reference state,
for our applications typically the ground state.
The cost of this integration is dominated by the final two terms in Eq.~\eqref{eq:imsrg2_2body},
which scale like $\mathcal{O}(N^6)$,
where $N$ is the size of the single-particle basis for the calculation.
Another nice property is that the flow equation,
due to being a commutator many-body expansion,
generates only connected diagrams and thus ensures size extensivity~\cite{Herg15imsrgphysrep}.
This is true for any $B$-body truncation.

\subsection{IMSRG(3)}\label{sec:imsrgthree}

Truncating at the three-body level allows one to exactly include initial three-body forces.
One assumes
\begin{align}
  H(s)    & \approx E(s) + f(s) + \Gamma(s) + W(s)\,,         \\
  \eta(s) & \approx \genone(s) + \gentwo(s) + \genthree(s)\,,
\end{align}
yielding additional terms with commutators of $\genthree$ and $W$
with zero- through two-body operators
and a commutator between $\genthree$ and $W$.
The flow equations are
\begin{align}
  \phantom{\frac{dW_{ijklmn}}{ds}}
   & \begin{aligned}
    \mathllap{\frac{dE}{ds}} & = \sum_{ab} n_{a} \bar{n}_{b}
    (\genone_{ab} f_{ba} - f_{ab} \genone_{ba})                                                            \\
                             & \quad + \frac{1}{4} \sum_{abcd} n_{a}n_{b}\bar{n}_c \bar{n}_d
    (\gentwo_{abcd} \Gamma_{cdab} - \Gamma_{abcd}\gentwo_{cdab})                                           \\
                             & \quad + \frac{1}{36}\sum_{abcdef} n_a n_b n_c \bar{n}_d \bar{n}_e \bar{n}_f
    (\genthree_{abcdef} W_{defabc} - W_{abcdef} \genthree_{defabc})\,,
  \end{aligned}\label{eq:imsrg3_0body} \\
   & \begin{aligned}
    \mathllap{\frac{df_{ij}}{ds}} & =
    \sum_{a}(\genone_{ia} f_{aj} - f_{ia} \genone_{aj})                                                                       \\
                                  & \quad+\sum_{ab}(n_a - n_b)(\genone_{ab}\Gamma_{biaj} - f_{ab}\gentwo_{biaj})              \\
                                  & \quad+\frac{1}{2}\sum_{abc}(\bar{n}_a \bar{n}_b n_c + n_a n_b \bar{n}_c)
    (\gentwo_{ciab} \Gamma_{abcj} - \Gamma_{ciab} \gentwo_{abcj})                                                             \\
                                  & \quad - \frac{1}{4} \sum_{abcd}(n_a n_b \bar{n}_c \bar{n}_d -\bar{n}_a \bar{n}_b n_c n_d)
    (\gentwo_{cdab} W_{abijcd} - \Gamma_{cdab} \genthree_{abijcd})                                                            \\
                                  & \quad + \frac{1}{12}\sum_{abcde}
    (n_a n_b \bar{n}_c \bar{n}_d \bar{n}_e + \bar{n}_a \bar{n}_b n_c n_d n_e)
    (\genthree_{abicde} W_{cdeabj} - W_{abicde} \genthree_{cdeabj})\,,
  \end{aligned}\label{eq:imsrg3_1body} \\
   & \begin{aligned}
    \mathllap{\frac{d\Gamma_{ijkl}}{ds}} & =
    \sum_{a}(1 - P_{ij})(\genone_{ia}\Gamma_{ajkl} - f_{ia}\gentwo_{ajkl})                                                                            \\
                                         & \quad - \sum_{a}(1 - P_{kl})(\genone_{ak}\Gamma_{ijal} - f_{ak}\gentwo_{ijal})                             \\
                                         & \quad + \frac{1}{2}\sum_{ab}(1 - n_{a} - n_{b})(\gentwo_{ijab}\Gamma_{abkl} - \Gamma_{ijab}\gentwo_{abkl}) \\
                                         & \quad + \sum_{ab} (n_a - n_b)(1 - P_{ij})(1 - P_{kl})\gentwo_{aibk}\Gamma_{bjal}                           \\
                                         & \quad + \sum_{ab} (n_a - n_b)(\genone_{ab} W_{bijakl} - f_{ab} \genthree_{bijakl})                         \\
                                         & \quad - \frac{1}{2} \sum_{abc} (n_a \bar{n}_b \bar{n}_c + \bar{n}_a n_b n_c)
    (1 - P_{kl})(\gentwo_{bcak} W_{aijbcl} - \Gamma_{bcak} \genthree_{aijbcl})                                                                        \\
                                         & \quad + \frac{1}{2} \sum_{abc} (n_a \bar{n}_b \bar{n}_c + \bar{n}_a n_b n_c)
    (1 - P_{ij})(\gentwo_{bcai} W_{aklbcj} - \Gamma_{bcai} \genthree_{aklbcj})                                                                        \\
                                         & \quad + \frac{1}{6} \sum_{abcd}(n_a \bar{n}_b \bar{n}_c \bar{n}_d -\bar{n}_a n_b n_c n_d)
    (\genthree_{aijbcd} W_{bcdakl} - W_{aijbcd} \genthree_{bcdakl})                                                                                \\
                                         & \quad + \frac{1}{4} \sum_{abcd}(\bar{n}_a \bar{n}_b n_c n_d -n_a n_b \bar{n}_c \bar{n}_d)
    (1 - P_{ij})(1 - P_{kl}) \genthree_{abicdl} W_{cdjabk}\,,
  \end{aligned}\label{eq:imsrg3_2body} \\
   & \begin{aligned}
    \mathllap{\frac{dW_{ijklmn}}{ds}} & =
    \sum_{a} P(i/jk) (\genone_{ia} W_{ajklmn} - f_{ia} \genthree_{ajklmn})                                                     \\
                                      & \quad - \sum_{a} P(l/mn) (\genone_{al} W_{ijkamn} - f_{al} \genthree_{ijkamn})         \\
                                      & \quad + \sum_{a} P(ij/k) P(l/mn)
    (\gentwo_{ijla} \Gamma_{akmn} - \Gamma_{ijla} \gentwo_{akmn})                                                              \\
                                      & \quad + \frac{1}{2} \sum_{ab} (1 - n_a - n_b) P(ij/k)
    (\gentwo_{ijab} W_{abklmn} - \Gamma_{ijab} \genthree_{abklmn})                                                             \\
                                      & \quad - \frac{1}{2} \sum_{ab} (1 - n_a - n_b) P(l/mn)
    (\gentwo_{abmn} W_{ijklab} - \Gamma_{abmn} \genthree_{ijklab})                                                             \\
                                      & \quad + \frac{1}{6} \sum_{abc} (n_a n_b n_c + \bar{n}_a \bar{n}_b \bar{n}_c)
    (\genthree_{ijkabc} W_{abclmn} - W_{ijkabc} \genthree_{abclmn})                                                            \\
                                      & \quad + \frac{1}{2} \sum_{abc} (n_a n_b \bar{n}_c + \bar{n}_a \bar{n}_b n_c)
    P(ij/k)P(l/mn)                                                                                \\
                                      & \qquad \qquad \times (\genthree_{abkcmn} W_{cijabl} -\genthree_{cjkabn} W_{iablmc})\,,
  \end{aligned}\label{eq:imsrg3_3body}
\end{align}
Here, $P(pq/r) = 1 - P_{pr} - P_{qr}$ and $P(p/qr) = 1 - P_{pq} - P_{pr}$
ensure the antisymmetry of the three-body indices.

It is clear that the final two terms in Eq.~\eqref{eq:imsrg3_3body}
dominate the cost of the integration,
scaling like $\mathcal{O}(N^9)$ in the size of our single-particle basis.
In the absence of an initial three-body operator,
the third term in Eq.~\eqref{eq:imsrg3_3body},
the three-body part of the commutator of two two-body operators,
induces a three-body operator,
which leads to the contribution of all other terms later in the integration.

We would also like to note that
in the derivation of the flow equations here
the only assumption that was made was that
two- and three-body matrix elements are appropriately antisymmetric.
In particular, unlike several other references in the literature,
for instance Refs.~\cite{Herg15imsrgphysrep,Tsuk10imsrg},
the flow equations here do not assume $f$, $\Gamma$, and $W$ are Hermitian
(which of course they are).
While this assumption allows for the simplification of certain terms
(nothing that changes the scaling of the terms however),
it limits the expressions to only commutators of anti-Hermitian and Hermitian operators.
In Section~\ref{sec:imsrg_magnus},
we require the commutator of two anti-Hermitian operators,
for which the right-hand sides of
Eqs.~\eqref{eq:imsrg2_0body}-\eqref{eq:imsrg2_2body}
and Eqs.~\eqref{eq:imsrg3_0body}-\eqref{eq:imsrg3_3body}
are equally valid.
For numerical implementations,
it is a good idea to implement each of the fundamental commutators separately,
to allow for validation and fine-grained optimization in the most expensive commutators.

\section{Generator selection}\label{sec:imsrg_generator}

\begin{figure}[t]
  \setlength{\unitlength}{0.8\columnwidth}
  \begin{center}
    \begin{picture}(1.0000,0.5500)
      \put(0.0350,0.0450){\includegraphics[width=0.46\unitlength]{thesis/doc/images/external/H_initial.eps}}
      \put(0.5400,0.0450){\includegraphics[width=0.46\unitlength]{thesis/doc/images/external/H_IMSRG_3ph_decoupling.eps}}
      \put(0.0100,0.0000){\parbox{0.5\unitlength}{\centering$\braket{i|H(0)|j}$}}
      \put(0.5200,0.0000){\parbox{0.5\unitlength}{\centering$\braket{i|H(\infty)|j}$}}

      \put(0.0500,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize0p0h}}
      \put(0.1600,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize1p1h}}
      \put(0.2630,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize2p2h}}
      \put(0.3650,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize3p3h}}
      \put(0.5500,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize0p0h}}
      \put(0.6600,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize1p1h}}
      \put(0.7630,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize2p2h}}
      \put(0.8650,0.5100){\parbox{0.11\unitlength}{\centering\footnotesize3p3h}}
      %
      \put(0.0100,0.4320){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize0p0h}}}
      \put(0.0100,0.3235){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize1p1h}}}
      \put(0.0100,0.2175){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize2p2h}}}
      \put(0.0100,0.1100){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize3p3h}}}

      \put(0.5100,0.4320){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize0p0h}}}
      \put(0.5100,0.3235){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize1p1h}}}
      \put(0.5100,0.2175){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize2p2h}}}
      \put(0.5100,0.1100){\parbox{0.11\unitlength}{\rotatebox{90}{\centering\footnotesize3p3h}}}
    \end{picture}
  \end{center}
  \caption[
    Schematic diagram
    showing the minimal decoupling scheme
    taken in the IMSRG.\@
  ]{\label{fig:imsrg_decoupling}
    Schematic diagram
    showing the minimal decoupling scheme
    taken in the IMSRG.\@
    Figure taken from Ref.~\cite{Herg15imsrgphysrep}.
  }
\end{figure}

So far, we have not discussed specific choices of our generator $\eta$.
The possible definitions of $\eta$ hinge on the specification
of our so-called ``off-diagonal'' Hamiltonian $H_{od}$,
the part of the Hamiltonian we wish to suppress
to ensure appropriate decoupling in the remaining ``diagonal'' part.
In Section~\ref{sec:srg},
we saw that the generator choice
$\eta(s) = \comm{T_{\text{rel}}}{H(s)}$
leads to the decoupling of any two states
with a decay scale set by the difference in their kinetic energy expectation values.
The result is that the Hamiltonian evolves towards a diagonal form,
providing vastly improved convergence
and allowing many-body calculations to use significantly smaller model spaces.

To identify the desired decoupling for the IMSRG,
we begin by considering the Hamiltonian in the basis spanned by
our reference state $\refgnd$ and
$n$-particle $n$-hole ($npnh$) excitations of the reference state,
\begin{equation}
  \{\refgnd, \refhp{i}{a}, \refhp{ij}{ab}, \refhp{ijk}{abc}, \ldots \}\,.
\end{equation}
For a Hamiltonian with only one- and two-body operators,
as is the approximation after normal ordering for the IMSRG(2) truncation,
the Hamiltonian in this basis is schematically represented
in the left panel of Fig.~\ref{fig:imsrg_decoupling}.
It is band-diagonal and only able to couple an $npnh$ excitation
to $(n\pm2)p(n\pm2)h$ excitations.
For a Hamiltonian with a three-body part,
the band diagonal grows to include $(n\pm3)p(n\pm3)h$ excitations.

For the IMSRG,
a decoupling towards a true diagonal form is no longer a good idea,
as one must avoid inducing significant three-body terms in the IMSRG(2)
or four- and higher-body terms in the IMSRG(3)
to maintain the validity of the truncation.
The alternative is a minimal decoupling scheme,
where the sole objective is to decouple the reference state $\refgnd$
from all $npnh$ excitations,
as shown in the right panel of Fig.~\ref{fig:imsrg_decoupling}.
Achieving this decoupling gives us the energy of the state $E$
in the zero-body part of the normal-ordered Hamiltonian
and the corresponding eigenstate by applying the unitary transformation
to the reference state, $U^{\dagger}(\infty)\refgnd$.
For some finite truncation of the flow equations,
this result is of course only approximate.

Now that we know we want to suppress the matrix elements
that couple $\refgnd$ to its excitations,
we want to identify which parts of our normal-ordered Hamiltonian
these matrix elements correspond to.
For the couplings between $\refgnd$ and $1p1h$ excitations, we find
\begin{align}
  \phantom{\braket{\Phi | H |\Phi_{i}^{a}}}
   & \begin{aligned}
    \mathllap{\braket{\Phi | H |\Phi_{i}^{a}}} & = \braket{\Phi | H \noref{\crea{a} \annih{i}}| \Phi}
  \end{aligned} \\
   & \begin{aligned}
    \mathllap{} & = E \braket{\Phi | \noref{\crea{a} \annih{i}} | \Phi}                                               \\
                & \quad + \sum_{pq} f_{pq} \braket{\Phi |\noref{\crea{p}\annih{q}} \noref{\crea{a} \annih{i}} | \Phi} \\
                & \quad + \sum_{pqrs} \Gamma_{pqrs}
    \braket{\Phi |\noref{\crea{p} \crea{q} \annih{s} \annih{r}}\noref{\crea{a} \annih{i}} | \Phi}
  \end{aligned} \\
   & \begin{aligned}
    \mathllap{} & = \sum_{pq} f_{pq} \delta_{pi} \delta_{qa} n_{i} \bar{n}_{a}
  \end{aligned} \\
   & \begin{aligned}
    \mathllap{} & = f_{ia}\,.
  \end{aligned}
\end{align}
Via similar calculations, one finds
\begin{samepage}
  \begin{subequations}
    \begin{align}
      \begin{split}
        \braket{\Phi_{i}^{a} | H | \Phi} &= f_{ai}\,,
      \end{split} \\
      \begin{split}
        \braket{\Phi | H | \Phi_{ij}^{ab}} &= \Gamma_{ijab}\,,
      \end{split} \\
      \begin{split}
        \braket{\Phi_{ij}^{ab} | H | \Phi} &= \Gamma_{abij}\,,
      \end{split} \\
      \begin{split}
        \braket{\Phi | H | \Phi_{ijk}^{abc}} &= W_{ijkabc}\,,
      \end{split} \\
      \begin{split}
        \braket{\Phi_{ijk}^{abc} | H | \Phi} &= W_{abcijk}\,.
      \end{split}
    \end{align}
  \end{subequations}
\end{samepage}
We define our ``off-diagonal'' normal-ordered Hamiltonian then to be
\begin{equation}
  \begin{split}
    H_{od} \equiv & \sum_{ia}\left(f_{ia} \noref{\crea{i}\annih{a}}
    + f_{ai} \noref{\crea{a}\annih{i}}\right) \\
    & + \frac{1}{{(2!)}^2}\sum_{ijab} \left(
    \Gamma_{ijab} \noref{\crea{i}\crea{j}\annih{b}\annih{a}}
    + \Gamma_{abij} \noref{\crea{a}\crea{b}\annih{j}\annih{i}}
    \right) \\
    & + \frac{1}{{(3!)}^2}\sum_{ijkabc} \left(
    W_{ijkabc} \noref{\crea{i}\crea{j}\crea{k}\annih{c}\annih{b}\annih{a}}
    + W_{abcijk} \noref{\crea{a}\crea{b}\crea{c}\annih{k}\annih{j}\annih{i}}
    \right)\,.
  \end{split}
\end{equation}
We are now in a position where we can define generators that suppress these matrix elements
over the course of the flow.

Wegner's original ansatz for the generator of the SRG flow equation is
\begin{equation}
  \eta(s) = \comm{H_d(s)}{H_{od}(s)}\,,
\end{equation}
where $H_d = H - H_{od}$~\cite{Wegn94srg}.
When using $H_{od}$ as defined above,
one can evaluate the commutator truncating at the two- or three-body level
depending on the truncation scheme,
giving the one-, two-, and three-body components of $\eta$
in the same form as Eqs.~\eqref{eq:imsrg3_0body}-\eqref{eq:imsrg3_3body}.
A perturbative analysis of the flow equations with this choice of generator,
as is done in Ref.~\cite{Herg16imsrglecnotes},
reveals that the two-body ``off-diagonal'' matrix elements are suppressed like
\begin{equation}
  \Gamma_{abij}(s) \approx \Gamma_{abij}(0) \exp(-{(\Delta_{abij})}^{2} s)\,,
\end{equation}
where $\Delta_{abij}$ are the energy denominators.
There are multiple options for these energy denominators,
corresponding to different partitionings in MBPT (see Section~\ref{sec:mbpt}).
We choose to focus on the M{\o}ller-Plesset denominators,
with $\Delta_{abij} = \epsilon_{abij}$ from Eq.~\eqref{eq:mp_energy_denom}.
Another alternative is the Epstein-Nesbet denominators
(see Ref.~\cite{Shav09mbpt_cc_book} for details).

We have included the Wegner generator in this discussion for completeness
but will not use it in any applications.
One reason for this is that the Wegner generator is simply more expensive to construct
than the alternatives,
which give explicit expressions for the matrix elements of $\eta$,
resulting in scaling of $\mathcal{O}(N^4)$ and $\mathcal{O}(N^6)$ for IMSRG(2) and IMSRG(3),
respectively.
This is to be contrasted with the evaluation of a full commutator,
which scales like $\mathcal{O}(N^6)$ and $\mathcal{O}(N^9)$ for IMSRG(2) and IMSRG(3).
Additionally, the Wegner generator causes the system of differential equations
to be much more stiff,
making the integration much more expensive
(in terms of storage and computational requirements)
than for other generators.

The following generators directly construct the matrix elements of $\eta$, working with a basic form of
\begin{equation}
  \begin{split}
    \eta \equiv & \sum_{ia}\left(\genone_{ia} \noref{\crea{i}\annih{a}}
    + \genone_{ai} \noref{\crea{a}\annih{i}}\right) \\
    & + \frac{1}{{(2!)}^2} \sum_{ijab} \left(
    \gentwo_{ijab} \noref{\crea{i}\crea{j}\annih{b}\annih{a}}
    + \gentwo_{abij} \noref{\crea{a}\crea{b}\annih{j}\annih{i}}
    \right) \\
    & + \frac{1}{{(3!)}^2} \sum_{ijkabc} \left(
    \genthree_{ijkabc} \noref{\crea{i}\crea{j}\crea{k}\annih{c}\annih{b}\annih{a}}
    + \genthree_{abcijk} \noref{\crea{a}\crea{b}\crea{c}\annih{k}\annih{j}\annih{i}}
    \right)\,,
  \end{split}
\end{equation}
where we note that for $\eta$ to be anti-Hermitian, the matrix elements must fulfill
\begin{subequations}
  \begin{align}
    \begin{split}
      \genone_{ia} &= - \genone_{ai}\,,
    \end{split} \\
    \begin{split}
      \gentwo_{ijab} &= - \gentwo_{abij}\,,
    \end{split} \\
    \begin{split}
      \genthree_{ijkabc} &= - \genthree_{abcijk}\,.
    \end{split}
  \end{align}
\end{subequations}
The White generator corresponds to the choice
\begin{align}
  \genone_{ia}(s)       & = \frac{f_{ia}(s)}{\Delta_{ia}(s)}\,,          \\
  \gentwo_{ijab}(s)     & = \frac{\Gamma_{ijab}(s)}{\Delta_{ijab}(s)}\,, \\
  \genthree_{ijkabc}(s) & = \frac{W_{ijkabc}(s)}{\Delta_{ijkabc}(s)}\,,
\end{align}
where the antisymmetry of the denominators automatically gives the desired anti-Hermiticity~\cite{Whit02generator}.
The White generator suppresses off-diagonal matrix elements like
\begin{equation}
  \Gamma_{abij}(s) \approx \Gamma_{abij}(0) \exp(-s)\,,
\end{equation}
that is, it suppresses all off-diagonal matrix elements with the same decay scale,
regardless of the energy differences between the states.
This is unusual and not strictly speaking in line with the renormalization group approach,
where large energy-difference modes are integrated out first.
However, we are interested in $H(\infty)$ and $E(\infty)$,
and in this limit all generators that suppress $H_{od}$ produce identical results
for $E(\infty)$ and $U^{\dagger}(\infty)\refgnd$,
up to truncation effects.

A potential difficulty with the White generator arises
when one of the energy denominators becomes very small,
leading to large matrix elements of $\eta$
and thus extremely large derivatives in the right-hand side of the flow equation.
This can be mitigated by a variation of the standard White generator,
the arctan generator,
with generator matrix elements defined as
\begin{align}
  \genone_{ia}(s)       & = \frac{1}{2}\text{arctan}\left(\frac{2f_{ia}(s)}{\Delta_{ia}(s)}\right)\,,          \\
  \gentwo_{ijab}(s)     & = \frac{1}{2}\text{arctan}\left(\frac{2\Gamma_{ijab}(s)}{\Delta_{ijab}(s)}\right)\,, \\
  \genthree_{ijkabc}(s) & = \frac{1}{2}\text{arctan}\left(\frac{2W_{ijkabc}(s)}{\Delta_{ijkabc}(s)}\right)\,,
\end{align}
where the arctan function regularizes any possible large matrix elements that arise due to small energy denominators.

The final generator we discuss here is the imaginary-time generator,
which was ostensibly inspired by imaginary-time evolution techniques
in Quantum Monte Carlo methods~\cite{Herg15imsrgphysrep}.
Its matrix elements are defined as
\begin{align}
  \genone_{ia}(s)       & = \text{sign}(\Delta_{ia}(s))f_{ia}(s)\,,          \\
  \gentwo_{ijab}(s)     & = \text{sign}(\Delta_{ijab}(s))\Gamma_{ijab}(s)\,, \\
  \genthree_{ijkabc}(s) & = \text{sign}(\Delta_{ijkabc}(s))W_{ijkabc}(s)\,.
\end{align}
A perturbative analysis of the flow equations with this generator choice shows
that off-diagonal matrix elements are suppressed like
\begin{equation}
  \Gamma_{abij}(s) \approx \Gamma_{abij}(0) \exp(-|\Delta_{abij}|s)\,.
\end{equation}
The sign function in the definition of the generator ensures that
there is an absolute value around the energy denominator in the exponential,
giving a suppression for all matrix elements instead of an enhancement for some.
We also note here that the imaginary-time generator produces a ``proper'' RG flow,
where matrix elements coupling large energy differences are suppressed
before those coupling smaller energy differences.

\section{The Magnus expansion}\label{sec:imsrg_magnus}

Working with Eqs.~\eqref{eq:imsrg2_0body}-\eqref{eq:imsrg2_2body}
and~\eqref{eq:imsrg3_0body}-\eqref{eq:imsrg3_3body},
one can solve the IMSRG by numerically integrating
the system of ordinary differential equations (ODEs)
to obtain the energy and the expectation values of other observables in the targeted state.
This approach has two main challenges:
First, the flow equations need to be solved to high precision,
as otherwise numerical effects destroy the unitarity of the transformation
even in the absence of any truncation.
This necessitates the application of sophisticated ODE solvers
to minimize this numerical error.
These solvers require the allocation of several times the memory requirement
of two- and three-body operators,
which is already quite a lot (on the order of GB or tens of GB),
and the evaluation of each integration step is substantially more expensive
(providing the benefit of reduced accumulated numerical error)
than an Euler method.
This is incidentally also a reason the White, arctan, and imaginary-time generators
are preferred over the Wegner generator,
as the stiffness of the flow equations with the Wegner generator
requires the use of stiff ODE solvers,
which are even more expensive in terms of storage and computational cost
than their non-stiff counterparts.

Second, the evolution of other operators along with the Hamiltonian
requires them to be evolved in parallel in this approach.
This means that for every additional operator the memory and computational cost
increases by the amount that it would cost to just solve the Hamiltonian.
Furthermore, additional operators may increase the stiffness of the system of ODEs
as the integration scales for their matrix elements may differ from the Hamiltonian.
This challenge can be alleviated by the ability to construct the unitary transformation
for the evolution, $U(s)$.

This is the goal of the Magnus expansion approach to solving the IMSRG flow equations~\cite{Morr15magnus}.
Given our definition of $\eta(s)$ following Eq.~\eqref{eq:srg_flow_eq},
we get a differential equation for $U(s)$,
\begin{equation}
  \frac{dU(s)}{ds} = - \eta(s) U(s)\,,
\end{equation}
where $U(0) = 1$.
The formal integral of this differential equation is
\begin{equation}
  U(s) = \mathcal{T}_s\left[\exp(-\int_{0}^{s} ds' \eta(s'))\right]\,,
\end{equation}
where $\mathcal{T}_s$ is the time-ordering operator with respect to $s$~\cite{Dyso49timeorder}.

The Magnus expansion postulates that a solution of the form
\begin{equation}
  U(s) = \exp(\Omega(s))
\end{equation}
exists, where $\Omega(s)$ is anti-Hermitian and $\Omega(0) = 0$~\cite{Magn54magnus}.
To obtain $\Omega(s)$, one solves the differential equation of its expansion in $\eta(s)$,
\begin{equation}\label{eq:magnus_expansion}
  \frac{d \Omega(s)}{ds} = \sum_{k=0}^{\infty} \frac{B_{k}}{k!} ad^{k}_{\Omega(s)}(\eta(s))\,,
\end{equation}
where $B_{k}$ are the Bernoulli numbers
and $ad^{k}_{\Omega}$ are the recursively defined commutators,
\begin{align}
  ad^{0}_{\Omega(s)}(\eta(s)) & = \eta(s)\,,                                         \\
  ad^{k}_{\Omega(s)}(\eta(s)) & = \comm{\Omega(s)}{ad^{k-1}_{\Omega(s)}(\eta(s))}\,.
\end{align}
The interested reader may refer to Ref.~\cite{Blan09magnusreview} for detailed review
of the Magnus expansion.

Here we note that $ad^{k}_{\Omega(s)}(\eta(s))$ is anti-Hermitian for all $k$,
thus truncating Eq.~\eqref{eq:magnus_expansion} at any order
gives an exactly anti-Hermitian approximation to $d\Omega(s)/ds$,
which when integrated gives an exactly anti-Hermitian approximation to $\Omega(s)$.
Thus $U(s) = \exp(\Omega(s))$ is always exactly unitary,
regardless of accumulated numerical error in the solution for $\Omega(s)$.
This alleviates the requirement of using high-order ODE solvers to avoid numerical error,
and the solution of the IMSRG flow equations in this approach
can proceed using a cheap numerical integrator,
for example a simple Euler method.

To apply the obtained unitary transformation to our Hamiltonian or some other operator,
we use the Baker-Campbell-Hausdorff (BCH) formula,
\begin{equation}\label{eq:bch_formula}
  H(s) = e^{\Omega(s)} H(0) e^{-\Omega(s)} = \sum_{k=0}^{\infty} \frac{1}{k!} ad^{k}_{\Omega(s)}(H(0))\,.
\end{equation}

To be concrete, the evaluation of the IMSRG flow equations in the Magnus formalism
proceeds as follows:
\begin{enumerate}
  \item the generator $\eta(s)$ is constructed from $H(s)$,
  \item the derivative $d\Omega(s)/ds$ is obtained via Eq.~\eqref{eq:magnus_expansion}
        and applied via a simple Euler method,
  \item the new evolved Hamiltonian $H(s+ds)$ is obtained via Eq.~\eqref{eq:bch_formula},
\end{enumerate}
repeating these steps until $E$ is sufficiently converged.
For practical calculations, a few truncations must be made.
First, $H(s)$, $\eta(s)$, $\Omega(s)$, and all commutators must be truncated
at the $B$-body level,
leading to the Magnus(2) and Magnus(3) analogs to the IMSRG(2) and IMSRG(3) truncations.
Additionally, the Magnus and BCH expansions
  [Eqs.~\eqref{eq:magnus_expansion} and~\eqref{eq:bch_formula}]
must be truncated at some finite $k$.
For the Magnus expansion, we truncate the series when the norm of the $k$-th term
drops below a threshold $\epsilon_{\text{deriv}}$,
\begin{equation}
  \left\vert \frac{B_k || ad^{k}_{\Omega(s)}(\eta(s))||}{k!||\Omega(s)||} \right\vert < \epsilon_{\text{deriv}}\,.
\end{equation}
A similar condition can also be used for the truncation of the BCH expansion,
with the threshold $\epsilon_{\text{BCH}}$,
\begin{equation}
  \left\vert \frac{|| ad^{k}_{\Omega(s)}(H(0))||}{k!||\Omega(s)||} \right\vert < \epsilon_{\text{BCH}}\,.
\end{equation}
An alternative, for when one is only interested in the zero-body part of the evolving Hamiltonian,
is
\begin{equation}
  \left\vert \frac{\zerobodyop{ad^{k}_{\Omega(s)}(H(0))}}{k!} \right\vert < \epsilon_{\text{BCH}}\,.
\end{equation}

The Magnus expansion makes very clear the similarities and differences between
the IMSRG and coupled cluster.
Both use a nested commutator expansion,
ensuring the connected nature of the expansion
and guaranteeing size extensivity.
The IMSRG and CC seek to generate a similarity transformation
that decouples the reference state expectation value from the rest of the Hamiltonian.
However, in coupled cluster the cluster operator $T$ is non-Hermitian,
meaning that the BCH expansion for the similarity transformation truncates at a finite order.
The IMSRG generates a unitary transformation,
which means $\Omega$, the Magnus analog of the cluster operator,
is anti-Hermitian.
This leads to an infinite BCH expansion that must be truncated at some order.

In this thesis, we present various results
for many-body calculations obtained using the IMSRG.\@
Nearly all of these are done using the Magnus formalism,
as its computational benefits are invaluable when doing calculations
with three-body operators.

\section{Application to \texorpdfstring{${}^4\text{He}$}{helium 4}}\label{sec:imsrg2_he4_mscheme}

Here we consider ${}^4\text{He}$,
the lightest closed-shell nucleus.
Before we begin a discussion about the details of the system,
a few comments are in order.
The following calculation is restricted to a very small model space,
one insufficient to achieve converged results for observables,
and is also only for the IMSRG(2) truncation.
In Chapter~\ref{ch:ang_mom_coupling},
we discuss the formalism that exploits the spherical symmetry
of closed-shell systems like ${}^{4}\text{He}$
to cast the IMSRG flow equations into a more computationally tractable form,
which allows us to reach larger model spaces for the IMSRG(2)
and compute results for small model spaces for the IMSRG(3).
Thus, this implementation is a benchmark implementation for the IMSRG(2),
which we have compared against an existing publicly available IMSRG(2) implementation~\cite{Stro15imsrgcpp}.
This serves as a validation of our implementation
in addition to some IMSRG(2) and IMSRG(3) results for the pairing Hamiltonian
discussed in Appendix~\ref{app:pairing_hamiltonian_imsrg3}.

As input into our calculation, we start with the intrinsic $A$-body Hamiltonian
with only an initial two-body interaction,
\begin{equation}
  H_{\text{int}} = T_{\text{int}} + \twobodyop{V}\,,
\end{equation}
with the intrinsic kinetic energy
\begin{align}
  T_{\text{int}} & = T - T_{\text{cm}}                                          \\
                 & = \left(1 - \frac{1}{A}\right) \sum_{i} \frac{p_{i}^{2}}{2m}
  - \frac{1}{A}\sum_{i<j}\frac{p_{i} \cdot p_{j}}{m}\,.
\end{align}
We note that the first term gives us our one-body Hamiltonian
and the second term contributes to the two-body Hamiltonian along with $\twobodyop{V}$~\cite{Herg09intrinsicham}.

We work in the single-particle harmonic-oscillator basis
at several different values of $\hbar \Omega$
(see Section~\ref{sec:sp_ho}),
with the single-particle states
\begin{equation}
  \ket{n_a (l_a s_a) j_a m_{j_a} t_a m_{t_a}} \equiv \ket{\alpha_a}\,,
\end{equation}
where $s_a=1/2$ and $t_a=1/2$.
A natural ordering of these states is according to their principal quantum number,
$e = 2  n + l$.
For the following calculation, we truncate the single-particle basis at $\emax=2$.
The resulting size of our single-particle basis is $N=40$.
As our reference state for ${}^4\text{He}$ we choose to fill the four $e=0$ HO states,
the most reasonable choice to target the ground state
without solving for and transforming to the Hartree-Fock basis.

\begin{figure}[t]
  \centering
  \includegraphics[width=0.45\textwidth]{thesis/doc/images/he4_imsrg2_energies.pdf}
  \includegraphics[width=0.45\textwidth]{thesis/doc/images/he4_imsrg2_flow.pdf}
  \caption[
    The left panel shows $E(s=0)$ and $E(s \rightarrow \infty)$
    for an IMSRG(2) calculation of ${}^4\text{He}$
    for $\hbar \Omega$ ranging from $16\mev$ to $32\mev$.
    The interaction used is the EM NN interaction
    with a regulator cutoff $\Lambda=500\mev$
    and SRG-evolved to $\lambda=1.8\invfm$.
    The right panel shows the flowing energy $E(s)$
    along with the energy with second- and third-order MBPT corrections included
    for $\hbar \Omega=32\mev$.
    The right panel is similar for the different $\hbar \Omega$ of the left panel.
  ]{
    The left panel shows $E(s=0)$ and $E(s \rightarrow \infty)$
    for an IMSRG(2) calculation of ${}^4\text{He}$
    for $\hbar \Omega$ ranging from $16\mev$ to $32\mev$.
    The interaction used is the EM NN interaction
    with a regulator cutoff $\Lambda=500\mev$
    and SRG-evolved to $\lambda=1.8\invfm$~\cite{Ente03n3lonn}.
    The right panel shows the flowing energy $E(s)$
    along with the energy with second- and third-order MBPT corrections included
    for $\hbar \Omega=32\mev$.
    The right panel is similar for the different $\hbar \Omega$ of the left panel.
  }\label{fig:imsrg2_he4_results}
\end{figure}

For $\twobodyop{V}$, we use the EM NN potential from Ref.~\cite{Ente03n3lonn} at \nthreelo{}
with a regulator cutoff at $\Lambda=500\mev$ and SRG-evolved to $\lambda=1.8\invfm$.
The results from normal ordering our Hamiltonians at the different $\hbar \Omega$
with respect to our HO reference state
and evaluating the IMSRG(2) evolution are shown
in the left panel of Fig.~\ref{fig:imsrg2_he4_results}.
We find that the unevolved energy $E(s=0)$,
that is, the energy expectation value of the reference state,
is already good to within 30\% of the exact result,
a consequence of the SRG-softened interaction we are using.
Still, the IMSRG evolution absorbs up to $8\mev$ of correlation energy into the ground-state energy.
We also find that our implementation agrees with the implementation from Ref.~\cite{Stro15imsrgcpp}
to within $10^{-5}\mev$.

In the right panel of Fig.~\ref{fig:imsrg2_he4_results},
we show the flowing ground-state energy
as well as the ground-state energy with second- and third-order MBPT corrections.
We find that these corrections vanish as the correlations are absorbed into the ground-state energy,
indicating that we are achieving the desired decoupling.
We emphasize once again that these results are intended to be interpreted as validation
(for example, as a nuclear-like toy model)
and not as physically meaningful.
We consider the agreement between our implementation and that of Ref.~\cite{Stro15imsrgcpp}
to be \textit{a posteriori} evidence of the correctness of our implementation.


\section{Natural Evolution Strategy (NES)}

The second algorithm implemented is the \textbf{Natural Evolution Strategy (NES)}.

As for the previous method, different execution of the algorithm has been performed.

\begin{figure}[htb]
	\centering

	\begin{tabular}{lccc}
		\toprule
		\textbf{experiment}  & \textbf{population} & \textbf{learning rate} &
		\textbf{generations} \\
		\midrule
		\texttt{baseline 						} & 100 	& 1e-2 	& 100\\
		\texttt{pop\_size-1000 					} & 1000 	& 1e-2 	& 100\\
		\texttt{pop\_size-3000 					} & 3000 	& 1e-2 	& 100\\
		\texttt{pop\_size-5000 					} & 5000 	& 1e-2 	& 100\\
		\texttt{lr-001 							} & 100 	& 1e-3 	& 100\\
		\texttt{lr-0001	 						} & 100 	& 1e-4 	& 100\\
		\texttt{lr-00001	 					} & 100 	& 1e-5 	& 100\\
		\texttt{pop\_size-1000+lr-001 			} & 1000 	& 1e-3 	& 100\\
		\texttt{pop\_size-1000+lr-0001 			} & 1000 	& 1e-4 	& 100\\
		\texttt{pop\_size-5000+lr-001 			} & 5000 	& 1e-3 	& 100\\
		\texttt{pop\_size-5000+lr-0001 			} & 5000 	& 1e-4 	& 100\\
		\texttt{iter-2000 						} & 100 	& 1e-2 	& 2000\\
		\texttt{iter-5000 						} & 100 	& 1e-2 	& 5000\\
		\texttt{iter-2000+pop-5000 	}			 & 5000 	& 1e-2 	& 2000\\
		\texttt{iter-5000+pop-5000 	}			 & 5000 	& 1e-2 	& 5000\\
		\texttt{iter-2000+pop-5000+lr-001 }		 & 5000 	& 1e-3 	& 5000\\
		\texttt{iter-2000+pop-5000+lr-0001 }	 & 5000 	& 1e-4 	& 5000\\
		\bottomrule
	\end{tabular}
	\captionof{table}{NES parameters}
	\label{tab:nes-param}
\end{figure}

The first experiment is called baseline, and it uses the same parameters as for the following algorithms. After that, were made some attempts of improving the performances trying different population size and elite set ratio, and also with different number of generations. In all the experiments the domain size is fixed to 100 dimensions.

For all the experiments, the initial population parameters are initialised reasonably far from the global optimum, in particular, the mean is uniformly sampled in the range [-5, 5] and the covariance matrix is initialised as a diagonal matrix with points uniformly sampled in the range [4, 5].

In Table \ref{tab:nes-param} are shown the different combinations of parameters used for this algorithm.
\bigskip

The algorithm has been run 3 times for both test functions.
In order to evaluate the performance, for each pair of experiment and test function, the best and the worse fitness for each generation (averaged over 3 runs) has been plotted.
\bigskip

In Tables \ref{tab:cem-performance-s} and \ref{tab:cem-performance-r} are summarised the results.
\begin{figure}[htb]
	\centering

	\begin{tabular}{lccc}
		\toprule
		\textbf{experiment} & \textbf{best fitness} & \textbf{worse fitness} & \textbf{avg run time} \\
		\midrule
		\texttt{baseline 						}  &	   Err &	    Err &	       Err \\
		\texttt{pop\_size-1000 					}     &	   Err &	    Err &	       Err \\
		\texttt{pop\_size-3000 					}     &	 31.77 &	  55.11 &	  1.37 sec \\
		\texttt{pop\_size-5000 					}     &	 37.28 &	 103.57 &	  4.46 sec \\
		\texttt{lr-001 							}    &	   Err &	    Err &	       Err \\
		\texttt{lr-0001	 						}   &	   Err &	    Err &	       Err \\
		\texttt{lr-00001	 					}  &	   Err &	    Err &	       Err \\
		\texttt{pop\_size-1000+lr-001 			}   &	326.19 &	  831.2 &	  1.28 sec \\
		\texttt{pop\_size-1000+lr-0001 			}   &              1154.99 &	3024.52 &	  1.33 sec \\
		\texttt{pop\_size-5000+lr-001 			}   &	247.58 &	  702.4 &	   4.9 sec \\
		\texttt{pop\_size-5000+lr-0001 			}   &              1090.84 &	2837.48 &	  4.67 sec \\
		\texttt{iter-2000 						}   &	   Err &	    Err &	       Err \\
		\texttt{iter-5000 						}   &	   Err &	    Err &	       Err \\
		\texttt{iter-2000+pop-5000 	}			    &	   0.5 &	   1.44 &	 26.06 sec \\
		\texttt{iter-5000+pop-5000 	}			    &	  0.21 &	   0.55 &	 60.59 sec \\
		\texttt{iter-2000+pop-5000+lr-001 }		    &	 14.39 &	  41.89 &	 81.64 sec \\
		\texttt{iter-2000+pop-5000+lr-0001 }	    &	132.99 &	 383.86 &	 84.32 sec \\
		\bottomrule
	\end{tabular}
	\captionof{table}{Sphere NES performance}
	\label{tab:nes-performance-s}
\end{figure}

For the sphere function, it is possible to see that for many combinations of parameters it is not possible to execute the algorithm. This is because a \texttt{ValueError} is often returned due to the transformation of the covariance matrix into a non-positive one.
Therefore, by increasing the population size enough and the number of generations, the algorithm is able to converge.
With the presented parameters, using too low a learning rate reduces the algorithm's convergence speed.
\bigskip

In Figures \ref{fig:new-s-fitness/2000}, \ref{fig:new-s-fitness/5000} and \ref{fig:new-s-fitness/lr} are plotted the best and the worse fitness for each generation (averaged over 3 runs) for the models that perform better with the sphere function.

 \begin{figure}[H]
	\centering
	\begin{minipage}[b]{.6\textwidth}
		\includegraphics[width=\linewidth]{../src/out/nes/iteration-2000+pop_size-5000/sphere/fitness.pdf}
	\end{minipage}
	\caption{Sphere fitness \texttt{iteration-2000+pop\_size-5000}}
	\label{fig:new-s-fitness/2000}

	\begin{minipage}[b]{.6\textwidth}
		\includegraphics[width=\linewidth]{../src/out/nes/iteration-5000+pop_size-5000/sphere/fitness.pdf}
	\end{minipage}
	\caption{Sphere fitness \texttt{iteration-5000+pop\_size-5000}}
	\label{fig:new-s-fitness/5000}

	\begin{minipage}[b]{.6\textwidth}
		\includegraphics[width=\linewidth]{../src/out/nes/iteration-2000+pop_size-5000+lr-001/sphere/fitness.pdf}
	\end{minipage}
	\caption{Sphere fitness \texttt{iteration-2000+pop\_size-5000+lr-001}}
	\label{fig:new-s-fitness/lr}
\end{figure}

For the rastrigin function, it is fundamental to increase the number of generations to allow the algorithm to converge.
With the tested parameters, it was not possible to converge the algorithm to a global optimum.

\begin{figure}[htb]
	\centering

	\begin{tabular}{lccc}
		\toprule
		\textbf{experiment} & \textbf{best fitness} & \textbf{worse fitness} & \textbf{avg run time} \\
		\midrule
		\texttt{baseline 						} &	   Err &	    Err &	       Err \\
		\texttt{pop\_size-1000 					}    &	   Err &	    Err &	       Err \\
		\texttt{pop\_size-3000 					}    &	   Err &	    Err &	       Err \\
		\texttt{pop\_size-5000 					}    &	   Err &	    Err &	       Err \\
		\texttt{lr-001 							}   &	   Err &	    Err &	       Err \\
		\texttt{lr-0001	 						}  &	   Err &	    Err &	       Err \\
		\texttt{lr-00001	 					} &	   Err &	    Err &	       Err \\
		\texttt{pop\_size-1000+lr-001 			} &              1358.28 &	2154.99 &	  1.74 sec \\
		\texttt{pop\_size-1000+lr-0001 			} &              2169.83 &	4029.91 &	  1.94 sec \\
		\texttt{pop\_size-5000+lr-001 			} &              1142.55 &	1834.66 &	  6.05 sec \\
		\texttt{pop\_size-5000+lr-0001 			} &              2000.94 &	4007.66 &	  5.74 sec \\
		\texttt{iter-2000 						}  &	   Err &	    Err &	       Err \\
		\texttt{iter-5000 						}  &	   Err &	    Err &	       Err \\
		\texttt{iter-2000+pop-5000 	}			  &	   Err &	    Err &	       Err \\
		\texttt{iter-5000+pop-5000 	}			  &	   Err &	    Err &	       Err \\
		\texttt{iter-2000+pop-5000+lr-001 }		  &	764.96 &	1279.41 &	103.81 sec \\
		\texttt{iter-2000+pop-5000+lr-0001 }	  &	955.97 &	1558.37 &	106.25 sec \\
		\bottomrule
	\end{tabular}
	\captionof{table}{Rastrigin NES performance}
	\label{tab:nes-performance-r}
\end{figure}

In Figures \ref{fig:nes-r-fitness/001} and \ref{fig:nes-r-fitness/0001} are plotted the best and the worse fitness for each generation (averaged over 3 runs) of two models performed.

For the sphere function, 2000 generations are enough to obtain a solution close enough to the global optimum, as shown for the experiment \texttt{iteration-2000+pop\_size-5000}.

For the rastrigin function are probably needed more than 5000 generations to obtain a solution close enough to the global optimum.

\begin{figure}[H]
	\centering
	\begin{minipage}[b]{.6\textwidth}
		\includegraphics[width=\linewidth]{../src/out/nes/iteration-2000+pop_size-5000+lr-001/rastrigin/fitness.pdf}
	\end{minipage}
	\caption{Rastrigin fitness \texttt{iteration-2000+pop\_size-5000+lr-001000}}
	\label{fig:nes-r-fitness/001}
\end{figure}
\begin{figure}[H]
	\centering
	\begin{minipage}[b]{.6\textwidth}
		\includegraphics[width=\linewidth]{../src/out/nes/iteration-2000+pop_size-5000+lr-0001/rastrigin/fitness.pdf}
	\end{minipage}
	\caption{Rastrigin fitness \texttt{iteration-2000+pop\_size-5000+lr-0001}}
	\label{fig:nes-r-fitness/0001}
\end{figure}


\newsection
\subsection{Reasoning and search}
\label{sec:reasoning}
\sectionauthors{Yuhuai Wu, Frieda Rong, Hongyu Ren, Sang Michael Xie, Xuechen Li, Andy Shih, Drew A. Hudson, Omar Khattab}

\begin{figure}[!ht]
\centering
\includegraphics[width=\linewidth]{capabilities/figures/Reasoning_1.png}
\caption{\label{fig:reasoning-geometry} Multimodality can allow foundation models to not only reason with formal symbolic language, but also exploit \emph{visual aspects} of the problem, such as equivalence, symmetry, and Euclidean geometry, to prune the infinite search space and find promising constructions for a solution (\refsec{reasoning-tasks}), mimicking the way humans reason about geometry problems.}
\end{figure}

Reasoning and search have been a central theme throughout the history of AI. Classic tests of intellect, from strategy games to abstract mathematical discovery, served as inspirational goal posts that pushed the limits of ``machine intelligence'' through a need to devise ever smarter ways of searching for winning solutions.
In the early days, symbolic methods were the dominant approach for reasoning~\citep{DBLP:books/aw/RN2020}, but the involved engineering effort and the need to formalize heuristics to tackle intractable search spaces quickly proved cumbersome.
More recently, data-driven methods using neural networks have shown encouraging results\dash{}\eg defeating the best humans in Go~\citep{DBLP:journals/nature/SilverHMGSDSAPL16}, a board game with a much larger space of actions than the classic challenge of chess\dash{}by exploiting statistical structures and learning useful heuristics.
This section outlines existing reasoning tasks, ones that require scaling to ever-larger search spaces and understanding the world broadly (\refsec{reasoning-tasks}).
We then argue in \refsec{reasoning-role} that foundation models should play a central role towards general reasoning as vehicles for capturing the statistical regularities of unbounded search spaces (\emph{generativity}), allowing positive transfer across tasks and scenarios (\emph{universality}), and exploiting the grounding of knowledge in multi-modal environments (\emph{grounding}).

\subsubsection{What are the current tasks?}
\label{sec:reasoning-tasks}

Many reasoning problems pose unbounded search spaces, where systems must deal with numerous kinds of open-ended alternatives. Consider trying to prove that the angles $\angle B$ and $\angle C$ are equal for an isosceles triangle $\triangle ABC$ with $AB=AC$ (\reffig{reasoning-geometry}). A system can perform any number of actions \textit{at each step of reasoning}. For instance, the system could add a new auxiliary point with an arbitrary construction, say a perpendicular line, a parallel line, or a tangent circle, and the search space only grows larger as the diagram grows more complicated. One way to prove this theorem is to draw a line $AD$ that is the angle bisector of $A$, and use the congruence of the two triangles $\triangle ABD$ and $\triangle ACD$ to show $\angle B = \angle C$, but how can systems find this without extensive search?

More generally, a mathematician is not confined with searching in diagram constructions and Euclidean theorems: mathematicians can apply a vast number of theorems from various branches of mathematics, make high-level conjectures, formalize new mathematical concepts, or find counterexamples. This contrasts with more structured AI challenges such as the game of Go, whose search space is considered much smaller.\footnote{Less than the number of grid points on the Go board (\ie 361 actions for a 19$\times$19 board).}

Besides theorem proving, many real-world problems deal with unbounded search spaces, such as program synthesis~\citep{DBLP:journals/ftpl/GulwaniPS17}, drug discovery~\citep{Drews2000DrugDA}, chemical synthesis~\citep{DBLP:journals/nature/SeglerPW18}, computer-aided design~\citep{computer_aided_design}, combinatorial optimization~\citep{DBLP:journals/eor/BengioLP21}, and more.
These reasoning problems tend to exhibit similar structure, like the bijection between retrosynthesis in drug discovery and theorem proving in propositional logic, illustrated in \reffig{reasoning-retrosynthesis}: in both problems, one is building a tree of synthesis, whose nodes are chemical products on the one side and propositions on the other, and the leaf nodes are the products on the one side, and end axioms on the other.
In these problems, a simulated environment is often provided, which allows a solver to run several search threads towards building the solution tree. The simulator often provides intermediate feedback, say, informing the solver with the remaining propositions to establish before the proof is considered complete. The solver in turn needs to select the most promising search thread and proceed based on the intermediate feedback.

\begin{figure}[t]
\centering
\includegraphics[scale=0.35]{capabilities/figures/Reasoning_2.png}
\caption{\label{fig:reasoning-retrosynthesis} \textbf{Left:} A reaction route for 1,6-Heptadiene-3,5-dione predicted by machine learning-based drug retrosynthesis planner AiZynthFinder \cite{genheden2020retrosynthesis,yoshikawa2021retrosynthesis-twitter}. \textbf{Right:} A sample proof tree in propositional logic where the formulas outlined in green represent axioms. Although they arise from different domains, both trees are structurally the same.}
\end{figure}

Recently, there has been a surge of interest in applying learning-based approaches to tackle reasoning problems.
To overcome the unbounded search space challenge, researchers first started with a constrained search space to make the problem tractable~\citep{DBLP:journals/corr/abs-1806-00608, DBLP:conf/icml/BansalLRSW19}.
But such approaches suffered from the limited kinds of actions the solver could issue. For example, the solver could only apply theorems from a known database to prove the target theorem, instead of synthesizing novel theorems and lemmas.
Because large language models offered a generic way of modeling the output space as a sequence, they quickly became a more favorable choice, allowing the generation of arbitrary kinds of actions.
Researchers have applied these language model-based approaches to various applications, such as predicting protein structures~\citep{DBLP:journals/nature/Senior0JKSGQZNB20}, proving formal theorems~\citep{DBLP:journals/corr/polu2020generative,pact},  conjecturing theorems~\citep{DBLP:conf/mkm/UrbanJ20,DBLP:journals/corr/abs-2006-04757,li2021isarstep}, synthesizing programs from natural language~\cite{chen2021evaluating,ling2016latent}, repairing, generating and understanding code ~\citep{yasunaga2021break,DBLP:journals/corr/abs-2102-04664,guo2020graphcodebert,svyatkovskiy2020intellicode,kim2021code,zugner2021language}. It has also been shown that scaling model size significantly improves reasoning capabilities~\citep{DBLP:journals/corr/polu2020generative}, and furthermore standard techniques from language modelling, such as pretraining, can also greatly improve performance on these tasks~\citep{DBLP:journals/corr/abs-2006-04757,DBLP:journals/corr/polu2020generative}.

\subsubsection{What's the role of foundation models?}
\label{sec:reasoning-role}

\paragraph{Generativity.} We believe that the generative capabilities of foundation models are essential for effective reasoning. Due to the unbounded search space, it becomes intractable to enumerate all kinds of possibilities. Instead, with foundation models, one can model the distribution of the optimal decisions, and \emph{generate} suitable candidates to proceed to the next step. In particular, as foundation models offer a generic way of modeling the output space as a sequence, the next decision generation is entirely unconstrained and hence universal. Such flexibility is essential for many of the reasoning challenges we discussed, to allow creative generation in domains such as mathematical conjecturing~\cite{li2021isarstep} and synthesizing novel programs~\cite{chen2021evaluating}. As one scales up foundation models, the capabilities of capturing such statistical structures also grow immensely~\citep{DBLP:journals/corr/polu2020generative}.

\paragraph{Universality.} As we mentioned in the last section, many reasoning problems exhibit similar latent structures. We believe that the unifying framework imposed by a foundation model can transfer and share significant heuristics across tasks, ranging from generalizing low-level techniques that work well for one task to new scenarios all the way to directly finding meta-techniques that work well across numerous kinds of problems. In addition, since a foundation model is trained across many domains, it can positively transfer meta-knowledge encoded in the foundation models' weights across tasks and domains~\citep{papadimitriou2020learning, lime,DBLP:journals/corr/abs-2103-05247}. The foundation model training and adaptation framework encourage a separation of concerns, where foundation model training learns meta-knowledge such as the shared search tree structure between drug retrosynthesis and propositional logic proofs, and the adaptation phase can focus on learning the task specific vocabulary. Thus, foundation models can reduce the complexity of the learning problem in the adaptation phase, improving sample complexity and generalization.

\paragraph{Grounding.} Reasoning problems are often easily expressed in symbolic languages (\eg mathematics, code, SMILE representation of molecules). However, these symbols have deep underlying semantic meanings\dash{}saying ``isosceles triangle'' paints a vivid image in the human mind. Foundation models can enable deep groundings and semantic meanings. First, grounding representations in other \emph{modalities}, such as visual or physical, are essential to grasp abstract concepts in reasoning tasks and endow them with concrete meaning~\citep{Larkin1987Simon,Jamnik2001MathematicalRW}. Since the models may be trained on multiple modalities, foundation models can assist in understanding a range of data sources (\eg images, texts). Hence, in the geometry example case, with its understanding of geometrical shapes learned in natural images, a foundation model could effectively utilize the diagrammatic representation of the problem. However, aligned multi-modal data in reasoning is scarce, and it remains an open question whether foundation models can discover connections between different modalities in an unsupervised manner (\eg discovering of commutative diagram with the corresponding algebraic equations).
Furthermore, even within the symbolic domain, symbols can have various levels of interpretation.
For example, high-level programming languages can be translated to low-level assembly codes. Foundation models can learn a shared representation that encompasses these various views. Past works have shown that self-supervised tasks~\citep{pact, DBLP:journals/corr/abs-2105-04297,DBLP:journals/corr/abs-2103-03809} allow the model to understand the inner workings behind the high-level code scripts, and further assist downstream tasks.

\subsubsection{Future challenges in reasoning}
Due to the intrinsic difficulty of these problems, high-quality annotated data is scarce and harder to collect compared to raw images and text.
There have been several attempts towards alleviating this issue. In mathematics, researchers proposed to generate synthetic theorems in the hope of generalizing to realistic theorems~\citep{DBLP:conf/nips/WangD20,wu2021int,vlad2021mathai,refactor}. Another approach is to design self-supervised tasks to augment datasets~\citep{yasunaga2020repair,ren2020query2box,pact,DBLP:journals/corr/abs-2102-07492,yasunaga2021break}, or better pretraining objectives~\citep{lime}. However, we still lack general principled approaches in designing self-supervised tasks, as most of the existing works are tailored to specific problem setups~\citep{yasunaga2020repair,ren2020beta,pact}.
Building a foundation model will encourage a unifying framework of constructing a suite of self-supervised tasks that can be applied to all reasoning problems.
In addition, interactivity (\refsec{interaction}) could, with enough scalability, alleviate the data scarcity problem by bringing humans into the loop to minimally guide the learning curriculum or data augmentation process, for example, in selecting axioms to add or conjectures to explore. While interactive tools themselves are a motivating use of foundation models for reasoning~\citep{pact,chen2021evaluating} in assisting people with the most cognitively demanding or laborious aspects. Interpretation-friendly interactive tools could find further applications in education by assisting humans in learning with the help of highly capable foundation models (\refsec{education}).

Improving the high-level reasoning capabilities is a core challenge for existing foundation models. Humans perform abstract reasoning and high-level planning in tackling difficult problem-solving tasks~\citep{MillerGalanterPribram60}.
For example, when building a software tool or proving a theorem, we often start with a high-level sketch before delving into the low-level details~\cite{KOEDINGER1990511}.
Existing foundation models are not trained to generate such high-level plans. Instead, they often focus solely on predicting the next low-level steps~\citep{DBLP:journals/corr/polu2020generative, pact, chen2021evaluating}. Unfortunately, to train foundation models to emulate human-like reasoning, we again face a data collection challenge. Although such data does exist in limited settings~\citep{li2021isarstep}, in general, data for high-level reasoning is scarce and difficult to collect. One line of research is to let abstract and modular hierarchy to emerge by itself during learning~\citep{DBLP:conf/pldi/EllisWNSMHCST21,hong21latent}, but it still remains an open question how to scale these approaches to more general and realistic settings.

Aside from these challenges, there exist many open questions that are also essential to topics discussed in other sections. What constitutes a good architecture for reasoning reliably (\refsec{modeling})? How can we understand and interpret these models theoretically (\refsec{theory} and practically \refsec{interpretability})? Can we train robust reasoning models that could generalize to out-of-domain problems (\refsec{robustness} and \refsec{adaptation})? We believe research about foundation models on each of these fronts can greatly broaden their impact for the field of reasoning.


%%%%%%%%%%%%%%%%%%%%%%%% Start tcilatex.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Macros for Scientific Word documents saved with the
% LaTeX format.

% Macros for text attributes:

\def\BF#1{{\bf {#1}}}
\def\NEG#1{{\rlap/#1}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\catcode`\@=11

%
%
% These macros are copied from the AMS-TeX package for doing
% multiple integrals.
%

\let\DOTSI\relax
\def\RIfM@{\relax\ifmmode}
\def\FN@{\futurelet\next}
\newcount\intno@
\def\iint{\DOTSI\intno@\tw@\FN@\ints@}
\def\iiint{\DOTSI\intno@\thr@@\FN@\ints@}
\def\iiiint{\DOTSI\intno@4 \FN@\ints@}
\def\idotsint{\DOTSI\intno@\z@\FN@\ints@}
\def\ints@{\findlimits@\ints@@}
\newif\iflimtoken@
\newif\iflimits@
\def\findlimits@{\limtoken@true\ifx\next\limits\limits@true
 \else\ifx\next\nolimits\limits@false\else
 \limtoken@false\ifx\ilimits@\nolimits\limits@false\else
 \ifinner\limits@false\else\limits@true\fi\fi\fi\fi}
\def\multint@{\int\ifnum\intno@=\z@\intdots@                                %1
 \else\intkern@\fi                                                          %2
 \ifnum\intno@>\tw@\int\intkern@\fi                                         %3
 \ifnum\intno@>\thr@@\int\intkern@\fi                                       %4
 \int}                                                                      %5
\def\multintlimits@{\intop\ifnum\intno@=\z@\intdots@\else\intkern@\fi
 \ifnum\intno@>\tw@\intop\intkern@\fi
 \ifnum\intno@>\thr@@\intop\intkern@\fi\intop}
\def\intic@{\mathchoice{\hskip.5em}{\hskip.4em}{\hskip.4em}{\hskip.4em}}
\def\negintic@{\mathchoice
 {\hskip-.5em}{\hskip-.4em}{\hskip-.4em}{\hskip-.4em}}
\def\ints@@{\iflimtoken@                                                    %1
 \def\ints@@@{\iflimits@\negintic@\mathop{\intic@\multintlimits@}\limits    %2
  \else\multint@\nolimits\fi                                                %3
  \eat@}                                                                    %4
 \else                                                                      %5
 \def\ints@@@{\iflimits@\negintic@
  \mathop{\intic@\multintlimits@}\limits\else
  \multint@\nolimits\fi}\fi\ints@@@}
\def\intkern@{\mathchoice{\!\!\!}{\!\!}{\!\!}{\!\!}}
\def\plaincdots@{\mathinner{\cdotp\cdotp\cdotp}}
\def\intdots@{\mathchoice{\plaincdots@}
 {{\cdotp}\mkern1.5mu{\cdotp}\mkern1.5mu{\cdotp}}
 {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}
 {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}}

%
%
%  These macros are for doing the AMS \text{} construct
%

\def\rmfam{0}
\newif\iffirstchoice@
\firstchoice@true
\def\textfonti{\the\textfont\@ne}
\def\textfontii{\the\textfont\tw@}
\def\text{\RIfM@\expandafter\text@\else\expandafter\text@@\fi}
\def\text@@#1{\leavevmode\hbox{#1}}
\def\text@#1{\mathchoice
 {\hbox{\everymath{\displaystyle}\def\textfonti{\the\textfont\@ne}%
  \def\textfontii{\the\textfont\tw@}\textdef@@ T#1}}
 {\hbox{\firstchoice@false
  \everymath{\textstyle}\def\textfonti{\the\textfont\@ne}%
  \def\textfontii{\the\textfont\tw@}\textdef@@ T#1}}
 {\hbox{\firstchoice@false
  \everymath{\scriptstyle}\def\textfonti{\the\scriptfont\@ne}%
  \def\textfontii{\the\scriptfont\tw@}\textdef@@ S\rm#1}}
 {\hbox{\firstchoice@false
  \everymath{\scriptscriptstyle}\def\textfonti
  {\the\scriptscriptfont\@ne}%
  \def\textfontii{\the\scriptscriptfont\tw@}\textdef@@ s\rm#1}}}
\def\textdef@@#1{\textdef@#1\rm\textdef@#1\bf\textdef@#1\sl\textdef@#1\it}
\def\DN@{\def\next@}
\def\eat@#1{}
\def\textdef@#1#2{%
 \DN@{\csname\expandafter\eat@\string#2fam\endcsname}%
 \if S#1\edef#2{\the\scriptfont\next@\relax}%
 \else\if s#1\edef#2{\the\scriptscriptfont\next@\relax}%
 \else\edef#2{\the\textfont\next@\relax}\fi\fi}

%
%
%These are the AMS constructs for multiline limits.
%

\def\Let@{\relax\iffalse{\fi\let\\=\cr\iffalse}\fi}
\def\vspace@{\def\vspace##1{\crcr\noalign{\vskip##1\relax}}}
\def\multilimits@{\bgroup\vspace@\Let@
 \baselineskip\fontdimen10 \scriptfont\tw@
 \advance\baselineskip\fontdimen12 \scriptfont\tw@
 \lineskip\thr@@\fontdimen8 \scriptfont\thr@@
 \lineskiplimit\lineskip
 \vbox\bgroup\ialign\bgroup\hfil$\m@th\scriptstyle{##}$\hfil\crcr}
\def\Sb{_\multilimits@}
\def\endSb{\crcr\egroup\egroup\egroup}
\def\Sp{^\multilimits@}
\let\endSp\endSb

%
%
%These are AMS constructs for horizontal arrows
%

\newdimen\ex@
\ex@.2326ex
\def\rightarrowfill@#1{$#1\m@th\mathord-\mkern-6mu\cleaders
 \hbox{$#1\mkern-2mu\mathord-\mkern-2mu$}\hfill
 \mkern-6mu\mathord\rightarrow$}
\def\leftarrowfill@#1{$#1\m@th\mathord\leftarrow\mkern-6mu\cleaders
 \hbox{$#1\mkern-2mu\mathord-\mkern-2mu$}\hfill\mkern-6mu\mathord-$}
\def\leftrightarrowfill@#1{$#1\m@th\mathord\leftarrow\mkern-6mu\cleaders
 \hbox{$#1\mkern-2mu\mathord-\mkern-2mu$}\hfill
 \mkern-6mu\mathord\rightarrow$}
\def\overrightarrow{\mathpalette\overrightarrow@}
\def\overrightarrow@#1#2{\vbox{\ialign{##\crcr\rightarrowfill@#1\crcr
 \noalign{\kern-\ex@\nointerlineskip}$\m@th\hfil#1#2\hfil$\crcr}}}
\let\overarrow\overrightarrow
\def\overleftarrow{\mathpalette\overleftarrow@}
\def\overleftarrow@#1#2{\vbox{\ialign{##\crcr\leftarrowfill@#1\crcr
 \noalign{\kern-\ex@\nointerlineskip}$\m@th\hfil#1#2\hfil$\crcr}}}
\def\overleftrightarrow{\mathpalette\overleftrightarrow@}
\def\overleftrightarrow@#1#2{\vbox{\ialign{##\crcr\leftrightarrowfill@#1\crcr
 \noalign{\kern-\ex@\nointerlineskip}$\m@th\hfil#1#2\hfil$\crcr}}}
\def\underrightarrow{\mathpalette\underrightarrow@}
\def\underrightarrow@#1#2{\vtop{\ialign{##\crcr$\m@th\hfil#1#2\hfil$\crcr
 \noalign{\nointerlineskip}\rightarrowfill@#1\crcr}}}
\let\underarrow\underrightarrow
\def\underleftarrow{\mathpalette\underleftarrow@}
\def\underleftarrow@#1#2{\vtop{\ialign{##\crcr$\m@th\hfil#1#2\hfil$\crcr
 \noalign{\nointerlineskip}\leftarrowfill@#1\crcr}}}
\def\underleftrightarrow{\mathpalette\underleftrightarrow@}
\def\underleftrightarrow@#1#2{\vtop{\ialign{##\crcr$\m@th\hfil#1#2\hfil$\crcr
 \noalign{\nointerlineskip}\leftrightarrowfill@#1\crcr}}}

%%
\catcode`\@=\active
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\frac#1#2{{#1 \over #2}}
\def\tfrac#1#2{{\textstyle {#1 \over #2}}}
\def\dfrac#1#2{{\displaystyle {#1 \over #2}}}
\def\binom#1#2{{#1 \choose #2}}
\def\tbinom#1#2{{\textstyle {#1 \choose #2}}}
\def\dbinom#1#2{{\displaystyle {#1 \choose #2}}}
\def\QATOP#1#2{{#1 \atop #2}}
\def\QTATOP#1#2{{\textstyle {#1 \atop #2}}}
\def\QDATOP#1#2{{\displaystyle {#1 \atop #2}}}
\def\QABOVE#1#2#3{{#2 \above#1 #3}}
\def\QTABOVE#1#2#3{{\textstyle {#2 \above#1 #3}}}
\def\QDABOVE#1#2#3{{\displaystyle {#2 \above#1 #3}}}
\def\QOVERD#1#2#3#4{{#3 \overwithdelims#1#2 #4}}
\def\QTOVERD#1#2#3#4{{\textstyle {#3 \overwithdelims#1#2 #4}}}
\def\QDOVERD#1#2#3#4{{\displaystyle {#3 \overwithdelims#1#2 #4}}}
\def\QATOPD#1#2#3#4{{#3 \atopwithdelims#1#2 #4}}
\def\QTATOPD#1#2#3#4{{\textstyle {#3 \atopwithdelims#1#2 #4}}}
\def\QDATOPD#1#2#3#4{{\displaystyle {#3 \atopwithdelims#1#2 #4}}}
\def\QABOVED#1#2#3#4#5{{#4 \abovewithdelims#1#2#3 #5}}
\def\QTABOVED#1#2#3#4#5{{\textstyle {#4 \abovewithdelims#1#2#3 #5}}}
\def\QDABOVED#1#2#3#4#5{{\displaystyle {#4 \abovewithdelims#1#2#3 #5}}}

% Macros for text size operators:

\def\tint{\textstyle \int}
\def\tiint{\mathop{\textstyle \iint }}
\def\tiiint{\mathop{\textstyle \iiint }}
\def\tiiiint{\mathop{\textstyle \iiiint }}
\def\tidotsint{\mathop{\textstyle \idotsint }}
\def\toint{\textstyle \oint}
\def\tsum{\mathop{\textstyle \sum }}
\def\tprod{\mathop{\textstyle \prod }}
\def\tbigcap{\mathop{\textstyle \bigcap }}
\def\tbigwedge{\mathop{\textstyle \bigwedge }}
\def\tbigoplus{\mathop{\textstyle \bigoplus }}
\def\tbigodot{\mathop{\textstyle \bigodot }}
\def\tbigsqcup{\mathop{\textstyle \bigsqcup }}
\def\tcoprod{\mathop{\textstyle \coprod }}
\def\tbigcup{\mathop{\textstyle \bigcup }}
\def\tbigvee{\mathop{\textstyle \bigvee }}
\def\tbigotimes{\mathop{\textstyle \bigotimes }}
\def\tbiguplus{\mathop{\textstyle \biguplus }}

%Macros for display size operators:

\def\dint{\displaystyle \int }
\def\diint{\mathop{\displaystyle \iint }}
\def\diiint{\mathop{\displaystyle \iiint }}
\def\diiiint{\mathop{\displaystyle \iiiint }}
\def\didotsint{\mathop{\displaystyle \idotsint }}
\def\doint{\displaystyle \oint }
\def\dsum{\mathop{\displaystyle \sum }}
\def\dprod{\mathop{\displaystyle \prod }}
\def\dbigcap{\mathop{\displaystyle \bigcap }}
\def\dbigwedge{\mathop{\displaystyle \bigwedge }}
\def\dbigoplus{\mathop{\displaystyle \bigoplus }}
\def\dbigodot{\mathop{\displaystyle \bigodot }}
\def\dbigsqcup{\mathop{\displaystyle \bigsqcup }}
\def\dcoprod{\mathop{\displaystyle \coprod }}
\def\dbigcup{\mathop{\displaystyle \bigcup }}
\def\dbigvee{\mathop{\displaystyle \bigvee }}
\def\dbigotimes{\mathop{\displaystyle \bigotimes }}
\def\dbiguplus{\mathop{\displaystyle \biguplus }}

%Companion to stackrel
\def\stackunder#1#2{\mathrel{\mathop{#2}\limits_{#1}}}

% macros for graphics

\def\FILENAME#1{#1}

\newcount\GRAPHICSTYPE
\GRAPHICSTYPE=0
\def\GRAPHICSPS#1{%
\ifnum\GRAPHICSTYPE=1 language "PS", include "#1"\else%
ps: #1\fi}

\def\GRAPHICSHP#1{%
include #1}

\def\graffile#1#2#3#4{\leavevmode\raise -#4 \hbox{%
\raise #3 \hbox{\rule{0.003in}{0.003in}\special{#1}}}%
{\raise -#4 \hbox to #2 {\vrule height#3 width0in depth0in\hfil}}%
}

% A box for drafts
\def\draftbox#1#2#3#4{\leavevmode\raise -#4 \hbox{\frame{\rlap{\protect\tiny #1}%
\hbox to #2{\vrule height#3 width0in depth0in\hfil}}}}

\newcount\draft
\draft=0
\def\GRAPHIC#1#2#3#4#5{\ifnum\draft=1 \draftbox{#2}{#3}{#4}{#5}\else%
\graffile{#1}{#3}{#4}{#5}\fi}

\def\addtoLaTeXparams#1{\edef\LaTeXparams{\LaTeXparams #1}}

\def\doFRAMEparams#1{\readFRAMEparams#1\end}
\def\readFRAMEparams#1{%
\ifx#1\end%
\let\next=\relax%
\else%
\ifx#1i%
\dispkind=0%
\fi%
\ifx#1d%
\dispkind=1%
\fi%
\ifx#1f%
\dispkind=2%
\fi%
\ifx#1t%
\addtoLaTeXparams{t}%
\fi%
\ifx#1b%
\addtoLaTeXparams{b}%
\fi%
\ifx#1p%
\addtoLaTeXparams{p}%
\fi%
\ifx#1h%
\addtoLaTeXparams{h}%
\fi%
\let\next=\readFRAMEparams%
\fi%
\next%
}

%In-line frame #1 wide by #2 high, offset #3.
%Draft name is #4, file is #5.
\def\IFRAME#1#2#3#4#5{\GRAPHIC{#5}{#4}{#1}{#2}{#3}}

%Display frame #1 wide by #2 high.
%Draft name is #3, file is #4.
\def\DFRAME#1#2#3#4{
  \begin{center}
    \GRAPHIC{#4}{#3}{#1}{#2}{0in}
  \end{center}
}

%\LaTeX\ figure, placement params are #1
%#2 wide by #3 high.
%Caption is #4, label is #5
%Draft name is #6, file is #7.
\def\FFRAME#1#2#3#4#5#6#7{
  \begin{figure}[#1]
    \begin{center}
      \GRAPHIC{#7}{#6}{#2}{#3}{0in}
    \end{center}
    \caption{\label{#5}#4}
  \end{figure}
}

%    \FRAME{ framedata f|i tbph x F|T }
%          { contentswidth (scalar)  }
%          { contentsheight (scalar) }
%          { vertical shift when in-line (scalar) }
%          { caption }
%          { label }
%          { name }
%          { body }
%
%    framedata is a string which can contain the following
%    characters: idftbphxFT
%    Their meaning is as follows:
%                 i, d or f : in-line, display, or floating
%                 t,b,p,h   : LaTeX floating placement options
%                 x         : fit contents box to contents
%                 F or T    : Figure or Table. Later this can expand
%                             to a more general float class.
%

\def\FRAME#1#2#3#4#5#6#7#8{%
%%%??? \newcount\dispkind%
\def\LaTeXparams{}%
\dispkind=0%
\def\LaTeXparams{}%
\doFRAMEparams{#1}%
\ifnum\dispkind=0%
\IFRAME{#2}{#3}{#4}{#7}{#8}%
\else
  \ifnum\dispkind=1
    \DFRAME{#2}{#3}{#7}{#8}
  \else
    \ifnum\dispkind=2
      \FFRAME{\LaTeXparams}{#2}{#3}{#5}{#6}{#7}{#8}
    \fi
  \fi
\fi
}

\catcode`\@=11
% macros for user - defined functions
\def\func#1{\mathop{\rm #1}}
\def\limfunc#1{\mathop{\rm #1}}

% miscellaneous
\long\def\QQQ#1#2{}
\def\QTP#1{}
\long\def\QQA#1#2{}
\def\QTR#1#2{{\em #2}}
\long\def\TeXButton#1#2{#2}
\def\EXPAND#1[#2]#3{}
\def\NOEXPAND#1[#2]#3{}
\def\PROTECTED{}
\def\LaTeXparent#1{}

% Macros for indexing.
\def\MAKEINDEX{\input gnuindex.sty\makeindex}
%%%??? \@ifundefined{INDEX}{\def\INDEX#1#2{}{}}{}
%%%??? \@ifundefined{SUBINDEX}{\def\SUBINDEX#1#2#3{}{}{}}{}
\def\initial#1{\bigbreak{\raggedright\large\bf #1}\kern 2pt\penalty3000}
\def\entry#1#2{\item {#1}, #2}
\def\primary#1{\item {#1}}
\def\secondary#1#2{\subitem {#1}, #2}

% Attempts to avoid problems with other styles
%%%??? \@ifundefined{abstract}{%
%%%??? \def\abstract{\if@twocolumn
%%%??? \section*{Abstract (Not appropriate in this style!)}
%%%??? \else \small
%%%??? \begin{center}
%%%??? {\bf Abstract\vspace{-.5em}\vspace{0pt}}
%%%??? \end{center}
%%%??? \quotation
%%%??? \fi}}{}
%%%???
%%%??? \@ifundefined{endabstract}{%
%%%??? \def\endabstract{\if@twocolumn\else\endquotation\fi}}{}
%%%??? \@ifundefined{maketitle}{\def\maketitle#1{}}{}
%%%??? \@ifundefined{affiliation}{\def\affiliation#1{}}{}
%%%??? \@ifundefined{proof}{\def\proof{\paragraph{Proof. }}}{}
%%%??? \@ifundefined{newfield}{\def\newfield#1#2{}}{}
%%%??? \@ifundefined{chapter}{\def\chapter#1{\par(Chapter head:)#1\par }}{}
%%%??? \@ifundefined{part}{\def\part#1{\par(Part head:)#1\par }}{}
%%%??? \@ifundefined{section}{\def\part#1{\par(Section head:)#1\par }}{}
%%%??? \@ifundefined{subsection}{\def\part#1{\par(Subsection head:)#1\par }}{}
%%%??? \@ifundefined{subsubsection}{\def\part#1{\par(Subsubsection head:)#1\par }}{}
%%%??? \@ifundefined{paragraph}{\def\part#1{\par(Subsubsubsection head:)#1\par }}{}
%%%??? \@ifundefined{subparagraph}{\def\part#1{\par(Subsubsubsubsection head:)#1\par }}{}

% These symbols are not recognized by LaTeX
\def\therefore{}
\def\backepsilon{}
\def\yen{\hbox{\rm\rlap=Y}}

% macros for T3TeX files
\newdimen\theight
\def \Column{%
             \vadjust{\setbox0=\hbox{\scriptsize\quad\quad tcol}%
             \theight=\ht0
             \advance\theight by \dp0    \advance\theight by \lineskip
             \kern -\theight \vbox to \theight{\rightline{\rlap{\box0}}%
             \vss}%
             }}%

\def\qed{\ifhmode\unskip\nobreak\fi\ifmmode\ifinner\else\hskip5\p@\fi\fi
 \hbox{\hskip5\p@\vrule width4\p@ height6\p@ depth1.5\p@\hskip\p@}}
%\catcode`\@=\active
\catcode`@=12 % at signs are no longer letters

\def\cents{\hbox{\rm\rlap/c}}
\def\miss{\hbox{\vrule height2pt width 2pt depth0pt}}
%\def\miss{\hbox{.}}        %another possibility

\def\vvert{\Vert}                %always translated to \left| or \right|

\def\tcol#1{{\baselineskip=6pt \vcenter{#1}} \Column}

\def\dB{\hbox{{}}}                 %dummy entry in column
\def\mB#1{\hbox{$#1$}}             %column entry
\def\nB#1{\hbox{#1}}               %column entry (not math)

%\newcount\notenumber
%\def\clearnotenumber{\notenumber=0}
%\def\note{\global\advance\notenumber by 1
% \footnote{$^{\the\notenumber}$}}
%\def\note{\global\advance\notenumber by 1
\def\note{$^{\dag}}

%%%??? \makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%% End tcilatex.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%