\documentclass{article}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage[all]{xy}
\usetikzlibrary{positioning,chains,fit,shapes,calc}

\begin{document}

\title{Homework 3}
\author{Josh Cai}

\maketitle
\section*{Section 9.5}

\textbf{30a)} The equivalence class of 010 is $[010]$, or all binary strings of 3 or more bits that start with 010.

\noindent\textbf{30d)}  The equivalence class of 01010101 is [010], or all binary strings of 3 or more bits that start with 010.
\\\\
\noindent\textbf{34b)} The equivalence class of 1011 is [1011], which consists of only the element 1011.

\noindent\textbf{34c)}  The equivalence class of 11111 is [11111], or all binary strings of 5 or more bits that start with 11111.
\\\\
\noindent\textbf{36a)} The congruence class $[4]_2$ is all the even numbers.

\noindent\textbf{36b)}  The congruence class $[4]_3$ is all numbers with remainder 1 after dividing by 3.

\noindent\textbf{36c)} The congruence class $[4]_6$ is all numbers with remainder 4 after dividing by 6.

\noindent\textbf{36d)}  The congruence class $[4]_8$ is all numbers with remainder 4 after dividing by 8.
\\\\
\noindent\textbf{42a)} Is a partition because has each of the elements of ${-3,-2,-1,0,1,2,3}$ in the subsets and each element only occurs once within all subsets.

\noindent\textbf{42d)}  Is not a partition because $0$ is not in the subsets.
\\\\
\noindent\textbf{44a)} Is a partition because every integer is either odd or even, so and no integer can be both odd and even.

\noindent\textbf{44b)}  Is not a partition because zero is not in either of the subsets of the partition.

\noindent\textbf{44e)}  Is not a partition because 2 is not divisible by 3 and is also even, and no element can exist in more than one subset of the partition.
\\\\

\noindent\textbf{46c)} Is not a partition because boundary points are contained within two subsets.

\noindent\textbf{46d)}  Is not a partition because the boundary points are not in any subsets.

\noindent\textbf{46e)}  Is a partition because every number exists in one and only one subset. The collection of subsets is the set of real numbers because $k$ is all integers.
\\\\
\noindent\textbf{48b)} \{(a,a),(b,b),(c,c),(c,d),(d,d),(d,c),(e,e),(e,f),(f,e),(f,f),(g,g)\}

\noindent\textbf{48d)}  \{(a,a),(a,c),(a,e),(a,g),(c,a),(c,c),(c,e),(c,g),(e,a),(e,c),(e,e),(e,g),(g,a), \\(g,c),(g,e),(g,g),(b,b),(b,d),(d,b),(d,d),(f,f)\}
\\\\
\noindent\textbf{56a)} If $R_1$ and $R_2$ are equivalence relations on $S$, then $R_1$ and $R_2$ are both reflexive, and therefore the union of the relations would be reflexive. $R_1$ and $R_2$ are both symmetric, if $(a,b)$ was in $R_1 \cup R_2$, then $(a,b)$ was in either $R_1, R_2$, or both. If it was in either $R_1$ or $R_2$, $(b,a)$ must exist in $R_1 \cup R_2$ since $(b,a)$ also existed in the relation that $R_1$ existed in. $R_1 \cup R_2$ is not necessarily transitive: if $(a,b)$ exists in $R_1$ and $(b,c)$ exists in $R_2$, $(a,c)$ need not necessarily exist.

\noindent\textbf{56c)}  It is not reflexive because since $R_1$ and $R_2$ were both reflexive, none of those elements can exist in $R_1 \oplus R_2$. It is symmetric because if $(a,b)$ existed in both sets, $(b,a)$ would exist in both sets, and neither would be in $R_1 \oplus R_2$. If $(a,b)$ and $(b,a)$ existed in one set, then both would exist in $R_1 \oplus R_2$. It is not necessarily transitive because both sets could have $(a,c)$ while one set has $(a,b)$ and another $(b,c)$.
\\\\
\noindent\textbf{60a)} $R$ is reflexive because $f(x)$ is trivially the same order as $f(x)$ (using the constant 1 for $C$ will show this). $R$ is symmetric because if $f = \Theta(g)$ then there exists constants $C_1, C_2$ such that $|f(x)|\le C_1|g(x)|$ and $|f(x)|\ge C_1|g(x)|$. The constants $C_1^{-1}, C_2^{-1}$ will satisfy the same conditions for $g$, so $g = \Theta(f)$. $R$ is transitive because if $f$ has the same order as $g$, and $g$ has the same order as $h$, then $f$ has the same order as $h$.

\noindent\textbf{60b)} The equivalence class of $f(n) = n^2$ is all functions of degree 2.
\\\\
\noindent\textbf{Bonus a)} There are $2^5 = 32$ different equivalence relations. Since each has 2 equivalence classes, we observe that the second equivalence class is simply the complement of the first equivalence class. Therefore, we can count the number of subsets of the set. The number of subsets of a set is $2^{\# of elements}$ because each element has the choice of being in the subset or not, and each choice is independent. However, we have overcounted with $2^6$, and we see that each subset is counted twice, once as a subset and the second as the complement of another subset. So we divide by 2, and get $2^5 = 32$ equivalence relations.

\noindent\textbf{Bonus b)}  There are $\binom{6}{2} = 15$ different equivalence relations. Since we have 5 equivalence classes, we know by Pigeonhole Principle one subset must have at least 2 elements. There cannot be a set with more than 2 elements, or there would be less than 5 equivalence classes. We see that the subset with 2 elements uniquely determines the equivalence relation, so we count all the different subsets of 2 elements in a set of 6 elements, which is just $\binom{6}{2} = 6 \times 5 / 2 = 15$.

\end{document}


\section{Introduction}

Core-collapse supernovae (CCSNe) are the explosions of massive stars that end their lives.
They are directly or indirectly responsible for the lion's share of elements heavier than oxygen and play important roles in many astrophysical phenomena, such as neutron star and black hole formation.
Furthermore, these explosions occur at energies and densities relevant to address fundamental questions in nuclear, particle, and gravitational physics.
A solid theoretical framework for the CCSN explosion mechanism may help answer important questions in fundamental physics~\cite{janka_etal_2007}.

One essential part of the explosion mechanism is neutrino transport.
Neutrino energy deposition is believed to be the major driver of CCSN explosions, except in peculiar cases where rapid rotation is present and magnetohydrodynamic effects may dominate (for reviews, see~\cite{mezzacappa_2005,janka_2012,burrows_2013,muller_2016}).
Ideally, neutrino transport would be modeled by the Boltzmann transport equation, which is an integro-partial-differential equation evolving a phase-space distribution function $f$~(e.g., see~\cite{mezzacappaBruenn_1993a,mezzacappaBruenn_1993b,mezzacappaBruenn_1993c,mezzacappa_etal_2001,liebendoerfer_etal_2001,liebendoerfer_etal_2004,livne_etal_2004,liebendoerfer_etal_2005,ott_etal_2008,sumiyoshiYamada_2012,nagakura_etal_2014,sumiyoshi_etal_2014,nagakura_etal_2018} for studies of CCSN with Boltzmann transport in various approximate settings).
Simulating the neutrino transport implies finding a solution of the Boltzmann equation for a specific domain and period, with acceptable accuracy.

However, solving the Boltzmann transport equation with sufficient phase-space resolution and full weak interaction physics is at present too expensive.
To balance physical fidelity and computational expediency, an approximate method called the two-moment method has been adopted (e.g., see~\cite{kuroda_etal_2016,roberts_etal_2016,just_etal_2018,vartanyan_etal_2018}).
Using the two-moment method, the evolved variables are the zeroth and first angular moments of the distribution function $f$ -- the spectral particle density $\cJ$ and flux $\bcH$, respectively.
However, the equation of $\bcH$ includes the second angular moment $\bcK$.
Knowledge of $\bcK$ is needed to close the two-moment system.
Therefore, a closure that gives $\bcK$ consistent with $\cJ$ and $\bcH$ is needed.
The better the closure predicts $\bcK$, the more accurate the two-moment method will be.
The two-moment method has been widely applied in the CCSN modeling community with different algebraic closures, such as the Minerbo~\cite{minerbo_1978} closure (e.g.~{O'Connor} and {Couch}~\cite{oConnorCouch_2018}, Pan and et al.~\cite{pan_etal_2018}, Glas et al.~\cite{glas_etal_2018}, and Just et al.~\cite{just_etal_2018}) and the Levermore~\cite{levermore_1984} closure (e.g.~Vartanyan et al.~\cite{vartanyan_etal_2018}, Cabezon et al.~\cite{cabezon_etal_2018}, and Kuroda et al.~\cite{kuroda_etal_2016}).

Applying the two-moment method does simplify the problem, but doesn't guarantee an affordable solution.
To be precise, how to discretize the continuous system of equatio
ns given by the two-moment method and solve the discretized system efficiently remains a question.
In fact, the time scales of neutrino interactions with the background (they can be $\sim\mathcal{O}(10^{-10})$~second) is short compared to the duration of the CCSN explosion ($\sim\mathcal{O}(1)$~second).
This means that $\sim\mathcal{O}(10^{10})$ time steps could be needed for solving the system fully explicitly.
On the other hand, solving the moment equations fully implicitly requires inverting global band-structured matrices whose sizes depend on the phase-space discretization.
Such a global inversion is both expensive and unfriendly to parallelization.
To circumvent these challenges, implicit-explicit (IMEX) methods are taken into consideration.
By treating the transport terms in the two-moment equations explicitly and the collision terms implicitly, IMEX methods are subject only to a time step governed by the explicit transport terms, and the matrices to be inverted are block diagonal.
Therefore, IMEX methods require far fewer time steps compared with a fully explicit method, and the computation for each step is easily parallelizable.
For the relativistic setting that we have, where the fluid and the neutrinos have comparable propagation speeds, IMEX methods can be efficient.

To model neutrino transport using a two-moment method, two (or at least two) things need to be chosen carefully: an algebraic closure based on Fermi-Dirac statistics for closing the two-moment equations and a convex-invariant, diffusion-accurate IMEX scheme to ensure a physical result.
A convex-invariant scheme has the following property: if the solution $u^{n}\in W$ and $W$ is a convex set, then $u^{n+1}\in W$.
Since the neutrino distribution function is bounded ($f\in[0,1]$) by the Pauli exclusion principle, its moments as weighted integrals of a bounded function over the domain $\omega\in\bbS^{2}$ are also bounded.
We call the moments satisfying the constraints due to Fermi-Dirac statistics \textit{realizable moments} and the realizable $\cJ$ and $\bcH$ define a convex set~\cite{chu_etal_2018}.
The algebraic closure should give a realizable $\bcK$, and the well-posedness of the closure requires realizable $\cJ$ and $\bcH$.
This explains why an algebraic closure based on Fermi-Dirac statistics is needed.
Realizability of $\cJ$ and $\bcH$ after each time step requires a convex-invariant IMEX scheme.
Since the realizable moments form a convex set, it is possible to construct a realizability-preserving method using a convex-invariant IMEX scheme for two-moment neutrino transport.
In addition, the physics of neutrino transport in CCSNe requires the IMEX scheme to be diffusion-accurate.

The study of moment realizability and realizability-preserving methods with diffusion-accurate IMEX schemes motivates this work.
Gottlieb et al.~\cite{gottlieb_etal_2001} showed that standard strong-stability-preserving IMEX schemes cannot have an order higher than first without a restricted time step.
One way to obtain the second-order (or higher-order) accuracy is to add some correction steps after the standard step~\cite{huangShu_2017,hu_etal_2018}.
Unfortunately, the correction steps can deteriorate the accuracy of the IMEX scheme in the diffusion limit or restrict the time step.
To keep things simple, we focus on IMEX schemes without correction steps and require them to be high-order (second or higher order) in the streaming limit and diffusion-accurate.
We call these IMEX schemes \textit{PD-ARS}.

\texttt{thornado} is our toolkit for high-order neutrino-radiation hydrodynamics based on high-order Runge-Kutta Discontinuous Galerkin (RKDG) methods.
It is being developed at the University of Tennessee, Knoxville and Oak Ridge National Laboratory.
It currently includes solvers for the Euler equations for fluid dynamics and the two-moment approximation of the radiative transfer equation~\cite{endeve_etal_2018}.
In this paper, we focus on the transport methods in \texttt{thornado} with emphasis on IMEX.

This paper is organized as follows: Section~\ref{se:Two-MomentModel} discusses the mathematical model, algebraic closures, and the constraints on the moments and algebraic closures imposed by Fermi-Dirac statistics;
Section~\ref{se:SpatialDiscretization} gives a first-order finite-volume spatial discretization and shows how the spatial discretization preserves constraints in an IMEX step;
Section~\ref{se:TimeIntegration} discusses how to use convex combination to construct two PD-ARS schemes, one with second-order accuracy in the streaming limit and the other with third-order accuracy in the same limit;
Section~\ref{se:NumericalTests} presents the results of the numerical tests, which demonstrate the properties of the PD-ARS schemes; Section~\ref{se:Summary} summarizes the achievements of this paper and discusses future work.


\chapter{Funcoidal groups}

\begin{rem}
  \fxnote{Move this into the book.}
  If $\mu$ and $\nu$ are cocomplete endofuncoids, then we can describe $f \in
  \continuous (\mu,\nu)$ without using filters by the formulas:
  \begin{enumerate}
    \item $\rsupfun{f} \langle \mu \rangle^{\ast} X \sqsubseteq
    \supfun{\nu}^{\ast} \rsupfun{f} X$ (for every set $X$
    in $\subsets \Ob \mu$)

    \item $\langle \mu \rangle^{\ast} X \sqsubseteq \langle f^{- 1}
    \rangle^{\ast} \supfun{\nu}^{\ast} \rsupfun{f} X$ (for
    every set $X$ in $\subsets \Ob \mu$)

    \item $\rsupfun{f} \langle \mu \rangle^{\ast} \langle f^{- 1}
    \rangle^{\ast} Y \sqsubseteq \supfun{\nu}^{\ast} Y$ (for every set
    $Y$ in $\subsets \Ob \nu$)
  \end{enumerate}
\end{rem}

Funcoidal groups are modeled after topological groups (see Wikipedia)
and are their generalization.

\begin{defn}
  \emph{Funcoidal group} is a group $G$ together with endofuncoid $\mu$ on
  $\Ob G$ such that
  \begin{enumerate}
    \item $(y \cdot) \in \mathrm{C} (\mu ; \mu)$ for every $y \in G$;

    \item $(\cdot x) \in \mathrm{C} (\mu ; \mu)$ for every $x \in G$;

    \item $(x \mapsto x^{- 1}) \in \mathrm{C} (\mu ; \mu)$ for every $x \in
    G$.
  \end{enumerate}
\end{defn}

\begin{prop}
  $t \mapsto y \cdot t \cdot x$ and $t \mapsto y \cdot t^{- 1} \cdot x$ are
  continuous functions.
\end{prop}

\begin{proof}
  As composition of continuous functions.
\end{proof}

\begin{obvious}
Composition of functions of the forms $t \mapsto y \cdot t \cdot x$ and $t
\mapsto y \cdot t^{- 1} \cdot x$ are also a function of one of these
forms.
\end{obvious}

What is the purpose of the following (yet unproved) proposition? I don't know, but it looks curious.

\begin{prop}
  Let $E$ be a composition of functions of a form
  $\rsupfun{\mu}$, $\langle y \cdot
  \rangle^{\ast}$, $\langle \cdot x \rangle^{\ast}$, $\langle^{- 1}
  \rangle^{\ast}$ (where $x$ and $y$ vary arbitrarily)
  such that $\mu$ is met in the composition at least once.
  Let also either $\mu = \mu \circ \mu$ or $\mu$ is met exactly once in the product.
  There are such elements $x_0$, $y_0$ that either
  \begin{enumerate}
  \item $(t \mapsto y_0 \cdot t \cdot x_0) \circ \langle \mu \rangle
  \sqsubseteq E \sqsubseteq \langle \mu \rangle \circ (t \mapsto y_0 \cdot t
  \cdot x_0)$;

  \item  $(t \mapsto y_0 \cdot t^{- 1} \cdot x_0) \circ \langle \mu \rangle
  \sqsubseteq E \sqsubseteq \langle \mu \rangle \circ (t \mapsto y_0 \cdot
  t^{- 1} \cdot x_0)$.
  \end{enumerate}
\end{prop}

\begin{proof}
  Using continuity a few times we prove that $E \sqsubseteq \langle \mu
  \rangle^{\ast} \circ \ldots \circ \langle \mu \rangle^{\ast} \circ f_n \circ
  \ldots \circ f_1$ where $f_i$ are functions of the forms $t \mapsto y \cdot
  t \cdot x$ or $t \mapsto y \cdot t^{- 1} \cdot x$ for $n \in \mathbb{N}$.
  But $\langle \mu \rangle^{\ast} \circ \ldots \circ \langle \mu
  \rangle^{\ast} = \langle \mu \rangle^{\ast}$ by conditions and $f_n \circ
  \ldots \circ f_1$ is of the form $t \mapsto y \cdot t \cdot x$ or $t \mapsto
  y \cdot t^{- 1} \cdot x$ by above proposition. $E \sqsubseteq \langle \mu
  \rangle \circ (t \mapsto y_0 \cdot t \cdot x_0)$ or $E \sqsubseteq \langle
  \mu \rangle \circ (t \mapsto y_0 \cdot t^{- 1} \cdot x_0)$

  The second inequalty is similar. Note that $x_0$ and $y_0$ are the same for
  the first and for the second item.
\end{proof}

$(G, \mu)$ vs $(G, \mu^{-1})$ are they isomorphic?

\fxnote{We can also define reloidal groups.}

\section{On ``Each regular paratopological group is completely regular'' article}

In this chapter I attempt to rewrite the paper~\cite{2014arXiv1410.1504B} in more general setting of funcoids and reloids.
I attempt to construct a ``royal road'' to finding proofs of statements of this paper and similar ones, what is
important because we lose 60 years waiting for any proof.

\subsection{Definition of normality}

By definition (slightly generalizing the special case if $\mu$ is a
quasi-uniform space from~\cite{2014arXiv1410.1504B})
a pair of an endo-reloid~$\mu$ and a complete funcoid~$\nu$ (playing role of a generalization of a topological space)
on a set $U$ is \emph{normal} when
\[ \rsupfun{\nu^{-1}} A \sqsubseteq \rsupfun{
{\nu^{-1}}^{\circ}} \rsupfun{\nu^{-1}} \rsupfun{F} A \] for every entourage $F \in
\up \mu$ of $\mu$ and every set $A \subseteq U$.

Note that this is \emph{not} the same as customary definition of normal topological spaces.

\begin{thm}
  An endoreloid $\mu$ is normal on endoreloid~$\nu$ iff
  \[ \nu \circ \nu^{-1} \sqsubseteq
  \nu^{-1} \circ (\mathsf{FCD}) \mu. \]
\end{thm}

\begin{proof}
  Equivalently transforming the criterion of normality (which should hold for
  all $F \in \up \mu$) using proposition~\ref{get-rid-interior}:

  $\rsupfun{\nu}
  \rsupfun{\nu^{-1}} A \sqsubseteq
  \rsupfun{\nu^{-1}} \rsupfun{F} A$.

  Also note

  $\bigsqcap^{\mathscr{F}}_{F \in \up \mu} \rsupfun{ \nu^{-1}
  } \rsupfun{F} A = \text{(because funcoids preserve
  filtered meets)} = \rsupfun{ \nu^{-1}
  }  \bigsqcap^{\mathscr{F}}_{F \in \up \mu} \rsupfun{F} A =
  \rsupfun{ \nu^{-1} }
  \rsupfun{ (\mathsf{FCD}) \mu } A$.

  Thus the above is equivalent to
  $\rsupfun{\nu}
  \rsupfun{\nu^{-1}} A \sqsubseteq
  \rsupfun{ \nu^{-1} }
  \rsupfun{ (\mathsf{FCD}) \mu } A$.

  And this is in turn equivalent to
  \[ \nu \circ \nu^{-1} \sqsubseteq
  \nu^{-1} \circ (\mathsf{FCD}) \mu. \]
\end{proof}

\begin{defn}
An endofuncoid~$\mu$ is \emph{normal} on endofuncoid~$\nu$ when $\nu \circ \nu^{-1} \sqsubseteq \nu^{-1} \circ \mu$.
\fxwarning{No need for $\nu$ to be endomorphism.}
\end{defn}

\begin{obvious}\label{norm-fcd-rld}
~
\begin{enumerate}
\item Endoreloid~$\mu$ is normal on endofuncoid~$\nu$ iff endofuncoid~$\tofcd\mu$ is normal on endofuncoid~$\nu$.
\item Endofuncoid~$\mu$ is normal on endoreloid~$\nu$ iff endofuncoid~$\torldin\mu$ is normal on endofuncoid~$\nu$.
\end{enumerate}
\end{obvious}

\begin{cor}
If $\nu$ is a symmetric endofuncoid and $\mu\sqsupseteq \nu^{-1}$, then it is normal.
\end{cor}

\begin{cor} (generalization of proposition~1 in~\cite{2014arXiv1410.1504B})
If $\nu$ is a symmetric endofuncoid and $\Compl\mu\sqsupseteq \nu^{-1}$, then it is normal.
\end{cor}

\begin{defn}
A funcoid~$\nu$ is \emph{normally reloidazable} iff there exist a reloid~$\mu$ such that
$(\mu,\nu)$ is normal and $\nu=\Compl\tofcd\mu$.
\end{defn}

\begin{defn}
A funcoid~$\nu$ is \emph{normally quasi-uniformizable} iff there exist a quasi-uniform space (=~reflexive and transitive reloid)~$\mu$ such that
$(\mu,\nu)$ is normal and $\nu=\Compl\tofcd\mu$.
\end{defn}

\begin{prop}
A funcoid~$\nu$ is normally reloidazable iff there exist a funcoid~$\mu$ such that
$\mu$ is normal on~$\nu$ and $\nu=\Compl\mu$.
\end{prop}

\begin{prop}
A funcoid~$\nu$ is normally quasi-uniformizable iff there exist a quasi-proximity space (=~reflexive and transitive funcoid)~$\mu$ such that
$\mu$ is normal on~$\nu$ and $\nu=\Compl\mu$.
\end{prop}

\begin{proof}
Obvious~\ref{norm-fcd-rld} and the fact that~$\tofcd$ is an isomorphism between reflexive and transitive funcoids
and reflexive and transitive reloids.
\end{proof}

In other words, it is normally reloidazable or normally quasi-uniformizable when
\[ (\Compl\mu)\circ(\Compl\mu)^{-1}\sqsubseteq(\Compl\mu)^{-1}\circ\mu \]
for suitable~$\mu$.

\subsection{Urysohn's lemma and friends}

For a detailed proof of Urysohn's lemma see also:\\
\url{http://homepage.math.uiowa.edu/~jsimon/COURSES/M132Fall07/UrysohnLemma_v5.pdf}\\
\url{https://proofwiki.org/wiki/Urysohn's_Lemma}\\
\url{http://planetmath.org/proofofurysohnslemma}

\url{https://en.wikipedia.org/wiki/Proximity_space} says that
``The resulting topology is always completely regular. This can be proven by imitating the usual proofs of Urysohn's lemma, using the last property of proximal neighborhoods to create the infinite increasing chain used in proving the lemma.''

Below follows an alternative proof of Urysohn lemma.
\emph{The proof was based on a conjecture proved false, see example~\bookref{fcd-comp-ent}!}

\begin{lem}
  If $\supfun{\mu} \mathcal{A} \asymp \mathcal{B}$ for a complete
  funcoid $\mu$ and $\mathcal{A}$, $\mathcal{B}$ are filters on relevant
  sets, then there exists $U \in \up \mu$ such that $\supfun{U} \mathcal{A} \asymp \mathcal{B}$.
\end{lem}

\begin{proof}
  Prove that $\setcond{ \supfun{U} \mathcal{A} }{
  U \in \up \mu }$ is a filter base. That it
  is nonempty is obvious.

  Let $\mathcal{X}, \mathcal{Y} \in \setcond{ \supfun{U} \mathcal{A}
  }{ U \in \up \mu }$. Then
  $\mathcal{X} = \supfun{U_{\mathcal{X}}} \mathcal{A}$, $Y = \supfun{
  U_{\mathcal{Y}}} \supfun{A}$. Because $\mu$ is complete, we have
  (proposition~\bookref{up-f-filt}) $U_{\mathcal{X}} \sqcap U_{\mathcal{Y}} \in \up
  \mu$. Thus $\mathcal{X}, \mathcal{Y} \sqsupseteq \supfun{
  U_{\mathcal{X}} \sqcap U_{\mathcal{Y}} } \mathcal{A} \in \setcond{
  \supfun{U} \mathcal{A} }{ U \in \up \mu }$.

  Thus $\supfun{\mu} \mathcal{A} \asymp \mathcal{B}
  \Leftrightarrow \mathcal{B} \sqcap \supfun{\mu} \mathcal{A} =
  \bot \Leftrightarrow \exists U \in \up \mu: \mathcal{B} \sqcap
  \supfun{U} \mathcal{A} = \bot \Leftrightarrow \exists U \in \up
  \mu: \supfun{U} \mathcal{A} \asymp \mathcal{B}$.
\end{proof}

\begin{cor}\label{disj-mu}
  If $\supfun{\mu} \mathcal{A} \asymp \supfun{\mu}
  \mathcal{B}$ for a complete funcoid $\mu$ and $\mathcal{A}$,
  $\mathcal{B}$ are filters on relevant sets, then there exists $U \in
  \up \mu$ such that $\supfun{U} \mathcal{A} \asymp \supfun{U} \mathcal{B}$.
\end{cor}

\begin{proof}
  Applying the lemma twice we can obtain $P, Q \in \up \mu$
  such that $\supfun{P} \mathcal{A} \asymp \supfun{Q} \mathcal{B}$. But because
  $\mu$ is complete, we have $U = P \sqcap Q \in \up \mu$,
  while obviously $\supfun{U} \mathcal{A} \asymp \supfun{U} \mathcal{B}$.
\end{proof}

\begin{lem}
  (assuming conjecture~\bookref{fcd-comp-ent}) For every $U \in \up \mu$ (where $\mu$ is a $T_4$ topological space) such that
  $\neg \left( A \rsuprel{U \circ U^{- 1}} B \right)$ there is $W \in
  \up \mu$ such that $U \circ U^{- 1} \sqsupseteq W \circ W^{- 1}
  \circ W \circ W^{- 1}$. For it holds $\neg \left( A \rsuprel{W \circ W^{-
  1}} B \right)$.
  We can assume that $\rsupfun{W}X$ is open for every set~$X$.
\end{lem}

\begin{proof}
  $U \circ U^{- 1} \in \up (\mu \circ \mu^{- 1}) \subseteq
  \up (\mu \circ \mu^{- 1} \circ \mu \circ
  \mu^{- 1})$ (normality used). Thus by the conjecture there exists $W
  \in \up \mu$ such that $U \circ U^{- 1} \sqsupseteq W \circ W^{-
  1} \circ W \circ W^{- 1}$. $W \circ W^{- 1} \sqsubseteq U \circ U^{- 1}$
  thus $\neg \left( A \rsuprel{W \circ W^{- 1}} B \right)$.

  To prove that $\rsupfun{W}X$ is open for every set~$X$, replace every $\rsupfun{W}\{x\}$
  with an open neighborhood $E\subseteq\rsupfun{W}X$ of $\rsupfun{\mu}\{x\}$
  (and note that union of open sets is open).
  This new $W$ holds all necessary properties.
\end{proof}

\begin{lem}
  (assuming conjecture~\bookref{fcd-comp-ent}) For every $U \in \up \mu$ (where $\mu$ is a $T_4$ topological space) such that
  $\neg \left( A \rsuprel{U \circ U^{- 1}} B \right)$ there is $W \in \up\mu$
  such that $U \circ U^{- 1} \sqsupseteq \mu^{-1} \circ W \circ W^{-1}\circ W \circ W^{- 1}$.
  For it holds $\neg \left( A \rsuprel{W \circ W^{-
  1}} B \right)$.
  We can assume that $\rsupfun{W}X$ is open for every set~$X$.
\end{lem}

\begin{proof}
Applying the previous lemma twice, we have some open~$W\in\up\mu$ such that
\[ U\circ U^{-1} \sqsupseteq W \circ W^{-1}\circ W \circ W^{- 1} \circ W \circ W^{-1}\circ W \circ W^{- 1} \]
and $\neg \left( A \rsuprel{W \circ W^{-1}} B \right)$.
From this easily follows that \[ U \circ U^{- 1} \sqsupseteq \mu^{-1} \circ W \circ W^{-1}\circ W \circ W^{- 1}. \]
\end{proof}

A modified proof of Urysohn's lemma follows. This proof is in part based on~\cite{2014arXiv1410.1504B}.
(I attempt to find common generalization of Urysohn's lemma and results from~\cite{2014arXiv1410.1504B}).

$\mathbb{Q}_2 \eqdef \setcond{ k/2^n }{k, n \in \mathbb{N}, 0 < k < 2^n }$.

\begin{thm}
Urysohn's lemma (see Wikipedia) for disjoint closed sets~$A$ and~$B$ and function~$f$ on a topological space~$\mu$
(considered as complete funcoid).
\end{thm}

\begin{proof}
(assuming conjecture~\bookref{fcd-comp-ent}) (used ProofWiki among other sources)

Because $A$ and $B$ are disjoint closed sets, we
have $\rsupfun{\mu} A \asymp \rsupfun{\mu} B$. Thus by the corollary~\ref{disj-mu} take $S_0 \in \up
\mu$ and $\neg \left( A \rsuprel{S_0 \circ S_0^{- 1}} B
\right)$.

We have $\mu \circ \mu^{- 1} \circ \mu \circ \mu^{- 1}
\sqsubseteq \mu \circ \mu^{- 1}$ that is $\up (\mu
\circ \mu^{- 1} \circ \mu \circ \mu^{- 1}) \supseteq
\up (\mu \circ \mu^{- 1})$.

Let's prove by induction: There is a sequence $S$ of binary relations starting
with $S_0$ such that $\neg \left( A \rsuprel{S_i \circ S_i^{- 1}} B
\right)$ and $S_i \circ S_i^{- 1} \sqsupseteq \mu^{-1} \circ S_{i + 1} \circ S_{i + 1}^{- 1}
\circ S_{i + 1} \circ S_{i + 1}^{- 1}$. It directly follows from the lemma
(and uses the conjecture).

Denote $U_i = S_{i + 1} \circ S_{i + 1}^{- 1}$. We have $U_i \sqsupseteq \mu^{-1} \circ U_{i +
1} \circ U_{i + 1}$ and $\neg \left( A \rsuprel{U_i} B \right)$.

By reflexivity of~$\mu$ we have $U_{i+1} \subseteq U_{i+1}\circ U_{i+1} \subseteq U_i$.

Define fractional degree of $U$: $U^r \eqdef U_1^{r_1} \circ
\ldots \circ U_{l_r}^{r_{l_r}}$ for every $r \in \mathbb{Q}_2$ where $r_1
\ldots r_{l_r}$ is the binary expansion of $r$.

Prove $U_r\subseteq U_0$. It is enough to prove
$U_0 \supseteq U_1 \circ \ldots \circ U_{l_r}$. It follows from $U_2 \circ
\ldots \circ U_{l_r} \subseteq U_1$, $U_3 \circ \ldots \circ U_{l_r} \subseteq
U_2$, \dots, $U_{l_r} \subseteq U_{l_r - 1}$ what was shown above.

Let's prove: For each $p,q\in\mathbb{Q}_2$ such that $p<q$ we have $\mu^{-1}\circ U^p\sqsubseteq U^q$.
We can assume binary expansion of~$p$ and~$q$ be the same length~$c$ (add zeros at the end of the shorter one).
Now it is enough to prove
\[ U_k\circ U_{k+1}^{q_{k+1}}\circ\dots\circ U_c^{q_c}\sqsupseteq\mu^{-1}\circ U_{k+1}^{p_{k+1}}\circ U_{k+2}^{p_{k+2}}\circ\dots\circ U_c^{p_c}. \]
But for this it's enough
\[ U_k\sqsupseteq\mu^{-1}\circ U_{k+1}\circ U_{k+2}\circ\dots\circ U_c \]
what can be easily proved by induction:
If $k=c$ then it takes the form $U_k\sqsupseteq\mu^{-1}$
what is obvious.
Suppose it holds for~$k$. Then $U_{k-1}\sqsupseteq\mu^{-1}\circ U_k\circ U_k\sqsupseteq
\mu^{-1}\circ U_k\circ \mu^{-1}\circ U_{k+1}\circ U_{k+2}\circ\dots\circ U_c\sqsupseteq
\mu^{-1}\circ U_k\circ U_{k+1}\circ U_{k+2}\circ\dots\circ U_c$, that is it holds
for all natural $k\leq c$.

It is easy to prove that $\rsupfun{U^r}X$ is open for every set~$X$.

We have $\rsupfun{\mu^{-1}}\rsupfun{U^p}X\sqsubseteq\rsupfun{U^q}X$.

\[ f (z) \eqdef \inf \left( \{ 1 \} \cup \setcond{ q \in
   \mathbb{Q}_2 }{ z \in \rsupfun{U^q}
   A } \right). \]
$f$ is properly defined because $\{ 1 \} \cup \setcond{ q \in \mathbb{Q}_2
}{ z \in \rsupfun{U^q} A }$ is
nonempty and bounded.

If $z \in A$ then $z \in \rsupfun{U^q} A$ for every $q \in
\mathbb{Q}_2$, thus $f (z) = 0$, because obviously $U^q \sqsupseteq 1$.

If $z \in B$ then $z \notin \rsupfun{U^q} A$ for every $q \in
\mathbb{Q}_2$, thus $f (z) = 1$, because $U^q \sqsubseteq U_0$.

It remains to prove that $f$ is continuous.

Let $D (x) = \{ 1 \} \cup \setcond{ q \in \mathbb{Q}_2 }{
z \in \rsupfun{U^q} A }$.

To show that f is continuous, we first prove two smaller results:

(a) $x\in\rsupfun{\mu^{-1}}\rsupfun{U^r}A \Rightarrow f(x)\leq r$.

We have $x\in\rsupfun{\mu^{-1}}\rsupfun{U^r}A \Rightarrow \forall s>r:x\in\rsupfun{U^s}A$,
so $D(x)$ contains all rationals greater than $r$. Thus $f(x)\leq r$ by definition of~$f$.

(b) $x\notin\rsupfun{U^r}A \Rightarrow f(x)\geq r$.

We have $x\notin\rsupfun{U^r}A \Rightarrow \forall s<r:x\notin\rsupfun{U^s}A$.
So $D(x)$ contains no rational less than $r$. Thus $f(x)\geq r$.

Let $x_0\in S$ and let $]c;d[$ be an open real interval containing $f(x)$.
We will find a neighborhood $T$ of $x_0$ such that $\rsupfun{f}T\subseteq]c;d[$.

Choose $p,q\in\mathbb{Q}$ such that $c < p < f(x_0) < q < d$. Let $T=\rsupfun{U^q}A\setminus\rsupfun{\mu^{-1}}\rsupfun{U^p}A$.

Then since $f(x_0)<q$, we have that (b) implies vacuously that $x\in\rsupfun{U^q}A$.

Since $f(x_0)>p$, (a) implies $x_0\notin\rsupfun{U^p}A$.

Hence $x_0\in T$. Then $T$ is a neighborhood of~$x_0$ because $T$ is open.

Finally, let $x\in T$.

Then $x\in\rsupfun{U^q}A\subseteq\rsupfun{\mu^{-1}}\rsupfun{U^q}A$. So $f(x)\leq q$ by~(a).

Also $x\notin\rsupfun{\mu^{-1}}\rsupfun{U^p}A$, so $x\notin\rsupfun{U^p}A$ and $f(x)\geq p$ by~(b).

Thus: $f(x)\in[p;q]\subseteq]c;d[$.

Therefore $f$ is continuous.

\begin{grayed}
Claim A: $f (x) > q \Rightarrow x \notin \langle \mu^{- 1}
\rangle^{\ast} \rsupfun{U^q} A$

Claim B: $f (x) < q \Rightarrow x \in \rsupfun{U^q} A$

Proof of claim A: If $f (x) > q$ then then there must be some gap between $q$
and $D (x)$; in particular, there exists some $q'$ such that $q < q' < f (x)$.
But $q' < f (x) \Rightarrow x \notin \rsupfun{U^q} A \Rightarrow x
\notin \rsupfun{\mu^{- 1}} \rsupfun{U^q} A$ (using that $\rsupfun{U^r}X$ is open).

Proof of claim B: If $f (x) < q$ then there exists $q' \in D (x)$ such that $f
(x) < q' < q$, in which case $q \in D (x)$, so $x \in \langle U^q
\rangle^{\ast} A$.

To show that $f$ is continuous, it's enough to prove that preimages of $] a ;
1]$ and $[0 ; a [$ are open.

Suppose $f (x) \in] a ; 1]$. Pick some $q$ with $a < q < f (x)$. We claim that
the open set $W = X \setminus \rsupfun{f^{- 1}} \langle U^q
\rangle^{\ast} A$ is a neighborhood of $x$ that is mapped by $f$ into $] a ;
1]$. First, by (A), $f (x) > q \Rightarrow x \in W$, so $W$ is a neighborhood
of $x$. If $y$ is any point of $W$, then $f (y)$ must be $\geq q > a$;
otherwise, if $f (y) < q$, then, by (B) $y \in \rsupfun{U^q} A
\subseteq \rsupfun{f^{- 1}} \rsupfun{U^q} A$.

Suppose $x \in f^{- 1} [0 ; b [$ that is $f (x) < b$ and pick $q$ such that $f
(x) < q < b$. By (B) $x \in \rsupfun{U^q} A$. We claim that the
neighborhood $\rsupfun{U^q} A$ is mapped by $f$ into $[0 ; b [$.
Suppose $y$ is any point of $\rsupfun{U^q} A$. Then $q \in D
(y)$, so $f (y) \leq q < b$.
\end{grayed}
\end{proof}

\begin{thm}
(from~\cite{2014arXiv1410.1504B})
If $\mu$ is a normal quasi-uniformity on a topological space~$\nu$, then for any nonempty subset $A\in\Ob\nu$
and entourage~$U\in\up\mu$ there exists a continuous function $f:\Ob\nu\rightarrow[0;1]$ such that
$A\sqsubseteq\rsupfun{f^{-1}}\{0\}\sqsubseteq\rsupfun{f^{-1}}[0;1[\sqsubseteq\rsupfun{{\nu^{-1}}^\circ}\rsupfun{\nu^{-1}}\rsupfun{U}A$.
\end{thm}

\begin{proof}
Choose inductively a sequence of entourages $(U_n)_{n = 0}^{\infty}$ such that
$U_0 = U$ and $U_{n + 1} \circ U_{n + 1} \sqsubseteq U_n$.

Denote $l_r = \max \setcond{ n \in \mathbb{N} }{ r_n = 1 }$.

Define $U^r = U_{l_r}^{r_{l_r}} \circ \ldots \circ U_1^{r_1}$

Prove $\rsupfun{\nu^{- 1}} \rsupfun{U^q} A
\sqsubseteq \rsupfun{\nu^{- 1 \circ}} \rsupfun{\nu^{- 1}}
\rsupfun{U^r} A$ for any $q < r$ in
$\mathbb{Q}_2$. \fxnote{Can be easily rewritten with the formula $\rsupfun{\nu} \rsupfun{\nu^{- 1}} \rsupfun{U^q} A
\sqsubseteq \rsupfun{\nu^{- 1}} \rsupfun{U^r} A$
instead. It may extend to non-complete funcoids.}

There is such $l$ that $0 = q_l < r_l = 1$ and $q_i = r_i$ for all $i < l$.

It follows $l_q \neq l \leq l_r$.

Consider variants:
\begin{description}
  \item[$l_q < l$] $\rsupfun{\nu^{- 1}} \rsupfun{U^q} A \sqsubseteq \rsupfun{\nu^{- 1}} \left\langle
  U_{l_q} \circ \ldots \circ U_1^{q_1q_{l_q}} \right\rangle^{\ast} A = \rsupfun{\nu^{- 1}} \left\langle U_{l_q}^{r_{l_q}} \circ \ldots \circ
  U_1^{r_1} \right\rangle^{\ast} A \sqsubseteq \langle \nu^{- 1}
  \rangle^{\ast} \left\langle U_{l - 1}^{r_{l - 1}} \circ \ldots \circ
  U_1^{r_1} \right\rangle^{\ast} A \sqsubseteq \langle \nu^{- 1 \circ}
  \rangle^{\ast} \rsupfun{\nu^{- 1}} \langle U_l^{r_l} \circ U_{l
  - 1}^{r_{l - 1}} \circ \ldots \circ U_1^{r_1} \rangle^{\ast} A = \langle
  \nu^{- 1 \circ} \rangle^{\ast} \rsupfun{\nu^{- 1}} \langle U^r
  \rangle^{\ast} A$ (use $U_l^{r_l} \in \up \tofcd
  \mu$ by theorem 992).

  \item[$l < l_q$] Inclusions $U_k \circ U_k \sqsubseteq U_{k - 1}$ for $l < k
  \leq l_q + 1$ guarantee that $U_{l_q + 1} \circ U_{l_q} \circ \ldots \circ
  U_{l + 1} \sqsubseteq U_l$ and then $\rsupfun{\nu^{- 1}}
  \rsupfun{U^q} A \sqsubseteq \rsupfun{\nu^{- 1}}
  \left\langle U_{l_q}^{q_{l_q}} \circ \ldots \circ U_1^{q_1}
  \right\rangle^{\ast} A \sqsubseteq \rsupfun{\nu^{- 1 \circ}}
  \rsupfun{\nu^{- 1}} \left\langle U_{l_q + 1}^{q_{l_q + 1}}
  \circ U_{l_q}^{q_{l_q}} \circ \ldots \circ U_1^{q_1} \right\rangle^{\ast} A
  = \rsupfun{\nu^{- 1 \circ}} \rsupfun{\nu^{- 1}}
  \left\langle U_{l_q + 1} \circ U_{l_q}^{q_{l_q}} \circ \ldots \circ U_l^0
  \circ \ldots \circ U_1^{q_1} \right\rangle^{\ast} A \sqsubseteq \left\langle
  \nu^{- 1 \circ} \right\rangle^{\ast} \rsupfun{\nu^{- 1}}
  \langle U_l \circ U_{l - 1}^{q_{l - 1}} \circ \ldots \circ U_1^{q_1}
  \rangle^{\ast} A \sqsubseteq \rsupfun{\nu^{- 1 \circ}} \langle
  \nu^{- 1} \rangle^{\ast} \left\langle U_l^{r_l} \circ U_{l - 1}^{r_{l - 1}}
  \circ \ldots \circ U_1^{r_1} \right\rangle^{\ast} A \sqsubseteq \langle
  \nu^{- 1 \circ} \rangle^{\ast} \rsupfun{\nu^{- 1}} \left\langle
  U_{l_r}^{r_{l_r}} \circ \ldots \circ U_1^{r_1} \right\rangle^{\ast} A =
  \rsupfun{\nu^{- 1 \circ}} \rsupfun{\nu^{- 1}}
  \langle U_r \rangle^{\ast} A$.
\end{description}
Define $f$ by the formula $f (z) = \inf \left( \{ 1 \} \cup \setcond{ q \in
\mathbb{Q}_2 }{ z \in \langle \nu^{- 1}
\rangle^{\ast} \rsupfun{U^q} A } \right)$.

It is clear?? that $A \sqsubseteq \rsupfun{f^{- 1}} \{ 0 \}$ and
$\rsupfun{f^{- 1}} [0 ; 1 [ \sqsubseteq
\bigcup_{q \in \mathbb{Q}_2} \rsupfun{\nu^{- 1}} \langle U^q
\rangle^{\ast} A = \bigcup_{r \in \mathbb{Q}_2} \langle \nu^{- 1 \circ}
\rangle^{\ast} \rsupfun{\nu^{- 1}} \rsupfun{U^r} A
\sqsubseteq \rsupfun{\nu^{- 1 \circ}} \langle \nu^{- 1}
\rangle^{\ast} \langle U_0 \rangle^{\ast} A$.

To prove that the map $f : X \rightarrow [0, 1]$ is continuous, it suffices to
check that for every real number $a \in] 0 ; 1 [$ the sets $\langle f^{- 1}
\rangle^{\ast} [0 ; a [$ and $\rsupfun{f^{- 1}}] a ; 1]$ are
open. This follows from the equalitites

$\rsupfun{f^{- 1}} [0 ; a [= \bigcup_{\mathbb{Q}_2 \ni q < a}
\rsupfun{\nu^{- 1 \circ}} \rsupfun{\nu^{- 1}}
\rsupfun{U^q} A$ and $\rsupfun{f^{- 1}}] a ; 1] =
\bigcup_{\mathbb{Q}_2 \ni r > a} (X \setminus \langle \nu^{- 1}
\rangle^{\ast} \rsupfun{U^r} A)$.
\end{proof}

How the formulas for normal ($T_4$) topological spaces and normal quasi-uniformities are related?
Maybe this works: Replacing $\nu \rightarrow \mu \circ \mu^{- 1}$, $\mu
\rightarrow 1$ makes $\nu \circ \nu^{- 1} \sqsubseteq \nu^{- 1} \circ
\tofcd \mu \rightarrow \mu \circ \mu^{- 1}
\circ \mu \circ \mu^{- 1} \sqsubseteq \mu \circ \mu^{-
1}$.

\url{https://www.researchgate.net/project/The-lattice-LG-of-group-topologies}


    \documentclass[12pt]{article}

    \usepackage[margin=1.25in]{geometry}
    \usepackage{amsmath,amsthm,amssymb}
    \usepackage{tikz}
    \usepackage[capposition=top]{floatrow}
    \usepackage{indentfirst}
    \usepackage{amsmath}
    \usepackage{wrapfig}

    %\linespread{1.5}

    \begin{document}

\title{Balcony Height Lab Report}
\author{AP Physics | B Block\\
	\\
	Ryan McCrystal\\
	Kala'i Anderson\\
Bella Otterson}
\date{\today}
\maketitle
\newpage
\begin{abstract} % Include purpose, methodologies, assumptions, and brief statement of results
	The purpose of this experiment is to calculate the height of the Cooper House balcony as accurately as possible and to determine which method is the most accurate. Two different methods were used to calculate the height of the balcony. The first method we used involved creating two similar triangles by placing a pole of known length a distance away from the ground directly below the balcony. Using this setup, one of our group members aligned their eye to be col-linear to the top of the pole and the balcony. Using these measurements, we were able to mathematically construct two similar triangles giving us a calculated height of $15.4ft\pm1.4ft$. The second method we used to indirectly calculate the height of the balcony involved a tennis ball, a stopwatch, and the appropriate kinematic equations. One of our group members dropped a ball at the top of the railing while another group member timed the amount of time it took for the ball to hit the ground. Because we know the ball's acceleration due to the constant force of gravity, we could indirectly calculate the height of the railing. This method provided us with a much more inaccurate result of  $12.6ft\pm8.12ft$.
\end{abstract}
\newpage

\section{Approach} %Include a detailed description of the procedures and relevant diagram(s) of the physical layout. Specify measurement apparatus and equipment used.
\subsection{Similar Triangles}
The first method we used to indirectly calculate the height of the Cooper House balcony was with similar triangles. We positioned a wooden pole perpendicular to the ground and had one of our group members stand a distance away from the pole aligning the very top of the pole to the edge of the balcony. By measuring the height of the pole, the distance of the meter stick to the bottom of the building, the height of our group member's eyes, and the distance from our group member's eyes to the pole, we were able to create two similar triangles allowing us to indirectly calculate the height of the balcony.
\begin{figure}[H]       % Figure showing more broadly our setup
	\centering
	\begin{tikzpicture}[scale=1]
		\draw[dashed] -- node [left] {\text{Perspective}} (0,0)
        -- (6,3);
        \draw[line width=0.4mm] (6,3) -- (6,0) node[midway,right] {Balcony height};
        \draw[dashed] (6,0) -- (2,0);
		\draw[dashed] (2,0) -- (0,0);
		\draw[line width=0.4mm] -- (2,0) -- (2,1) node[midway,right] {Pole};
		\draw[dashed] -- (6,3) -- (6.5,3) node[midway,above] {$10in$} node[right] {\text{Balcony edge}};
    \end{tikzpicture}
    \caption{Our setup}
\end{figure}

\subsection{Kinematic Equations}
Using a stopwatch and a tennis ball we timed the time it took for the tennis ball to be dropped from the top of the balcony to the ground. Using kinematic equations we can calculate the height of the balcony given our collected information and assuming a constant gravity of $9.8\frac{m}{s^2}$.
\begin{figure}[H]
	\centering
	\begin{tikzpicture}[scale=0.75]
		\draw[->,dashed] -- (0,5) -- (0,0);
		\filldraw (0,3.5) node[right]{ball} circle (3pt);
		\draw -- (-.5,0) -- (.5,0);
		\draw -- (.5,0) -- (4,0) node[midway,above]{ground};
		\draw -- (-.5,5) -- (.5,5);
		\draw -- (.5,5) -- (4,5) node[midway,above]{balcony};
    \end{tikzpicture}
    \caption{Kinematic equations setup}
\end{figure}

\section{Calculations} % include a detailed presentation of the data, calculations, and other relevant diagrams. Specify uncertainty of measured values. Pay attention tl significant figures.
\subsection{Similar Triangles}
The data our group gathered is as follows:
\begin{equation}
	\begin{aligned}
		\text{Distance from eyes to meter stick}     & =X_1 & =41cm\pm 2cm      \\
		\text{Distance from meter stick to building} & =X_2 & =455.9cm\pm 3cm   \\
		\text{Distance from eyes to top of the pole} & =Y   & =25\pm 1cm        \\
		\text{Height of eyes above ground}           & =H_2 & =157.8cm\pm 1.2cm
	\end{aligned}
\end{equation} \par
After gathering the data, we created two similar triangles representing our measurements like so:
\begin{figure}[H]
	\centering
	\begin{tikzpicture}[scale=1.5]
		\draw -- node [left] {\text{Perspective}} (0,0)
		-- (6,3) -- (6,0) node[midway,right] {$H_1$} -- (2, 0) node[midway,below] {$X_2$}
		-- (0,0) node[midway,below] {$X_1$};
		\draw -- (2,0) -- (2,1) node[midway,right] {$Y$};
		\draw[dashed] -- (0,0) -- (0,-1) node[midway,left] {$H_2$};
		\draw[dashed] -- (6,3) -- (6.5,3) node[midway,above] {$10in$} node[right] {\text{Balcony edge}};
	\end{tikzpicture}
	\begin{minipage}{0.5\textwidth}    % Margin text
		\caption{Similar triangles we used to indirectly calculate the height of the balcony}
		{\footnotesize Note: $H_1$ is the height of the balcony without taking the height of the eyes into account. 10 inches is added to account for the balcony being inlaid from the wall.\par}
	\end{minipage}
\end{figure}
Using the angle-angle similarity postulate, we can conclude that
$$\frac{Y}{X_1}=\frac{H_1}{X_1+X_2+(10in)}$$
therefore,
$$H_1=\frac{Y}{X_1}(X_1+X_2+(10in))$$
Plugging in the our measurements:
\begin{equation}
	\begin{aligned}
        H_1 & =\frac{25cm\pm1cm}{41cm\pm2cm}((41cm\pm2cm)+(455.9cm\pm3cm)+(10in)) \\
        & =318.4cm\pm40.2cm\\
            H_{tot} & =H_1 + H_2 \\
            &=318.4cm\pm40.2cm+157.8cm\pm1.2cm \\
		    & =476.2cm\pm41.4cm \\
		    & \approx\boxed{15.4ft\pm1.4ft}
	\end{aligned}
\end{equation}
\subsection{Kinematic Equations}
To reduce our possible inaccuracy, we timed the amount of time it took for the tennis ball to reach the ground twenty times.\par
The data we gathered is as follows:
\begin{table}[H]
	\begin{tabular}{ll}
		1.060 & 0.810 \\
		0.870 & 0.810 \\
		0.780 & 0.810 \\
		0.830 & 1.000 \\
		0.810 & 1.030 \\
		1.030 & 0.840 \\
		0.780 & 0.830 \\
		0.870 & 1.080 \\
		0.860 & 0.810 \\
		0.860 & 0.930 \\
	\end{tabular}
	\caption{Seconds timed for each tennis ball drop}
	\label{tab:times}
\end{table}
Using these measurements and assuming an uncertainty of $\pm0.25s$, we calculated the average time to be $0.885s\pm0.25s$.
\par
\begin{figure}[H]
	\centering
	\begin{tikzpicture}
		\draw[->,dashed] -- (0,5) -- (0,0) node[midway,left]{$t=0.885s$};
		\filldraw (0,3.5) node[right]{ball} circle (3pt);
		\draw -- (-.5,0) -- (.5,0) node[midway,below]{$y_1=?$};
		\draw -- (.5,0) -- (4,0) node[midway,above]{ground};
		\draw -- (-.5,5) -- (.5,5) node[midway,above]{$y_0=0,v_0=0$};
		\draw -- (.5,5) -- (4,5) node[midway,above]{balcony};
		\node at (3,3){$g=9.8\frac{m}{s^2}$};
		\node at (3.5,2){$\Delta y=v_0t+\frac{1}{2}gt^2$};
    \end{tikzpicture}
    \caption{Kinematic equations setup}
\end{figure}

Using the second kinematic equation (with slight modifications to variable names), assuming $h_0=0$, $v_0=0$, and $g=9.8\frac{m}{s^2}$,
\begin{equation}
	\begin{aligned}
		h&=h_0+v_0t-\frac{1}{2}gt^2\\
		&=-\frac{1}{2}gt^2\\
		-h & =\frac{1}{2}(9.8\frac{m}{s^2})(0.885s\pm0.25s)^2 & \text{\footnotesize{$-h$ accounts for the downward direction}} \\
		&=3.837m\pm2.476m\\
		&\approx\boxed{12.6ft\pm8.12ft}
	\end{aligned}
\end{equation}

\section{Results and Conclusions} % Were the resulting values what you expected? Why or why not? Make sure to indicate any significant sources of error, or how you would conduct the experiment next tome to improve the accuracy of your results. Was one method better than the other? if so, why?
% say which measurement is more accurate and why
After reviewing these two methods, our group determined that using the similar triangles method would warrant a more accurate result, and the uncertainty confirms this. The similar triangles method allows us to much more easily calculate accurate results, while the kinematic equations method, though much easier, provides much less accurate results due to the need to accurately time small time discrepancies. To improve the accuracy of the kinematic equations method, instead of timing by hand a slow motion camera and a robot which predictably drops the tennis ball could be used to further the accuracy of the data. For the similar triangles method, instead of aligning a group member's eye to the top of the pole and the top of the balcony, we could measure the distance a shadow makes (assuming the sun is in the right place) with the balcony and with the pole creating two similar triangles as before.
\end{document}


 \documentclass [12pt]{article}

\usepackage {amsmath}
\usepackage {amsthm}
\usepackage {amssymb}
\usepackage {graphicx}
\usepackage {float}
\usepackage {multirow}
\usepackage {xcolor}
\usepackage {algorithmic}
\usepackage [ruled,vlined,commentsnumbered,titlenotnumbered]{algorithm2e} \usepackage {array}
\usepackage {booktabs}
\usepackage {url}
\usepackage {parskip}
\usepackage [margin=1in]{geometry}
\usepackage [T1]{fontenc}
\usepackage {cmbright}
\usepackage [many]{tcolorbox}
\usepackage [colorlinks = true,
            linkcolor = blue,
            urlcolor  = blue,
            citecolor = blue,
            anchorcolor = blue]{hyperref}
\usepackage {enumitem}
\usepackage {xparse}
\usepackage {verbatim}
\usepackage{listings}
\usepackage{xcolor}
\lstset { %
    language=C++,
    backgroundcolor=\color{black!5}, % set backgroundcolor
    basicstyle=\footnotesize,% basic font setting
}
\newtheorem{theorem}{Theorem}
\newtheorem{remark}{Remark}
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}{Definition}[section]
\newtheorem{claim}{Claim}

\DeclareTColorBox {Solution}{}{breakable, title={Solution}} \DeclareTColorBox {Solution*}{}{breakable, title={Solution (provided)}} \DeclareTColorBox {Instruction}{}{boxrule=0pt, boxsep=0pt, left=0.5em, right=0.5em, top=0.5em, bottom=0.5em, arc=0pt, toprule=1pt, bottomrule=1pt} \DeclareDocumentCommand {\Expecting }{+m}{\textbf {[We are expecting:} #1\textbf {]}} \DeclareDocumentCommand {\Points }{m}{\textbf {(#1 pt.)}}

\begin {document}

\vspace {1em}
\begin {Instruction}
Adapted From Virginia Williams' lecture notes.
\end {Instruction}

{\LARGE \textbf {COMP 285 (NC A\&T, Spr `22)}\hfill \textbf {Lecture 22} }

\begin{centering}
\section*{Single-Source Shortest Path in Weighted Graphs}
\end{centering}

\section{Dijkstra's Algorithm}

Now we will solve the single source shortest paths problem in graphs with nonnengative
weights using Dijkstra's algorithm. The key idea, that Dijkstra will maintain as an invariant,
is that $\forall t in V$, the algorithm computes an estimate $d[t]$ of the distance of $t$ from the source such that:

\begin{enumerate}
    \item At any point in time, $d[t] \geq d(s, t)$, and
    \item when t is finished, $d[t] = d(s, t)$.
\end{enumerate}

\begin{algorithm}
\caption{Dijkstra($G= (V,E), S$)}
\label{alg:1}
\begin{algorithmic}
\STATE $\forall t \in V, d[t] \gets \infty$ \texttt{// set initial distance estimates}
\STATE $d[s] \gets 0$
\STATE $F \gets \{v \mid \forall v \in V\}$ \texttt{// F is the set of nodes that are yet to achieve final distances estimates}
\STATE $D \gets \emptyset$ \texttt{// D will be the set of nodes that have achieved final distance estimates}
\WHILE{$F \neq \emptyset$}
    \STATE $x \gets$ elements in $F$ with minimum distance estimate
    \FOR{$(x,y) \in E$}
        \STATE $d[y] \gets \min\{d[y], d[x] + w(x,y)\}$ \texttt{// "relax" the estimate of y}
        \STATE \texttt{// to maintain paths: if} $d[y]$ \texttt{changes, then } $\pi(y) \gets x$
    \ENDFOR
    \STATE $F \gets F \setminus \{x\}$
    \STATE $D \gets D \cup \{x\}$
\ENDWHILE
\end{algorithmic}
\end{algorithm}

\begin{claim}[For every $u$, at any point of time $d(u) \geq d(s, u)$.]
\vspace{1em}
A formal proof of this claim proceeds by induction. In particular, one shows that at any point in time, if $d[u] < \infty$, then $d[u]$ is the weight of some path from $s$ to $t$. Thus at any point $d[u]$ is at least the weight of the shortest path, and hence $d[u] \geq d(s, u)$. As a base case, we know that $d[s] = 0 = d(s, s)$ and all other distance estimates are $+\infty$, so we know that the claim holds initially. Now, when $d[u]$ is changed to $d[x] + w(x, u)$ then (by the induction hypothesis) there is a path from $s$ to $x$ of weight $d[x]$ and an edge $(x, u)$ of weight $w(x, u)$. This means there is a path from $s$ to $u$ of weight $d[u] = d[x] + w(x, u)$. This implies that $d[u]$ is at least the weight of the shortest path $= d(s, u)$, and the induction argument is complete
\end{claim}

\begin{claim}[When node $x$ is placed in $D$, $d(x) = d(s,x)$]
\vspace{1em}

Notice that proving the above claim is sufficient to prove the correctness of the algorithm since $d[x]$ is never changed again after $x$ is added to $D$: the only way it could be changed is if for some node $y \in F$ , $d[y] + w(y, x) < d[x]$ but this can't happen since $d[x] \leq d[y ]$ and $w(y, x) \geq 0$ (all edge weights are nonnegative). The assertion $d[x] \leq d[y]$ for all $y \in F$ stays true at all points after $x$ is inserted into D: assume for contradiction that at some point for some $y \in F$ we get $d[y ] < d[x]$ and let $y$ be the first such $y$ . $Before d[y ]$ was updated $d[y' ] \geq d[x]$ for all $y' \in F$ . But then when $d[y ]$ was changed, it was due to some neighbor $y'$ of $y$ in $F$ , but$ d[y' ] \geq d[x]$ and all weights are nonnegative, so we get a contradiction

We prove this claim by induction on the order of placement of nodes into $D$. For the base case, $s$ is placed into D where $d[s] = d(s, s) = 0$, so initially, the claim holds.

For the inductive step, we assume that for all nodes $y$ currently in $D$, $d[y ] = d(s, y )$. Let $x$ be the node that currently has the minimum distance estimate in $F$ (this is the node about to be moved from $F$ to $D$). We will show that $d[x] = d(s, x)$ and this will complete the induction. Let $p$ be a shortest path from $s$ to $x$. Suppose $z$ is the node on $p$ closest to $x$ for which $d[z] = d(s, z)$. We know $z$ exists since there is at least one such node, namely $s$, where $d[s] = d(s, s)$. By the choice of $z$, for every node $y$ on $p$ between $z$ (not inclusive) to $x$ (inclusive), $d[y ] > d(s, y )$. Consider the following options for $z$.

\begin{enumerate}
    \item If $z = x$, then $d[x] = d(s, x)$ and we are done.
    \item Suppose $z \neq x$. Then there is a node $z'$ after $z$ on $p$. (Here it is possible that $z' = x$.) We know that $d[z] = d(s, z) \leq d(s, x) \leq d[x]$. The first $\leq$ inequality holds because subpaths of shortest paths are shortest paths as well, so that the prefix of $p$ from $s$ to $z$ has weight $d(s, z)$. In addition, the weights on edges are non-negative, so that the portion of $ p$ from $z$ to $x$ has a nonnegative weight, and so $d(s, z) \leq d(s, x)$. The subsequent $\leq $ holds by Claim 1. We know that if $d[z] = d[x]$ all of the previous inequalities are equalities and $d[x] = d(s, x)$ and the claim holds.

    Finally, towards a contradiction, suppose $d[z] < d[x]$. By the choice of $x \in F$ we know $d[x]$ is the minimum distance estimate that was in $F$ . Thus, since $d[z] < d[x]$, we know $z \notin F$ and must be in $D$, the finished set. This means the edges out of $z$, and in particular ($z, z' )$, were already relaxed by our algorithm. But this means that $d[z ' ] \leq d(s, z) + w(z, z' ) = d(s, z' )$, because $z$ is on the shortest path from $s$ to $z '$ , and the distance estimate of $z '$ must be correct. However, this contradicts $z$ being the closest node on $p$ to $x$ meeting the criteria$ d[z] = d(s, z)$. Thus, our initial assumption that $d[z] < d[x]$ must be false and $d[x]$ must equal $d(s, x)$.
\end{enumerate}
\end{claim}

\subsection{Implementation of Dijkstra's Algorithm}

Consider implementing Dijkstra's algorithm with a priority queue to store the set $F$ , where the distance estimates are the keys. The initialization step takes $O(n)$ operations to set $n$ distance estimate values to infinity and $0$. In each iteration of the while loop, we make a call to find the node $x$ in $F$ with the minimum distance estimate (via, say, \texttt{FindMin} operation). Then, we relax each edge leaving $x$ (via \texttt{DecreaseKey}). We remove node $x$ (via \texttt{DeleteMin}) and add it to $D$. In total, there are $n$ calls to \texttt{FindMin} and $n$ calls to \texttt{DeleteMin} since nodes are never re-inserted into $F$ . Similarly, there will be $m$ calls to \texttt{DecreaseKey} to relax the edges since each edge will be relaxed at most once.

Depending on how quickly our priority queue can support \texttt{FindMin}, \texttt{DeleteMin}, and \texttt{DecreaseKey} operations, the total runtime of Dijkstra's algorithm is on the order of
$$
n \cdot(T_{\texttt{FindMin}}(n) + T_{\texttt{DeleteMin}}(n)) + m \cdot T_{\texttt{DecreaseKey}}(n)
$$

We consider the following implementations of the priority queue for storing $F$:

\begin{itemize}
    \item Store $F$ as an array:

        Each slot corresponds to a node and stores the distance $d[j]$ if $j \in F$ , or \texttt{NIL} otherwise. \texttt{DecreaseKey} runs in $O(1)$ as nodes are indexed. \texttt{FindMin} and \texttt{DeleteMin} run in $O(n)$ as the array is not sorted and we have to go through the whole array. The total runtime is $O(m + n^2 )$ = $O(n^2)$.
    \item Store $F$ as a red-black tree:

        All operations run in $O(\log n)$ time. We implement \texttt{DecreaseKey} by deleting and reinserting with the new key. The total runtime is $O((m + n) \log n)$. If graph $G$ is sparse with few edges, then the red-black tree implementation is faster than the array implementation. However, it can be slower when $G$ is dense with$ m = \Theta(n^2)$.
    \item Store $F$ as a Fibonacci heap:

        Fibonacci heaps are a complex data structure which is able to support the operations \texttt{Insert} in $O(1)$, \texttt{FindMin} in $O(1)$, \texttt{DecreaseKey} in $O(1)$ and \texttt{DeleteMin} in $O(\log n)$ ``amortized'' time, over a sequence of calls to these operations. The meaning of amortized time in this case is as follows: starting from an empty Fibonacci heap, any sequence of operations that includes a \texttt{Insert}'s, b \texttt{FindMin}'s, c \texttt{DecreaseKey}'s and d \texttt{DeleteMin}'s' take $O(a + b + c + d \log n)$ time. The total runtime is $O(m + n \log n)$.
\end{itemize}

To conclude, Dijkstra's algorithm can be very fast when implemented the right way! However, it has a few drawbacks:

\begin{itemize}
    \item It doesn't work with negative edge weights: we used the fact that the weights were
non-negative a few times in the correctness proof above.
    \item It's not very amenable to frequent updates. Suppose that you had already run Dijkstra's algorithm from a particular point, but one weight in the graph changed. How would you recover from this? Next time, we'll see the Bellman-Ford algorithm, which can be
better on both of these fronts.
\end{itemize}

\section{Negative Edge Weights}
Note that Dijkstra's algorithm solves the single source shortest paths problem when there
are no edges with negative weights. While Dijkstra's algorithm may fail on certain graphs
with negative edge weights, having a negative cycle (i.e., a cycle in the graph for which the
sum of edge weights is negative) is a bigger problem for any shortest path algorithm. When
computing a shortest path between two vertices, each additional traversal along the cycle
lowers the overall cost incurred and an arbitrarily small distance can be reached after looping
around the cycle multiple times. In this case, the shortest path to a node on the cycle is not
well defined since it is (negatively) infinite.

\begin{figure}[h!]
\centering
\includegraphics[scale=0.5]{negative_cycle.png}
\caption{Assume there is a negative cycle along the $s-t$ path. The distance between $s$ and
$t$ is not well-defined.}
\label{fig:negative_cycle}
\end{figure}

For example, consider the graph in Figure \ref{fig:negative_cycle}. The shortest path from $s$ to $t$ would start from the node $s$, loop around the negative cycle an infinite number of times and eventually reach destination $t$. The shortest path would, hence, be of infinite length and is not well-defined. Besides the negative cycles, there are no problems in computing the shortest paths in a graph with negative edge weights. In fact, there are many applications where allowing negative edge weights is important.

\end{document}


\section{Groebner package}
\begin{Introduction}{Groebner bases}
The GROEBNER package calculates \nameindex{Groebner bases} using the
\nameindex{Buchberger algorithm} and provides related algorithms
for arithmetic with ideal bases, such as ideal quotients,
Hilbert polynomials (\nameindex{Hollmann algorithm}),
basis conversion (
\nameindex{Faugere-Gianni-Lazard-Mora algorithm}), independent
variable set (\nameindex{Kredel-Weispfenning algorithm}).

Some routines of the Groebner package are used by \nameref{solve} - in
that context the package is loaded automatically. However, if you
want to use the package by explicit calls you must load it by
\begin{verbatim}
    load_package groebner;
\end{verbatim}

For the common parameter setting of most operators in this package
see \nameref{ideal parameters}.
\end{Introduction}

\begin{Concept}{Ideal Parameters}
\index{polynomial}
Most operators of the \name{Groebner} package compute expressions in a
polynomial ring which given as \meta{R}[\meta{var},\meta{var},...] where
\meta{R} is the current REDUCE coefficient domain.  All algebraically
exact domains of REDUCE are supported.  The package can operate over rings
and fields.  The operation mode is distinguished automatically.  In
general the ring mode is a bit faster than the field mode.  The factoring
variant can be applied only over domains which allow you factoring of
multivariate polynomials.

The variable sequence \meta{var} is either declared explicitly as argument
in form of a \nameref{list} in \nameref{torder}, or it is extracted
automatically from the expressions.  In the second case the current REDUCE
system order is used (see \nameref{korder}) for arranging the variables.
If some kernels should play the role of formal parameters (the ground
domain \meta{R} then is the polynomial ring over these), the variable
sequences must be given explicitly.

All REDUCE \nameref{kernel}s can be used as variables.  But please note,
that all variables are considered as independent.  E.g. when using
\name{sin(a)} and \name{cos(a)} as variables, the basic relation
\name{sin(a)^2+cos(a)^2-1=0} must be explicitly added to an equation set
because the Groebner operators don't include such knowledge automatically.

The terms (monomials) in polynomials are arranged according to the current
\nameref{term order}.  Note that the algebraic properties of the computed
results only are valid as long as neither the ordering nor the variable
sequence changes.

The input expressions \meta{exp} can be polynomials \meta{p}, rational
functions \meta{n}/\meta{d} or equations \meta{lh}=\meta{rh} built from
polynomials or rational functions.  Apart from the \name{tracing}
algorithms \nameref{groebnert} and \nameref{preducet}, where the equations
have a specific meaning, equations are converted to simple expressions by
taking the difference of the left-hand and right-hand sides
\meta{lh}-\meta{rh}=>\meta{p}.  Rational functions are converted to
polynomials by converting the expression to a common denominator form
first, and then using the numerator only \meta{n}=>\meta{p}.  So eventual
zeros of the denominators are ignored.

A basis on input or output of an algorithm is coded as \nameref{list} of
expressions \{\meta{exp},\meta{exp},...\} . \end{Concept}

%-----------------------------------------------------------------
\subsection{Term order}
%-----------------------------------------------------------------
\begin{Introduction}{Term order}
\index{distributive polynomials}
For all \name{Groebner} operations the polynomials are
represented in distributive form: a sum of terms (monomials).
The terms are ordered corresponding to the actual \name{term order}
which is set by the \nameref{torder} operator, and to the
actual variable sequence which is either given as explicit
parameter or by the system \nameref{kernel} order.
\end{Introduction}

\begin{Operator}{torder}
The operator \name{torder} sets the actual variable sequence and term order.

1. simple term order:
\begin{Syntax}
  \name{torder}\(\meta{vl}, \meta{m}\)
\end{Syntax}

where  \meta{vl} is a \nameref{list} of variables (\nameref{kernel}s) and
\meta{m} is the name of a simple \nameref{term order} mode
\ref{lex term order}, \ref{gradlex term order},
\ref{revgradlex term order} or another implemented parameterless mode.

2. stepped term order:
\begin{Syntax}

  \name{torder} \(\meta{vl},\meta{m},\meta{n}\)

\end{Syntax}

where \meta{m} is the name of a two step term order, one of
\nameref{gradlexgradlex term order}, \nameref{gradlexrevgradlex term order},
\nameref{lexgradlex term order} or \nameref{lexrevgradlex term order}, and
\meta{n} is a positive integer.

3. weighted term order
\begin{Syntax}
 \name{torder} \(\meta{vl}, \name{weighted}, \meta{n},\meta{n},...\);
\end{Syntax}

where the \meta{n} are positive integers, see \nameref{weighted term order}.

4. matrix term order
\begin{Syntax}
 \name{torder} \(\meta{vl}, \name{matrix}, \meta{m}\);
\end{Syntax}

where \meta{m} is a matrix with integer elements, see
\nameref{torder_compile}.

5. compiled term order
\begin{Syntax}
 \name{torder} \(\meta{vl}, \name{co}\);
\end{Syntax}

where \meta{co} is the name of a routine generated by
\nameref{torder_compile}.

\name{torder} sets the variable sequence and the term order mode. If the
an empty list is used as variable sequence, the automatic variable extraction
is activated. The defaults are the empty variable list an the
\nameref{lex term order}.
The previous setting is returned as a list.

Alternatively to the above syntax the arguments of \name{torder} may be
collected in a \nameref{list} and passed as one argument to
\name{torder}.

\end{Operator}
%------------------------------------------------------------
\begin{Operator}{torder_compile}
\index{term order}
A matrix can be converted into
a compilable LISP program for faster execution by using
\begin{Syntax}
    \name{torder\_compile}\(\meta{name},\meta{mat}\)
\end{Syntax}
where \meta{name} is an identifier for the new term order and \meta{mat}
is an integer matrix to be used as \nameref{matrix term order}. Afterwards
the term order can be activated by using \meta{name} in a \nameref{torder}
expression. The resulting program is compiled if the switch \nameref{comp}
is on, or if the  \name{torder\_compile} expression is part of a compiled
module.
\end{Operator}
%------------------------------------------------------------
\begin{Concept}{lex term order}
\index{term order}\index{variable elimination}
The terms are ordered lexicographically: two terms t1 t2
are compared for their degrees
along the fixed variable sequence: t1 is higher than t2
if the first different degree is higher in t1.
This order has the \name{elimination property}
for \name{groebner basis} calculations.
If the ideal has a univariate polynomial in the last
variable the groebner basis will contain
such polynomial. \name{Lex} is best
suited for solving of polynomial equation systems.

\end{Concept}

%------------------------------------------------------------
\begin{Concept}{gradlex term order}
\index{term order}
The terms are ordered first with their total
degree, and if the total degree is identical
the comparison is \nameref{lex term order}.
With \name{groebner} basis calculations this term order
produces polynomials of lowest degree.
\end{Concept}

%------------------------------------------------------------
\begin{Concept}{revgradlex term order}
\index{term order}
The terms are ordered first with their total
degree (degree sum), and if the total degree is identical
the comparison is the inverse of \nameref{lex term order}.
With \nameref{groebner} and \nameref{groebnerf}
calculations this term order
is similar to \nameref{gradlex term order}; it is known
as most efficient ordering with respect to computing time.
\end{Concept}

%------------------------------------------------------------
\begin{Concept}{gradlexgradlex term order}
\index{term order}
The terms are separated into two groups where the
second parameter of the \nameref{torder} call determines
the length of the first group. For a comparison first
the total degrees of both variable groups are compared.
If both are equal
\nameref{gradlex term order} comparison is applied to the first
group, and if that does not decide \nameref{gradlex term order}
is applied for the second group. This order has the elimination
property for the variable groups. It can be used e.g. for
separating variables from parameters.
\end{Concept}
%------------------------------------------------------------
\begin{Concept}{gradlexrevgradlex term order}
\index{term order}
Similar to \nameref{gradlexgradlex term order}, but using
\nameref{revgradlex term order} for the second group.
\end{Concept}
%------------------------------------------------------------
\begin{Concept}{lexgradlex term order}
\index{term order}
Similar to \nameref{gradlexgradlex term order}, but using
\nameref{lex term order} for the first group.
\end{Concept}
%------------------------------------------------------------
\begin{Concept}{lexrevgradlex term order}
\index{term order}
Similar to \nameref{gradlexgradlex term order}, but using
\nameref{lex term order} for the first group
\nameref{revgradlex term order} for the second group.
\end{Concept}
%------------------------------------------------------------
\begin{Concept}{weighted term order}
\index{term order}
establishes a graduated ordering
similar to \nameref{gradlex term order}, where the exponents first are
multiplied by the given weights. If there are less weight values than
variables, the weight list is extended by ones. If the weighted degree
comparison is not decidable, the
\nameref{lex term order} is used.
\end{Concept}
%------------------------------------------------------------
\begin{Concept}{graded term order}
\index{term order}
establishes a cascaded term ordering:  first a graduated ordering
similar to \nameref{gradlex term order} is used, where the exponents first are
multiplied by the given weights. If there are less weight values than
variables, the weight list is extended by ones. If the weighted degree
comparison is not decidable, the term ordering described in the following
parameters of the \nameref{torder} command is used.
\end{Concept}
%------------------------------------------------------------
\begin{Concept}{matrix term order}
\index{term order}
Any arbitrary term order mode can be installed by a matrix with
integer elements where the row length corresponds to the variable
number. The matrix must have at least as many rows as columns.
It must have full rank, and the top nonzero element of each column
must be positive.

The matrix \name{term order mode}
defines a term order where the exponent vectors of the monomials are
first multiplied by the matrix and the resulting vectors are compared
lexicographically.

If the switch \nameref{comp} is on, the matrix is converted into
a compiled LISP program for faster execution. A matrix can also be
compiled explicitly, see \nameref{torder_compile}.
\end{Concept}
%---------------------------------------------------------------
%------------------------------------------------------------
\subsection{Basic Groebner operators}
%-------------------------------------------------------------
\begin{Operator}{gvars}
\begin{Syntax}

  \name{gvars}\(\{\meta{exp},\meta{exp},... \}\)

\end{Syntax}
 where \meta{exp} are expressions or \nameref{equation}s.

\name{gvars} extracts from the expressions the \nameref{kernel}\name{s}
which can
play the role of variables for a \nameref{groebner} or \nameref{groebnerf}
calculation.
\end{Operator}

%---------------------------------------------------------------

\begin{Operator}{groebner}
\index{Buchberger algorithm}
\begin{Syntax}

  \name{groebner}\(\{\name{exp}, ...\}\)

\end{Syntax}
where \{\name{exp}, ... \} is a list of
expressions or equations.

The operator \name{groebner} implements the Buchberger algorithm
for computing Groebner bases for a given set of
expressions with respect to the given set of variables in the order
given.  As a side effect, the sequence of variables is stored as a REDUCE list
in the shared variable \nameref{gvarslast} - this is important in cases
where the algorithm rearranges the variable sequence because \nameref{groebopt}
is \name{on}.

\begin{Examples}
   groebner({x**2+y**2-1,x-y})  &  \{X - Y,2*Y**2 -1\}
\end{Examples}
\begin{Related}
\item[ \nameref{groebnerf} operator]
\item[ \nameref{gvarslast} variable]
\item[ \nameref{groebopt} switch]
\item[ \nameref{groebprereduce} switch]
\item[ \nameref{groebfullreduction} switch]
\item[ \nameref{gltbasis} switch]
\item[ \nameref{gltb} variable]
\item[ \nameref{glterms} variable]
\item[ \nameref{groebstat} switch]
\item[ \nameref{trgroeb} switch]
\item[ \nameref{trgroebs} switch]
\item[ \nameref{groebprot} switch]
\item[ \nameref{groebprotfile} variable]
\item[ \nameref{groebnert} operator]
\end{Related}
\end{Operator}
%-------------------------------------------------------

\begin{Operator}{groebner\_walk}
The operator \name{groebner\_walk} computes a \nameref{lex} basis
from a given \nameref{graded} (or \nameref{weighted}) one.
\begin{Syntax}
   \name{groebner\_walk}\(\meta{g}\)
\end{Syntax}

where \meta{g} is a \nameref{graded} basis (or \nameref{weighted} basis
with a weight vector with one repeated element) of the polynomial ideal.
\name{Groebner\_walk} computes a sequence of monomial bases, each
time lifting the full system to a complete basis.  \name{Groebner\_walk}
should be called only in cases, where a normal \nameref{kex} computation
would take too much computer time.

The operator \nameref{torder} has to be called before in order to
define the variable sequence and the term order mode of \meta{g}.

The variable \nameref{gvarslast} is not set.

Do not call \name{groebner\_walk} with \name{on} \nameref{groebopt}.

\name{Groebner\_walk} includes some overhead (such as e. g.
computation with division). On the other hand, sometimes
\name{groebner\_walk} is faster than a direct \nameref{lex} computation.
\end{Operator}

%-------------------------------------------------------

\begin{Switch}{groebopt}
If \name{groebopt} is set ON, the sequence of variables is optimized
with respect to execution speed of \name{groebner} calculations;
note that the final list of variables is available in \nameref{gvarslast}.
By default \name{groebopt} is off, conserving the original variable
sequence.

An explicitly declared dependency using the \nameref{depend}
declaration  supersedes the variable optimization.
\begin{Examples}

   depend a, x, y;

\end{Examples}
guarantees that a will be placed in front of x and y.
\end{Switch}

%-------------------------------------------------------

\begin{Variable}{gvarslast}
After a \nameref{groebner} or \nameref{groebnerf} calculation
the actual variable sequence is stored in the variable
\name{gvarslast}. If \nameref{groebopt} is \name{on}
\name{gvarslast} shows the variable sequence after reordering.
\end{Variable}

%--------------------------------------------------------------

\begin{Switch}{groebprereduce}
If \name{groebprereduce} set ON, \nameref{groebner}
and \nameref{groebnerf} try to simplify the
input expressions: if the head term of an input expression is a
multiple of the head term of another expression, it can be reduced;
these reductions are done cyclicly as long as possible in order to
shorten the main part of the algorithm.

By default \name{groebprereduce} is off.
\end{Switch}

%---------------------------------------------------------------

\begin{Switch}{groebfullreduction}
If \name{groebfullreduction} set off, the polynomial reduction steps during
\nameref{groebner} and \nameref{groebnerf} are limited to the pure head
term reduction; subsequent terms are reduced otherwise.

By default \name{groebfullreduction} is on.
\end{Switch}

%----------------------------------------------------------------

\begin{Switch}{gltbasis}
If \name{gltbasis} set on, the leading terms of the result basis
of a \nameref{groebner} or \nameref{groebnerf} calculation are
extracted. They are collected as a basis of monomials, which is
available as value of the global variable \nameref{gltb}.
\end{Switch}
%------------------------------------------------------------------
\begin{Variable}{gltb}
See \nameref{gltbasis}
\end{Variable}
%------------------------------------------------------------------

\begin{Variable}{glterms}
If the expressions in a \nameref{groebner} or \nameref{groebnerf}
call contain parameters (symbols
which are not member of the variable list), the share variable
\name{glterms} is set to a list of expression which during the
calculation were assumed to be nonzero. The calculated bases
are valid only under the assumption that all these expressions do
not vanish.
\end{Variable}

%-----------------------------------------------------------
\begin{Switch}{groebstat}
if \name{groebstat} is on, a summary of the
\nameref{groebner} or \nameref{groebnerf} computation is printed
at the end
including the computing time, the number of intermediate
H polynomials and the counters for the criteria hits.
\end{Switch}

%-----------------------------------------------------------
\begin{Switch}{trgroeb}
if \name{trgroeb} is on, intermediate H polynomials are
printed during a \nameref{groebner}
or \nameref{groebnerf} calculation.
\end{Switch}

%-----------------------------------------------------------
\begin{Switch}{trgroebs}
if \name{trgroebs} is on, intermediate H and S polynomials are
printed during a \nameref{groebner} or \nameref{groebnerf} calculation.
\end{Switch}

%-----------------------------------------------------------
\begin{Operator}{gzerodim?}
\begin{Syntax}

  \name{gzerodim!?}\(\meta{basis}\)

\end{Syntax}
where \meta{bas} is a Groebner basis in the current
\nameref{term order} with the actual setting
(see \nameref{ideal parameters}).

\name{gzerodim!?} tests whether the ideal spanned by the given basis
has dimension zero. If yes, the number of zeros is returned,
\nameref{nil} otherwise.
\end{Operator}

%---------------------------------------------------------------

\begin{Operator}{gdimension}
\index{ideal dimension}\index{groebner}
\begin{Syntax}

     \name{gdimension}\(\meta{bas}\)

\end{Syntax}
where \meta{bas} is a \nameref{groebner} basis in the current
term order (see \nameref{ideal parameters}).
\name{gdimension} computes the dimension of the ideal
spanned by the given basis and returns the dimension as an integer
number. The Kredel-Weispfenning algorithm is used: the dimension
is the length of the longest independent variable set,
see \nameref{gindependent\_sets}
\end{Operator}

%---------------------------------------------------------------

\begin{Operator}{gindependent\_sets}
\index{ideal variables}\index{ideal dimension}\index{groebner}
\index{Kredel-Weispfenning algorithm}
\begin{Syntax}

  \name{gindependent\_sets}\(\meta{bas}\)

\end{Syntax}
where \meta{bas} is a \nameref{groebner} basis in any \name{term order}
(which must be the current \name{term order}) with the specified
variables (see \nameref{ideal parameters}).

\name{Gindependent_sets} computes the maximal
left independent variable sets of the ideal, that are
the variable sets which play the role of free parameters in the
current ideal basis. Each set is a list which is a subset of the
variable list. The result is a list of these sets. For an
ideal with dimension zero the list is empty.
The Kredel-Weispfenning algorithm is used.
\end{Operator}

%--------------------------------------------------------------

\begin{Operator}{dd_groebner}
For a homogeneous system of polynomials under
\nameref{graded term order}, \nameref{gradlex term order},
\nameref{revgradlex term order}
or \nameref{weighted term order}
a Groebner Base can be computed with limiting the grade
of the intermediate S polynomials:
\begin{Syntax}
\name{dd_groebner}\(\meta{d1},\meta{d2},\meta{plist}\)
\end{Syntax}
where \meta{d1} is a non negative integer and \meta{d2} is an integer
or ``infinity". A pair of polynomials is considered
only if the grade of the lcm of their head terms is between
\meta{d1} and \meta{d2}.
For the term orders \name{graded} or \name{weighted} the (first) weight
vector is used for the grade computation. Otherwise the total
degree of a term is used.
\end{Operator}

%--------------------------------------------------------------

\begin{Operator}{glexconvert}
\index{ideal variables}\index{term order}
\begin{Syntax}

\name{glexconvert}\(\meta{bas}[,\meta{vars}][,MAXDEG=\meta{mx}]
[,NEWVARS=\meta{nv}]\)

\end{Syntax}
where \meta{bas} is a \nameref{groebner} basis
in the current term order,  \meta{mx} (optional) is a positive
integer and \meta{nvl} (optional) is a list of variables
(see \nameref{ideal parameters}).

The operator \name{glexconvert} converts the basis
of a zero-dimensional ideal (finite number
of isolated solutions) from arbitrary ordering into a basis under
\nameref{lex term order}.

The parameter \meta{newvars} defines the new variable sequence.
If omitted, the
original variable sequence is used. If only a subset of variables is
specified here, the partial ideal basis is evaluated.

If \meta{newvars} is a list with one element, the minimal
\nameindex{univariate polynomial} is computed.

\meta{maxdeg} is an upper limit for the degrees. The algorithm stops with
an error message, if this limit is reached.

A warning occurs, if the ideal is not zero dimensional.
\begin{Comments}
During the call the \name{term order} of the input basis must
be active.
\end{Comments}
\end{Operator}

%--------------------------------------------------------------

\begin{Operator}{greduce}
\begin{Syntax}

\name{greduce}\(exp, \{exp1, exp2, \ldots , expm\}\)

\end{Syntax}

where exp is an expression, and \{exp1, exp2, ... , expm\} is
a list of expressions or equations.

\name{greduce} is functionally equivalent with a call to
\nameref{groebner} and then a call to \nameref{preduce}.
\end{Operator}

%---------------------------------------------------------

\begin{Operator}{preduce}
\begin{Syntax}

 \name{preduce}\(\meta{p}, \{\meta{exp}, \ldots \}\)

\end{Syntax}

where \meta{p} is an expression, and \{\meta{exp}, ... \} is
a list of expressions or equations.

\name{Preduce} computes the remainder of \name{exp}
modulo the given set of polynomials resp. equations.
This result is unique (canonical) only if the given set
is a \name{groebner} basis under the current \nameref{term order}

see also: \nameref{preducet} operator.

\end{Operator}

%-------------------------------------------

\begin{Operator}{idealquotient}
\begin{Syntax}

\name{idealquotient}\(\{\meta{exp}, ...\}, \meta{d}\)

\end{Syntax}
where \{\meta{exp},...\} is a list of
expressions or equations,  \meta{d} is a single expression or equation.

\name{Idealquotient} computes the ideal quotient:
ideal spanned by the expressions \{\meta{exp},...\}
divided by the single polynomial/expression \meta{f}. The result
is the \nameref{groebner} basis of the quotient ideal.
\end{Operator}

%-------------------------------------------------------------

\begin{Operator}{hilbertpolynomial}
\index{Hollmann algorithm}
\begin{Syntax}

  hilbertpolynomial\(\meta{bas}\)

\end{Syntax}
where \meta{bas} is a \nameref{groebner} basis in the
current \nameref{term order}.

The degree of the \name{Hilbert polynomial} is the
dimension of the ideal spanned by the basis. For an
ideal of dimension zero the Hilbert polynomial is a
constant which is the number of common zeros of the
ideal (including eventual multiplicities).
The \name{Hollmann algorithm} is used.
\end{Operator}

%-------------------------------------------

\begin{Operator}{saturation}
\begin{Syntax}

\name{saturation}\(\{\meta{exp}, ...\}, \meta{p}\)

\end{Syntax}
where \{\meta{exp},...\} is a list of
expressions or equations,  \meta{p} is a single polynomial.

\name{Saturation} computes the quotient of the polynomial \meta{p}
and a power (with unknown but finite exponent) of the ideal built from
\{\meta{exp}, ...\}. The result is the computed quotient. \name{Saturation}
calls \nameref{idealquotient} several times until the result does not change
any more.
\end{Operator}

%-------------------------------------------------------------
\subsection{Factorizing Groebner bases}
%-------------------------------------------------------------

\begin{Operator}{groebnerf}
\begin{Syntax}

\name{groebnerf}\(\{\meta{exp}, ...\}[,\{\},\{\meta{nz}, ... \}]\);

\end{Syntax}
where \{\meta{exp}, ... \} is a list of expressions or
equations, and \{\meta{nz},... \} is
an optional list of polynomials to be considered as non zero
for this calculation. An empty list must be passed as second argument
if the non-zero list is specified.

\name{groebnerf} tries to separate polynomials into individual factors and
to branch the computation in a recursive manner (factorization tree).
The result is a list of partial Groebner bases.
Multiplicities (one factor with a higher power, the same partial basis
twice) are deleted as early as possible in order to speed up the
calculation.

The third parameter of \name{groebnerf} declares some polynomials
nonzero. If any of these is found in a branch of the calculation
the branch is canceled.

\begin{Bigexample}
groebnerf({ 3*x**2*y+2*x*y+y+9*x**2+5*x = 3,
            2*x**3*y-x*y-y+6*x**3-2*x**2-3*x = -3,
            x**3*y+x**2*y+3*x**3+2*x**2 }, {y,x});

       {{Y - 3,X},

                      2
    {2*Y + 2*X - 1,2*X  - 5*X - 5}}
\end{Bigexample}

\begin{Related}
\item[ \nameref{groebresmax} variable]
\item[ \nameref{groebmonfac} variable]
\item[ \nameref{groebrestriction} variable]
\item[ \nameref{groebner} operator]
\item[ \nameref{gvarslast} variable]
\item[ \nameref{groebopt} switch]
\item[ \nameref{groebprereduce} switch]
\item[ \nameref{groebfullreduction} switch]
\item[ \nameref{gltbasis} switch]
\item[ \nameref{gltb} variable]
\item[ \nameref{glterms} variable]
\item[ \nameref{groebstat} switch]
\item[ \nameref{trgroeb} switch]
\item[ \nameref{trgroebs} switch]
\item[ \nameref{groebnert} operator]
\end{Related}

\end{Operator}

% ------------------------------------------------------------------

\begin{Variable}{groebmonfac}
The variable \name{groebmonfac} is connected to
the handling of monomial factors.  A monomial factor is a product
of variable powers as a factor, e.g. x**2*y  in  x**3*y -
2*x**2*y**2.  A monomial factor represents a solution of the type
 x = 0  or  y = 0 with a certain multiplicity.  With
\nameref{groebnerf} the multiplicity of monomial factors is lowered
to the value of the shared variable \name{groebmonfac}
which by default is 1 (= monomial factors remain present, but their
multiplicity is brought down). With
\name{groebmonfac}:= 0
the monomial factors are suppressed completely.
\end{Variable}

% ----------------------------------------------------------------
\begin{Variable}{groebresmax}
The variable \name{groebresmax}
controls  during \nameref{groebnerf} calculations
the number of partial results. Its default value is 300. If
more partial results are calculated, the calculation is
terminated.
\end{Variable}

% ----------------------------------------------------------------
\begin{Variable}{groebrestriction}
During \nameref{groebnerf} calculations
irrelevant branches can be excluded
by setting the variable \name{groebrestriction}. The
following restrictions are implemented:
\begin{Syntax}
     \name{groebrestriction} := \name{nonnegative} \\
     \name{groebrestriction} := \name{positive}\\
     \name{groebrestriction} := \name{zeropoint}
\end{Syntax}
With \name{nonnegative} branches are excluded where one
polynomial has no nonnegative real zeros; with \name{positive}
the restriction is sharpened to positive zeros only.
The restriction \name{zeropoint} excludes all branches
which do not have the origin (0,0,...0) in their solution
set.
\end{Variable}

%---------------------------------------------------------
\subsection{Tracing Groebner bases}
%---------------------------------------------------------
\index{tracing Groebner}
\begin{Switch}{groebprot}
If \name{groebprot} is \name{ON} the computation steps during
\nameref{preduce}, \nameref{greduce} and \nameref{groebner}
are collected in a list which is assigned to the variable
\nameref{groebprotfile}.
\end{Switch}
%----------------------------------------------------------
\begin{Variable}{groebprotfile}
See \nameref{groebprot} switch.
\end{Variable}
%----------------------------------------------------------

\begin{Operator}{groebnert}
\begin{Syntax}

  \name{groebnert}\(\{\meta{v}=\meta{exp},...\}\)

\end{Syntax}
where \meta{v} are \nameref{kernel}\name{s} (simple or indexed variables),
\meta{exp} are polynomials.

\name{groebnert} is functionally equivalent to a \nameref{groebner}
call for \{\meta{exp},...\}, but the result is a set of
equations where the left-hand sides are the basis elements while
the right-hand sides are the same values expressed as combinations
of the input formulas, expressed in terms of the names \meta{v}
\begin{Bigexample}
    groebnert({p1=2*x**2+4*y**2-100,p2=2*x-y+1});

   GB1 := {2*X - Y + 1=P2,

           2
        9*Y  - 2*Y - 199= - 2*X*P2 - Y*P2 + 2*P1 + P2}
\end{Bigexample}
\end{Operator}
%----------------------------------------------------------

\begin{Operator}{preducet}
\begin{Syntax}

\name{preduce}\(\meta{p},\{\meta{v}=\meta{exp}...\}\)
\end{Syntax}
where \meta{p} is an expression, \meta{v} are kernels
(simple or indexed variables),
\name{exp} are polynomials.

\name{preducet} computes the remainder of \meta{p} modulo \{\meta{exp},...\}
similar to \nameref{preduce}, but the result is an equation
which expresses the remainder as combination of the polynomials.
\begin{Bigexample}

   GB2 := {G1=2*X - Y + 1,G2=9*Y**2  - 2*Y - 199}
   preducet(q=x**2,gb2);

 - 16*Y + 208= - 18*X*G1 - 9*Y*G1 + 36*Q + 9*G1 - G2
\end{Bigexample}
\end{Operator}

%------------------------------------------------------------
\subsection{Groebner Bases for Modules}
%------------------------------------------------------------
\begin{Concept}{Module}
Given a polynomial ring, e.g. R=Z[x,y,...] and an integer n>1.
The vectors with n elements of R form a free MODULE under
elementwise addition and multiplication with elements of R.

For a submodule given by a finite basis a Groebner basis
can be computed, and the facilities of the GROEBNER package
are available except the operators \nameref{groebnerf}
and \name{groesolve}. The vectors are encoded using auxiliary
variables which represent the unit vectors in the module.
These are declared in the share variable \nameref{gmodule}.

\end{Concept}

\begin{Variable}{gmodule}
The vectors of a free \nameref{module} over a polynomial ring R
are encoded as linear combinations with unit vectors of
M which are represented by auxiliary variables. These
must be collected in the variable \name{gmodule} before
any call to an operator of the Groebner package.

\begin{verbatim}
   torder({x,y,v1,v2,v3})$
   gmodule := {v1,v2,v3}$
   g:=groebner({x^2*v1 + y*v2,x*y*v1 - v3,2y*v1 + y*v3});
\end{verbatim}

compute the Groebner basis of the submodule

\begin{verbatim}
      ([x^2,y,0],[xy,0,-1],[0,2y,y])
\end{verbatim}
The members of the list \name{gmodule} are automatically
appended to the end of the variable list, if they are not
yet members there. They take part in the actual term ordering.
\end{Variable}

%------------------------------------------------------------
\subsection{Computing with distributive polynomials}
%------------------------------------------------------------

\begin{Operator}{gsort}
\index{distributive polynomials}
\begin{Syntax}

 \name{gsort}\(\meta{p}\)
\end{Syntax}
where \meta{p} is a polynomial or a list of polynomials.

The polynomials are reordered and sorted corresponding to
the current \nameref{term order}.
\begin{Examples}

  torder lex;\\
  gsort(x**2+2x*y+y**2,{y,x});  &  {y**2+2y*x+x**2}

\end{Examples}
\end{Operator}

%------------------------------------------------------------

\begin{Operator}{gsplit}
\index{distributive polynomials}
\begin{Syntax}

 \name{gsplit}\(\meta{p}[,\meta{vars}]\);
\end{Syntax}
where \meta{p} is a polynomial or a list of polynomials.

The polynomial is reordered corresponding to the
the current \nameref{term order} and then
separated into leading term and reductum. Result is
a list with the leading term as first and the reductum
as second element.
\begin{Examples}

  torder lex;\\
  gsplit(x**2+2x*y+y**2,{y,x});  &  \{y**2,2y*x+x**2\}

\end{Examples}
\end{Operator}
%-------------------------------------------------------

\begin{Operator}{gspoly}
\index{distributive polynomials}
\begin{Syntax}

 \name{gspoly}\(\meta{p1},\meta{p2}\);

\end{Syntax}
where \meta{p1} and \meta{p2} are polynomials.

The \name{subtraction} polynomial of p1 and p2 is computed
corresponding to the method of the Buchberger algorithm for
computing \name{groebner bases}: p1 and p2 are multiplied
with terms such that when subtracting them the leading terms
cancel each other.
\end{Operator}