\documentclass[12pt,titlepage]{article} \usepackage{amsmath} \usepackage{mathrsfs} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsthm} \usepackage{mathtools} \usepackage{graphicx} \usepackage{color} \usepackage{ucs} \usepackage[utf8x]{inputenc} \usepackage{xparse} \usepackage{hyperref} %----Macros---------- % % Unresolved issues: % % \righttoleftarrow % \lefttorightarrow % % \color{} with HTML colorspec % \bgcolor % \array with options (without options, it's equivalent to the matrix environment) % Of the standard HTML named colors, white, black, red, green, blue and yellow % are predefined in the color package. Here are the rest. \definecolor{aqua}{rgb}{0, 1.0, 1.0} \definecolor{fuschia}{rgb}{1.0, 0, 1.0} \definecolor{gray}{rgb}{0.502, 0.502, 0.502} \definecolor{lime}{rgb}{0, 1.0, 0} \definecolor{maroon}{rgb}{0.502, 0, 0} \definecolor{navy}{rgb}{0, 0, 0.502} \definecolor{olive}{rgb}{0.502, 0.502, 0} \definecolor{purple}{rgb}{0.502, 0, 0.502} \definecolor{silver}{rgb}{0.753, 0.753, 0.753} \definecolor{teal}{rgb}{0, 0.502, 0.502} % Because of conflicts, \space and \mathop are converted to % \itexspace and \operatorname during preprocessing. % itex: \space{ht}{dp}{wd} % % Height and baseline depth measurements are in units of tenths of an ex while % the width is measured in tenths of an em. \makeatletter \newdimen\itex@wd% \newdimen\itex@dp% \newdimen\itex@thd% \def\itexspace#1#2#3{\itex@wd=#3em% \itex@wd=0.1\itex@wd% \itex@dp=#2ex% \itex@dp=0.1\itex@dp% \itex@thd=#1ex% \itex@thd=0.1\itex@thd% \advance\itex@thd\the\itex@dp% \makebox[\the\itex@wd]{\rule[-\the\itex@dp]{0cm}{\the\itex@thd}}} \makeatother % \tensor and \multiscript \makeatletter \newif\if@sup \newtoks\@sups \def\append@sup#1{\edef\act{\noexpand\@sups={\the\@sups #1}}\act}% \def\reset@sup{\@supfalse\@sups={}}% \def\mk@scripts#1#2{\if #2/ \if@sup ^{\the\@sups}\fi \else% \ifx #1_ \if@sup ^{\the\@sups}\reset@sup \fi {}_{#2}% \else \append@sup#2 \@suptrue \fi% \expandafter\mk@scripts\fi} \def\tensor#1#2{\reset@sup#1\mk@scripts#2_/} \def\multiscripts#1#2#3{\reset@sup{}\mk@scripts#1_/#2% \reset@sup\mk@scripts#3_/} \makeatother % \slash \makeatletter \newbox\slashbox \setbox\slashbox=\hbox{$/$} \def\itex@pslash#1{\setbox\@tempboxa=\hbox{$#1$} \@tempdima=0.5\wd\slashbox \advance\@tempdima 0.5\wd\@tempboxa \copy\slashbox \kern-\@tempdima \box\@tempboxa} \def\slash{\protect\itex@pslash} \makeatother % math-mode versions of \rlap, etc % from Alexander Perlis, "A complement to \smash, \llap, and lap" % http://math.arizona.edu/~aprl/publications/mathclap/ \def\clap#1{\hbox to 0pt{\hss#1\hss}} \def\mathllap{\mathpalette\mathllapinternal} \def\mathrlap{\mathpalette\mathrlapinternal} \def\mathclap{\mathpalette\mathclapinternal} \def\mathllapinternal#1#2{\llap{$\mathsurround=0pt#1{#2}$}} \def\mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}} \def\mathclapinternal#1#2{\clap{$\mathsurround=0pt#1{#2}$}} % Renames \sqrt as \oldsqrt and redefine root to result in \sqrt[#1]{#2} \let\oldroot\root \def\root#1#2{\oldroot #1 \of{#2}} \renewcommand{\sqrt}[2][]{\oldroot #1 \of{#2}} % Manually declare the txfonts symbolsC font \DeclareSymbolFont{symbolsC}{U}{txsyc}{m}{n} \SetSymbolFont{symbolsC}{bold}{U}{txsyc}{bx}{n} \DeclareFontSubstitution{U}{txsyc}{m}{n} % Manually declare the stmaryrd font \DeclareSymbolFont{stmry}{U}{stmry}{m}{n} \SetSymbolFont{stmry}{bold}{U}{stmry}{b}{n} % Manually declare the MnSymbolE font \DeclareFontFamily{OMX}{MnSymbolE}{} \DeclareSymbolFont{mnomx}{OMX}{MnSymbolE}{m}{n} \SetSymbolFont{mnomx}{bold}{OMX}{MnSymbolE}{b}{n} \DeclareFontShape{OMX}{MnSymbolE}{m}{n}{ <-6> MnSymbolE5 <6-7> MnSymbolE6 <7-8> MnSymbolE7 <8-9> MnSymbolE8 <9-10> MnSymbolE9 <10-12> MnSymbolE10 <12-> MnSymbolE12}{} % Declare specific arrows from txfonts without loading the full package \makeatletter \def\re@DeclareMathSymbol#1#2#3#4{% \let#1=\undefined \DeclareMathSymbol{#1}{#2}{#3}{#4}} \re@DeclareMathSymbol{\neArrow}{\mathrel}{symbolsC}{116} \re@DeclareMathSymbol{\neArr}{\mathrel}{symbolsC}{116} \re@DeclareMathSymbol{\seArrow}{\mathrel}{symbolsC}{117} \re@DeclareMathSymbol{\seArr}{\mathrel}{symbolsC}{117} \re@DeclareMathSymbol{\nwArrow}{\mathrel}{symbolsC}{118} \re@DeclareMathSymbol{\nwArr}{\mathrel}{symbolsC}{118} \re@DeclareMathSymbol{\swArrow}{\mathrel}{symbolsC}{119} \re@DeclareMathSymbol{\swArr}{\mathrel}{symbolsC}{119} \re@DeclareMathSymbol{\nequiv}{\mathrel}{symbolsC}{46} \re@DeclareMathSymbol{\Perp}{\mathrel}{symbolsC}{121} \re@DeclareMathSymbol{\Vbar}{\mathrel}{symbolsC}{121} \re@DeclareMathSymbol{\sslash}{\mathrel}{stmry}{12} \re@DeclareMathSymbol{\bigsqcap}{\mathop}{stmry}{"64} \re@DeclareMathSymbol{\biginterleave}{\mathop}{stmry}{"6} \re@DeclareMathSymbol{\invamp}{\mathrel}{symbolsC}{77} \re@DeclareMathSymbol{\parr}{\mathrel}{symbolsC}{77} \makeatother % \llangle, \rrangle, \lmoustache and \rmoustache from MnSymbolE \makeatletter \def\Decl@Mn@Delim#1#2#3#4{% \if\relax\noexpand#1% \let#1\undefined \fi \DeclareMathDelimiter{#1}{#2}{#3}{#4}{#3}{#4}} \def\Decl@Mn@Open#1#2#3{\Decl@Mn@Delim{#1}{\mathopen}{#2}{#3}} \def\Decl@Mn@Close#1#2#3{\Decl@Mn@Delim{#1}{\mathclose}{#2}{#3}} \Decl@Mn@Open{\llangle}{mnomx}{'164} \Decl@Mn@Close{\rrangle}{mnomx}{'171} \Decl@Mn@Open{\lmoustache}{mnomx}{'245} \Decl@Mn@Close{\rmoustache}{mnomx}{'244} \makeatother % Widecheck \makeatletter \DeclareRobustCommand\widecheck[1]{{\mathpalette\@widecheck{#1}}} \def\@widecheck#1#2{% \setbox\z@\hbox{\m@th$#1#2$}% \setbox\tw@\hbox{\m@th$#1% \widehat{% \vrule\@width\z@\@height\ht\z@ \vrule\@height\z@\@width\wd\z@}$}% \dp\tw@-\ht\z@ \@tempdima\ht\z@ \advance\@tempdima2\ht\tw@ \divide\@tempdima\thr@@ \setbox\tw@\hbox{% \raise\@tempdima\hbox{\scalebox{1}[-1]{\lower\@tempdima\box \tw@}}}% {\ooalign{\box\tw@ \cr \box\z@}}} \makeatother % \mathraisebox{voffset}[height][depth]{something} \makeatletter \NewDocumentCommand\mathraisebox{moom}{% \IfNoValueTF{#2}{\def\@temp##1##2{\raisebox{#1}{$\m@th##1##2$}}}{% \IfNoValueTF{#3}{\def\@temp##1##2{\raisebox{#1}[#2]{$\m@th##1##2$}}% }{\def\@temp##1##2{\raisebox{#1}[#2][#3]{$\m@th##1##2$}}}}% \mathpalette\@temp{#4}} \makeatletter % udots (taken from yhmath) \makeatletter \def\udots{\mathinner{\mkern2mu\raise\p@\hbox{.} \mkern2mu\raise4\p@\hbox{.}\mkern1mu \raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern1mu}} \makeatother %% Fix array \newcommand{\itexarray}[1]{\begin{matrix}#1\end{matrix}} %% \itexnum is a noop \newcommand{\itexnum}[1]{#1} %% Renaming existing commands \newcommand{\underoverset}[3]{\underset{#1}{\overset{#2}{#3}}} \newcommand{\widevec}{\overrightarrow} \newcommand{\darr}{\downarrow} \newcommand{\nearr}{\nearrow} \newcommand{\nwarr}{\nwarrow} \newcommand{\searr}{\searrow} \newcommand{\swarr}{\swarrow} \newcommand{\curvearrowbotright}{\curvearrowright} \newcommand{\uparr}{\uparrow} \newcommand{\downuparrow}{\updownarrow} \newcommand{\duparr}{\updownarrow} \newcommand{\updarr}{\updownarrow} \newcommand{\gt}{>} \newcommand{\lt}{<} \newcommand{\map}{\mapsto} \newcommand{\embedsin}{\hookrightarrow} \newcommand{\Alpha}{A} \newcommand{\Beta}{B} \newcommand{\Zeta}{Z} \newcommand{\Eta}{H} \newcommand{\Iota}{I} \newcommand{\Kappa}{K} \newcommand{\Mu}{M} \newcommand{\Nu}{N} \newcommand{\Rho}{P} \newcommand{\Tau}{T} \newcommand{\Upsi}{\Upsilon} \newcommand{\omicron}{o} \newcommand{\lang}{\langle} \newcommand{\rang}{\rangle} \newcommand{\Union}{\bigcup} \newcommand{\Intersection}{\bigcap} \newcommand{\Oplus}{\bigoplus} \newcommand{\Otimes}{\bigotimes} \newcommand{\Wedge}{\bigwedge} \newcommand{\Vee}{\bigvee} \newcommand{\coproduct}{\coprod} \newcommand{\product}{\prod} \newcommand{\closure}{\overline} \newcommand{\integral}{\int} \newcommand{\doubleintegral}{\iint} \newcommand{\tripleintegral}{\iiint} \newcommand{\quadrupleintegral}{\iiiint} \newcommand{\conint}{\oint} \newcommand{\contourintegral}{\oint} \newcommand{\infinity}{\infty} \newcommand{\bottom}{\bot} \newcommand{\minusb}{\boxminus} \newcommand{\plusb}{\boxplus} \newcommand{\timesb}{\boxtimes} \newcommand{\intersection}{\cap} \newcommand{\union}{\cup} \newcommand{\Del}{\nabla} \newcommand{\odash}{\circleddash} \newcommand{\negspace}{\!} \newcommand{\widebar}{\overline} \newcommand{\textsize}{\normalsize} \renewcommand{\scriptsize}{\scriptstyle} \newcommand{\scriptscriptsize}{\scriptscriptstyle} \newcommand{\mathfr}{\mathfrak} \newcommand{\statusline}[2]{#2} \newcommand{\tooltip}[2]{#2} \newcommand{\toggle}[2]{#2} % Theorem Environments \theoremstyle{plain} \newtheorem{theorem}{Theorem} \newtheorem{lemma}{Lemma} \newtheorem{prop}{Proposition} \newtheorem{cor}{Corollary} \newtheorem*{utheorem}{Theorem} \newtheorem*{ulemma}{Lemma} \newtheorem*{uprop}{Proposition} \newtheorem*{ucor}{Corollary} \theoremstyle{definition} \newtheorem{defn}{Definition} \newtheorem{example}{Example} \newtheorem*{udefn}{Definition} \newtheorem*{uexample}{Example} \theoremstyle{remark} \newtheorem{remark}{Remark} \newtheorem{note}{Note} \newtheorem*{uremark}{Remark} \newtheorem*{unote}{Note} %------------------------------------------------------------------- \begin{document} %------------------------------------------------------------------- \section*{TwoVect} \hypertarget{context}{}\subsubsection*{{Context}}\label{context} \hypertarget{higher_algebra}{}\paragraph*{{Higher algebra}}\label{higher_algebra} [[!include higher algebra - contents]] \hypertarget{higher_category_theory}{}\paragraph*{{Higher category theory}}\label{higher_category_theory} [[!include higher category theory - contents]] \hypertarget{twovect_a_mathematica_package_for_2vector_spaces}{}\section*{{\emph{TwoVect}: a Mathematica Package for 2-Vector Spaces}}\label{twovect_a_mathematica_package_for_2vector_spaces} \noindent\hyperlink{what_is_twovect}{What is \emph{TwoVect}?}\dotfill \pageref*{what_is_twovect} \linebreak \noindent\hyperlink{how_can_i_get_it}{How can I get it?}\dotfill \pageref*{how_can_i_get_it} \linebreak \noindent\hyperlink{whats_it_for}{What's it for?}\dotfill \pageref*{whats_it_for} \linebreak \noindent\hyperlink{how_does_it_work}{How does it work?}\dotfill \pageref*{how_does_it_work} \linebreak \noindent\hyperlink{how_could_this_be_developed}{How could this be developed?}\dotfill \pageref*{how_could_this_be_developed} \linebreak \hypertarget{what_is_twovect}{}\subsection*{{What is \emph{TwoVect}?}}\label{what_is_twovect} \emph{TwoVect} is a [[Mathematica]] package for working with finite-dimensional [[complex numbers|complex]] \href{semisimple+category}{semisimple} [[2-vector spaces]]. It implements all the basic operations of a skeletal version of \textbf{2Vect}, the [[symmetric monoidal bicategory]] of finite-dimensional 2-vector spaces. 2-vector space are categories with many of the same properties as ordinary [[vector spaces]]. There are two main types of 2-vector spaces; the sort we are concerned with here are [[Kapranov-Voevodsky 2-vector spaces]], closely related to the \href{2-Hilbert+space}{2-Hilbert spaces} of \href{John+Baez}{Baez}. They have a range of applications in \href{quantum+group}{quantum algebra}, [[representation theory]], [[topological quantum field theory]] and [[quantum information]]. This package can help with calculations in these areas. \emph{TwoVect} was developed by \href{http://ctpweb.lns.mit.edu/personnel.html}{Dan Roberts} in 2011 as an MSc project, at the \href{http://www.cs.ox.ac.uk/activities/quantum/}{Quantum Group} in the \href{http://www.cs.ox.ac.uk/}{Department of Computer Science} of the \href{http://www.cs.ox.ac.uk/}{University of Oxford}, supervised by \href{http://www.cs.ox.ac.uk/people/jamie.vicary}{Jamie Vicary}. If you've got any questions, please get in touch. \hypertarget{how_can_i_get_it}{}\subsection*{{How can I get it?}}\label{how_can_i_get_it} Here are download links for the \href{http://www.cs.ox.ac.uk/people/jamie.vicary/twovect/twovect.zip}{packages} and the \href{http://www.cs.ox.ac.uk/people/jamie.vicary/twovect/guide.pdf}{user guide}. \hypertarget{whats_it_for}{}\subsection*{{What's it for?}}\label{whats_it_for} The mathematics of 2-vector spaces is often referred to as \emph{\href{higher+algebra}{higher linear algebra}}, and extends the ordinary [[linear algebra]] required for calculations involving traditional vector spaces. This higher linear algebra can be difficult to work with by hand: whereas ordinary linear algebra involves [[matrices]] of [[complex numbers]], higher linear algebra involves matrices of \emph{matrices} of complex numbers. And whereas ordinary matrices can be composed in two different ways, ordinary composition and [[tensor product]], the theory of 2-vector spaces involves three types of composition: tensor product, [[horizontal composition]] and [[vertical composition]]. While the underlying mathematics of 2-vector spaces is elegant and natural, the combinatorics of these basic operations can make calculations difficult to perform by hand. \emph{TwoVect} implements the basic operations of higher linear algebra, and can make calculations a lot easier. Here are some example uses for the package. \begin{itemize}% \item You've worked out the associator and unitors for a \href{semisimple+category}{semisimple} [[monoidal category]], and you want to check the pentagon and triangle equations. \item You've worked out other structure, like a \href{braided+monoidal+category}{braiding}, \href{symmetric+monoidal+category}{symmetry} or \href{ribbon+category}{ribbon} structure, and you want to check the defining equations are satisfied. \item You want to use Mathematica's built-in solvers to help find these structures. \item You want to calculate the value of a [[string diagram]] in a semisimple monoidal category. \item You want to check algebraic properties of a semisimple monoidal category. Does it have \href{dualizable+object}{duals for objects}? Is it \href{modular+tensor+category}{modular}? \item You want to check the axioms are satisfied for an \href{monoid#inamonoidalcategory}{internal monoid object} in a semisimple monoidal category, or you want Mathematica to help you find such an object. \item You have chosen higher linear maps to associate to the generators of some \href{higher+algebra}{higher algebraic structure}, and want to check the relations are satisfied. \item You want to verify correctness of a quantum protocol, described in terms of the \href{http://arxiv.org/abs/1207.4563}{2-categorical approach to quantum information}. \end{itemize} \hypertarget{how_does_it_work}{}\subsection*{{How does it work?}}\label{how_does_it_work} The basic package \emph{TwoVect} implements a completely skeletal version of \textbf{2Vect}, the symmetric monoidal bicategory of finite-dimensional semisimple complex 2-vector spaces, in the following way: \begin{itemize}% \item \textbf{2-vector spaces} are represented by natural numbers. \item \textbf{\href{linear+functor}{Linear functors}} between 2-vector spaces are represented by matrices of natural numbers. \item \textbf{\href{natural+transformation}{Natural transformations}} between linear functors are represented by matrices of matrices of complex numbers. \end{itemize} The three primitive composition operations of \textbf{2Vect} are implemented: \begin{itemize}% \item \textbf{Tensor product} $\odot$ is a binary operation for which the arguments can be 0-cells, 1-cells or 2-cells. \item \textbf{Horizontal composition} $\circ$ is a binary operation, for which the arguments must 1-cells or 2-cells. \item \textbf{Vertical composition} $\cdot$ is a binary operation for which the arguments must be 2-cells. \end{itemize} The nonidentity invertible structural 2-cells are also implemented, which account for weakness of horizontal composition and tensor product: \begin{itemize}% \item The \textbf{interchanger}: $\tau_{f,g,h,i} : (f \circ g) \odot (h \circ i) \to (f \odot h) \circ (g \odot i)$ \item The \textbf{compositer}: $\omega_{f,g,h} : f \circ (g \circ h) \to (f \circ g) \circ h$ \item The \textbf{symmetrizer}: $\sigma_{f,g}: \mathrm{swap} \circ (f \odot g) \to (g \odot f) \circ \mathrm{swap}$ \end{itemize} There are also two add-on packages: \begin{itemize}% \item \emph{MTCategories} provides implementations of the equations for symmetric or braided semisimple monoidal categories. \item \emph{MTCategory} provides a simplified syntax for working `inside' a particular choice of monoidal category. Once this is defined, the value of string diagrams can be computed by typing them in using ordinary string diagram syntax. \end{itemize} \hypertarget{how_could_this_be_developed}{}\subsection*{{How could this be developed?}}\label{how_could_this_be_developed} There are several exciting ways this could evolve. If you want to help out, get in touch! Lots of things on this list would involve original research, and could form a part of a Masters or PhD dissertation. \begin{itemize}% \item A graphical front end would be a powerful addition. Compare to \href{https://sites.google.com/site/quantomatic/}{Quantomatic}, a GUI for \emph{ordinary} linear algebra. \item Can \emph{TwoVect} be connected in a useful way to \href{Coq}{computational methods in higher type theory}? \item It should be possible to write code that inserts the structural isomorphisms $\tau$, $\omega$ and $\sigma$ \emph{automatically} where necessary. This would make the package enormously more powerful for certain applications. \item Many more things could be implemented - a test for modularity of a braided monoidal category, quantum doubles, Hopf algebra axioms, module category axioms \ldots{} \end{itemize} There are also some more mundane issues that need dealing with. \begin{itemize}% \item The basic functions that perform 2-cell tensor product, horizontal composition and vertical composition haven't been optimized, and run slowly for large inputs. There should be a lot of scope for improving the code, and perhaps also for compilation, which Mathematica supports. \item There are some other strange issues around speed; different ways to tell Mathematica to compute the same thing can give rise to very different calculation times. \item We're not sure how to test systematically whether everything has been implemented correctly. \item There is probably some scope to restructure the packages and make them easier to use. \end{itemize} category: software \end{document}