% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- \documentclass[nojss]{jss} \usepackage{amssymb} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% declarations for jss.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% just as usual \author{Robin K. S. Hankin\\University of Stirling} \title{The adjoint operator in the freealg package} %\VignetteIndexEntry{adjoint} %% for pretty printing and a nice hypersummary also set: \Plainauthor{Robin K. S. Hankin} \Plaintitle{The adjoint operator} \Shorttitle{The adjoint operator} %% an abstract and keywords \Abstract{ In this very short document I discuss the adjoint operator \code{ad()} and illustrate some of its properties. } \Keywords{Adjoint operator, free algebra} \Plainkeywords{Adjoint operator, free algebra} %% publication information %% NOTE: This needs to filled out ONLY IF THE PAPER WAS ACCEPTED. %% If it was not (yet) accepted, leave them commented. %% \Volume{13} %% \Issue{9} %% \Month{September} %% \Year{2004} %% \Submitdate{2004-09-29} %% \Acceptdate{2004-09-29} %% \Repository{https://github.com/RobinHankin/freegroup} %% this line for Tragula %% The address of (at least) one author should be given %% in the following format: \Address{ Robin K. S. Hankin\\%\orcid{https://orcid.org/0000-0001-5982-0415}\\ University of Stirling\\ E-mail: \email{hankin.robin@gmail.com}\hfill\includegraphics[width=1in]{\Sexpr{system.file("help/figures/freealg.png",package="freealg")}} } %% It is also possible to add a telephone and fax number %% before the e-mail in the following format: %% Telephone: +43/1/31336-5053 %% Fax: +43/1/31336-734 %% for those who use Sweave please include the following line (with % symbols): %% need no \usepackage{Sweave.sty} %% end of declarations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \SweaveOpts{} \begin{document} <>= library("freealg") @ \hfill\includegraphics[width=1in]{\Sexpr{system.file("help/figures/freealg.png",package="freealg")}} <<>>= ad @ \subsection*{The adjoint operator: definition} Given an associative algebra ${\mathcal A}$ and $X,Y\in{\mathcal A}$, we define the \emph{Lie Bracket} $[X,Y]$ as $XY-YX$. In the {\tt freealg} package this is implemented with the{\tt .[]} construction: <<>>= X <- as.freealg("X") Y <- as.freealg("Y") .[X,Y] @ \subsection*{The Jacobi identity} The Lie bracket is bilinear and satisfies the Jacobi condition: <<>>= X <- rfalg(3) Y <- rfalg(3) Z <- rfalg(3) X # Y and Z are similar objects .[X,Y] # quite complicated .[X,.[Y,Z]] + .[Y,.[Z,X]] + .[Z,.[X,Y]] # Zero by Jacobi @ \subsection*{The adjoint map: definition} Now we define the adjoint as follows. Given a Lie algebra $\mathfrak{g}$, and $X\in{\mathcal A}$, we define a linear map $\mathrm{ad}_X\colon\mathfrak{g}\longrightarrow\mathfrak{g}$ with \[ \mathrm{ad}_X(Y)=\left[X,Y\right] \] In the {\tt freealg} package, this is implemented using the {\tt ad()} function: <<>>= ad(X) @ See how function {\tt ad()} returns a {\em function}. We can play with this: <<>>= f <- ad(X) f(Y) f(Y) == X*Y-Y*X @ The first thing to note is that $\mathrm{ad}_X$ is NOT a Lie homomorphism, for any particular (non-constant) value of $X$. If $\phi$ is a Lie homomorphism then $\phi([x,y]) = \left[\phi(x),\phi(y)\right]$. There is no reason to expect the adjoint to be a Lie homomorphism, but it does not hurt to check: <<>>= phi <- ad(Z) phi(.[X,Y]) == .[phi(X),phi(Y)] @ With this definition, it is easy to calculate, say, $[Z,[Z,[Z,[Z,[Z,X]]]]]$: <>= f <- ad("x") f(f(f(f(f("y"))))) @ Above, we see that \code{ad()} coerces its argument to a \code{freealg} object. \subsection*{The adjoint operator is a derivation} A {\em derivation} of a Lie bracket is a function $\phi\colon\mathfrak{g}\longrightarrow\mathfrak{g}$ that satisfies \[ \phi([Y,Z]) = [\phi(Y),Z] + [Y,\phi(Z)]. \] We will verify that $\mathrm{ad}_X$ is indeed a derivation: <>= phi <- ad(X) phi(.[Y,Z]) == .[phi(Y),Z] + .[Y,phi(Z)] @ \subsection*{The adjoint operator $\mathrm{ad}\colon\mathfrak{g}\longrightarrow\mathrm{ End}(\mathfrak{g})$ is a Lie homomorphism} Even though $\mathrm{ad}_X$ is not a Lie homomorphism, we can view the adjoint operator as a map from a Lie algebra to its endomorphism group, and this {\em is} a Lie homomorphism. We are asserting that \[ \mathrm{ad}_{\left[X,Y\right]} =\left[\mathrm{ad}_X,\mathrm{ad}_Y\right] \] In package idiom we would have: <<>>= ad(.[X,Y])(Z) == .[ad(X),ad(Y)](Z) @ Observe that ``\code{.[ad(X),ad(Y)]}'' is a function: <<>>= .[ad(X),ad(Y)] @ which we evaluate (on the right hand side) at \code{Z}. \section*{Adjoints in other contexts} Function \code{ad()} works in a more general context than the free algebra. For example, we might use it for matrices: <<>>= f <- ad(matrix(c(4,6,2,3),2,2)) M <- matrix(1:4,2,2) f(M) @ \section*{Note on the definition of \code{ad()}} It would seem that one could define \code{ad()} as follows: \begin{verbatim} `ad` <- function(x){ function(y){ .[as.freealg(x),as.freealg(y)] } } \end{verbatim} which would be a lot clearer. However, ``\code{.}'' is an object, loaded via the \code{lazydata} system. {\em Writing R extensions} says, in a footnote: Note that lazy-loaded datasets are {\em not} in the package's namespace so need to be accessed via \code{::}, e.g. \code{survival::survexp.us}. This would make it ``\code{freelg::.[x,y]}'', which is not really any better IMO. \end{document}