%\documentclass{beamer}  % {{{1
\documentclass[handout]{beamer}
\usepackage{amsfonts, amsmath, amssymb, amsthm, mathtools}
\usepackage{booktabs, enumitem, hyperref, graphicx, multicol, tikz}
\usepackage[final]{microtype}

% beamer settings
\usetheme{Madrid}
\setbeamercolor{alerted text}{fg=blue}
\beamertemplatenavigationsymbolsempty
\let\emph\textbf
\setitemize{
  itemsep=0.5em, topsep=0.5em,
  label=\usebeamerfont*{itemize item}
  \usebeamercolor[fg]{itemize item}
  \usebeamertemplate{itemize item}
}
\setbeamertemplate{items}[circle]
\setbeamertemplate{section in toc}[circle]
\newcommand{\slidefinish}{\hfill$\cdot$}
\tikzset{alert/.style = {color=blue, thick}}

% structure symbols
\newcommand{\NN}{\mathbb{N}}
\newcommand{\ZZ}{\mathbb{Z}}
\newcommand{\QQ}{\mathbb{Q}}
\newcommand{\RR}{\mathbb{R}}
\newcommand{\CC}{\mathbb{C}}
\renewcommand{\AA}{\mathbb{A}}
\newcommand{\V}{\mathcal{V}}
\newcommand{\m}[1]{\mathbb{#1}}      % models
\newcommand{\alg}[1]{\m{#1}}         % algebras
\newcommand{\rel}[1]{\mathbf{#1}}    % relational structures
\newcommand{\cl}[1]{\mathcal{#1}}    % classes
\newcommand{\Comp}[1]{\textsf{#1}}   % complexity classes

% theorems and similar environments
\theoremstyle{plain}
  \newtheorem{thm}{Theorem}           \newtheorem*{thm*}{Theorem}
  \newtheorem{claim}{Claim}[thm]      \newtheorem*{claim*}{Claim}
  \newtheorem{conj}[thm]{Conjecture}  \newtheorem*{conj*}{Conjecture}
  \newtheorem{cor}[thm]{Corollary}    \newtheorem*{cor*}{Corollary}
  \newtheorem{lem}[thm]{Lemma}        \newtheorem*{lem*}{Lemma}
  \newtheorem{prop}[thm]{Proposition} \newtheorem*{prop*}{Proposition}
\theoremstyle{definition}
  \newtheorem{defn}[thm]{Definition} \newtheorem*{defn*}{Definition}
  \newtheorem{ex}[thm]{Example}      \newtheorem*{ex*}{Example}
\theoremstyle{remark}
  \newtheorem{rk}[thm]{Remark}  \newtheorem*{rk*}{Remark}
\newcommand{\Case}[1]{\smallskip \textbf{Case #1:}}
\newenvironment{claimproof}
  {
    \begin{proof}[Proof of claim]
    \renewcommand{\qedsymbol}{\ensuremath{\circ}}
  } {
    \end{proof}
  }

% custom commands
\DeclareMathOperator{\Cg}{Cg}
\DeclareMathOperator{\Clo}{Clo}
\DeclareMathOperator{\Con}{Con}
\DeclareMathOperator{\Inv}{Rel}
\DeclareMathOperator{\Pol}{Pol}
\DeclareMathOperator{\Sg}{Sg}
\DeclareMathOperator{\diag}{diag}
\newcommand{\bmat}[1]{ \begin{bmatrix} #1 \end{bmatrix} }
\newcommand{\Bmat}[1]{ \begin{Bmatrix} #1 \end{Bmatrix} }
\newcommand{\pmat}[1]{ \begin{pmatrix} #1 \end{pmatrix} }
\newcommand{\mat}[1]{ \begin{matrix} #1 \end{matrix} }
\newcommand{\ds}[1]{ \displaystyle{#1} }
\newcommand{\stack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}}
\newcommand{\Proofitem}[1]{\smallskip \textbf{#1:}}

% tikz settings
\usetikzlibrary{calc, matrix, positioning}
\newcommand{\TikzCenterNode}{\node (center) at ($(current bounding box.north east)!0.5!(current bounding box.south west)$) {\phantom{$\cdot$}};}

% misc
\renewcommand{\epsilon}{\varepsilon}
\renewcommand{\phi}{\varphi}
\newcommand{\TODO}[1]{\noindent\textbf{TODO: #1}}

% document specific stuff
\usepackage{array, diagbox, multicol, multirow}
\theoremstyle{plain} \newtheorem{thmsmall}{\small Theorem} \newtheorem{lemsmall}{\small Lemma}

% clones
\newcommand{\Clone}[1]{\mathcal{#1}}
\newcommand{\CloneBot}{\boldsymbol{\bot}}
\newcommand{\CloneTop}{\boldsymbol{\top}}
\newcommand{\CloneVee}{\boldsymbol{\bigvee}}
\newcommand{\CloneWedge}{\boldsymbol{\bigwedge}}
\DeclareMathOperator{\maj}{maj}

% colors
\newcommand{\Bblue}[1]{\textcolor{blue}{\bf #1}}
\newcommand{\Bred}[1]{\textcolor{red}{\bf #1}}
\newcommand{\Bviolet}[1]{\textcolor{violet}{\bf #1}}
\newcommand{\Bteal}[1]{\textcolor{teal}{\bf #1}}
\newcommand{\Bmagenta}[1]{\textcolor{magenta}{\bf #1}}
\newcommand{\Solves}[1]{\textcolor{blue}{#1}}
\newcommand{\BSolves}[1]{\Solves{\bf #1}}
\newcommand{\NSolves}[1]{\textcolor{red}{#1}}
\newcommand{\BNSolves}[1]{\NSolves{\bf #1}}

\newcommand{\Violet}[1]{\textcolor{violet}{#1}}
\newcommand{\BViolet}[1]{\Violet{\bf #1}}

% tikz
\usetikzlibrary{shapes}
\tikzset{clone/.style={draw, circle, inner sep=0.125em}}
\tikzset{cloneLabel/.style={preaction={fill,white}, inner sep=0.05em, outer sep=0.33em}}
\tikzset{curveR/.style={out=90-30,in=-90+30}}
\tikzset{curveL/.style={out=90+30,in=-90-30}}
\tikzset{myBlue/.style={thick, blue}}
\tikzset{myMagenta/.style={thick, magenta}}
\tikzset{myRed/.style={thick, red}}
\tikzset{myTeal/.style={thick, teal}}
\tikzset{myViolet/.style={thick, violet}}
\tikzset{solves/.style=myBlue}
\tikzset{nsolves/.style=myRed}
\tikzset{superpoly/.style=myViolet}

\tikzset{misc/.style={black!40}}


% quantum
\DeclareMathOperator{\Cspan}{ \CC-span }
\DeclareMathOperator{\Tr}{ Tr }
\newcommand{\B}{ \mathfrak{B} }
\newcommand{\bra}[1]{ \left< #1 \right| }
\newcommand{\ket}[1]{ \left| #1 \right> }
\newcommand{\bracket}[2]{ \left< #1 \mid #2 \right> }
\tikzset{gate-c/.style = {draw, circle, inner sep=0.25em}}
\tikzset{gate-r/.style = {draw, rounded corners, rectangle}}
\tikzset{control/.style = {draw, fill, circle, inner sep=0.1em}}
\tikzset{circuit/.style = {matrix of math nodes, cells={anchor=center}, column 1/.style={anchor=east}}}
\newcommand{\gate}[2]{
  \begin{tikzpicture}[font=\scriptsize, baseline=(center.south)]
    \node[gate-#1] {#2};
    \node (center) at ($(current bounding box.north east)!0.5!(current bounding box.south west)$) {\phantom{.}};
  \end{tikzpicture} }
\newcommand{\gateR}[1]{\gate{r}{#1}}
\newcommand{\gateC}[1]{\gate{c}{#1}}
\newcommand{\tikzMeasure}{
  \begin{tikzpicture}[scale=0.2, baseline=0pt]
    \draw (0,0) arc (180-20:20:1);
    \draw[->] (current bounding box.north|-current bounding box.south) -- ++(60:1.5);
  \end{tikzpicture} }

% computation
\renewcommand{\O}{\mathcal{O}}
\DeclareMathOperator{\poly}{poly}
%----------------------------------------------------------------------------}}}1

\begin{document}
% title page {{{1
\title[The HSP for Universal Algebras]
  {The Hidden Subgroup Problem for Universal Algebras}
\author{Matthew Moore}
\institute[KU]{The University of Kansas \\
  \tiny Department of Electrical Engineering and Computer Science}
\date[2019-10-17]{October 17, 2019}

\begin{frame}
\titlepage
\end{frame}
%----------------------------------------------------------------------------}}}1

% TOC {{{1
\begin{frame} \frametitle{\inserttitle}
\tableofcontents
\end{frame}  % }}}1

\section{Quantum Computation}
% TOC {{{1
\begin{frame}
\centering \alert{\Large \sc \insertsection}

\vfill

\includegraphics[height=16em]{/home/mm/personal/pictures/albums-themed/best/2018-11-04T13:00:34.jpg}
\end{frame}  % }}}1
\begin{frame} % why quantum? {{{1
Compared to classical computers, quantum computers are
\begin{itemize}
  \pause\item based on a different model of computation,
  \pause\item very hard/maybe impossible to build at scale,
  \pause\item very hard to program and reason about.
\end{itemize}

\pause\vfill

Classical computers are
\begin{itemize}
  \pause\item based on well-studied model of computation,
  \pause\item cheap/easy to build,
  \pause\item ``easy'' to program and reason about,
  \pause\item fast (approx.\ exponential growth in speed).
\end{itemize}

\pause\vfill

\begin{center} \bf \large \alert{
  Why bother?
} \end{center}
\end{frame}  % }}}1
\begin{frame} % classical is easy {{{1
Physical constraints: we will probably never have
\begin{itemize}
  \pause\item clock speeds faster than the electron transition frequency \\
    ($\approx 10^{15}$ Hz),
  \pause\item components smaller than the diameter of a hydrogen atom \\
    ($\approx 10^{-8}$ cm).
\end{itemize}

\pause\bigskip

\begin{center} \bf \large \alert{
  Even in the distant future, classical computers will continue to struggle with
  problems of exponential complexity.
} \end{center}

\pause\bigskip

\textbf{Idea:} exploit natural phenomena to aid in computation.
\begin{itemize}
  \pause\item Quantum phenomena are hard to exploit...
\end{itemize}

\pause\medskip

How about using classical phenomena? 
\pause
Maybe use an analog co-processor?
\begin{itemize}
  \pause\item Classical phenomena can be simulated in polynomial time and space.
  \pause\item Speedup will be at most polynomial.
  \pause\item Classical physics is too ``easy'' to be useful.
\end{itemize}
\end{frame}  % }}}1
\begin{frame} % quantum is hard {{{1
\emph{Consider a quantum system of $n$ particles with spins 0 or 1.}
\begin{itemize}
  \pause\item Each particle is modelled by vector space 
  $\B = \Cspan\{ \ket{0}, \ket{1} \}$.

  \pause\item Total system is modelled by $2^n$-dimensional vector space,
  \pause
  \[
    \B^{\otimes n} 
    = \Cspan\big\{ \ket{s_1\cdots s_n} \mid s_i\in \{0,1\} \big\}.
  \]

  \pause\item Possible states of the system are norm 1 vectors,
  \pause
  \[
    \sum_{s_1,\ldots,s_n\in \{0,1\}} \lambda_{s_1\cdots s_n} \ket{s_1\cdots s_n}
    = \ket{\alpha}.
  \]

  \pause\item Probability of observing $\ket{t_1\cdots t_n}$ when
  $\ket{\alpha}$ is measured $= |\lambda_{t_1\cdots t_n}|^2$.

  \pause\item Evolution over time is determined by action of $2^n\times 2^n$
  unitary matrices.
\end{itemize}

\pause\bigskip

Quantum systems represent \alert{exponentially} difficult computational problems,
in contrast to ``easy'' classical systems.
\end{frame}  % }}}1
\begin{frame}  % qubits (optional) {{{1
\emph{Qubits}
\begin{itemize}
  \item<2-> Qubits are what a quantum computer operates on.

  \item<3-> single qubit
    \uncover<4->{$\approx$ basis vector of $\B \coloneqq \Cspan\{ \ket{0}, \ket{1} \}$}
    \uncover<5->{$\approx$ $\ket{s}$, \hfill $s\in \{0,1\}$}

  \item<9-> multiple qubits
    \uncover<10->{$\approx$ basis vectors of $\B^{\otimes n}$}
    \uncover<11->{$\approx$ $\ket{s_1\cdots s_n}$ for $s_i\in \{0,1\}$}

  \item<13-> quantum state
    \uncover<14->{$\approx$ norm 1 element of $\B^{\otimes n}$}
    \uncover<15->{$\approx$ $\ds{ \ket{\alpha} = \sum \lambda_{s_1\cdots s_n} \ket{s_1\cdots s_n} }$}

  \item<16-> probability of observing state $\ket{s_1\cdots s_n}$
    \uncover<17->{$\approx$ $|\lambda_{s_1\cdots s_n}|^2$}
    \uncover<18->{$\approx$ $|\bracket{\alpha}{s_1\cdots s_n}|^2$}

  \item<19-> evolution of $\ket{\alpha}$ over time
    \uncover<20->{$\approx$ $U\ket{\alpha}$, $U$ a unitary matrix}
\end{itemize}


\vfill

\uncover<6->{ \textbf{Conventions} }
\vspace{-0.5em} \begin{itemize}
  \item<6-> $\ket{s}$ is a vertical vector, $\ket{0} = \pmat{1 \\ 0}$, $\ket{1} = \pmat{0 \\ 1}$
  \item<7-> $\bra{s} \coloneqq \ket{s}^*$ (conjugate transpose) is a horizontal vector
  \item<8-> $\bra{s}\ket{t} \eqqcolon \bracket{s}{t}$ is the inner product
  \item<12-> $\ket{s} \otimes \ket{t} \eqqcolon \ket{st}$ or $\ket{s,t}$
  \item<21-> $U$ unitary 
    \uncover<22->{$\Leftrightarrow$ $U$ preserves inner product}
    \uncover<23->{$\Leftrightarrow$ $U^{-1} = U^*$}
\end{itemize}
\end{frame}  % }}}1
\begin{frame} % overview of quantum computation {{{1
% classical computer {{{
\begin{center} \begin{tikzpicture}[font=\small]
  \tikzset{myCloud/.style
    = {cloud, cloud ignores aspect, cloud puff arc=110, outer sep=0.3em,
       align=center, draw}}

  \path (0,0) node (Cbits1) {bit string};
  \uncover<2->{ \path (Cbits1) ++(3,0) node[myCloud, cloud puffs=20.9, minimum width=8em, minimum height=4em] (Ccomp) {Classical \\ Computer}; }
  \uncover<3->{ \path (Ccomp) ++(3,0) node (Cbits2) {bit string}; }

  \uncover<2->{ \draw[->] (Cbits1) -- (Ccomp); }
  \uncover<3->{ \draw[->] (Ccomp) -- (Cbits2); }
\end{tikzpicture} \end{center}  % }}}
\begin{itemize}[itemsep=0.25em]
  \item<10-> deterministic: equal inputs give equal outputs
  \item<12-> need not be reversible
  \item<14-> represented by a boolean circuit (for fixed length input)
\end{itemize}

\medskip

% quantum computer {{{
\begin{center} \begin{tikzpicture}[font=\small]
  \tikzset{myStarburst/.style
    = {starburst,  starburst point height=0.75em, outer sep=0.3em,
       align=center, draw}}
  \uncover<4->{ \path (Cbits1) ++(0,-3) node[align=center] (Qbits1) {bit string \\ (as basis vector)}; }
  \uncover<5->{ \path (Qbits1) ++(3.25,0) node[myStarburst, starburst points=18.9, minimum width=8em, minimum height=4em] (Qcomp) {Quantum \\ Computer}; }
  \uncover<6->{ \path (Qcomp) ++(3,0) node[align=center] (Qbits2) {superposition \\ of bit strings}; }
  \uncover<7->{ \path (Qbits2) ++(2.7,0) node (Qbits2equal) {$\ds{ = \sum \lambda_{s_1\cdots s_n} \ket{s_1\cdots s_n} }$}; }
  \uncover<8->{ \path (Qbits2equal) ++(-3.25,-1.75) node[gate-r, outer sep=0.3em, align=center] (Qmeasure) {\tikzMeasure \\ measure}; }
  \uncover<9->{ \path (Qmeasure) ++(3.15,0) node[align=center] (Qresult) {bit string $s_1\cdots s_n$ \\ w/ probability $|\lambda_{s_1\cdots s_n}|^2$}; }

  \uncover<5->{ \draw[->] (Qbits1) -- (Qcomp); }
  \uncover<6->{ \draw[->] (Qcomp) -- (Qbits2); }
  \uncover<8->{ \draw[->] ($(Qbits2equal)+(-1.5,-0.5)$) -- (Qmeasure); }
  \uncover<9->{ \draw[->] (Qmeasure) -- (Qresult); }
\end{tikzpicture} \end{center}  % }}}
\begin{itemize}[itemsep=0.25em]
  \item<11-> probabilistic, likely need to run multiple times
  \item<13-> must be reversible (before measurement)
  \item<15-> represented by a \alert{quantum circuit} (for fixed length input)
\end{itemize}
\end{frame}  % }}}1
\begin{frame}  % quantum circuits (optional) {{{1
A \alert{quantum circuit} consists of
\begin{itemize}
  \pause \item gates (unitary transformations),
    \qquad \uncover<6->{ \gateC{$H$}, \gateC{$\sigma_x$}, \ldots }
  \pause \item measurement operations.
    \hspace{4em} \uncover<7->{ \gateR{\tikzMeasure} }
\end{itemize}

\pause \bigskip

Every unitary transf.\ can be built using gates from the \alert{standard gate
set}.

\pause \bigskip

Circuits are specified graphically or given inline.

\medskip

\begin{columns}
  \begin{column}[T]{0.475\textwidth}
    \uncover<8->{
% circuit {{{
\begin{tikzpicture}[font=\scriptsize]
  \path (0,0) node (n1) {$\ket{0}$}
      ++(1,0) node[gate-c] (n1H1) {$H$}
      ++(1,0) coordinate (n1phi)
      ++(1,0) node[gate-c] (n1H2) {$H$}
      ++(1,0) node[gate-r] (n1meas) {\tikzMeasure}
      ++(0.75,0) node (n1end) {}
        (n1)
      ++(0,-0.5) node (ndots1) {$\vdots$}
      ++(0,-0.75) node (nn) {$\ket{0}$}
      ++(0,-0.5) node (m1) {$\ket{0}$}
      ++(0,-0.5) node (mdots1) {$\vdots$}
      ++(0,-0.75) node (mm) {$\ket{0}$};
  \coordinate (t) at ($(n1)!0.5!(mm)$);
  \path (n1H1|-ndots1) node {$\vdots$}
        (n1H2|-ndots1) node {$\vdots$}
        (n1H1|-nn) node[gate-c] (nnH1) {$H$}
        (n1phi|-t) node[gate-r, minimum height=10em, minimum width=1.55em] (phi) {$\widehat{f}$}
        (n1H2|-nn) node[gate-c] (nnH2) {$H$}
        (n1meas|-nn) node[gate-r] (nnmeas) {\tikzMeasure}
        (n1end|-nn) node (nnend) {}
        (n1end|-m1) node (m1end) {}
        (n1end|-mm) node (mmend) {}
        (n1meas|-ndots1) node (ndots2) {$\vdots$}
        (n1meas|-mdots1) node (mdots2) {$\vdots$};
  \path[->] (n1) edge (n1H1) (n1H1) edge (n1-|phi.west) (phi.east|-n1) edge (n1H2) (n1H2) edge (n1meas) (n1meas) edge (n1end)
            (nn) edge (nnH1) (nnH1) edge (nn-|phi.west) (phi.east|-nn) edge (nnH2) (nnH2) edge (nnmeas) (nnmeas) edge (nnend)
            (m1) edge (m1-|phi.west) (phi.east|-m1) edge (m1end)
            (mm) edge (mm-|phi.west) (phi.east|-mm) edge (mmend);
  \draw[densely dotted] (n1end.north west) -- (n1end.north east-|n1end.east) -- node[auto]{$n$} (nnend.south east-|nnend.east) -- (nnend.south west);
  \draw[densely dotted] (m1end.north west) -- (m1end.north east-|m1end.east) -- node[auto]{$m$} (mmend.south east-|mmend.east) -- (mmend.south west);
\end{tikzpicture} % }}}
    }
  \end{column}
  \pause
  \begin{column}[T]{0.5\textwidth}
  { \small \hspace{-2.115em}
    \uncover<12->{$\ket{\psi} =$}
    \uncover<9->{$( H^{\otimes n}\otimes I_m ) \ \widehat{f} \ ( H^{\otimes n}\otimes I_m ) \ ( \ket{0^n}\otimes \ket{0^m} )$}
  }

  \bigskip

  \uncover<10->{ The \alert{complexity} of a circuit is the number of gates. }

  \bigskip

  \uncover<11->{ 
    \alert{Measurement} of a subset of qubits is the partial trace of the
    \alert{density matrix}, 
  }
  \uncover<13->{$\ds{ \text{Tr}_n( \ket{\psi}\bra{\psi} ) }$.}
  \end{column}
\end{columns}
\end{frame}  % }}}1
\begin{frame}  % RNG quantum circuit (optional) {{{1
The 
\begin{tikzpicture}[font=\scriptsize, baseline=(H.base)] \node[gate-c] (H) {$H$}; \end{tikzpicture}
gate is the \alert{Hadamard} operator, 
\pause
\ $\ds{ H\ket{q} = \frac{1}{\sqrt{2}} \Big( \ket{0} + (-1)^q \ket{1} \Big) }$.

\pause\bigskip

\begin{columns}
  \begin{column}{0.3\textwidth}
% circuit {{{
\begin{tikzpicture}[font=\scriptsize]
  \path (1,0) node (q1) {$\ket{0}$}
      ++(1,0) node[gate-c] (q1H) {$H$}
      ++(1,0) node[gate-r] (q1meas) {\tikzMeasure}
      ++(1,0) node (q1end) {}
        (q1)
      ++(0,-0.5) node (dots1) {$\vdots$}
      ++(0,-0.75) node (qn) {$\ket{0}$};
  \path (q1end|-dots1) node[xshift=-1.15em] {$\vdots$}
        (q1H|-qn) node[gate-c] (qnH) {$H$}
        (q1meas|-qn) node[gate-r] (qnmeas) {\tikzMeasure}
        (q1end|-qn) node (qnend) {};
  \path[->] (q1) edge (q1H) (q1H) edge (q1meas) (q1meas) edge (q1end)
            (qn) edge (qnH) (qnH) edge (qnmeas) (qnmeas) edge (qnend);
\end{tikzpicture} % }}}
  \end{column}
  \begin{column}{0.65\textwidth}
    \pause
    Pre-measurement outcome:
    \begin{align*}
      & \uncover<5->{ \big( H \ket{0} \big)^{\otimes n} }
      \uncover<6->{ = \left( \frac{1}{\sqrt{2}} \big( \ket{0} + \ket{1} \big) \right)^{\otimes n} } \\
      & \uncover<7->{ \qquad = \frac{1}{2^{n/2}} \sum_{x_1,\ldots x_n\in \{0,1\}} \ket{x_1\cdots x_n}. }
    \end{align*}
  \end{column}
\end{columns}

\bigskip

\uncover<8->{ This is the uniform distribution! }

\bigskip

\uncover<9->{ The circuit generates perfect $n$-bit random numbers. }
\end{frame}  % }}}1

\section{Hidden Subgroups, Hidden Kernels}
% TOC {{{1
\begin{frame}
\centering \alert{\Large \sc \insertsection}

\vfill

\includegraphics[height=16em]{/home/mm/personal/pictures/albums-themed/best/2018-11-25T18:40:43.jpg}
\end{frame}  % }}}1
\begin{frame} % HSP defn {{{1
Let $\m{G}$ be a group, $X$ a set, and $f:G \to X$ a \underline{function}.

\pause \bigskip

$f$ \alert{hides} a subgroup $\m{D}\leq \m{G}$ if $f$ is constant precisely on
$\m{D}$-cosets.

\pause \smallskip

\begin{columns}
  \begin{column}{0.15\textwidth}
    \begin{gather*}
      f(a) = f(b) \\
      \Longleftrightarrow \\
      aD = bD
    \end{gather*}
  \end{column}
  \pause
  \begin{column}{0.515\textwidth}
% f hides a subgroup  {{{
\begin{tikzpicture}[font=\scriptsize, yscale=2.75, xscale=1.75]
  \tikzset{pointstyle/.style = {circle, fill=black, inner sep=0pt, minimum size=0.25em}}
  \draw (0,0) node[above left] (G) {$G$} rectangle (1.618,-1);
  \draw[dotted] (0,-1+1/5) -- +(1.618,0)
              ++(0,1/5) -- +(1.618,0)
              ++(0,1/5) -- +(1.618,0)
              ++(0,1/5) -- +(1.618,0);
  \path (1.618/2,-1+1/10) node (0D) {$D$}
       +(2,0) node[pointstyle, label=right:{$0$}] (0) {}
      ++(0,1/5) node (1D) {$g_1D$}
       +(2,0) node[pointstyle, label=right:{$1$}] (1) {}
      ++(0,1/5) node (2D) {$g_2D$}
       +(2,0) node[pointstyle, label=right:{$2$}] (2) {}
      ++(0,1/5) node[yshift=0.25em] (Gdots) {$\vdots$}
       +(2,0) node[yshift=0.25em] (Xdots) {$\vdots$}
      ++(0,1/5) node (nD) {$g_nD$}
       +(2,0) node[pointstyle, label=right:{$n$}] (n) {};
  \path[->] ($(0D)+(0.7,0)$) edge node[below] (f) {$f$} ($(0)+(-0.08,0)$)
            ($(1D)+(0.7,0)$) edge ($(1)+(-0.08,0)$)
            ($(2D)+(0.7,0)$) edge ($(2)+(-0.08,0)$)
            ($(nD)+(0.7,0)$) edge ($(n)+(-0.08,0)$);
  \draw (1.618/2+2,-1/2) ellipse (0.45 and 1.618/3);
  \node at (f|-Gdots) {$\vdots$};
  \node at ($(G)+(3.2,0)$) {$X$};
\end{tikzpicture} % }}}
  \end{column}
\end{columns}

\pause \medskip

\emph{The Hidden Subgroup Problem (HSP)}
\begin{itemize}[leftmargin=5em]
  \pause\item[\texttt{Input}:] $\m{G}$, $f:G \to X$ hiding some subgroup
    \emph{as a blackbox}
  \pause\item[\texttt{Output}:] the subgroup $\m{D}$ that $f$ hides 
    \uncover<12->{(as generators)}
\end{itemize}

\pause \medskip

\emph{Considerations}
\vspace{-0.5em}
\begin{multicols}{2} \begin{itemize}[leftmargin=*, itemsep=0.25em]
  \pause \item Input size is $\lg(|G|)$.
  \item<11-> $\m{D}$ must be specified with $\text{poly}(\lg(|G|))$
    information.

  \columnbreak

  \item<10-> Clearly in $\O(|G|) = \O(2^{\lg(|G|)})$.
  \item<13-> Two kinds of complexity: \\ circuit size, evaluations of $f$.
\end{itemize} \end{multicols}
\end{frame}  % }}}1
\begin{frame} % HSP examples {{{1

{ \small
\emph{The Hidden Subgroup Problem (HSP)}
\begin{itemize}[leftmargin=5em]
  \item[\texttt{Input}:] $\m{G}$, $f:G \to X$ hiding some subgroup (as a
    blackbox):
    $\big[ f(a) = f(b) \Leftrightarrow aD = bD \big]$
  \item[\texttt{Output}:] the subgroup $\m{D}$ that $f$ hides (as generators)
\end{itemize} }

\pause \bigskip

Many famous problems are special cases of the HSP.
\pause
\begin{center} \begin{tabular}{lllc}
  Problem                  & $\m{G}$                 & Classical                                      & Quantum                           \\ \midrule
  \pause Simon's problem   & \pause $\ZZ_2^n$        & \pause $\Omega(2^n)$                           & \pause $\O(n^2)$                  \\ [0.25em]
  \pause Factoring         & \pause $\ZZ$            & \pause $\O(2^{K \lg(n)^{1/3}\lg\lg(n)^{2/3}})$ & \pause $\O(n^3)$                  \\ [0.25em]
  \pause Discrete log      & \pause $\ZZ \times \ZZ$ & \pause $\O(2^{K \lg(n)^{1/3}\lg\lg(n)^{2/3}})$ & \pause $\O(n^3)$                  \\ [0.25em]
  \pause Shortest vector   & \pause $\m{D}_n$        & \pause $\O(2^{Kn})$                            & \pause $\approx \O(8^{\sqrt{n}})$ \\ [0.25em]
  \pause Graph isomorphism & \pause $\m{S}_n$        & \pause $\O(2^{\lg(n)^K})$
\end{tabular} \end{center}

\pause \bigskip

\alert{Polynomial-time} quantum algorithms are known for
\begin{itemize}
  \pause\item abelian groups (Simon, Shor, Kitaev, et al),
  \pause\item an irregular constellation of other groups.
\end{itemize}
\end{frame}  % }}}1
\begin{frame} % HKP motivation {{{1
\begin{columns}
  \begin{column}{0.515\textwidth}
% f hides a subgroup  {{{
\begin{tikzpicture}[font=\scriptsize, yscale=2.75, xscale=1.75]
  \tikzset{pointstyle/.style = {circle, fill=black, inner sep=0pt, minimum size=0.25em}}
  \draw (0,0) node[above left] (G) {$G$} rectangle (1.618,-1);
  \draw[dotted] (0,-1+1/5) -- +(1.618,0)
              ++(0,1/5) -- +(1.618,0)
              ++(0,1/5) -- +(1.618,0)
              ++(0,1/5) -- +(1.618,0);
  \path (1.618/2,-1+1/10) node (0D) {$D$}
       +(2,0) node[pointstyle, label=right:{$0$}] (0) {}
      ++(0,1/5) node (1D) {$g_1D$}
       +(2,0) node[pointstyle, label=right:{$1$}] (1) {}
      ++(0,1/5) node (2D) {$g_2D$}
       +(2,0) node[pointstyle, label=right:{$2$}] (2) {}
      ++(0,1/5) node[yshift=0.25em] (Gdots) {$\vdots$}
       +(2,0) node[yshift=0.25em] (Xdots) {$\vdots$}
      ++(0,1/5) node (nD) {$g_nD$}
       +(2,0) node[pointstyle, label=right:{$n$}] (n) {};
  \path[->] ($(0D)+(0.7,0)$) edge node[below] (f) {$f$} ($(0)+(-0.08,0)$)
            ($(1D)+(0.7,0)$) edge ($(1)+(-0.08,0)$)
            ($(2D)+(0.7,0)$) edge ($(2)+(-0.08,0)$)
            ($(nD)+(0.7,0)$) edge ($(n)+(-0.08,0)$);
  \draw (1.618/2+2,-1/2) ellipse (0.45 and 1.618/3);
  \node at (f|-Gdots) {$\vdots$};
  \node at ($(G)+(3.2,0)$) {$X$};
\end{tikzpicture} % }}}
  \end{column}
  \pause
  \begin{column}{0.48\textwidth}
    \emph{Questions}
    \begin{itemize}
      \pause\item What makes abelian groups special?
      \pause\item Can ``hiding'' a subgroup be made more natural?
    \end{itemize}
  \end{column}
\end{columns}

\pause\bigskip

\emph{Algebras}
\begin{itemize}
  \pause\item An \alert{algebra} is a set $A$ together with operations $f_i :
    A^{n_i} \to A$ for $i\in I$, \\
    \pause Written $\AA = \left< A; \{f_i\}_{i\in I} \right>$.

  \pause\item Subalgebras don't form a meaningful partition of $A$, \\
    \pause it's not clear how to define ``hiding'' a subalgebra.

  \pause\item A \alert{congruence} of $\AA$ is a compatible equivalence
    relation.
    \pause Equivalently, a congruence is the kernel of a homomorphism
    $\phi:\AA\to \m{B}$.

  \pause\item How does $f: A\to X$ hide a congruence $\theta$ of $\AA$?
\end{itemize}
\end{frame}  % }}}1
\begin{frame} % HKP defn {{{1
\emph{Hidden Kernel Problem (v1)}
\begin{itemize}[leftmargin=5em]
  \pause\item[\texttt{Input}:] $\m{A}$, $f:A \to X$ hiding some congruence (as
    a blackbox)
  \pause\item[\texttt{Output}:] the congruence $\theta$ of $\AA$ that $f$ hides
    (as generators)
\end{itemize}

\pause\bigskip

For $f: A\to X$, we say that $f$ \alert{hides} congruence $\theta$ of $\AA$ if
\pause
\[
 f(a) = f(b) 
 \qquad\Longleftrightarrow\qquad
 a\;\theta\;b.
\]

\pause \smallskip

This allows us to impose algebraic structure on $X$: \pause $\AA/\theta$.

\pause \bigskip

$f$ is actually a homomorphism with kernel $\theta$!

\pause \bigskip

\emph{Hidden Kernel Problem}
\begin{itemize}[leftmargin=5em]
  \pause\item[\texttt{Input}:] algebras $\AA$, $\m{B}$, homomorphism
  $\phi:\AA\to \m{B}$ (as a blackbox)
  \pause\item[\texttt{Output}:] generators of $\ker(\phi)$
\end{itemize}
\end{frame}  % }}}1

\section{The Hidden Kernel Problem for Post's Lattice}
% TOC {{{1
\begin{frame}
\centering \alert{\Large \sc \insertsection}

\vfill

\includegraphics[height=16em]{/home/mm/personal/pictures/albums-themed/best/2019-05-25T15:08:02.jpg}
\end{frame}  % }}}1
\begin{frame} % Post's lattice {{{1
\begin{columns}
  \begin{column}{0.4\textwidth}
    \emph{Hidden Kernel Problem}
    \begin{itemize}[leftmargin=4em, topsep=0.25em, itemsep=0.25em]
      \item[\texttt{Input}:]  homomorphism $\phi:\AA\to \m{B}$
      \item[\texttt{Output}:] $\ker(\phi)$ (generators)
    \end{itemize}

    \pause \bigskip

    Simon's algorithm solves this for $\AA = (\ZZ_2)^n$.

    \pause \bigskip

    How about if $\AA = \m{B}^n$, where $\m{B}$ is a
    2-element algebra?

    \pause \bigskip

    How many such $\m{B}$ are there?
  \end{column} \hfill
  \pause
  \begin{column}{0.54\textwidth}
% Post's lattice {{{
\begin{tikzpicture}[font=\tiny, yscale=0.8, xscale=0.8, baseline=(center.base)]
  % central section nodes {{{
  \path (0, 0)    node[clone] (F)   {}
       +(-1, 0.5) node[clone] (UP0) {}
       +(1, 0.5)  node[clone] (UP1) {}
       ++(0,1)    node[clone] (UM)  {}
       ++(0,1.5)  node[clone] (UD)  {}
       ++(0,1)    node[clone] (U)   {}
       ++(0,1)    node[clone] (AP)  {}
        +(-1,0.5) node[clone] (AP0) {}
        +(0,0.5)  node[clone] (AD)  {}
        +(1,0.5)  node[clone] (AP1) {}
       ++(0,1)    node[clone] (A)   {}
       ++(0,1.5)  node[clone] (DM)  {}
       ++(0,0.5)  node[clone] (DP)  {}
       ++(0,0.5)  node[clone] (D)   {}
       ++(0,0.5)  node[clone] (MP)  {}
        +(-1,0.5) node[clone] (MP0) {}
        +(1,0.5)  node[clone] (MP1) {}
       ++(0,1)    node[clone] (M)   {}
       ++(0,0.5)  node[clone] (P)   {}
        +(-1,0.5) node[clone] (P0)  {}
        +(1,0.5)  node[clone] (P1)  {}
       ++(0,1)    node[clone] (T)   {} ; % }}}
  % left wing nodes {{{
  \path (UP0)
      ++(0,1.5)     node[clone] (MeetP1)  {}
      ++(-1,-0.5)   node[clone] (MeetP)   {}
       +(0,1)       node[clone] (Meet)    {}
      ++(-1,0.5)    node[clone] (MeetP0)  {}
      ++(0.4,1.25)  node[clone] (MPT0inf) {}
       +(-0.5,1)    node[clone] (PT0inf)  {}
      ++(-1,0.5)    node[clone] (MT0inf)  {}
       +(-0.5,1)    node[clone] (T0inf)   {}
        (MPT0inf)
      ++(1.5/4,1.5) node[clone] (MPT05)   {}
       +(-0.5,1)    node[clone] (PT05)    {}
      ++(-1,0.5)    node[clone] (MT05)    {}
       +(-0.5,1)    node[clone] (T05)     {}
        (MPT05)
      ++(0.25,1)    node[clone] (MPT04)   {}
       +(-0.5,1)    node[clone] (PT04)    {}
      ++(-1,0.5)    node[clone] (MT04)    {}
       +(-0.5,1)    node[clone] (T04)     {}
        (MPT04)
      ++(0.25,1)    node[clone] (MPT03)   {}
       +(-0.5,1)    node[clone] (PT03)    {}
      ++(-1,0.5)    node[clone] (MT03)    {}
       +(-0.5,1)    node[clone] (T03)     {}
        (MPT03)
      ++(0.25,1)    node[clone] (MPT02)   {}
       +(-0.5,1)    node[clone] (PT02)    {}
      ++(-1,0.5)    node[clone] (MT02)    {}
       +(-0.5,1)    node[clone] (T02)     {} ; % }}}
  % right wing nodes {{{
  \path (UP1)
      ++(0,1.5)      node[clone] (JoinP0)  {}
      ++(1,-0.5)     node[clone] (JoinP)   {}
       +(0,1)        node[clone] (Join)    {}
      ++(1,0.5)      node[clone] (JoinP1)  {}

      ++(-0.4,1.25)  node[clone] (MPT1inf) {}
       +(0.5,1)      node[clone] (PT1inf)  {}
      ++(1,0.5)      node[clone] (MT1inf)  {}
       +(0.5,1)      node[clone] (T1inf)   {}
        (MPT1inf)
      ++(-1.5/4,1.5) node[clone] (MPT15)   {}
       +(0.5,1)      node[clone] (PT15)    {}
      ++(1,0.5)      node[clone] (MT15)    {}
       +(0.5,1)      node[clone] (T15)     {}
       (MPT15)
      ++(-0.25,1)    node[clone] (MPT14)   {}
       +(0.5,1)      node[clone] (PT14)    {}
      ++(1,0.5)      node[clone] (MT14)    {}
       +(0.5,1)      node[clone] (T14)     {}
       (MPT14)
      ++(-0.25,1)    node[clone] (MPT13)   {}
       +(0.5,1)      node[clone] (PT13)    {}
      ++(1,0.5)      node[clone] (MT13)    {}
       +(0.5,1)      node[clone] (T13)     {}
       (MPT13)
      ++(-0.25,1)    node[clone] (MPT12)   {}
       +(0.5,1)      node[clone] (PT12)    {}
      ++(1,0.5)      node[clone] (MT12)    {}
       +(0.5,1)      node[clone] (T12)     {} ;  % }}}

   % central section edges  {{{
   \draw (F) -- (UP0) -- (UM) -- (UP1) -- (F)
     (F) -- (MeetP)
     (F) -- (JoinP)
     (F) to[curveR] (UD)
     (F) to[curveR] (AP)
     (F) to[out=90+20,in=-90-20] (DM)
     (UP0) -- (MeetP0)
     (UP0) -- (JoinP0)
     (UP0) to[out=90-15,in=-90] (AP0)
     (UP1) -- (JoinP1)
     (UP1) -- (MeetP1)
     (UP1) to[out=90+15,in=-90] (AP1)
     (UM) to[curveL] (U)
     (UM) -- (Meet)
     (UM) -- (Join)
     (UD) -- (U)
     (UD) to[curveR] (AD)
     (U) to[curveL] (A)
     (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
     (AP) to[curveL] (DP)
     (AP0) to[out=90,in=-90-15] (P0)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (A) to[curveL] (T)
     (DM) -- (MPT02) -- (MP) -- (MPT12) -- (DM) -- (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T)
     (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
     (MP) to[curveR] (P)
     (MP0) -- (P0)
     (MP1) -- (P1)
     (M) to[curveL] (T)
     (P) -- (P0) -- (T) -- (P1) -- (P); % }}}
  % left wing edges {{{
  \draw (MeetP) -- (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP)
    (MeetP) -- (MPT0inf)
    (MeetP1) to[out=90-10,in=-90-20] (MP1)
    (MeetP0) -- (MT0inf)
    (Meet) -- (M)
    (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
    (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
    (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
    (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
    (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
    (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
    (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
    (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
    (MT02) -- (MP0)
    (T02) -- (P0)
    (PT02) -- (P);
  \draw (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05); 
  % }}}
  % right wing edges {{{
  \draw (JoinP) -- (JoinP0) -- (Join) -- (JoinP1) -- (JoinP)
    (JoinP) -- (MPT1inf)
    (JoinP0) to[out=90+10,in=-90+20] (MP0)
    (JoinP1) -- (MT1inf)
    (Join) -- (M)
    (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
    (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
    (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
    (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
    (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
    (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
    (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
    (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
    (MT12) -- (MP1)
    (T12) -- (P1)
    (PT12) -- (P);
  \draw (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15);
  % }}}

  % central clone labels
  \node[cloneLabel, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};

  \TikzCenterNode
\end{tikzpicture} % }}}2
  \end{column}
\end{columns}
\end{frame}  % }}}1
\begin{frame}  % Simon's circuit (optional) {{{1
\begin{columns}
  \begin{column}[T]{0.475\textwidth}
    \uncover<5->{ Define quantum circuit $\cl{S} = $ } \\[1em]
    \uncover<6->{
% circuit {{{
\begin{tikzpicture}[font=\scriptsize]
  \path (0,0) node (n1) {$\ket{0}$}
      ++(1,0) node[gate-c] (n1H1) {$H$}
      ++(1,0) coordinate (n1phi)
      ++(1,0) node[gate-c] (n1H2) {$H$}
      ++(1,0) node[gate-r] (n1meas) {\tikzMeasure}
      ++(0.75,0) node (n1end) {}
        (n1)
      ++(0,-0.5) node (ndots1) {$\vdots$}
      ++(0,-0.75) node (nn) {$\ket{0}$}
      ++(0,-0.5) node (m1) {$\ket{0}$}
      ++(0,-0.5) node (mdots1) {$\vdots$}
      ++(0,-0.75) node (mm) {$\ket{0}$};
  \coordinate (t) at ($(n1)!0.5!(mm)$);
  \path (n1H1|-ndots1) node {$\vdots$}
        (n1H2|-ndots1) node {$\vdots$}
        (n1H1|-nn) node[gate-c] (nnH1) {$H$}
        (n1phi|-t) node[gate-r, minimum height=10em, minimum width=1.55em] (phi) {$\widehat{\phi}$}
        (n1H2|-nn) node[gate-c] (nnH2) {$H$}
        (n1meas|-nn) node[gate-r] (nnmeas) {\tikzMeasure}
        (n1end|-nn) node (nnend) {}
        (n1end|-m1) node (m1end) {}
        (n1end|-mm) node (mmend) {}
        (n1meas|-ndots1) node (ndots2) {$\vdots$}
        (n1meas|-mdots1) node (mdots2) {$\vdots$};
  \path[->] (n1) edge (n1H1) (n1H1) edge (n1-|phi.west) (phi.east|-n1) edge (n1H2) (n1H2) edge (n1meas) (n1meas) edge (n1end)
            (nn) edge (nnH1) (nnH1) edge (nn-|phi.west) (phi.east|-nn) edge (nnH2) (nnH2) edge (nnmeas) (nnmeas) edge (nnend)
            (m1) edge (m1-|phi.west) (phi.east|-m1) edge (m1end)
            (mm) edge (mm-|phi.west) (phi.east|-mm) edge (mmend);
  \draw[densely dotted] (n1end.north west) -- (n1end.north east-|n1end.east) -- node[auto]{$n$} (nnend.south east-|nnend.east) -- (nnend.south west);
  \draw[densely dotted] (m1end.north west) -- (m1end.north east-|m1end.east) -- node[auto]{$m$} (mmend.south east-|mmend.east) -- (mmend.south west);
\end{tikzpicture} % }}}
    }
  \end{column}
  \begin{column}[T]{0.51\textwidth}
    Consider an instance of the HKP:
    \begin{itemize}
      \item<2-> $\m{B}$ a $2$-element algebra,
      \item<3-> $\AA  = \m{B}^n$, $\m{D} = \m{B}^m$,
      \item<4-> homomorphism $\phi: \AA \to \m{D}$.
    \end{itemize}

    \medskip

    \uncover<7->{ \emph{The $\widehat{\phi}$ gate} }
    \begin{itemize}
      \item<8-> Define {\small $\phi_{\oplus}: \{0,1\}^{n+m} \to \{0,1\}^{n+m}$}
        by {\small $\phi_{\oplus}(x,y) = (x,y + f(x))$}.
      \item<9-> Define unitary transformation $\widehat{\phi}$ by
        $\widehat{\phi}\ket{x,y} = \ket{x,y+\phi(x)}$.
    \end{itemize}
  \end{column}
\end{columns}

\bigskip

\uncover<10->{ What does it mean for $\cl{S}$ to \alert{solve} this problem? }
\begin{itemize}
  \item<11-> Output is probabilistic.
  \item<12-> Must run $\cl{S}$ multiple times, collecting the output.
  \item<13-> Overall complexity is (size of $\cl{S}$)$\cdot$(number of runs).
\end{itemize}
\end{frame}  % }}}1
\begin{frame} % HKP Post's lattice quantum results {{{1
\begin{columns}
  \begin{column}{0.4\textwidth} \small
    \vspace{-0.7em}
    \uncover<2->{ \begin{thm}
    There \BSolves{exists}
    \uncover<20->{/ \BNSolves{doesn't exist}} \\
    a poly-time {\bf quantum} solution for $\text{HKP}(\m{B}^n)$, where \\[0.75em]
    \uncover<3->{ \begin{tabular}{m{3.6em}l}
      $\m{B}$                                         & Ops on $\{0,1\}$ \\ \midrule
      \BSolves{$\Clone{AP}_0$}                        & $x + y$ (\BViolet{known}) \\[0.25em]
      \uncover<8->{  \BSolves{$\Clone{MPT}_0^\infty$} & $x \wedge (y \vee z)$ } \\[0.25em]
      \uncover<11->{ \BSolves{$\Clone{MPT}_1^\infty$} & $x \vee (y \wedge z)$ } \\[0.25em]
      \uncover<14->{ \BSolves{$\Clone{AP}$}           & $x + y + z$ } \\[0.25em]
      \uncover<17->{ \BSolves{$\Clone{DM}$}           & $\maj(x,y,z)$ } \\[0.25em]
      \uncover<21->{ \BNSolves{$\CloneWedge$}         & $x \wedge y$, $0$, $1$ } \\[0.25em]
      \uncover<25->{ \BNSolves{$\CloneVee$}           & $x \vee y$, $0$, $1$  } \\[0.25em]
      \uncover<28->{ \BNSolves{$\Clone{U}$}           & $\neg x$, $0$ }
    \end{tabular} }
    \end{thm} }
    \uncover<5->{ \emph{Observations} }
    \begin{itemize}
      \item<6->  \BSolves{exists} is inherited up,
      \item<23-> \parbox[c]{13.25em}{\vspace{-2.75em} \BNSolves{doesn't exist} is inherited down. }
    \end{itemize}
  \end{column}
  \begin{column}{0.54\textwidth}
\begin{tikzpicture}[font=\tiny, yscale=0.8, xscale=0.8, baseline=(center.base)] % {{{2
  % central section nodes {{{
  \path (0, 0)    node[clone] (F)   {}
       +(-1, 0.5) node[clone] (UP0) {}
       +(1, 0.5)  node[clone] (UP1) {}
       ++(0,1)    node[clone] (UM)  {}
       ++(0,1.5)  node[clone] (UD)  {}
       ++(0,1)    node[clone] (U)   {}
       ++(0,1)    node[clone] (AP)  {}
        +(-1,0.5) node[clone] (AP0) {}
        +(0,0.5)  node[clone] (AD)  {}
        +(1,0.5)  node[clone] (AP1) {}
       ++(0,1)    node[clone] (A)   {}
       ++(0,1.5)  node[clone] (DM)  {}
       ++(0,0.5)  node[clone] (DP)  {}
       ++(0,0.5)  node[clone] (D)   {}
       ++(0,0.5)  node[clone] (MP)  {}
        +(-1,0.5) node[clone] (MP0) {}
        +(1,0.5)  node[clone] (MP1) {}
       ++(0,1)    node[clone] (M)   {}
       ++(0,0.5)  node[clone] (P)   {}
        +(-1,0.5) node[clone] (P0)  {}
        +(1,0.5)  node[clone] (P1)  {}
       ++(0,1)    node[clone] (T)   {} ; % }}}
  % left wing nodes {{{
  \path (UP0)
      ++(0,1.5)     node[clone] (MeetP1)  {}
      ++(-1,-0.5)   node[clone] (MeetP)   {}
       +(0,1)       node[clone] (Meet)    {}
      ++(-1,0.5)    node[clone] (MeetP0)  {}
      ++(0.4,1.25)  node[clone] (MPT0inf) {}
       +(-0.5,1)    node[clone] (PT0inf)  {}
      ++(-1,0.5)    node[clone] (MT0inf)  {}
       +(-0.5,1)    node[clone] (T0inf)   {}
        (MPT0inf)
      ++(1.5/4,1.5) node[clone] (MPT05)   {}
       +(-0.5,1)    node[clone] (PT05)    {}
      ++(-1,0.5)    node[clone] (MT05)    {}
       +(-0.5,1)    node[clone] (T05)     {}
        (MPT05)
      ++(0.25,1)    node[clone] (MPT04)   {}
       +(-0.5,1)    node[clone] (PT04)    {}
      ++(-1,0.5)    node[clone] (MT04)    {}
       +(-0.5,1)    node[clone] (T04)     {}
        (MPT04)
      ++(0.25,1)    node[clone] (MPT03)   {}
       +(-0.5,1)    node[clone] (PT03)    {}
      ++(-1,0.5)    node[clone] (MT03)    {}
       +(-0.5,1)    node[clone] (T03)     {}
        (MPT03)
      ++(0.25,1)    node[clone] (MPT02)   {}
       +(-0.5,1)    node[clone] (PT02)    {}
      ++(-1,0.5)    node[clone] (MT02)    {}
       +(-0.5,1)    node[clone] (T02)     {} ; % }}}
  % right wing nodes {{{
  \path (UP1)
      ++(0,1.5)      node[clone] (JoinP0)  {}
      ++(1,-0.5)     node[clone] (JoinP)   {}
       +(0,1)        node[clone] (Join)    {}
      ++(1,0.5)      node[clone] (JoinP1)  {}
      ++(-0.4,1.25)  node[clone] (MPT1inf) {}
       +(0.5,1)      node[clone] (PT1inf)  {}
      ++(1,0.5)      node[clone] (MT1inf)  {}
       +(0.5,1)      node[clone] (T1inf)   {}
        (MPT1inf)
      ++(-1.5/4,1.5) node[clone] (MPT15)   {}
       +(0.5,1)      node[clone] (PT15)    {}
      ++(1,0.5)      node[clone] (MT15)    {}
       +(0.5,1)      node[clone] (T15)     {}
        (MPT15)
      ++(-0.25,1)    node[clone] (MPT14)   {}
       +(0.5,1)      node[clone] (PT14)    {}
      ++(1,0.5)      node[clone] (MT14)    {}
       +(0.5,1)      node[clone] (T14)     {}
        (MPT14)
      ++(-0.25,1)    node[clone] (MPT13)   {}
       +(0.5,1)      node[clone] (PT13)    {}
      ++(1,0.5)      node[clone] (MT13)    {}
       +(0.5,1)      node[clone] (T13)     {}
        (MPT13)
      ++(-0.25,1)    node[clone] (MPT12)   {}
       +(0.5,1)      node[clone] (PT12)    {}
      ++(1,0.5)      node[clone] (MT12)    {}
       +(0.5,1)      node[clone] (T12)     {} ;  % }}}

   % central section edges  {{{
   \draw (F) -- (UP0) -- (UM) -- (UP1) -- (F)
     (F) -- (MeetP)
     (F) -- (JoinP)
     (F) to[curveR] (UD)
     (F) to[curveR] (AP)
     (F) to[out=90+20,in=-90-20] (DM)
     (UP0) -- (MeetP0)
     (UP0) -- (JoinP0)
     (UP0) to[out=90-15,in=-90] (AP0)
     (UP1) -- (JoinP1)
     (UP1) -- (MeetP1)
     (UP1) to[out=90+15,in=-90] (AP1)
     (UM) to[curveL] (U)
     (UM) -- (Meet)
     (UM) -- (Join)
     (UD) -- (U)
     (UD) to[curveR] (AD)
     (U) to[curveL] (A)
     (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
     (AP) to[curveL] (DP)
     (AP0) to[out=90,in=-90-15] (P0)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (A) to[curveL] (T)
     (DM) -- (MPT02) -- (MP) -- (MPT12) -- (DM) -- (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T)
     (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
     (MP) to[curveR] (P)
     (MP0) -- (P0)
     (MP1) -- (P1)
     (M) to[curveL] (T)
     (P) -- (P0) -- (T) -- (P1) -- (P); % }}}
  % left wing edges {{{
  \draw (MeetP) -- (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP)
    (MeetP) -- (MPT0inf)
    (MeetP1) to[out=90-10,in=-90-20] (MP1)
    (MeetP0) -- (MT0inf)
    (Meet) -- (M)
    (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
    (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
    (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
    (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
    (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
    (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
    (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
    (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
    (MT02) -- (MP0)
    (T02) -- (P0)
    (PT02) -- (P);
  \only<-9|handout:0>{ 
    \draw (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05); 
  } % }}}
  % right wing edges {{{
  \draw (JoinP) -- (JoinP0) -- (Join) -- (JoinP1) -- (JoinP)
    (JoinP) -- (MPT1inf)
    (JoinP0) to[out=90+10,in=-90+20] (MP0)
    (JoinP1) -- (MT1inf)
    (Join) -- (M)
    (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
    (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
    (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
    (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
    (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
    (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
    (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
    (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
    (MT12) -- (MP1)
    (T12) -- (P1)
    (PT12) -- (P);
  \only<-12|handout:0>{ 
    \draw (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15);
  } % }}}

  % AP0 {{{3
  \only<-3>{ \node[cloneLabel, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$}; }
  \uncover<4->{ 
    \node[clone, myViolet] at (AP0) {};
    \node[cloneLabel, myViolet, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  }
  \uncover<7->{ 
    \node[clone, myViolet] at (A) {}; 
    \node[clone, myViolet] at (P0) {}; 
    \node[clone, myViolet] at (T) {};
    \draw[myViolet] (AP0) -- (A) 
      (AP0) to[out=90,in=-90-15] (P0)
      (P0) -- (T)
      (A) to[curveL] (T);
  } % }}}3
  % MPT0inf {{{3
  \uncover<9->{
    \node[cloneLabel, solves, right] at (MPT0inf) {$\Clone{MPT}_0^\infty$};
    \node[clone, solves] at (MPT0inf) {};
  }
  \uncover<10->{
    % left wing nodes {{{
    \node[clone, solves] at (PT0inf) {} ;
    \node[clone, solves] at (MT0inf) {} ;
    \node[clone, solves] at (T0inf)  {} ;
    \node[clone, solves] at (MPT05)  {} ;
    \node[clone, solves] at (PT05)   {} ;
    \node[clone, solves] at (MT05)   {} ;
    \node[clone, solves] at (T05)    {} ;
    \node[clone, solves] at (MPT04)  {} ;
    \node[clone, solves] at (PT04)   {} ;
    \node[clone, solves] at (MT04)   {} ;
    \node[clone, solves] at (T04)    {} ;
    \node[clone, solves] at (MPT03)  {} ;
    \node[clone, solves] at (PT03)   {} ;
    \node[clone, solves] at (MT03)   {} ;
    \node[clone, solves] at (T03)    {} ;
    \node[clone, solves] at (MPT02)  {} ;
    \node[clone, solves] at (PT02)   {} ;
    \node[clone, solves] at (MT02)   {} ;
    \node[clone, solves] at (T02)    {} ; % }}}
    % left wing edges {{{
    \draw[solves] (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
      (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05)
      (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
      (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
      (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
      (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
      (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
      (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
      (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
      (MT02) -- (MP0)
      (T02) -- (P0)
      (PT02) -- (P);  % }}}
    \node[clone, solves] at (MP)  {} ;
    \node[clone, solves] at (MP0) {} ;
    \node[clone, solves] at (M)   {} ;
    \node[clone, solves] at (P)   {} ;
    \node[clone, solves] at (P1)  {} ;
    \draw[solves] (MPT02) -- (MP) -- (MP0) -- (M)
      (MP0) -- (P0)
      (MP) to[curveR] (P)
      (P) -- (P0)
      (P) -- (P1) -- (T)
      (M) to[curveL] (T);
  } % }}}3
  % MPT1inf {{{3
  \uncover<12->{
    \node[cloneLabel, solves, left] at (MPT1inf) {$\Clone{MPT}_1^\infty$};
    \node[clone, solves] at (MPT1inf) {};
  }
  \uncover<13->{
    % right wing nodes {{{
    \node[clone, solves] at (PT1inf) {} ;
    \node[clone, solves] at (MT1inf) {} ;
    \node[clone, solves] at (T1inf)  {} ;
    \node[clone, solves] at (MPT15)  {} ;
    \node[clone, solves] at (PT15)   {} ;
    \node[clone, solves] at (MT15)   {} ;
    \node[clone, solves] at (T15)    {} ;
    \node[clone, solves] at (MPT14)  {} ;
    \node[clone, solves] at (PT14)   {} ;
    \node[clone, solves] at (MT14)   {} ;
    \node[clone, solves] at (T14)    {} ;
    \node[clone, solves] at (MPT13)  {} ;
    \node[clone, solves] at (PT13)   {} ;
    \node[clone, solves] at (MT13)   {} ;
    \node[clone, solves] at (T13)    {} ;
    \node[clone, solves] at (MPT12)  {} ;
    \node[clone, solves] at (PT12)   {} ;
    \node[clone, solves] at (MT12)   {} ;
    \node[clone, solves] at (T12)    {} ; % }}}
    % right wing edges {{{
    \draw[solves] (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
      (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15)
      (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
      (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
      (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
      (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
      (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
      (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
      (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
      (MT12) -- (MP1)
      (T12) -- (P1)
      (PT12) -- (P);  % }}}
    \node[clone, solves] at (MP1) {};
    \draw[solves] (MPT12) -- (MP) -- (MP1) -- (M)
      (MP1) -- (P1);
  } % }}}3
  % AP {{{3
  \uncover<15->{
    \node[cloneLabel, solves, below] at (AP) {$\Clone{AP}$};
    \node[clone, solves] at (AP) {};
  }
  \uncover<16->{
    \node[clone, solves] at (AD)  {} ;
    \node[clone, solves] at (AP1) {} ;
    \node[clone, solves] at (DP)  {} ;
    \node[clone, solves] at (D)   {} ;
    \draw[solves] (AP) -- (AP0) 
     (AP) -- (AP1) -- (A) -- (AD) -- (AP)
     (AP) to[curveL] (DP)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T);
  }  % }}}3
  % DM {{{3
  \uncover<18->{
    \node[cloneLabel, solves, below] at (DM) {$\Clone{DM}$};
    \node[clone, solves] at (DM) {};
  }
  \uncover<19->{
    \draw[solves] (DM) -- (DP)
      (DM) -- (MPT02)
      (DM) -- (MPT12);
  }  % }}}3
  % Meet {{{3
  \uncover<22->{
    \node[cloneLabel, nsolves, below] at (Meet) {$\CloneWedge$};
    \node[clone, nsolves] at (Meet) {};
  }
  \uncover<24->{
    \node[clone, nsolves] at (MeetP0) {} ;
    \node[clone, nsolves] at (MeetP1) {} ;
    \node[clone, nsolves] at (MeetP)  {} ;
    \node[clone, nsolves] at (UM)     {} ;
    \node[clone, nsolves] at (UP0)    {} ;
    \node[clone, nsolves] at (UP1)    {} ;
    \node[clone, nsolves] at (F)      {} ;
    \draw[nsolves] (F) -- (UP0) -- (UM) -- (UP1) -- (F)
      (F) -- (MeetP)
      (UP0) -- (MeetP0)
      (UP1) -- (MeetP1)
      (UM) -- (Meet)
      (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP) -- (MeetP0);
  } % }}}3
  % Join {{{3
  \uncover<26->{
    \node[cloneLabel, nsolves, below] at (Join) {$\CloneVee$};
    \node[clone, nsolves] at (Join) {};
  }
  \uncover<27->{
    \node[clone, nsolves] at (JoinP0) {} ;
    \node[clone, nsolves] at (JoinP1) {} ;
    \node[clone, nsolves] at (JoinP)  {} ;
    \draw[nsolves] (F) -- (JoinP)
      (UP0) -- (JoinP0)
      (UP1) -- (JoinP1)
      (UM) -- (Join)
      (JoinP0) -- (Join) -- (JoinP1) -- (JoinP) -- (JoinP0);
  } % }}}3
  % U {{{3
  \uncover<29->{
    \node[cloneLabel, nsolves, above] at (U) {$\Clone{U}$};
    \node[clone, nsolves] at (U) {};
  }
  \uncover<30->{
    \node[clone, nsolves] at (UD) {};
    \draw[nsolves] (F) to[curveR] (UD)
      (UM) to[curveL] (U)
     (UD) -- (U);
  } % }}}3

  \TikzCenterNode
\end{tikzpicture} % }}}2
  \end{column}
\end{columns}
\end{frame}  % }}}1
\begin{frame} % HKP Post's lattice classical results {{{1
\begin{columns}
  \begin{column}{0.4\textwidth} \small
    \vspace{-0.7em}
    \uncover<2->{ \begin{thm}
    There \BSolves{exists}
    \uncover<2->{/ \BNSolves{doesn't exist}} \\
    a poly-time {\bf classical} solution for HKP($\m{B}^n$), where \\[0.75em]
    \uncover<3->{ \begin{tabular}{m{3.6em}l}
      $\m{B}$                                        & Ops on $\{0,1\}$ \\ \midrule
      \uncover<4->{ \BSolves{$\Clone{MPT}_0^\infty$} & $x \wedge (y \vee z)$ } \\[0.1em]
      \uncover<6->{ \BSolves{$\Clone{MPT}_1^\infty$} & $x \vee (y \wedge z)$ } \\[0.1em]
      \uncover<8->{ \BSolves{$\Clone{DM}$}           & $\maj(x,y,z)$ } \\[0.1em]
      \uncover<10->{ \BNSolves{$\Clone{A}$}          & $x \leftrightarrow y$, $0$ } \\[0.1em]
      \uncover<12->{ \BNSolves{$\CloneWedge$}        & $x\wedge y$, $0$, $1$ } \\[0.1em]
      \uncover<14->{ \BNSolves{$\CloneVee$}          & $x\vee y$, $0$, $1$ } \\[0.1em]
    \end{tabular} }
    \end{thm} }

    \vspace{3.525em}

    \uncover<2->{ \emph{Observations}
    \begin{itemize}
      \item \BSolves{exists} is inherited up,
      \item \parbox[c]{13.25em}{\vspace{-2.75em} \BNSolves{doesn't exist} is inherited down. }
    \end{itemize} }
  \end{column}
  \begin{column}{0.54\textwidth}
\begin{tikzpicture}[font=\tiny, yscale=0.8, xscale=0.8, baseline=(center.base)] % {{{2
  % central section nodes {{{
  \path (0, 0)    node[clone] (F) {}
       +(-1, 0.5) node[clone] (UP0) {}
       +(1, 0.5)  node[clone] (UP1) {}
       ++(0,1)    node[clone] (UM) {}
       ++(0,1.5)  node[clone] (UD) {}
       ++(0,1)    node[clone] (U) {}
       ++(0,1)    node[clone] (AP) {}
        +(-1,0.5) node[clone] (AP0) {}
        +(0,0.5)  node[clone] (AD) {}
        +(1,0.5)  node[clone] (AP1) {}
       ++(0,1)    node[clone] (A) {}
       ++(0,1.5)  node[clone] (DM) {}
       ++(0,0.5)  node[clone] (DP) {}
       ++(0,0.5)  node[clone] (D) {}
       ++(0,0.5)  node[clone] (MP) {}
        +(-1,0.5) node[clone] (MP0) {}
        +(1,0.5)  node[clone] (MP1) {}
       ++(0,1)    node[clone] (M) {}
       ++(0,0.5)  node[clone] (P) {}
        +(-1,0.5) node[clone] (P0) {}
        +(1,0.5)  node[clone] (P1) {}
       ++(0,1)    node[clone] (T) {}; % }}}
  % left wing nodes {{{
  \path (UP0)
      ++(0,1.5)    node[clone] (MeetP1) {}
      ++(-1,-0.5)  node[clone] (MeetP) {}
       +(0,1)      node[clone] (Meet) {}
      ++(-1,0.5)   node[clone] (MeetP0) {}

      ++(0.4,1.25)    node[clone] (MPT0inf) {}
       +(-0.5,1)   node[clone] (PT0inf) {}
      ++(-1,0.5)   node[clone] (MT0inf) {}
       +(-0.5,1)   node[clone] (T0inf) {}
        (MPT0inf)
      ++(1.5/4,1.5)   node[clone] (MPT05) {}
       +(-0.5,1)   node[clone] (PT05) {}
      ++(-1,0.5)   node[clone] (MT05) {}
       +(-0.5,1)   node[clone] (T05) {}
       (MPT05)
      ++(0.25,1)   node[clone] (MPT04) {}
       +(-0.5,1)   node[clone] (PT04) {}
      ++(-1,0.5)   node[clone] (MT04) {}
       +(-0.5,1)   node[clone] (T04) {}
       (MPT04)
      ++(0.25,1) node[clone] (MPT03) {}
       +(-0.5,1)   node[clone] (PT03) {}
      ++(-1,0.5)   node[clone] (MT03) {}
       +(-0.5,1)   node[clone] (T03) {}
       (MPT03)
      ++(0.25,1) node[clone] (MPT02) {}
       +(-0.5,1)   node[clone] (PT02) {}
      ++(-1,0.5)   node[clone] (MT02) {}
       +(-0.5,1)   node[clone] (T02) {}; % }}}
  % right wing nodes {{{
  \path (UP1)
      ++(0,1.5)     node[clone] (JoinP0) {}
      ++(1,-0.5)    node[clone] (JoinP) {}
       +(0,1)       node[clone] (Join) {}
      ++(1,0.5)     node[clone] (JoinP1) {}

      ++(-0.4,1.25)    node[clone] (MPT1inf) {}
       +(0.5,1)     node[clone] (PT1inf) {}
      ++(1,0.5)     node[clone] (MT1inf) {}
       +(0.5,1)     node[clone] (T1inf) {}
        (MPT1inf)
      ++(-1.5/4,1.5) node[clone] (MPT15) {}
       +(0.5,1)     node[clone] (PT15) {}
      ++(1,0.5)     node[clone] (MT15) {}
       +(0.5,1)     node[clone] (T15) {}
       (MPT15)
      ++(-0.25,1)   node[clone] (MPT14) {}
       +(0.5,1)     node[clone] (PT14) {}
      ++(1,0.5)     node[clone] (MT14) {}
       +(0.5,1)     node[clone] (T14) {}
       (MPT14)
      ++(-0.25,1) node[clone] (MPT13) {}
       +(0.5,1)     node[clone] (PT13) {}
      ++(1,0.5)     node[clone] (MT13) {}
       +(0.5,1)     node[clone] (T13) {}
       (MPT13)
      ++(-0.25,1) node[clone] (MPT12) {}
       +(0.5,1)     node[clone] (PT12) {}
      ++(1,0.5)     node[clone] (MT12) {}
       +(0.5,1)     node[clone] (T12) {};  % }}}

   % central section edges  {{{
   \draw (F) -- (UP0) -- (UM) -- (UP1) -- (F)
     (F) -- (MeetP)
     (F) -- (JoinP)
     (F) to[curveR] (UD)
     (F) to[curveR] (AP)
     (F) to[out=90+20,in=-90-20] (DM)
     (UP0) -- (MeetP0)
     (UP0) -- (JoinP0)
     (UP0) to[out=90-15,in=-90] (AP0)
     (UP1) -- (JoinP1)
     (UP1) -- (MeetP1)
     (UP1) to[out=90+15,in=-90] (AP1)
     (UM) to[curveL] (U)
     (UM) -- (Meet)
     (UM) -- (Join)
     (UD) -- (U)
     (UD) to[curveR] (AD)
     (U) to[curveL] (A)
     (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
     (AP) to[curveL] (DP)
     (AP0) to[out=90,in=-90-15] (P0)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (A) to[curveL] (T)
     (DM) -- (MPT02) -- (MP) -- (MPT12) -- (DM) -- (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T)
     (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
     (MP) to[curveR] (P)
     (MP0) -- (P0)
     (MP1) -- (P1)
     (M) to[curveL] (T)
     (P) -- (P0) -- (T) -- (P1) -- (P); % }}}
  % left wing edges {{{
  \draw (MeetP) -- (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP)
    (MeetP) -- (MPT0inf)
    (MeetP1) to[out=90-10,in=-90-20] (MP1)
    (MeetP0) -- (MT0inf)
    (Meet) -- (M)
    (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
    (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
    (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
    (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
    (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
    (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
    (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
    (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
    (MT02) -- (MP0)
    (T02) -- (P0)
    (PT02) -- (P); % }}}
  % right wing edges {{{
  \draw (JoinP) -- (JoinP0) -- (Join) -- (JoinP1) -- (JoinP)
    (JoinP) -- (MPT1inf)
    (JoinP0) to[out=90+10,in=-90+20] (MP0)
    (JoinP1) -- (MT1inf)
    (Join) -- (M)
    (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
    (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
    (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
    (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
    (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
    (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
    (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
    (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
    (MT12) -- (MP1)
    (T12) -- (P1)
    (PT12) -- (P); % }}}

  % AP0 {{{3
  \node[cloneLabel, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  \node[clone] at (AP0) {};
  \node[clone] at (A) {}; 
  \node[clone] at (P0) {}; 
  \node[clone] at (T) {};
  \draw (AP0) -- (A) 
    (AP0) to[out=90,in=-90-15] (P0)
    (A) to[curveL] (T); % }}}3
  % AP {{{3
  \node[cloneLabel, below] at (AP) {$\Clone{AP}$};
  \node[clone] at (AP) {};
  \node[clone] at (AD)  {};
  \node[clone] at (AP1) {};
  \draw (AP) -- (AP0) 
   (AP) -- (AP1) -- (A) -- (AD) -- (AP)
   (AP) to[curveL] (DP)
   (AP1) to[out=90,in=-90+15] (P1)
   (AD) to[curveR] (D); % }}}3

  % MPT0inf {{{3
  \only<-4>{
    \node[cloneLabel, right] at (MPT0inf) {$\Clone{MPT}_0^\infty$};
    \node[clone] at (MPT0inf) {};
    % left wing nodes {{{
    \node[clone] at (PT0inf) {};
    \node[clone] at (MT0inf) {};
    \node[clone] at (T0inf) {};
    \node[clone] at (MPT05) {};
    \node[clone] at (PT05) {};
    \node[clone] at (MT05) {};
    \node[clone] at (T05) {};
    \node[clone] at (MPT04) {};
    \node[clone] at (PT04) {};
    \node[clone] at (MT04) {};
    \node[clone] at (T04) {};
    \node[clone] at (MPT03) {};
    \node[clone] at (PT03) {};
    \node[clone] at (MT03) {};
    \node[clone] at (T03) {};
    \node[clone] at (MPT02) {};
    \node[clone] at (PT02) {};
    \node[clone] at (MT02) {};
    \node[clone] at (T02) {}; % }}}
    % left wing edges {{{
    \draw (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
      (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05)
      (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
      (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
      (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
      (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
      (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
      (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
      (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
      (MT02) -- (MP0)
      (T02) -- (P0)
      (PT02) -- (P);  % }}}
    \node[clone] at (MP) {};
    \node[clone] at (MP0) {};
    \node[clone] at (MP1) {};
    \node[clone] at (M) {};
    \node[clone] at (P) {};
    \node[clone] at (P0) {}; 
    \node[clone] at (P1) {};
    \node[clone] at (T) {};
    \draw (MPT02) -- (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
      (MP0) -- (P0)
      (MP1) -- (P1)
      (MP) to[curveR] (P)
      (P) -- (P0) -- (T)
      (P) -- (P1) -- (T)
      (M) to[curveL] (T);
    }
  \uncover<5->{
    \node[cloneLabel, solves, right] at (MPT0inf) {$\Clone{MPT}_0^\infty$};
    \node[clone, solves] at (MPT0inf) {};
    % left wing nodes {{{
    \node[clone, solves] at (PT0inf) {};
    \node[clone, solves] at (MT0inf) {};
    \node[clone, solves] at (T0inf) {};
    \node[clone, solves] at (MPT05) {};
    \node[clone, solves] at (PT05) {};
    \node[clone, solves] at (MT05) {};
    \node[clone, solves] at (T05) {};
    \node[clone, solves] at (MPT04) {};
    \node[clone, solves] at (PT04) {};
    \node[clone, solves] at (MT04) {};
    \node[clone, solves] at (T04) {};
    \node[clone, solves] at (MPT03) {};
    \node[clone, solves] at (PT03) {};
    \node[clone, solves] at (MT03) {};
    \node[clone, solves] at (T03) {};
    \node[clone, solves] at (MPT02) {};
    \node[clone, solves] at (PT02) {};
    \node[clone, solves] at (MT02) {};
    \node[clone, solves] at (T02) {}; % }}}
    % left wing edges {{{
    \draw[solves] (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
      (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05)
      (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
      (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
      (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
      (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
      (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
      (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
      (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
      (MT02) -- (MP0)
      (T02) -- (P0)
      (PT02) -- (P);  % }}}
    \node[clone, solves] at (MP) {};
    \node[clone, solves] at (MP0) {};
    \node[clone, solves] at (MP1) {};
    \node[clone, solves] at (M) {};
    \node[clone, solves] at (P) {};
    \node[clone, solves] at (P0) {}; 
    \node[clone, solves] at (P1) {};
    \node[clone, solves] at (T) {};
    \draw[solves] (MPT02) -- (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
      (MP0) -- (P0)
      (MP1) -- (P1)
      (MP) to[curveR] (P)
      (P) -- (P0) -- (T)
      (P) -- (P1) -- (T)
      (M) to[curveL] (T);
    } % }}}3
  % MPT1inf {{{3
  \only<-6>{
    \node[cloneLabel, left] at (MPT1inf) {$\Clone{MPT}_1^\infty$};
    \node[clone] at (MPT1inf) {};
    % right wing nodes {{{
    \node[clone] at (PT1inf) {};
    \node[clone] at (MT1inf) {};
    \node[clone] at (T1inf)  {};
    \node[clone] at (MPT15)  {};
    \node[clone] at (PT15)   {};
    \node[clone] at (MT15)   {};
    \node[clone] at (T15)    {};
    \node[clone] at (MPT14)  {};
    \node[clone] at (PT14)   {};
    \node[clone] at (MT14)   {};
    \node[clone] at (T14)    {};
    \node[clone] at (MPT13)  {};
    \node[clone] at (PT13)   {};
    \node[clone] at (MT13)   {};
    \node[clone] at (T13)    {};
    \node[clone] at (MPT12)  {};
    \node[clone] at (PT12)   {};
    \node[clone] at (MT12)   {};
    \node[clone] at (T12)    {}; % }}}
    % right wing edges {{{
    \draw (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
      (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15)
      (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
      (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
      (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
      (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
      (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
      (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
      (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
      (MT12) -- (MP1)
      (T12) -- (P1)
      (PT12) -- (P);  % }}}
    \draw (MPT12) -- (MP);
  }
  \uncover<7->{
    \node[cloneLabel, solves, left] at (MPT1inf) {$\Clone{MPT}_1^\infty$};
    \node[clone, solves] at (MPT1inf) {};
    % right wing nodes {{{
    \node[clone, solves] at (PT1inf) {};
    \node[clone, solves] at (MT1inf) {};
    \node[clone, solves] at (T1inf)  {};
    \node[clone, solves] at (MPT15)  {};
    \node[clone, solves] at (PT15)   {};
    \node[clone, solves] at (MT15)   {};
    \node[clone, solves] at (T15)    {};
    \node[clone, solves] at (MPT14)  {};
    \node[clone, solves] at (PT14)   {};
    \node[clone, solves] at (MT14)   {};
    \node[clone, solves] at (T14)    {};
    \node[clone, solves] at (MPT13)  {};
    \node[clone, solves] at (PT13)   {};
    \node[clone, solves] at (MT13)   {};
    \node[clone, solves] at (T13)    {};
    \node[clone, solves] at (MPT12)  {};
    \node[clone, solves] at (PT12)   {};
    \node[clone, solves] at (MT12)   {};
    \node[clone, solves] at (T12)    {}; % }}}
    % right wing edges {{{
    \draw[solves] (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
      (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15)
      (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
      (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
      (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
      (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
      (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
      (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
      (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
      (MT12) -- (MP1)
      (T12) -- (P1)
      (PT12) -- (P);  % }}}
    \draw[solves] (MPT12) -- (MP) -- (MP1) -- (M)
      (MP1) -- (P1);
  } % }}}3
  % DM {{{3
  \only<-8>{
    \node[cloneLabel, below] at (DM) {$\Clone{DM}$};
    \node[clone] at (DM) {};
    \node[clone] at (DP)  {};
    \node[clone] at (D)   {};
    \draw (DM) -- (DP)
      (DM) -- (MPT02)
      (DM) -- (MPT12)
      (DP) -- (D)
      (DP) to[curveL] (P)
      (D) to[curveR] (T); 
  }
  \uncover<9->{
    \node[cloneLabel, solves, below] at (DM) {$\Clone{DM}$};
    \node[clone, solves] at (DM) {};
    \node[clone, solves] at (DP)  {};
    \node[clone, solves] at (D)   {};
    \draw[solves] (DM) -- (DP)
      (DM) -- (MPT02)
      (DM) -- (MPT12)
      (DP) -- (D)
      (DP) to[curveL] (P)
      (D) to[curveR] (T); 
  } % }}}3

  % A {{{3
  \only<-10>{
    \node[cloneLabel, above] at (U) {$\Clone{U}$};
    \node[clone] at (U) {};
    \node[clone] at (UD) {};
    \node[clone] at (UM) {};
    \node[clone] at (UP0) {};
    \node[clone] at (UP1) {};
    \node[clone] at (F) {};
    \node[cloneLabel, above] at (A) {$\Clone{A}$}; 
    \draw (F) -- (UP0) -- (UM) -- (UP1) -- (F)
      (F) to[curveR] (UD)
      (UM) to[curveL] (U)
      (UD) -- (U);
  }
  \uncover<11->{
    \draw[nsolves] (UP0) to[out=90-15,in=-90] (AP0)
      (UP1) to[out=90+15,in=-90] (AP1)
      (UD) to[curveR] (AD)
      (U) to[curveL] (A)
      (UM) to[curveL] (U)
      (F) to[curveR] (UD)
      (F) to[curveR] (AP)
      (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
      (UD) -- (U)
      (F) -- (UP0) -- (UM) -- (UP1) -- (F) ;
    \node[cloneLabel, nsolves, above] at (A) {$\Clone{A}$};
    \node[clone, nsolves] at (A) {};
    \node[cloneLabel, nsolves, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
    \node[cloneLabel, nsolves, below] at (AP) {$\Clone{AP}$};
    \node[clone, nsolves] at (A) {}; 
    \node[clone, nsolves] at (AD)  {};
    \node[clone, nsolves] at (AP) {};
    \node[clone, nsolves] at (AP0) {};
    \node[clone, nsolves] at (AP1) {};
    \node[cloneLabel, nsolves, above] at (U) {$\Clone{U}$};
    \node[clone, nsolves] at (U) {};
    \node[clone, nsolves] at (UD) {};
    \node[clone, nsolves] at (UM) {};
    \node[clone, nsolves] at (UP0) {};
    \node[clone, nsolves] at (UP1) {};
    \node[clone, nsolves] at (F) {};
  } % }}}3
  % Meet {{{3
  \only<-12>{
    \node[cloneLabel, below] at (Meet) {$\CloneWedge$};
    \node[clone] at (Meet) {};
    \node[clone] at (MeetP0) {};
    \node[clone] at (MeetP1) {};
    \node[clone] at (MeetP) {};
    \draw (F) -- (MeetP)
      (UP0) -- (MeetP0)
      (UP1) -- (MeetP1)
      (UM) -- (Meet)
      (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP) -- (MeetP0);
  }
  \uncover<13->{
    \node[cloneLabel, nsolves, below] at (Meet) {$\CloneWedge$};
    \node[clone, nsolves] at (Meet) {};
    \node[clone, nsolves] at (MeetP0) {};
    \node[clone, nsolves] at (MeetP1) {};
    \node[clone, nsolves] at (MeetP) {};
    \draw[nsolves] (F) -- (MeetP)
      (UP0) -- (MeetP0)
      (UP1) -- (MeetP1)
      (UM) -- (Meet)
      (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP) -- (MeetP0);
  } % }}}3
  % Join {{{3
  \only<-14>{
    \node[cloneLabel, below] at (Join) {$\CloneVee$};
    \node[clone] at (Join) {};
    \node[clone] at (JoinP0) {};
    \node[clone] at (JoinP1) {};
    \node[clone] at (JoinP) {};
    \draw (F) -- (JoinP)
      (UP0) -- (JoinP0)
      (UP1) -- (JoinP1)
      (UM) -- (Join)
      (JoinP0) -- (Join) -- (JoinP1) -- (JoinP) -- (JoinP0);
  }
  \uncover<15->{
    \node[cloneLabel, nsolves, below] at (Join) {$\CloneVee$};
    \node[clone, nsolves] at (Join) {};
    \node[clone, nsolves] at (JoinP0) {};
    \node[clone, nsolves] at (JoinP1) {};
    \node[clone, nsolves] at (JoinP) {};
    \draw[nsolves] (F) -- (JoinP)
      (UP0) -- (JoinP0)
      (UP1) -- (JoinP1)
      (UM) -- (Join)
      (JoinP0) -- (Join) -- (JoinP1) -- (JoinP) -- (JoinP0);
  } % }}}3

  \TikzCenterNode
\end{tikzpicture} % }}}2
  \end{column}
\end{columns}
\end{frame}  % }}}1
\begin{frame}  % How Simon's works (optional) {{{1
\emph{How does $\cl{S}$ work?}
\pause
\begin{columns}
  \begin{column}[T]{0.475\textwidth}
% circuit {{{
\begin{tikzpicture}[font=\scriptsize]
  \path (0,0) node (n1) {$\ket{0}$}
      ++(1,0) node[gate-c] (n1H1) {$H$}
      ++(1,0) coordinate (n1phi)
      ++(1,0) node[gate-c] (n1H2) {$H$}
      ++(1,0) node[gate-r] (n1meas) {\tikzMeasure}
      ++(0.75,0) node (n1end) {}
        (n1)
      ++(0,-0.5) node (ndots1) {$\vdots$}
      ++(0,-0.75) node (nn) {$\ket{0}$}
      ++(0,-0.5) node (m1) {$\ket{0}$}
      ++(0,-0.5) node (mdots1) {$\vdots$}
      ++(0,-0.75) node (mm) {$\ket{0}$};
  \coordinate (t) at ($(n1)!0.5!(mm)$);
  \path (n1H1|-ndots1) node {$\vdots$}
        (n1H2|-ndots1) node {$\vdots$}
        (n1H1|-nn) node[gate-c] (nnH1) {$H$}
        (n1phi|-t) node[gate-r, minimum height=10em, minimum width=1.55em] (phi) {$\widehat{\phi}$}
        (n1H2|-nn) node[gate-c] (nnH2) {$H$}
        (n1meas|-nn) node[gate-r] (nnmeas) {\tikzMeasure}
        (n1end|-nn) node (nnend) {}
        (n1end|-m1) node (m1end) {}
        (n1end|-mm) node (mmend) {}
        (n1meas|-ndots1) node (ndots2) {$\vdots$}
        (n1meas|-mdots1) node (mdots2) {$\vdots$};
  \path[->] (n1) edge (n1H1) (n1H1) edge (n1-|phi.west) (phi.east|-n1) edge (n1H2) (n1H2) edge (n1meas) (n1meas) edge (n1end)
            (nn) edge (nnH1) (nnH1) edge (nn-|phi.west) (phi.east|-nn) edge (nnH2) (nnH2) edge (nnmeas) (nnmeas) edge (nnend)
            (m1) edge (m1-|phi.west) (phi.east|-m1) edge (m1end)
            (mm) edge (mm-|phi.west) (phi.east|-mm) edge (mmend);
  \draw[densely dotted] (n1end.north west) -- (n1end.north east-|n1end.east) -- node[auto]{$n$} (nnend.south east-|nnend.east) -- (nnend.south west);
  \draw[densely dotted] (m1end.north west) -- (m1end.north east-|m1end.east) -- node[auto]{$m$} (mmend.south east-|mmend.east) -- (mmend.south west);
\end{tikzpicture} % }}}
  \end{column}
  \begin{column}[T]{0.525\textwidth}
    \begin{align*}
      \uncover<7->{
        & ( H^{\otimes n} \otimes I_m )\ \widehat{\phi}\ \bigg[
          \frac{1}{2^{n/2}} \sum_{x\in \{0,1\}^n} \ket{x} \otimes \ket{0^m} \bigg] 
      } \\
      \uncover<8->{
        & \quad =  \frac{1}{2^{n/2}} ( H^{\otimes n} \otimes I_m ) 
          \sum_{x\in \{0,1\}^n} \ket{x} \otimes \ket{\phi(x)}
      } \\
      \uncover<9->{
        & \quad =  \frac{1}{2^{n/2}} \sum_{x\in \{0,1\}^n} 
          H^{\otimes n} \ket{x} \otimes \ket{\phi(x)}
      } \\
      \uncover<10->{
        & \quad =  \frac{1}{2^n} \sum_{x\in \{0,1\}^n} \sum_{y\in \{0,1\}^n}
          (-1)^{x\cdot y} \ket{y} \otimes \ket{\phi(x)}
      }
    \end{align*}
  \end{column}
\end{columns}

\uncover<3->{\emph{Notes}}
\begin{itemize} \small
  \item<3-> $\ds{ H\ket{q} = \frac{1}{\sqrt{2}} \Big( \ket{0} + (-1)^q \ket{1} \Big) }$
      \uncover<4->{$\ds{= \frac{1}{\sqrt{2}} \sum_{p\in \{0,1\}} (-1)^{pq} \ket{p}}$}
  \item<5-> $H^{-1} = H^{*} = H$
  \item<6-> $\phi: \{0,1\}^n \to \{0,1\}^m$ defines gate $\widehat{\phi}$, \quad
    $\widehat{\phi}\ket{x,y} = \ket{x,y+\phi(x)}$
\end{itemize}
\end{frame}  % }}}1
\begin{frame} % 2 diagrams -> 1 {{{1
\only<-4|handout:1>{
\begin{columns}
  \begin{column}{0.54\textwidth} \uncover<2->{ 
\begin{tikzpicture}[font=\tiny, yscale=0.8, xscale=0.75] % {{{2
  % central section nodes {{{
  \path (0, 0)    node[clone] (F)   {}
       +(-1, 0.5) node[clone] (UP0) {}
       +(1, 0.5)  node[clone] (UP1) {}
       ++(0,1)    node[clone] (UM)  {}
       ++(0,1.5)  node[clone] (UD)  {}
       ++(0,1)    node[clone] (U)   {}
       ++(0,1)    node[clone] (AP)  {}
        +(-1,0.5) node[clone] (AP0) {}
        +(0,0.5)  node[clone] (AD)  {}
        +(1,0.5)  node[clone] (AP1) {}
       ++(0,1)    node[clone] (A)   {}
       ++(0,1.5)  node[clone] (DM)  {}
       ++(0,0.5)  node[clone] (DP)  {}
       ++(0,0.5)  node[clone] (D)   {}
       ++(0,0.5)  node[clone] (MP)  {}
        +(-1,0.5) node[clone] (MP0) {}
        +(1,0.5)  node[clone] (MP1) {}
       ++(0,1)    node[clone] (M)   {}
       ++(0,0.5)  node[clone] (P)   {}
        +(-1,0.5) node[clone] (P0)  {}
        +(1,0.5)  node[clone] (P1)  {}
       ++(0,1)    node[clone] (T)   {} ; % }}}
  % left wing nodes {{{
  \path (UP0)
      ++(0,1.5)     node[clone] (MeetP1)  {}
      ++(-1,-0.5)   node[clone] (MeetP)   {}
       +(0,1)       node[clone] (Meet)    {}
      ++(-1,0.5)    node[clone] (MeetP0)  {}
      ++(0.4,1.25)  node[clone] (MPT0inf) {}
       +(-0.5,1)    node[clone] (PT0inf)  {}
      ++(-1,0.5)    node[clone] (MT0inf)  {}
       +(-0.5,1)    node[clone] (T0inf)   {}
        (MPT0inf)
      ++(1.5/4,1.5) node[clone] (MPT05)   {}
       +(-0.5,1)    node[clone] (PT05)    {}
      ++(-1,0.5)    node[clone] (MT05)    {}
       +(-0.5,1)    node[clone] (T05)     {}
        (MPT05)
      ++(0.25,1)    node[clone] (MPT04)   {}
       +(-0.5,1)    node[clone] (PT04)    {}
      ++(-1,0.5)    node[clone] (MT04)    {}
       +(-0.5,1)    node[clone] (T04)     {}
        (MPT04)
      ++(0.25,1)    node[clone] (MPT03)   {}
       +(-0.5,1)    node[clone] (PT03)    {}
      ++(-1,0.5)    node[clone] (MT03)    {}
       +(-0.5,1)    node[clone] (T03)     {}
        (MPT03)
      ++(0.25,1)    node[clone] (MPT02)   {}
       +(-0.5,1)    node[clone] (PT02)    {}
      ++(-1,0.5)    node[clone] (MT02)    {}
       +(-0.5,1)    node[clone] (T02)     {} ; % }}}
  % right wing nodes {{{
  \path (UP1)
      ++(0,1.5)      node[clone] (JoinP0)  {}
      ++(1,-0.5)     node[clone] (JoinP)   {}
       +(0,1)        node[clone] (Join)    {}
      ++(1,0.5)      node[clone] (JoinP1)  {}
      ++(-0.4,1.25)  node[clone] (MPT1inf) {}
       +(0.5,1)      node[clone] (PT1inf)  {}
      ++(1,0.5)      node[clone] (MT1inf)  {}
       +(0.5,1)      node[clone] (T1inf)   {}
        (MPT1inf)
      ++(-1.5/4,1.5) node[clone] (MPT15)   {}
       +(0.5,1)      node[clone] (PT15)    {}
      ++(1,0.5)      node[clone] (MT15)    {}
       +(0.5,1)      node[clone] (T15)     {}
       (MPT15)
      ++(-0.25,1)    node[clone] (MPT14)   {}
       +(0.5,1)      node[clone] (PT14)    {}
      ++(1,0.5)      node[clone] (MT14)    {}
       +(0.5,1)      node[clone] (T14)     {}
       (MPT14)
      ++(-0.25,1)    node[clone] (MPT13)   {}
       +(0.5,1)      node[clone] (PT13)    {}
      ++(1,0.5)      node[clone] (MT13)    {}
       +(0.5,1)      node[clone] (T13)     {}
       (MPT13)
      ++(-0.25,1)    node[clone] (MPT12)   {}
       +(0.5,1)      node[clone] (PT12)    {}
      ++(1,0.5)      node[clone] (MT12)    {}
       +(0.5,1)      node[clone] (T12)     {} ;  % }}}

   % central section edges  {{{
   \draw (F) -- (UP0) -- (UM) -- (UP1) -- (F)
     (F) -- (MeetP)
     (F) -- (JoinP)
     (F) to[curveR] (UD)
     (F) to[curveR] (AP)
     (F) to[out=90+20,in=-90-20] (DM)
     (UP0) -- (MeetP0)
     (UP0) -- (JoinP0)
     (UP0) to[out=90-15,in=-90] (AP0)
     (UP1) -- (JoinP1)
     (UP1) -- (MeetP1)
     (UP1) to[out=90+15,in=-90] (AP1)
     (UM) to[curveL] (U)
     (UM) -- (Meet)
     (UM) -- (Join)
     (UD) -- (U)
     (UD) to[curveR] (AD)
     (U) to[curveL] (A)
     (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
     (AP) to[curveL] (DP)
     (AP0) to[out=90,in=-90-15] (P0)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (A) to[curveL] (T)
     (DM) -- (MPT02) -- (MP) -- (MPT12) -- (DM) -- (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T)
     (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
     (MP) to[curveR] (P)
     (MP0) -- (P0)
     (MP1) -- (P1)
     (M) to[curveL] (T)
     (P) -- (P0) -- (T) -- (P1) -- (P); % }}}
  % left wing edges {{{
  \draw (MeetP) -- (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP)
    (MeetP) -- (MPT0inf)
    (MeetP1) to[out=90-10,in=-90-20] (MP1)
    (MeetP0) -- (MT0inf)
    (Meet) -- (M)
    (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
    (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
    (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
    (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
    (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
    (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
    (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
    (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
    (MT02) -- (MP0)
    (T02) -- (P0)
    (PT02) -- (P);
  % }}}
  % right wing edges {{{
  \draw (JoinP) -- (JoinP0) -- (Join) -- (JoinP1) -- (JoinP)
    (JoinP) -- (MPT1inf)
    (JoinP0) to[out=90+10,in=-90+20] (MP0)
    (JoinP1) -- (MT1inf)
    (Join) -- (M)
    (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
    (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
    (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
    (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
    (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
    (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
    (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
    (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
    (MT12) -- (MP1)
    (T12) -- (P1)
    (PT12) -- (P);
  % }}}

  % AP0 {{{3
  \node[clone, solves] at (AP0) {};
  \node[cloneLabel, solves, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  \node[cloneLabel, solves, above] at (A) {$\Clone{A}$};
  \node[clone, solves] at (A)  {} ;
  \node[clone, solves] at (P0) {} ;
  \node[clone, solves] at (T)  {} ;
  \draw[solves] (AP0) -- (A) 
    (AP0) to[out=90,in=-90-15] (P0)
    (P0) -- (T)
    (A) to[curveL] (T);
  % }}}3
  % MPT0inf {{{3
  \node[cloneLabel, solves, right] at (MPT0inf) {$\Clone{MPT}_0^\infty$};
  \node[clone, solves] at (MPT0inf) {};
    % left wing nodes {{{
    \node[clone, solves] at (PT0inf) {};
    \node[clone, solves] at (MT0inf) {};
    \node[clone, solves] at (T0inf) {};
    \node[clone, solves] at (MPT05) {};
    \node[clone, solves] at (PT05) {};
    \node[clone, solves] at (MT05) {};
    \node[clone, solves] at (T05) {};
    \node[clone, solves] at (MPT04) {};
    \node[clone, solves] at (PT04) {};
    \node[clone, solves] at (MT04) {};
    \node[clone, solves] at (T04) {};
    \node[clone, solves] at (MPT03) {};
    \node[clone, solves] at (PT03) {};
    \node[clone, solves] at (MT03) {};
    \node[clone, solves] at (T03) {};
    \node[clone, solves] at (MPT02) {};
    \node[clone, solves] at (PT02) {};
    \node[clone, solves] at (MT02) {};
    \node[clone, solves] at (T02) {}; % }}}
    % left wing edges {{{
    \draw[solves] (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
      (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05)
      (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
      (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
      (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
      (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
      (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
      (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
      (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
      (MT02) -- (MP0)
      (T02) -- (P0)
      (PT02) -- (P);  % }}}
    \node[clone, solves] at (MP)  {} ;
    \node[clone, solves] at (MP0) {} ;
    \node[clone, solves] at (M)   {} ;
    \node[clone, solves] at (P)   {} ;
    \node[clone, solves] at (P1)  {} ;
    \draw[solves] (MPT02) -- (MP) -- (MP0) -- (M)
      (MP0) -- (P0)
      (MP) to[curveR] (P)
      (P) -- (P0)
      (P) -- (P1) -- (T)
      (M) to[curveL] (T);
  % }}}3
  % MPT1inf {{{3
  \node[cloneLabel, solves, left] at (MPT1inf) {$\Clone{MPT}_1^\infty$};
  \node[clone, solves] at (MPT1inf) {};
    % right wing nodes {{{
    \node[clone, solves] at (PT1inf) {} ;
    \node[clone, solves] at (MT1inf) {} ;
    \node[clone, solves] at (T1inf)  {} ;
    \node[clone, solves] at (MPT15)  {} ;
    \node[clone, solves] at (PT15)   {} ;
    \node[clone, solves] at (MT15)   {} ;
    \node[clone, solves] at (T15)    {} ;
    \node[clone, solves] at (MPT14)  {} ;
    \node[clone, solves] at (PT14)   {} ;
    \node[clone, solves] at (MT14)   {} ;
    \node[clone, solves] at (T14)    {} ;
    \node[clone, solves] at (MPT13)  {} ;
    \node[clone, solves] at (PT13)   {} ;
    \node[clone, solves] at (MT13)   {} ;
    \node[clone, solves] at (T13)    {} ;
    \node[clone, solves] at (MPT12)  {} ;
    \node[clone, solves] at (PT12)   {} ;
    \node[clone, solves] at (MT12)   {} ;
    \node[clone, solves] at (T12)    {} ; % }}}
    % right wing edges {{{
    \draw[solves] (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
      (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15)
      (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
      (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
      (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
      (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
      (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
      (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
      (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
      (MT12) -- (MP1)
      (T12) -- (P1)
      (PT12) -- (P);  % }}}
    \node[clone, solves] at (MP1) {};
    \draw[solves] (MPT12) -- (MP) -- (MP1) -- (M)
      (MP1) -- (P1);
  % }}}3
  % AP {{{3
  \node[cloneLabel, solves, below] at (AP) {$\Clone{AP}$};
  \node[clone, solves] at (AP)  {} ;
  \node[clone, solves] at (AD)  {} ;
  \node[clone, solves] at (AP1) {} ;
  \node[clone, solves] at (DP)  {} ;
  \node[clone, solves] at (D)   {} ;
  \draw[solves] (AP) -- (AP0) 
   (AP) -- (AP1) -- (A) -- (AD) -- (AP)
   (AP) to[curveL] (DP)
   (AP1) to[out=90,in=-90+15] (P1)
   (AD) to[curveR] (D)
   (DP) -- (D)
   (DP) to[curveL] (P)
   (D) to[curveR] (T);
  % }}}3
  % DM {{{3
  \node[cloneLabel, solves, below] at (DM) {$\Clone{DM}$};
  \node[clone, solves] at (DM) {};
  \draw[solves] (DM) -- (DP)
    (DM) -- (MPT02)
    (DM) -- (MPT12);
  % }}}3
  % Meet {{{3
  \node[cloneLabel, nsolves, below] at (Meet) {$\CloneWedge$};
  \node[clone, nsolves] at (Meet)   {} ;
  \node[clone, nsolves] at (MeetP0) {} ;
  \node[clone, nsolves] at (MeetP1) {} ;
  \node[clone, nsolves] at (MeetP)  {} ;
  \node[clone, nsolves] at (UM)     {} ;
  \node[clone, nsolves] at (UP0)    {} ;
  \node[clone, nsolves] at (UP1)    {} ;
  \node[clone, nsolves] at (F)      {} ;
  \draw[nsolves] (F) -- (UP0) -- (UM) -- (UP1) -- (F)
    (F) -- (MeetP)
    (UP0) -- (MeetP0)
    (UP1) -- (MeetP1)
    (UM) -- (Meet)
    (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP) -- (MeetP0);
  % }}}3
  % Join {{{3
  \node[cloneLabel, nsolves, below] at (Join) {$\CloneVee$};
  \node[clone, nsolves] at (Join)   {} ;
  \node[clone, nsolves] at (JoinP0) {} ;
  \node[clone, nsolves] at (JoinP1) {} ;
  \node[clone, nsolves] at (JoinP)  {} ;
  \draw[nsolves] (F) -- (JoinP)
    (UP0) -- (JoinP0)
    (UP1) -- (JoinP1)
    (UM) -- (Join)
    (JoinP0) -- (Join) -- (JoinP1) -- (JoinP) -- (JoinP0);
  % }}}3
  % U {{{3
  \node[cloneLabel, nsolves, above] at (U) {$\Clone{U}$};
  \node[clone, nsolves] at (U)  {} ;
  \node[clone, nsolves] at (UD) {} ;
  \draw[nsolves] (F) to[curveR] (UD)
    (UM) to[curveL] (U)
    (UD) -- (U);
  % }}}3

  \TikzCenterNode
  \node[cloneLabel] (label) at ($(center)+(0,4)$) {\huge\bf Quantum};
  \uncover<4->{ \draw[thick, violet] (AD) ellipse (5.25em and 2.75em); }
\end{tikzpicture} % }}}2
  } \end{column}
  \begin{column}{0.54\textwidth} \uncover<3->{ 
\begin{tikzpicture}[font=\tiny, yscale=0.8, xscale=0.75] % {{{2
  % central section nodes {{{
  \path (0, 0)    node[clone] (F)   {}
       +(-1, 0.5) node[clone] (UP0) {}
       +(1, 0.5)  node[clone] (UP1) {}
       ++(0,1)    node[clone] (UM)  {}
       ++(0,1.5)  node[clone] (UD)  {}
       ++(0,1)    node[clone] (U)   {}
       ++(0,1)    node[clone] (AP)  {}
        +(-1,0.5) node[clone] (AP0) {}
        +(0,0.5)  node[clone] (AD)  {}
        +(1,0.5)  node[clone] (AP1) {}
       ++(0,1)    node[clone] (A)   {}
       ++(0,1.5)  node[clone] (DM)  {}
       ++(0,0.5)  node[clone] (DP)  {}
       ++(0,0.5)  node[clone] (D)   {}
       ++(0,0.5)  node[clone] (MP)  {}
        +(-1,0.5) node[clone] (MP0) {}
        +(1,0.5)  node[clone] (MP1) {}
       ++(0,1)    node[clone] (M)   {}
       ++(0,0.5)  node[clone] (P)   {}
        +(-1,0.5) node[clone] (P0)  {}
        +(1,0.5)  node[clone] (P1)  {}
       ++(0,1)    node[clone] (T)   {} ; % }}}
  % left wing nodes {{{
  \path (UP0)
      ++(0,1.5)     node[clone] (MeetP1)  {}
      ++(-1,-0.5)   node[clone] (MeetP)   {}
       +(0,1)       node[clone] (Meet)    {}
      ++(-1,0.5)    node[clone] (MeetP0)  {}
      ++(0.4,1.25)  node[clone] (MPT0inf) {}
       +(-0.5,1)    node[clone] (PT0inf)  {}
      ++(-1,0.5)    node[clone] (MT0inf)  {}
       +(-0.5,1)    node[clone] (T0inf)   {}
        (MPT0inf)
      ++(1.5/4,1.5) node[clone] (MPT05)   {}
       +(-0.5,1)    node[clone] (PT05)    {}
      ++(-1,0.5)    node[clone] (MT05)    {}
       +(-0.5,1)    node[clone] (T05)     {}
        (MPT05)
      ++(0.25,1)    node[clone] (MPT04)   {}
       +(-0.5,1)    node[clone] (PT04)    {}
      ++(-1,0.5)    node[clone] (MT04)    {}
       +(-0.5,1)    node[clone] (T04)     {}
        (MPT04)
      ++(0.25,1)    node[clone] (MPT03)   {}
       +(-0.5,1)    node[clone] (PT03)    {}
      ++(-1,0.5)    node[clone] (MT03)    {}
       +(-0.5,1)    node[clone] (T03)     {}
        (MPT03)
      ++(0.25,1)    node[clone] (MPT02)   {}
       +(-0.5,1)    node[clone] (PT02)    {}
      ++(-1,0.5)    node[clone] (MT02)    {}
       +(-0.5,1)    node[clone] (T02)     {} ; % }}}
  % right wing nodes {{{
  \path (UP1)
      ++(0,1.5)      node[clone] (JoinP0)  {}
      ++(1,-0.5)     node[clone] (JoinP)   {}
       +(0,1)        node[clone] (Join)    {}
      ++(1,0.5)      node[clone] (JoinP1)  {}
      ++(-0.4,1.25)  node[clone] (MPT1inf) {}
       +(0.5,1)      node[clone] (PT1inf)  {}
      ++(1,0.5)      node[clone] (MT1inf)  {}
       +(0.5,1)      node[clone] (T1inf)   {}
        (MPT1inf)
      ++(-1.5/4,1.5) node[clone] (MPT15)   {}
       +(0.5,1)      node[clone] (PT15)    {}
      ++(1,0.5)      node[clone] (MT15)    {}
       +(0.5,1)      node[clone] (T15)     {}
        (MPT15)
      ++(-0.25,1)    node[clone] (MPT14)   {}
       +(0.5,1)      node[clone] (PT14)    {}
      ++(1,0.5)      node[clone] (MT14)    {}
       +(0.5,1)      node[clone] (T14)     {}
        (MPT14)
      ++(-0.25,1)    node[clone] (MPT13)   {}
       +(0.5,1)      node[clone] (PT13)    {}
      ++(1,0.5)      node[clone] (MT13)    {}
       +(0.5,1)      node[clone] (T13)     {}
        (MPT13)
      ++(-0.25,1)    node[clone] (MPT12)   {}
       +(0.5,1)      node[clone] (PT12)    {}
      ++(1,0.5)      node[clone] (MT12)    {}
       +(0.5,1)      node[clone] (T12)     {} ;  % }}}

   % central section edges  {{{
   \draw (F) -- (UP0) -- (UM) -- (UP1) -- (F)
     (F) -- (MeetP)
     (F) -- (JoinP)
     (F) to[curveR] (UD)
     (F) to[curveR] (AP)
     (F) to[out=90+20,in=-90-20] (DM)
     (UP0) -- (MeetP0)
     (UP0) -- (JoinP0)
     (UP0) to[out=90-15,in=-90] (AP0)
     (UP1) -- (JoinP1)
     (UP1) -- (MeetP1)
     (UP1) to[out=90+15,in=-90] (AP1)
     (UM) to[curveL] (U)
     (UM) -- (Meet)
     (UM) -- (Join)
     (UD) -- (U)
     (UD) to[curveR] (AD)
     (U) to[curveL] (A)
     (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
     (AP) to[curveL] (DP)
     (AP0) to[out=90,in=-90-15] (P0)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (A) to[curveL] (T)
     (DM) -- (MPT02) -- (MP) -- (MPT12) -- (DM) -- (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T)
     (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
     (MP) to[curveR] (P)
     (MP0) -- (P0)
     (MP1) -- (P1)
     (M) to[curveL] (T)
     (P) -- (P0) -- (T) -- (P1) -- (P); % }}}
  % left wing edges {{{
  \draw (MeetP) -- (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP)
    (MeetP) -- (MPT0inf)
    (MeetP1) to[out=90-10,in=-90-20] (MP1)
    (MeetP0) -- (MT0inf)
    (Meet) -- (M)
    (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
    (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
    (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
    (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
    (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
    (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
    (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
    (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
    (MT02) -- (MP0)
    (T02) -- (P0)
    (PT02) -- (P); % }}}
  % right wing edges {{{
  \draw (JoinP) -- (JoinP0) -- (Join) -- (JoinP1) -- (JoinP)
    (JoinP) -- (MPT1inf)
    (JoinP0) to[out=90+10,in=-90+20] (MP0)
    (JoinP1) -- (MT1inf)
    (Join) -- (M)
    (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
    (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
    (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
    (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
    (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
    (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
    (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
    (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
    (MT12) -- (MP1)
    (T12) -- (P1)
    (PT12) -- (P); % }}}

  % A {{{3
  \node[cloneLabel, nsolves, above] at (A) {$\Clone{A}$};
  \node[clone, nsolves] at (A) {};
  \node[cloneLabel, nsolves, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  \node[cloneLabel, nsolves, below] at (AP) {$\Clone{AP}$};
  \node[clone, nsolves] at (A)   {} ;
  \node[clone, nsolves] at (AD)  {} ;
  \node[clone, nsolves] at (AP)  {} ;
  \node[clone, nsolves] at (AP0) {} ;
  \node[clone, nsolves] at (AP1) {} ;
  \draw[nsolves] (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
    (UP0) to[out=90-15,in=-90] (AP0)
    (UP1) to[out=90+15,in=-90] (AP1)
    (UD) to[curveR] (AD)
    (U) to[curveL] (A);
  % }}}3
  % AP0 {{{3
  \node[cloneLabel, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  \node[clone] at (AP0) {} ;
  \node[clone] at (A)   {} ;
  \node[clone] at (P0)  {} ;
  \node[clone] at (T)   {} ;
  \draw (AP0) -- (A) 
    (AP0) to[out=90,in=-90-15] (P0)
    (A) to[curveL] (T); % }}}3
  % AP {{{3
  \node[cloneLabel, below] at (AP) {$\Clone{AP}$};
  \node[clone] at (AP)  {} ;
  \node[clone] at (AD)  {} ;
  \node[clone] at (AP1) {} ;
  \draw (AP) -- (AP0) 
   (AP) -- (AP1) -- (A) -- (AD) -- (AP)
   (AP) to[curveL] (DP)
   (AP1) to[out=90,in=-90+15] (P1)
   (AD) to[curveR] (D); % }}}3

  % MPT0inf {{{3
    \node[cloneLabel, solves, right] at (MPT0inf) {$\Clone{MPT}_0^\infty$};
    \node[clone, solves] at (MPT0inf) {};
    % left wing nodes {{{
    \node[clone, solves] at (PT0inf) {};
    \node[clone, solves] at (MT0inf) {};
    \node[clone, solves] at (T0inf) {};
    \node[clone, solves] at (MPT05) {};
    \node[clone, solves] at (PT05) {};
    \node[clone, solves] at (MT05) {};
    \node[clone, solves] at (T05) {};
    \node[clone, solves] at (MPT04) {};
    \node[clone, solves] at (PT04) {};
    \node[clone, solves] at (MT04) {};
    \node[clone, solves] at (T04) {};
    \node[clone, solves] at (MPT03) {};
    \node[clone, solves] at (PT03) {};
    \node[clone, solves] at (MT03) {};
    \node[clone, solves] at (T03) {};
    \node[clone, solves] at (MPT02) {};
    \node[clone, solves] at (PT02) {};
    \node[clone, solves] at (MT02) {};
    \node[clone, solves] at (T02) {}; % }}}
    % left wing edges {{{
    \draw[solves] (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
      (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05)
      (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
      (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
      (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
      (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
      (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
      (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
      (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
      (MT02) -- (MP0)
      (T02) -- (P0)
      (PT02) -- (P);  % }}}
    \node[clone, solves] at (MP)  {} ;
    \node[clone, solves] at (MP0) {} ;
    \node[clone, solves] at (MP1) {} ;
    \node[clone, solves] at (M)   {} ;
    \node[clone, solves] at (P)   {} ;
    \node[clone, solves] at (P0)  {} ;
    \node[clone, solves] at (P1)  {} ;
    \node[clone, solves] at (T)   {} ;
    \draw[solves] (MPT02) -- (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
      (MP0) -- (P0)
      (MP1) -- (P1)
      (MP) to[curveR] (P)
      (P) -- (P0) -- (T)
      (P) -- (P1) -- (T)
      (M) to[curveL] (T);
    % }}}3
  % MPT1inf {{{3
    \node[cloneLabel, solves, left] at (MPT1inf) {$\Clone{MPT}_1^\infty$};
    \node[clone, solves] at (MPT1inf) {};
    % right wing nodes {{{
    \node[clone, solves] at (PT1inf) {} ;
    \node[clone, solves] at (MT1inf) {} ;
    \node[clone, solves] at (T1inf)  {} ;
    \node[clone, solves] at (MPT15)  {} ;
    \node[clone, solves] at (PT15)   {} ;
    \node[clone, solves] at (MT15)   {} ;
    \node[clone, solves] at (T15)    {} ;
    \node[clone, solves] at (MPT14)  {} ;
    \node[clone, solves] at (PT14)   {} ;
    \node[clone, solves] at (MT14)   {} ;
    \node[clone, solves] at (T14)    {} ;
    \node[clone, solves] at (MPT13)  {} ;
    \node[clone, solves] at (PT13)   {} ;
    \node[clone, solves] at (MT13)   {} ;
    \node[clone, solves] at (T13)    {} ;
    \node[clone, solves] at (MPT12)  {} ;
    \node[clone, solves] at (PT12)   {} ;
    \node[clone, solves] at (MT12)   {} ;
    \node[clone, solves] at (T12)    {} ; % }}}
    % right wing edges {{{
    \draw[solves] (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
      (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15)
      (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
      (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
      (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
      (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
      (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
      (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
      (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
      (MT12) -- (MP1)
      (T12) -- (P1)
      (PT12) -- (P);  % }}}
    \draw[solves] (MPT12) -- (MP) -- (MP1) -- (M)
      (MP1) -- (P1);
  % }}}3
  % DM {{{3
  \node[cloneLabel, solves, below] at (DM) {$\Clone{DM}$};
  \node[clone, solves] at (DM) {} ;
  \node[clone, solves] at (DP) {} ;
  \node[clone, solves] at (D)  {} ;
  \draw[solves] (DM) -- (DP)
    (DM) -- (MPT02)
    (DM) -- (MPT12)
    (DP) -- (D)
    (DP) to[curveL] (P)
    (D) to[curveR] (T); 
  % }}}3

  % A {{{3
  \node[cloneLabel, nsolves, above] at (A) {$\Clone{A}$};
  \node[clone, nsolves] at (A) {};
  \node[cloneLabel, nsolves, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  \node[cloneLabel, nsolves, below] at (AP) {$\Clone{AP}$};
  \node[clone, nsolves] at (A)   {} ;
  \node[clone, nsolves] at (AD)  {} ;
  \node[clone, nsolves] at (AP)  {} ;
  \node[clone, nsolves] at (AP0) {} ;
  \node[clone, nsolves] at (AP1) {} ;
  \draw[nsolves] (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
    (UP0) to[out=90-15,in=-90] (AP0)
    (UP1) to[out=90+15,in=-90] (AP1)
    (UD) to[curveR] (AD)
    (U) to[curveL] (A);
  % }}}3
  % Meet {{{3
  \node[cloneLabel, nsolves, below] at (Meet) {$\CloneWedge$};
  \node[clone, nsolves] at (Meet)   {} ;
  \node[clone, nsolves] at (MeetP0) {} ;
  \node[clone, nsolves] at (MeetP1) {} ;
  \node[clone, nsolves] at (MeetP)  {} ;
  \node[clone, nsolves] at (UM)     {} ;
  \node[clone, nsolves] at (UP0)    {} ;
  \node[clone, nsolves] at (UP1)    {} ;
  \node[clone, nsolves] at (F)      {} ;
  \draw[nsolves] (F) -- (UP0) -- (UM) -- (UP1) -- (F)
    (F) -- (MeetP)
    (UP0) -- (MeetP0)
    (UP1) -- (MeetP1)
    (UM) -- (Meet)
    (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP) -- (MeetP0);
  % }}}3
  % Join {{{3
  \node[cloneLabel, nsolves, below] at (Join) {$\CloneVee$};
  \node[clone, nsolves] at (Join)   {} ;
  \node[clone, nsolves] at (JoinP0) {} ;
  \node[clone, nsolves] at (JoinP1) {} ;
  \node[clone, nsolves] at (JoinP)  {} ;
  \draw[nsolves] (F) -- (JoinP)
    (UP0) -- (JoinP0)
    (UP1) -- (JoinP1)
    (UM) -- (Join)
    (JoinP0) -- (Join) -- (JoinP1) -- (JoinP) -- (JoinP0);
  % }}}3
  % U {{{3
  \node[cloneLabel, nsolves, above] at (U) {$\Clone{U}$};
  \node[clone, nsolves] at (U)  {} ;
  \node[clone, nsolves] at (UD) {} ;
  \draw[nsolves] (F) to[curveR] (UD)
    (UM) to[curveL] (U)
   (UD) -- (U);
  % }}}3

  \TikzCenterNode
  \node[cloneLabel] (label) at ($(center)+(0,4)$) {\huge\bf Classical};
  \uncover<4->{ \draw[thick, violet] (AD) ellipse (5.25em and 2.75em); }
\end{tikzpicture} % }}}2
  } \end{column}
\end{columns} }
\only<5-|handout:2>{
\begin{center}
\begin{tikzpicture}[font=\tiny, yscale=0.8, xscale=0.75] % {{{2
  % central section nodes {{{
  \path (0, 0)    node[clone] (F)   {}
       +(-1, 0.5) node[clone] (UP0) {}
       +(1, 0.5)  node[clone] (UP1) {}
       ++(0,1)    node[clone] (UM)  {}
       ++(0,1.5)  node[clone] (UD)  {}
       ++(0,1)    node[clone] (U)   {}
       ++(0,1)    node[clone] (AP)  {}
        +(-1,0.5) node[clone] (AP0) {}
        +(0,0.5)  node[clone] (AD)  {}
        +(1,0.5)  node[clone] (AP1) {}
       ++(0,1)    node[clone] (A)   {}
       ++(0,1.5)  node[clone] (DM)  {}
       ++(0,0.5)  node[clone] (DP)  {}
       ++(0,0.5)  node[clone] (D)   {}
       ++(0,0.5)  node[clone] (MP)  {}
        +(-1,0.5) node[clone] (MP0) {}
        +(1,0.5)  node[clone] (MP1) {}
       ++(0,1)    node[clone] (M)   {}
       ++(0,0.5)  node[clone] (P)   {}
        +(-1,0.5) node[clone] (P0)  {}
        +(1,0.5)  node[clone] (P1)  {}
       ++(0,1)    node[clone] (T)   {} ; % }}}
  % left wing nodes {{{
  \path (UP0)
      ++(0,1.5)     node[clone] (MeetP1)  {}
      ++(-1,-0.5)   node[clone] (MeetP)   {}
       +(0,1)       node[clone] (Meet)    {}
      ++(-1,0.5)    node[clone] (MeetP0)  {}
      ++(0.4,1.25)  node[clone] (MPT0inf) {}
       +(-0.5,1)    node[clone] (PT0inf)  {}
      ++(-1,0.5)    node[clone] (MT0inf)  {}
       +(-0.5,1)    node[clone] (T0inf)   {}
        (MPT0inf)
      ++(1.5/4,1.5) node[clone] (MPT05)   {}
       +(-0.5,1)    node[clone] (PT05)    {}
      ++(-1,0.5)    node[clone] (MT05)    {}
       +(-0.5,1)    node[clone] (T05)     {}
        (MPT05)
      ++(0.25,1)    node[clone] (MPT04)   {}
       +(-0.5,1)    node[clone] (PT04)    {}
      ++(-1,0.5)    node[clone] (MT04)    {}
       +(-0.5,1)    node[clone] (T04)     {}
        (MPT04)
      ++(0.25,1)    node[clone] (MPT03)   {}
       +(-0.5,1)    node[clone] (PT03)    {}
      ++(-1,0.5)    node[clone] (MT03)    {}
       +(-0.5,1)    node[clone] (T03)     {}
        (MPT03)
      ++(0.25,1)    node[clone] (MPT02)   {}
       +(-0.5,1)    node[clone] (PT02)    {}
      ++(-1,0.5)    node[clone] (MT02)    {}
       +(-0.5,1)    node[clone] (T02)     {} ; % }}}
  % right wing nodes {{{
  \path (UP1)
      ++(0,1.5)      node[clone] (JoinP0)  {}
      ++(1,-0.5)     node[clone] (JoinP)   {}
       +(0,1)        node[clone] (Join)    {}
      ++(1,0.5)      node[clone] (JoinP1)  {}
      ++(-0.4,1.25)  node[clone] (MPT1inf) {}
       +(0.5,1)      node[clone] (PT1inf)  {}
      ++(1,0.5)      node[clone] (MT1inf)  {}
       +(0.5,1)      node[clone] (T1inf)   {}
        (MPT1inf)
      ++(-1.5/4,1.5) node[clone] (MPT15)   {}
       +(0.5,1)      node[clone] (PT15)    {}
      ++(1,0.5)      node[clone] (MT15)    {}
       +(0.5,1)      node[clone] (T15)     {}
        (MPT15)
      ++(-0.25,1)    node[clone] (MPT14)   {}
       +(0.5,1)      node[clone] (PT14)    {}
      ++(1,0.5)      node[clone] (MT14)    {}
       +(0.5,1)      node[clone] (T14)     {}
        (MPT14)
      ++(-0.25,1)    node[clone] (MPT13)   {}
       +(0.5,1)      node[clone] (PT13)    {}
      ++(1,0.5)      node[clone] (MT13)    {}
       +(0.5,1)      node[clone] (T13)     {}
        (MPT13)
      ++(-0.25,1)    node[clone] (MPT12)   {}
       +(0.5,1)      node[clone] (PT12)    {}
      ++(1,0.5)      node[clone] (MT12)    {}
       +(0.5,1)      node[clone] (T12)     {} ;  % }}}

   % central section edges  {{{
   \draw[misc] (F) -- (UP0) -- (UM) -- (UP1) -- (F)
     (F) -- (MeetP)
     (F) -- (JoinP)
     (F) to[curveR] (UD)
     (F) to[curveR] (AP)
     (F) to[out=90+20,in=-90-20] (DM)
     (UP0) -- (MeetP0)
     (UP0) -- (JoinP0)
     (UP0) to[out=90-15,in=-90] (AP0)
     (UP1) -- (JoinP1)
     (UP1) -- (MeetP1)
     (UP1) to[out=90+15,in=-90] (AP1)
     (UM) to[curveL] (U)
     (UM) -- (Meet)
     (UM) -- (Join)
     (UD) -- (U)
     (UD) to[curveR] (AD)
     (U) to[curveL] (A)
     (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
     (AP) to[curveL] (DP)
     (AP0) to[out=90,in=-90-15] (P0)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (A) to[curveL] (T)
     (DM) -- (MPT02) -- (MP) -- (MPT12) -- (DM) -- (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T)
     (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
     (MP) to[curveR] (P)
     (MP0) -- (P0)
     (MP1) -- (P1)
     (M) to[curveL] (T)
     (P) -- (P0) -- (T) -- (P1) -- (P); % }}}
  % left wing edges {{{
 \draw[misc] (MeetP) -- (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP)
    (MeetP) -- (MPT0inf)
    (MeetP1) to[out=90-10,in=-90-20] (MP1)
    (MeetP0) -- (MT0inf)
    (Meet) -- (M)
    (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
    (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
    (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
    (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
    (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
    (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
    (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
    (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
    (MT02) -- (MP0)
    (T02) -- (P0)
    (PT02) -- (P);
  % }}}
  % right wing edges {{{
  \draw[misc] (JoinP) -- (JoinP0) -- (Join) -- (JoinP1) -- (JoinP)
    (JoinP) -- (MPT1inf)
    (JoinP0) to[out=90+10,in=-90+20] (MP0)
    (JoinP1) -- (MT1inf)
    (Join) -- (M)
    (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
    (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
    (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
    (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
    (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
    (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
    (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
    (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
    (MT12) -- (MP1)
    (T12) -- (P1)
    (PT12) -- (P);
  % }}}

  % AP0 {{{3
  \node[clone, superpoly] at (AP0) {};
  \node[cloneLabel, superpoly, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  \node[cloneLabel, superpoly, above] at (A) {$\Clone{A}$};
  \node[clone, superpoly] at (A) {} ;
  \node[clone, solves] at (P0)   {} ;
  \node[clone, solves] at (T)    {} ;
  \draw[superpoly] (AP0) -- (A);
  \draw[misc] (AP0) to[out=90,in=-90-15] (P0)
    (A) to[curveL] (T);
  \draw[solves] (P0) -- (T);
  % }}}3
  % MPT0inf {{{3
  \node[cloneLabel, solves, right] at (MPT0inf) {$\Clone{MPT}_0^\infty$};
  \node[clone, solves] at (MPT0inf) {};
    % left wing nodes {{{
    \node[clone, solves] at (PT0inf) {} ;
    \node[clone, solves] at (MT0inf) {} ;
    \node[clone, solves] at (T0inf)  {} ;
    \node[clone, solves] at (MPT05)  {} ;
    \node[clone, solves] at (PT05)   {} ;
    \node[clone, solves] at (MT05)   {} ;
    \node[clone, solves] at (T05)    {} ;
    \node[clone, solves] at (MPT04)  {} ;
    \node[clone, solves] at (PT04)   {} ;
    \node[clone, solves] at (MT04)   {} ;
    \node[clone, solves] at (T04)    {} ;
    \node[clone, solves] at (MPT03)  {} ;
    \node[clone, solves] at (PT03)   {} ;
    \node[clone, solves] at (MT03)   {} ;
    \node[clone, solves] at (T03)    {} ;
    \node[clone, solves] at (MPT02)  {} ;
    \node[clone, solves] at (PT02)   {} ;
    \node[clone, solves] at (MT02)   {} ;
    \node[clone, solves] at (T02)    {} ; % }}}
    % left wing edges {{{
    \draw[solves] (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
      (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05)
      (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
      (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
      (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
      (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
      (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
      (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
      (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
      (MT02) -- (MP0)
      (T02) -- (P0)
      (PT02) -- (P);  % }}}
    \node[clone, solves] at (MP)  {} ;
    \node[clone, solves] at (MP0) {} ;
    \node[clone, solves] at (M)   {} ;
    \node[clone, solves] at (P)   {} ;
    \node[clone, solves] at (P1)  {} ;
    \draw[solves] (MPT02) -- (MP) -- (MP0) -- (M)
      (MP0) -- (P0)
      (MP) to[curveR] (P)
      (P) -- (P0)
      (P) -- (P1) -- (T)
      (M) to[curveL] (T);
  % }}}3
  % MPT1inf {{{3
  \node[cloneLabel, solves, left] at (MPT1inf) {$\Clone{MPT}_1^\infty$};
  \node[clone, solves] at (MPT1inf) {};
    % right wing nodes {{{
    \node[clone, solves] at (PT1inf) {};
    \node[clone, solves] at (MT1inf) {};
    \node[clone, solves] at (T1inf)  {};
    \node[clone, solves] at (MPT15)  {};
    \node[clone, solves] at (PT15)   {};
    \node[clone, solves] at (MT15)   {};
    \node[clone, solves] at (T15)    {};
    \node[clone, solves] at (MPT14)  {};
    \node[clone, solves] at (PT14)   {};
    \node[clone, solves] at (MT14)   {};
    \node[clone, solves] at (T14)    {};
    \node[clone, solves] at (MPT13)  {};
    \node[clone, solves] at (PT13)   {};
    \node[clone, solves] at (MT13)   {};
    \node[clone, solves] at (T13)    {};
    \node[clone, solves] at (MPT12)  {};
    \node[clone, solves] at (PT12)   {};
    \node[clone, solves] at (MT12)   {};
    \node[clone, solves] at (T12)    {}; % }}}
    % right wing edges {{{
    \draw[solves] (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
      (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15)
      (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
      (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
      (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
      (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
      (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
      (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
      (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
      (MT12) -- (MP1)
      (T12) -- (P1)
      (PT12) -- (P);  % }}}
    \node[clone, solves] at (MP1) {};
    \draw[solves] (MPT12) -- (MP) -- (MP1) -- (M)
      (MP1) -- (P1);
  % }}}3
  % AP {{{3
  \node[cloneLabel, superpoly, below] at (AP) {$\Clone{AP}$};
  \node[clone, superpoly] at (AP)  {} ;
  \node[clone, superpoly] at (AD)  {} ;
  \node[clone, superpoly] at (AP1) {} ;
  \node[clone, solves] at (DP)     {} ;
  \node[clone, solves] at (D)      {} ;
  \draw[superpoly] (AP) -- (AP0) 
   (AP) -- (AP1) -- (A) -- (AD) -- (AP);
  \draw[misc] (AP) to[curveL] (DP)
   (AP1) to[out=90,in=-90+15] (P1)
   (AD) to[curveR] (D);
  \draw[solves] (DP) -- (D)
   (DP) to[curveL] (P)
   (D) to[curveR] (T);
  % }}}3
  % DM {{{3
  \node[cloneLabel, solves, below] at (DM) {$\Clone{DM}$};
  \node[clone, solves] at (DM) {};
  \draw[solves] (DM) -- (DP)
    (DM) -- (MPT02)
    (DM) -- (MPT12);
  % }}}3
  % Meet {{{3
  \node[cloneLabel, nsolves, below] at (Meet) {$\CloneWedge$};
  \node[clone, nsolves] at (Meet)   {} ;
  \node[clone, nsolves] at (MeetP0) {} ;
  \node[clone, nsolves] at (MeetP1) {} ;
  \node[clone, nsolves] at (MeetP)  {} ;
  \node[clone, nsolves] at (UM)     {} ;
  \node[clone, nsolves] at (UP0)    {} ;
  \node[clone, nsolves] at (UP1)    {} ;
  \node[clone, nsolves] at (F)      {} ;
  \draw[nsolves] (F) -- (UP0) -- (UM) -- (UP1) -- (F)
    (F) -- (MeetP)
    (UP0) -- (MeetP0)
    (UP1) -- (MeetP1)
    (UM) -- (Meet)
    (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP) -- (MeetP0);
  % }}}3
  % Join {{{3
  \node[cloneLabel, nsolves, below] at (Join) {$\CloneVee$};
  \node[clone, nsolves] at (Join)   {} ;
  \node[clone, nsolves] at (JoinP0) {} ;
  \node[clone, nsolves] at (JoinP1) {} ;
  \node[clone, nsolves] at (JoinP)  {} ;
  \draw[nsolves] (F) -- (JoinP)
    (UP0) -- (JoinP0)
    (UP1) -- (JoinP1)
    (UM) -- (Join)
    (JoinP0) -- (Join) -- (JoinP1) -- (JoinP) -- (JoinP0);
  % }}}3
  % U {{{3
  \node[cloneLabel, nsolves, above] at (U) {$\Clone{U}$};
  \node[clone, nsolves] at (U)  {} ;
  \node[clone, nsolves] at (UD) {} ;
  \draw[nsolves] (F) to[curveR] (UD)
    (UM) to[curveL] (U)
    (UD) -- (U);
  % }}}3
\end{tikzpicture} % }}}2
\end{center}
}
\end{frame}  % }}}1
\begin{frame} \frametitle{\inserttitle} % all results, thanks {{{1
\begin{columns}
  \begin{column}{0.4\textwidth} \small
    \vspace{-1.25em}
    \uncover<2->{ \begin{thm}
      \uncover<3->{Let $\m{B}$ be a 2-element algebra and consider $\text{HKP}(\m{B}^n)$.}
      \begin{itemize}[left=-0.25em]
        \item<4-> \Solves{If $\Clone{MPT}_0^{\infty}$, $\Clone{MPT}_1^{\infty}$,
        or $\Clone{DM}$ is contained in $\m{B}$ then classical and quantum
        poly-time solutions exist.}

        \item<5-> \Violet{If $\Clone{AP} \preceq \m{B} \preceq \Clone{A}$ then a
        quantum poly-time solution exists while no classical poly-time one does.}

        \item<6-> \NSolves{If $\m{B}$ is contained in $\CloneWedge$, $\CloneVee$, or
        $\Clone{U}$, then no poly-time quantum or classical solutions exist.}
      \end{itemize}
    \end{thm} }

  \uncover<7->{\centering\bf\large Thank you for your attention.}
  \end{column}
  \begin{column}{0.54\textwidth} \hfill
  \begin{tikzpicture}[font=\tiny, yscale=0.725, xscale=0.725, baseline=(center.base)] % {{{2
  \tikzset{misc/.style={black!40}}

  % central section nodes {{{
  \path (0, 0)    node[clone] (F) {}
       +(-1, 0.5) node[clone] (UP0) {}
       +(1, 0.5)  node[clone] (UP1) {}
       ++(0,1)    node[clone] (UM) {}
       ++(0,1.5)  node[clone] (UD) {}
       ++(0,1)    node[clone] (U) {}
       ++(0,1)    node[clone] (AP) {}
        +(-1,0.5) node[clone] (AP0) {}
        +(0,0.5)  node[clone] (AD) {}
        +(1,0.5)  node[clone] (AP1) {}
       ++(0,1)    node[clone] (A) {}
       ++(0,1.5)  node[clone] (DM) {}
       ++(0,0.5)  node[clone] (DP) {}
       ++(0,0.5)  node[clone] (D) {}
       ++(0,0.5)  node[clone] (MP) {}
        +(-1,0.5) node[clone] (MP0) {}
        +(1,0.5)  node[clone] (MP1) {}
       ++(0,1)    node[clone] (M) {}
       ++(0,0.5)  node[clone] (P) {}
        +(-1,0.5) node[clone] (P0) {}
        +(1,0.5)  node[clone] (P1) {}
       ++(0,1)    node[clone] (T) {}; % }}}
  % left wing nodes {{{
  \path (UP0)
      ++(0,1.5)    node[clone] (MeetP1) {}
      ++(-1,-0.5)  node[clone] (MeetP) {}
       +(0,1)      node[clone] (Meet) {}
      ++(-1,0.5)   node[clone] (MeetP0) {}

      ++(0.4,1.25)    node[clone] (MPT0inf) {}
       +(-0.5,1)   node[clone] (PT0inf) {}
      ++(-1,0.5)   node[clone] (MT0inf) {}
       +(-0.5,1)   node[clone] (T0inf) {}
        (MPT0inf)
      ++(1.5/4,1.5)   node[clone] (MPT05) {}
       +(-0.5,1)   node[clone] (PT05) {}
      ++(-1,0.5)   node[clone] (MT05) {}
       +(-0.5,1)   node[clone] (T05) {}
       (MPT05)
      ++(0.25,1)   node[clone] (MPT04) {}
       +(-0.5,1)   node[clone] (PT04) {}
      ++(-1,0.5)   node[clone] (MT04) {}
       +(-0.5,1)   node[clone] (T04) {}
       (MPT04)
      ++(0.25,1) node[clone] (MPT03) {}
       +(-0.5,1)   node[clone] (PT03) {}
      ++(-1,0.5)   node[clone] (MT03) {}
       +(-0.5,1)   node[clone] (T03) {}
       (MPT03)
      ++(0.25,1) node[clone] (MPT02) {}
       +(-0.5,1)   node[clone] (PT02) {}
      ++(-1,0.5)   node[clone] (MT02) {}
       +(-0.5,1)   node[clone] (T02) {}; % }}}
  % right wing nodes {{{
  \path (UP1)
      ++(0,1.5)     node[clone] (JoinP0) {}
      ++(1,-0.5)    node[clone] (JoinP) {}
       +(0,1)       node[clone] (Join) {}
      ++(1,0.5)     node[clone] (JoinP1) {}

      ++(-0.4,1.25)    node[clone] (MPT1inf) {}
       +(0.5,1)     node[clone] (PT1inf) {}
      ++(1,0.5)     node[clone] (MT1inf) {}
       +(0.5,1)     node[clone] (T1inf) {}
        (MPT1inf)
      ++(-1.5/4,1.5) node[clone] (MPT15) {}
       +(0.5,1)     node[clone] (PT15) {}
      ++(1,0.5)     node[clone] (MT15) {}
       +(0.5,1)     node[clone] (T15) {}
       (MPT15)
      ++(-0.25,1)   node[clone] (MPT14) {}
       +(0.5,1)     node[clone] (PT14) {}
      ++(1,0.5)     node[clone] (MT14) {}
       +(0.5,1)     node[clone] (T14) {}
       (MPT14)
      ++(-0.25,1) node[clone] (MPT13) {}
       +(0.5,1)     node[clone] (PT13) {}
      ++(1,0.5)     node[clone] (MT13) {}
       +(0.5,1)     node[clone] (T13) {}
       (MPT13)
      ++(-0.25,1) node[clone] (MPT12) {}
       +(0.5,1)     node[clone] (PT12) {}
      ++(1,0.5)     node[clone] (MT12) {}
       +(0.5,1)     node[clone] (T12) {};  % }}}

   % central section edges  {{{
   \draw[misc] (F) -- (UP0) -- (UM) -- (UP1) -- (F)
     (F) -- (MeetP)
     (F) -- (JoinP)
     (F) to[curveR] (UD)
     (F) to[curveR] (AP)
     (F) to[out=90+20,in=-90-20] (DM)
     (UP0) -- (MeetP0)
     (UP0) -- (JoinP0)
     (UP0) to[out=90-15,in=-90] (AP0)
     (UP1) -- (JoinP1)
     (UP1) -- (MeetP1)
     (UP1) to[out=90+15,in=-90] (AP1)
     (UM) to[curveL] (U)
     (UM) -- (Meet)
     (UM) -- (Join)
     (UD) -- (U)
     (UD) to[curveR] (AD)
     (U) to[curveL] (A)
     (AP) -- (AP0) -- (A) -- (AP1) -- (AP) -- (AD) -- (A)
     (AP) to[curveL] (DP)
     (AP0) to[out=90,in=-90-15] (P0)
     (AP1) to[out=90,in=-90+15] (P1)
     (AD) to[curveR] (D)
     (A) to[curveL] (T)
     (DM) -- (MPT02) -- (MP) -- (MPT12) -- (DM) -- (DP) -- (D)
     (DP) to[curveL] (P)
     (D) to[curveR] (T)
     (MP) -- (MP0) -- (M) -- (MP1) -- (MP)
     (MP) to[curveR] (P)
     (MP0) -- (P0)
     (MP1) -- (P1)
     (M) to[curveL] (T)
     (P) -- (P0) -- (T) -- (P1) -- (P); % }}}
  % left wing edges {{{
 \draw[misc] (MeetP) -- (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP)
    (MeetP) -- (MPT0inf)
    (MeetP1) to[out=90-10,in=-90-20] (MP1)
    (MeetP0) -- (MT0inf)
    (Meet) -- (M)
    (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
    (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
    (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
    (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
    (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
    (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
    (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
    (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
    (MT02) -- (MP0)
    (T02) -- (P0)
    (PT02) -- (P);
  % }}}
  % right wing edges {{{
  \draw[misc] (JoinP) -- (JoinP0) -- (Join) -- (JoinP1) -- (JoinP)
    (JoinP) -- (MPT1inf)
    (JoinP0) to[out=90+10,in=-90+20] (MP0)
    (JoinP1) -- (MT1inf)
    (Join) -- (M)
    (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
    (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
    (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
    (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
    (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
    (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
    (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
    (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
    (MT12) -- (MP1)
    (T12) -- (P1)
    (PT12) -- (P);
  % }}}

  % AP0 {{{3
  \node[clone, superpoly] at (AP0) {};
  \node[cloneLabel, superpoly, left, align=left] at (AP0) {$\Clone{AP}_0$ \\ $\approx \ZZ_2$};
  \node[cloneLabel, superpoly, above] at (A) {$\Clone{A}$};
  \node[clone, superpoly] at (A) {}; 
  \node[clone, solves] at (P0) {}; 
  \node[clone, solves] at (T) {};
  \draw[superpoly] (AP0) -- (A);
  \draw[misc] (AP0) to[out=90,in=-90-15] (P0)
    (A) to[curveL] (T);
  \draw[solves] (P0) -- (T);
  % }}}3
  % MPT0inf {{{3
  \node[cloneLabel, solves, right] at (MPT0inf) {$\Clone{MPT}_0^\infty$};
  \node[clone, solves] at (MPT0inf) {};
    % left wing nodes {{{
    \node[clone, solves] at (PT0inf) {};
    \node[clone, solves] at (MT0inf) {};
    \node[clone, solves] at (T0inf) {};
    \node[clone, solves] at (MPT05) {};
    \node[clone, solves] at (PT05) {};
    \node[clone, solves] at (MT05) {};
    \node[clone, solves] at (T05) {};
    \node[clone, solves] at (MPT04) {};
    \node[clone, solves] at (PT04) {};
    \node[clone, solves] at (MT04) {};
    \node[clone, solves] at (T04) {};
    \node[clone, solves] at (MPT03) {};
    \node[clone, solves] at (PT03) {};
    \node[clone, solves] at (MT03) {};
    \node[clone, solves] at (T03) {};
    \node[clone, solves] at (MPT02) {};
    \node[clone, solves] at (PT02) {};
    \node[clone, solves] at (MT02) {};
    \node[clone, solves] at (T02) {}; % }}}
    % left wing edges {{{
    \draw[solves] (MPT0inf) -- (MT0inf) -- (T0inf) -- (PT0inf) -- (MPT0inf)
      (MPT0inf) edge[dotted] (MPT05)
      (MT0inf) edge[dotted] (MT05)
      (PT0inf) edge[dotted] (PT05)
      (T0inf) edge[dotted] (T05)
      (MPT05) -- (MT05) -- (T05) -- (PT05) -- (MPT05)
      (MPT05) -- (MPT04) (MT05) -- (MT04) (PT05) -- (PT04) (T05) -- (T04)
      (MPT04) -- (MT04) -- (T04) -- (PT04) -- (MPT04)
      (MPT04) -- (MPT03) (MT04) -- (MT03) (PT04) -- (PT03) (T04) -- (T03)
      (MPT03) -- (MT03) -- (T03) -- (PT03) -- (MPT03)
      (MPT03) -- (MPT02) (MT03) -- (MT02) (PT03) -- (PT02) (T03) -- (T02)
      (MPT02) -- (MT02) -- (T02) -- (PT02) -- (MPT02)
      (MT02) -- (MP0)
      (T02) -- (P0)
      (PT02) -- (P);  % }}}
    \node[clone, solves] at (MP) {};
    \node[clone, solves] at (MP0) {};
    \node[clone, solves] at (M) {};
    \node[clone, solves] at (P) {};
    \node[clone, solves] at (P1) {};
    \draw[solves] (MPT02) -- (MP) -- (MP0) -- (M)
      (MP0) -- (P0)
      (MP) to[curveR] (P)
      (P) -- (P0)
      (P) -- (P1) -- (T)
      (M) to[curveL] (T);
  % }}}3
  % MPT1inf {{{3
  \node[cloneLabel, solves, left] at (MPT1inf) {$\Clone{MPT}_1^\infty$};
  \node[clone, solves] at (MPT1inf) {};
    % right wing nodes {{{
    \node[clone, solves] at (PT1inf) {};
    \node[clone, solves] at (MT1inf) {};
    \node[clone, solves] at (T1inf)  {};
    \node[clone, solves] at (MPT15)  {};
    \node[clone, solves] at (PT15)   {};
    \node[clone, solves] at (MT15)   {};
    \node[clone, solves] at (T15)    {};
    \node[clone, solves] at (MPT14)  {};
    \node[clone, solves] at (PT14)   {};
    \node[clone, solves] at (MT14)   {};
    \node[clone, solves] at (T14)    {};
    \node[clone, solves] at (MPT13)  {};
    \node[clone, solves] at (PT13)   {};
    \node[clone, solves] at (MT13)   {};
    \node[clone, solves] at (T13)    {};
    \node[clone, solves] at (MPT12)  {};
    \node[clone, solves] at (PT12)   {};
    \node[clone, solves] at (MT12)   {};
    \node[clone, solves] at (T12)    {}; % }}}
    % right wing edges {{{
    \draw[solves] (MPT1inf) -- (MT1inf) -- (T1inf) -- (PT1inf) -- (MPT1inf)
      (MPT1inf) edge[dotted] (MPT15)
      (MT1inf) edge[dotted] (MT15)
      (PT1inf) edge[dotted] (PT15)
      (T1inf) edge[dotted] (T15)
      (MPT15) -- (MT15) -- (T15) -- (PT15) -- (MPT15)
      (MPT15) -- (MPT14) (MT15) -- (MT14) (PT15) -- (PT14) (T15) -- (T14)
      (MPT14) -- (MT14) -- (T14) -- (PT14) -- (MPT14)
      (MPT14) -- (MPT13) (MT14) -- (MT13) (PT14) -- (PT13) (T14) -- (T13)
      (MPT13) -- (MT13) -- (T13) -- (PT13) -- (MPT13)
      (MPT13) -- (MPT12) (MT13) -- (MT12) (PT13) -- (PT12) (T13) -- (T12)
      (MPT12) -- (MT12) -- (T12) -- (PT12) -- (MPT12)
      (MT12) -- (MP1)
      (T12) -- (P1)
      (PT12) -- (P);  % }}}
    \node[clone, solves] at (MP1) {};
    \draw[solves] (MPT12) -- (MP) -- (MP1) -- (M)
      (MP1) -- (P1);
  % }}}3
  % AP {{{3
  \node[cloneLabel, superpoly, below] at (AP) {$\Clone{AP}$};
  \node[clone, superpoly] at (AP) {};
  \node[clone, superpoly] at (AD)  {};
  \node[clone, superpoly] at (AP1) {};
  \node[clone, solves] at (DP)  {};
  \node[clone, solves] at (D)   {};
  \draw[superpoly] (AP) -- (AP0) 
   (AP) -- (AP1) -- (A) -- (AD) -- (AP);
  \draw[misc] (AP) to[curveL] (DP)
   (AP1) to[out=90,in=-90+15] (P1)
   (AD) to[curveR] (D);
  \draw[solves] (DP) -- (D)
   (DP) to[curveL] (P)
   (D) to[curveR] (T);
  % }}}3
  % DM {{{3
  \node[cloneLabel, solves, below] at (DM) {$\Clone{DM}$};
  \node[clone, solves] at (DM) {};
  \draw[solves] (DM) -- (DP)
    (DM) -- (MPT02)
    (DM) -- (MPT12);
  % }}}3
  % Meet {{{3
  \node[cloneLabel, nsolves, below] at (Meet) {$\CloneWedge$};
  \node[clone, nsolves] at (Meet) {};
  \node[clone, nsolves] at (MeetP0) {};
  \node[clone, nsolves] at (MeetP1) {};
  \node[clone, nsolves] at (MeetP) {};
  \node[clone, nsolves] at (UM) {};
  \node[clone, nsolves] at (UP0) {};
  \node[clone, nsolves] at (UP1) {};
  \node[clone, nsolves] at (F) {};
  \draw[nsolves] (F) -- (UP0) -- (UM) -- (UP1) -- (F)
    (F) -- (MeetP)
    (UP0) -- (MeetP0)
    (UP1) -- (MeetP1)
    (UM) -- (Meet)
    (MeetP0) -- (Meet) -- (MeetP1) -- (MeetP) -- (MeetP0);
  % }}}3
  % Join {{{3
  \node[cloneLabel, nsolves, below] at (Join) {$\CloneVee$};
  \node[clone, nsolves] at (Join) {};
  \node[clone, nsolves] at (JoinP0) {};
  \node[clone, nsolves] at (JoinP1) {};
  \node[clone, nsolves] at (JoinP) {};
  \draw[nsolves] (F) -- (JoinP)
    (UP0) -- (JoinP0)
    (UP1) -- (JoinP1)
    (UM) -- (Join)
    (JoinP0) -- (Join) -- (JoinP1) -- (JoinP) -- (JoinP0);
  % }}}3
  % U {{{3
  \node[cloneLabel, nsolves, above] at (U) {$\Clone{U}$};
  \node[clone, nsolves] at (U) {};
  \node[clone, nsolves] at (UD) {};
  \draw[nsolves] (F) to[curveR] (UD)
    (UM) to[curveL] (U)
    (UD) -- (U);
  % }}}3

  \TikzCenterNode
\end{tikzpicture} % }}}2
  \end{column}
\end{columns}
\end{frame}  % }}}1
\end{document}
