We introduce a foundational sheaf theoretical scheme for the comprehension of quantum event structures, in terms of localization systems consisting of Boolean coordinatization coverings induced by measurement. The scheme is based on the existence of a categorical adjunction between presheaves of Boolean event algebras and Quantum event algebras. On the basis of this adjoint correspondence we prove the existence of an object of truth values in the category of quantum logics, characterized as subobject classifier. This classifying object plays the equivalent role that the two-valued Boolean truth values object plays in classical event structures. We construct the object of quantum truth values explicitly and argue that it constitutes the appropriate choice for the valuation of propositions describing the behavior of quantum systems.
quant-ph0402174.tex


\documentclass[a4paper,12pt]{article}


% DIAGRAM MACROS (version 3.1)

\catcode`\@=11

%%%%% FIXING SOME PARAMETERS

%%% Fixing the printerresolution
%%% unit = 1 dpi
\newcount\printerresolution
\global\printerresolution=300

%%% Fixing the length of a segment in an arrowhead
%%% unit = 0.01pt
\newcount\headsize
\global\headsize=450

%%% Fixing the thickness of an arrowhead
%%% value = 1/5 of the font size
\font\dotfont = lcircle10 at 3pt

%%% Fixing the distance between the two heads of an epimorphism
%%% unit = 0.01pt
\newcount\epihead
\global\epihead=200

%%% Fixing the default scaling factor for diagrams
\newcount\defaultscale
\def\setdefaultscale#1{\global\defaultscale=#1}
\setdefaultscale{100}

\newcount\actualtextarrowspace
\newcount\actualtextarrowlength

% \computetextparameters computes the parameters
% required to design a text arrow
\newcommand{\computetextparameters}%
{\global\actualtextarrowspace=\textarrowlength%
\global\advance\actualtextarrowspace by 3%
\global\actualtextarrowlength=\textarrowlength%
\global\multiply\actualtextarrowlength by 100}

%%% Fixing the default length of text arrows
\newcount\textarrowlength
\def\settextarrowlength#1{\global\textarrowlength=#1%
\computetextparameters} \settextarrowlength{20}

\newcount\actualdisplayarrowspace
\newcount\actualdisplayarrowlength

% \computedisplayparameters computes the parameters
% required to design a displayed arrow
\newcommand{\computedisplayparameters}%
{\global\actualdisplayarrowspace=\displayarrowlength%
\global\advance\actualdisplayarrowspace by 3%
\global\actualdisplayarrowlength=\displayarrowlength%
\global\multiply\actualdisplayarrowlength by 100}

%%% Fixing the default length of displayed arrows
\newcount\displayarrowlength
\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
\computedisplayparameters} \setdisplayarrowlength{30}


% ERROR MESSAGES

% Checking the next token without gobbling blanks
\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
\futurelet\@tempc\@ifntok}
\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
\@tempd}

%  \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
%                            halt with error help message HLP.
\def\@diagramerror#1#2{%
\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
\typeout{Diagram error. \space See User's guide for
explanation.^^J
 \space\@spaces\@spaces\@spaces Type \space H <return> \space for
 immediate help.}\errmessage{#1}}

\newif\ifdiagram

% error test and message for text arrows
\def\testtextmode{%
\ifdiagram\@diagramerror{Text arrows are not allowed in
diagrams}{Here you should use east or west diagram arrows, not
forward or backward text arrows. Try proceeding now, typeset could
succeed but with unpredictable output.}
\else\ifmmode\relax\else%
\@diagramerror{Missing \string$}{Text arrows should be introduced
in math mode. Try proceeding now, typeset could succeed but output
could not be what you expected.}\fi\fi}

% error test and message for diagram arrows
\def\testdiagrammode{\ifdiagram\relax\else
\@diagramerror{Diagram arrows are not allowed in formulas}{Here
you should use forward or backward text arrows, not diagram
arrows. Proceeding could work with unpredictable output, but
overflow arithmetic could also occur.}\fi}

% error test and message for diagrams in math mode
\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
allowed in math mode.}{You should leave math mode before
introducing your diagram. All items in the diagram will
automatically be processed in math
mode.}\else\relax\fi\global\diagramtrue}

\global\diagramfalse

%%%%% DESIGING THE ARROW HEADS

%%% Customizing the unitlength for the sake of precision
\setlength{\unitlength}{0.01pt}

%%% Printing one dot at the required scale
\def\DOT{{\dotfont q}}

%%% Computing the distance between two dots in an arrowhead
\newcount\basicstep
\basicstep=7227 \global\divide\basicstep by \printerresolution

%%% Computing the number of dots in an arrowhead
\newcount\numberofsteps
\numberofsteps=\headsize \global\divide\numberofsteps by
\basicstep

%%% Producing an arrow head
\newcommand{\makehead}[3]{%
\begin{picture}(0,0)%
\multiput(0,0)(#1,#2){#3}{\DOT}%
\multiput(0,0)(-#2,#1){#3}{\DOT}%
\end{picture}}

%%% Creating bitmap images of the arrowheads
\newcount\xstep
\newcount\ystep

\newsavebox{\northhead}
\savebox{\northhead}{%
\xstep=-\basicstep%
\multiply\xstep by 7071%
\divide\xstep by 10000%
\ystep=\xstep%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nhead}{\usebox{\northhead}}

\newsavebox{\easthead}
\savebox{\easthead}{%
\xstep=-\basicstep%
\multiply\xstep by 7071%
\divide\xstep by 10000%
\ystep=-\xstep%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\ehead}{\usebox{\easthead}}

\newsavebox{\southhead}
\savebox{\southhead}{%
\xstep=\basicstep%
\multiply\xstep by 7071%
\divide\xstep by 10000%
\ystep=\xstep%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\shead}{\usebox{\southhead}}

\newsavebox{\westhead}
\savebox{\westhead}{%
\xstep=\basicstep%
\multiply\xstep by 7071%
\divide\xstep by 10000%
\ystep=-\xstep%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\whead}{\usebox{\westhead}}

\newsavebox{\northwesthead}
\savebox{\northwesthead}{%
\makehead{0}{-\basicstep}{\numberofsteps}}
\newcommand{\nwhead}{\usebox{\northwesthead}}

\newsavebox{\northeasthead}
\savebox{\northeasthead}{%
\makehead{-\basicstep}{0}{\numberofsteps}}
\newcommand{\nehead}{\usebox{\northeasthead}}

\newsavebox{\southwesthead}
\savebox{\southwesthead}{%
\makehead{\basicstep}{0}{\numberofsteps}}
\newcommand{\swhead}{\usebox{\southwesthead}}

\newsavebox{\southeasthead}
\savebox{\southeasthead}{%
\makehead{0}{\basicstep}{\numberofsteps}}
\newcommand{\sehead}{\usebox{\southeasthead}}

\newsavebox{\eastnortheasthead}
\savebox{\eastnortheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 9486%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by -3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\enehead}{\usebox{\eastnortheasthead}}

\newsavebox{\northnortheasthead}
\savebox{\northnortheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 9486%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by 3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nnehead}{\usebox{\northnortheasthead}}

\newsavebox{\southsouthwesthead}
\savebox{\southsouthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 9486%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by 3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\sswhead}{\usebox{\southsouthwesthead}}

\newsavebox{\westsouthwesthead}
\savebox{\westsouthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 9486%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by -3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\wswhead}{\usebox{\westsouthwesthead}}

\newsavebox{\westnorthwesthead}
\savebox{\westnorthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 3162%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by -3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\wnwhead}{\usebox{\westnorthwesthead}}

\newsavebox{\eastsoutheasthead}
\savebox{\eastsoutheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 3162%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by -3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\esehead}{\usebox{\eastsoutheasthead}}

\newsavebox{\northnorthwesthead}
\savebox{\northnorthwesthead}{%
\xstep=-\basicstep%
\multiply\xstep by 3162%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by 3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nnwhead}{\usebox{\northnorthwesthead}}

\newsavebox{\southsoutheasthead}
\savebox{\southsoutheasthead}{%
\xstep=\basicstep%
\multiply\xstep by 3162%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by 3%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\ssehead}{\usebox{\southsoutheasthead}}

\newsavebox{\easteastnortheasthead}
\savebox{\easteastnortheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 8944%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by -2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\eenehead}{\usebox{\easteastnortheasthead}}

\newsavebox{\northnorthnortheasthead}
\savebox{\northnorthnortheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 8944%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by 2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nnnehead}{\usebox{\northnorthnortheasthead}}

\newsavebox{\southsouthsouthwesthead}
\savebox{\southsouthsouthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 8944%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by 2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\ssswhead}{\usebox{\southsouthsouthwesthead}}

\newsavebox{\westwestsouthwesthead}
\savebox{\westwestsouthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 8944%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by -2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\wwswhead}{\usebox{\westwestsouthwesthead}}

\newsavebox{\westwestnorthwesthead}
\savebox{\westwestnorthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 4472%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by -2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\wwnwhead}{\usebox{\westwestnorthwesthead}}

\newsavebox{\easteastsoutheasthead}
\savebox{\easteastsoutheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 4472%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by -2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\eesehead}{\usebox{\easteastsoutheasthead}}

\newsavebox{\northnorthnorthwesthead}
\savebox{\northnorthnorthwesthead}{%
\xstep=-\basicstep%
\multiply\xstep by 4472%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by 2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nnnwhead}{\usebox{\northnorthnorthwesthead}}

\newsavebox{\southsouthsoutheasthead}
\savebox{\southsouthsoutheasthead}{%
\xstep=\basicstep%
\multiply\xstep by 4472%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by 2%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\sssehead}{\usebox{\southsouthsoutheasthead}}

\newsavebox{\northeasteastnortheasthead}
\savebox{\northeasteastnortheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 9806%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by -5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\neenehead}{\usebox{\northeasteastnortheasthead}}

\newsavebox{\northeastnorthnortheasthead}
\savebox{\northeastnorthnortheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 9806%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by 5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nennehead}{\usebox{\northeastnorthnortheasthead}}

\newsavebox{\southwestsouthsouthwesthead}
\savebox{\southwestsouthsouthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 9806%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by 5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\swsswhead}{\usebox{\southwestsouthsouthwesthead}}

\newsavebox{\southwestwestsouthwesthead}
\savebox{\southwestwestsouthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 9806%
\divide\xstep by 10000%
\ystep=\xstep%
\divide\ystep by -5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\swwswhead}{\usebox{\southwestwestsouthwesthead}}

\newsavebox{\northwestwestnorthwesthead}
\savebox{\northwestwestnorthwesthead}{%
\xstep=\basicstep%
\multiply\xstep by 1961%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by -5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nwwnwhead}{\usebox{\northwestwestnorthwesthead}}

\newsavebox{\southeasteastsoutheasthead}
\savebox{\southeasteastsoutheasthead}{%
\xstep=-\basicstep%
\multiply\xstep by 1961%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by -5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\seesehead}{\usebox{\southeasteastsoutheasthead}}

\newsavebox{\northwestnorthnorthwesthead}
\savebox{\northwestnorthnorthwesthead}{%
\xstep=-\basicstep%
\multiply\xstep by 1961%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by 5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\nwnnwhead}{\usebox{\northwestnorthnorthwesthead}}

\newsavebox{\southeastsouthsoutheasthead}
\savebox{\southeastsouthsoutheasthead}{%
\xstep=\basicstep%
\multiply\xstep by 1961%
\divide\xstep by 10000%
\ystep=\xstep%
\multiply\ystep by 5%
\makehead{\xstep}{\ystep}{\numberofsteps}}
\newcommand{\sessehead}{\usebox{\southeastsouthsoutheasthead}}

%%% Restoring the standard unitlength
\setlength{\unitlength}{1pt}


% MACROS FOR MARKED ARROWS

\newsavebox{\isomorphismmark}
\newcommand{\isomark}[1]{\savebox{\isomorphismmark}{#1}}
\isomark{$\cong$}
\newcommand{\isosign}{\usebox{\isomorphismmark}}

\newif\ifuserdist
\newsavebox{\distributormark}
\newcommand{\distmark}[1]{\ifx#1\distcircle\userdistfalse\else%
\userdisttrue\savebox{\distributormark}{#1}\fi}
\newsavebox{\distributorcircle}
\savebox{\distributorcircle}{\begin{picture}(0,0)%
\put(0,0){\circle{4}}\end{picture}}
\newcommand{\distsign}{\ifuserdist\usebox{\distributormark}\else%
\usebox{\distributorcircle}\fi}
\userdistfalse



% MACROS FOR ADJUSTING THE LENGTH OF MONOMORPHISMS AND EPIMORPHISMS

\newcount\monolength
\newcount\epilength
\newcount\bimolength
\newcount\secondmonolength
\newcount\secondepilength

\newcount\monotail%
\global\monotail=\headsize%
\global\multiply\monotail by 7070%
\global\divide\monotail by 10000%

\newcount\truemonotail%
\newcount\trueepihead%

\def\truetail{\truemonotail=\monotail%
\multiply\truemonotail by 100%
\divide\truemonotail by \SCALE}

\def\truehead{\trueepihead=\epihead%
\multiply\trueepihead by 100%
\divide\trueepihead by \SCALE}

\newcount\Monotail%
\global\Monotail=\headsize%
\global\divide\Monotail by 2%

\newcount\Epihead%
\global\Epihead=\epihead%
\global\multiply\Epihead by 7070%
\global\divide\Epihead by 10000%

\newcount\Truemonotail%
\newcount\Trueepihead%

\def\Truetail{\Truemonotail=\Monotail%
\multiply\Truemonotail by 100%
\divide\Truemonotail by \SCALE}%

\def\Truehead{\Trueepihead=\Epihead%
\multiply\Trueepihead by 100%
\divide\Trueepihead by \SCALE}

\newcount\MonoTail%
\global\MonoTail=\headsize%
\global\multiply\MonoTail by 6324%
\global\divide\MonoTail by 10000%

\newcount\EpiHead%
\global\EpiHead=\epihead%
\global\multiply\EpiHead by 8944%
\global\divide\EpiHead by 10000%

\newcount\TrueMonoTail%
\newcount\TrueEpiHead%

\def\TrueTail{\TrueMonoTail=\MonoTail%
\multiply\TrueMonoTail by 100%
\divide\TrueMonoTail by \SCALE}%

\def\TrueHead{\TrueEpiHead=\EpiHead%
\multiply\TrueEpiHead by 100%
\divide\TrueEpiHead by \SCALE}

\newcount\monotaiL%
\global\monotaiL=\headsize%
\global\multiply\monotaiL by 3162%
\global\divide\monotaiL by 10000%

\newcount\epiheaD%
\global\epiheaD=\epihead%
\global\multiply\epiheaD by 4472%
\global\divide\epiheaD by 10000%

\newcount\truemonotaiL%
\newcount\trueepiheaD%

\def\truetaiL{\truemonotaiL=\monotaiL%
\multiply\truemonotaiL by 100%
\divide\truemonotaiL by \SCALE}%

\def\trueheaD{\trueepiheaD=\epiheaD%
\multiply\trueepiheaD by 100%
\divide\trueepiheaD by \SCALE}


% INITIALIZATION

\newcount\SCALE%

\newcount\NUMBER%

\newcount\LINE%

\newcount\COLUMN%

\newcount\WIDTH%

\newcount\SOURCE%

\newcount\ARROW%

\newcount\TARGET%

\newcount\ARROWLENGTH%

\newcount\NUMBEROFDOTS%

\newcounter{x}%

\newcounter{y}%

\newcounter{z}%

\newcounter{horizontal}%

\newcounter{vertical}%

\newskip\itemlength%

\newskip\firstitem%

\newskip\seconditem%

\newcommand{\printarrow}{}%

\newcount\X%

\newcount\Y%

\newcount\Z%


% MACROS FOR DESIGNING DIAGRAMS


% \truex{n} divides n x 100 by the scaling factor and puts the result
% in counter x
\newcommand{\truex}[1]{%
\NUMBER=#1%
\multiply\NUMBER by 100%
\divide\NUMBER by \SCALE%
\setcounter{x}{\NUMBER}}%

% \truey{n} divides n x 100 by the scaling factor and puts the result
% in counter y
\newcommand{\truey}[1]{%
\NUMBER=#1%
\multiply\NUMBER by 100%
\divide\NUMBER by \SCALE%
\setcounter{y}{\NUMBER}}%

% \truez{n} divides n x 100 by the scaling factor and puts the result
% in counter z
\newcommand{\truez}[1]{%
\NUMBER=#1%
\multiply\NUMBER by 100%
\divide\NUMBER by \SCALE%
\setcounter{z}{\NUMBER}}%


% \changecounters computes the values of the various parameters required
% to design an arrow with adjusted length.
\newcommand{\changecounters}[1]{%
\SOURCE=\ARROW%
\ARROW=\TARGET%
\settowidth{\itemlength}{#1}%
\ifdim \itemlength > 2800\unitlength%
\addtolength{\itemlength}{-2800\unitlength}%
\TARGET=\itemlength%
\divide\TARGET by 1310%
\multiply\TARGET by 100%
\divide\TARGET by \SCALE%
\else%
\TARGET=0%
\fi%
\ARROWLENGTH=5000%
\advance\ARROWLENGTH by -\SOURCE%
\advance\ARROWLENGTH by -\TARGET%
\divide\ARROWLENGTH by 100%
\advance\SOURCE by -\TARGET}%

% \initialize initializes the counters required to produce the diagram
% and defines the formal dimensions of the diagram to be (0,0).
\newcommand{\initialize}[1]{%
\LINE=0%
\COLUMN=0%
\WIDTH=0%
\ARROW=0%
\TARGET=0%
\changecounters{#1}%
\renewcommand{\printarrow}{#1}%
\begin{center}%
\vspace{2pt}%
\begin{picture}(0,0)}%

% \DIAGV{n} starts the construction of a diagram scaled by a factor
% n percent, computes the scaled unit length and the unscaling factor.
\newcommand{\DIAGV}[2]{%
\checkmode%
\SCALE=#1%
\setlength{\unitlength}{655sp}%
\multiply\unitlength by \SCALE%
\divide\unitlength by 100%
\initialize{\mbox{$#2$}}}%

% \n introduces the next item of the diagram, computes its parameters
% and prints the previous item.
\newcommand{\n}[1]{%
\changecounters{\mbox{$#1$}}%
\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
\thinlines%
\renewcommand{\printarrow}{\mbox{$#1$}}%
\advance\COLUMN by 4000}%

% \nn prints the  last item of a line and starts a new line.
\newcommand{\nn}[1]{%
\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
\thinlines%
\ifnum \WIDTH < \COLUMN%
\WIDTH=\COLUMN%
\else%
\fi%
\advance\LINE by -4000%
\COLUMN=0%
\ARROW=0%
\TARGET=0%
\changecounters{\mbox{$#1$}}%
\renewcommand{\printarrow}{\mbox{$#1$}}}%

% \conclude prints the last item of the diagram and sets the
% dimensions of the diagram;
\newcommand{\conclude}{%
\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
\thinlines%
\ifnum \WIDTH < \COLUMN%
\WIDTH=\COLUMN%
\else%
\fi%
\setcounter{horizontal}{\WIDTH}%
\setcounter{vertical}{-\LINE}%
\end{picture}}%

% \diag prints the last item of the diagram and takes care of the spacing
\newcommand{\diag}{%
\conclude%
\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
\hspace*{\value{horizontal}\unitlength}%
\vspace{12pt}%
\end{center}%
\setlength{\unitlength}{1pt}%
\global\diagramfalse}%

% \diagv{t}{l}{b} prints the last item of the diagram and
% adds a t points extra space at the top of the diagram
% adds a l points extra space at the left of the diagram
% adds a b points extra space at the bottom of the diagram
\newcommand{\diagv}[3]{%
\conclude%
\NUMBER=#1%
\rule{0pt}{\NUMBER pt}%
\hspace*{-#2pt}%
\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
\hspace*{\value{horizontal}\unitlength}%6
\NUMBER=#3%
\advance\NUMBER by 12%
\vspace*{\NUMBER pt}%
\end{center}%
\setlength{\unitlength}{1pt}%
\global\diagramfalse}%

% \movename(n,m){f} moves the name f of the arrow n points right
% and m points up.
\def\movename(#1,#2)#3{%
\hspace{#1pt}%
\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
\hspace{-#1pt}}%

% \movearrow(n,m){\...} moves arrow \... n points right
% and m points up.
\def\movearrow(#1,#2)#3{%
\makebox[0pt]{%
\hspace{#1pt}\hspace{#1pt}%
\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%

% \movevertex(n,m){A} moves vertex A n points right and m points up
\def\movevertex(#1,#2)#3{%
\mbox{\hspace{#1pt}%
\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
\hspace{-#1pt}}}%

% \movevertexleft{XXX} moves vertex XXX left
\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}

% \movevertexright{XXX} moves vertex XXX right
\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}

% \crosslength{P}{Q} computes the formal dimensions of the
% superposition of pictures P and Q
\newcommand{\crosslength}[2]{%
\settowidth{\firstitem}{#1}%
\settowidth{\seconditem}{#2}%
\ifdim\firstitem < \seconditem%
\itemlength=\seconditem%
\else%
\itemlength=\firstitem%
\fi%
\divide\itemlength by 2%
\hspace{\itemlength}}%

% \cross{P}{Q} superposes pictures P and Q
\newcommand{\cross}[2]{%
\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0){$#1$}}%
\thinlines%
\put(0,0){\makebox(0,0){$#2$}}%
\thinlines%
\end{picture}%
\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%

% \bold prints the next arrow in bold-face type
\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
\string\bold does not apply to text arrows; I am ignoring it.}\fi}

% \unbold switches back to normal arrows
\newcommand{\unbold}{\thinlines}

% SHORTENING THE TYPING OF DIAGRAMS

\def\basicDIAG#1�{\DIAGV{\defaultscale}{#1}\@ifnexttok�{\finishline}{\basicn}}
\def\basicDIAGV[#1]#2�{\DIAGV{#1}{#2}\@ifnexttok�{\finishline}{\basicn}}
\def\basicn#1�{\n{#1}\@ifnexttok�{\finishline}{\basicn}}
\def\basicnn#1�{\nn{#1}\@ifnexttok�{\finishline}{\basicn}}
\def\finishline#1{\@ifnextchar\end{\diag}%
{\@ifnextchar\spacing{\relax}{\basicnn}}}
\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}

\newif\ifcaption%

\newenvironment{diagram}{%
\iffloatdiag\relax\else
\global\def\diagramcaption##1{%
\global\captiontrue%
\global\def\@diagcaption{##1}}%
\global\def\@diagcaption{}\fi%
\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
{\iffloatdiag\relax\else%
\ifcaption
\begin{center}\mbox{}\@diagcaption\end{center}%
\else\relax\fi\fi\global\captionfalse}

\global\captionfalse


% MACROS FOR FLOATING DIAGRAMS

\gdef\@diaglabel{Diagram}
\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}

\newcounter{Diagram}
\setcounter{Diagram}{0}
\def\theDiagram{\@arabic\c@Diagram}
\def\fps@Diagram{tbp}
\def\ftype@Diagram{1}
\def\ext@Diagram{lof}
\def\fnum@Diagram{\@diaglabel\ \theDiagram}
\def\Diagram{\@float{Diagram}}
\let\endDiagram\end@float
\@namedef{Diagram*}{\@dblfloat{Diagram}}
\@namedef{endDiagram*}{\end@dblfloat}

\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}

\newif\iffloatdiag

\newenvironment{floatingdiagram}{%
\global\floatdiagtrue%
\long\def\@makecaption##1##2{
 \vskip 0pt
 \setbox\@tempboxa\hbox{##1##2}
 \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
to\hsize{\hfil\box\@tempboxa\hfil}
 \fi}%
\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
\global\def\@diagcaption{}%
\begin{Diagram}[tbp]\begin{diagram}}%
{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
\global\floatdiagfalse}

\global\floatdiagfalse


% MACROS FOR DRAWING TEXT PICTURES

% moving a name up
\newcommand{\TUP}[1]{\raisebox{0pt}[0pt][3pt]{}#1}

% moving a name down
\newcommand{\TDOWN}[1]{\raisebox{0pt}[6pt][0pt]{}#1}

% \tlowername{P}{f} puts the name f under the picture P
\newcommand{\tlowername}[2]%
{$\stackrel{\makebox[1pt]{#1}}%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
\end{picture}}$}%

% \tcase{P} draws the picture P with length \textarrowlength pt.
\newcommand{\tcase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Tcase{P}{f} draws the picture P with upper name f
% and length \textarrowlength pt.
\newcommand{\Tcase}[2]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
\setlength{\unitlength}{1pt}}%

% \tbicase{P} draws the bi-picture P
% with length \textarrowlength pt.
\newcommand{\tbicase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
% and length \textarrowlength pt.
\newcommand{\Tbicase}[3]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{-1pt}%
{$\stackrel{\scriptstyle #2}%
{\mbox{\tlowername{#1{\actualtextarrowlength}}%
{\scriptstyle #3}}}$}}%
\setlength{\unitlength}{1pt}}%

% MACROS FOR DRAWING DISPLAYED PICTURES

% moving a name up
\newcommand{\DUP}[1]{\raisebox{0pt}[0pt][4pt]{}#1}

% moving a name down
\newcommand{\DDOWN}[1]{\raisebox{0pt}[9pt][0pt]{}#1}

% \dlowername{P}{f} puts the name f under the picture P
\newcommand{\dlowername}[2]%
{$\stackrel{\makebox[1pt]{#1}}%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
\end{picture}}$}%

% \dcase{P} draws the picture P with length \displayarrowlength pt.
\newcommand{\dcase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Dcase{P}{f} draws the picture P with upper name f
% and length \displayarrowlength pt.
\newcommand{\Dcase}[2]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
\setlength{\unitlength}{1pt}}%

% \dbicase{P} draws the bi-picture P
% with length \displayarrowlength pt.
\newcommand{\dbicase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
% and length \displayarrowlength pt.
\newcommand{\Dbicase}[3]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{-1pt}%
{$\stackrel{\textstyle #2}%
{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
{\textstyle #3}}}$}}%
\setlength{\unitlength}{1pt}}%


% IN-TEXT ARROWS

% \AR{n} draws an arrow of length n units
\newcommand{\AR}[1]%
{\begin{picture}(#1,0)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\end{picture}}%

% \DIST{n} draws a distributor of length n units
\newcommand{\DIST}[1]%
{\begin{picture}(#1,0)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{400}}%
\end{picture}}%

% \DOTAR{n} draws a dotted  arrow of length n units
\newcommand{\DOTAR}[1]%
{\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by 300%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(#1,0)%
\multiput(0,0)(300,0){\NUMBEROFDOTS}{\circle*{100}}%
\put(#1,0){\ehead}%
\end{picture}}%

% \MONO{n} draws a monomorphism of length n units
\newcommand{\MONO}[1]%
{\monolength=#1%
\advance\monolength by -\monotail%
\begin{picture}(#1,0)%
\put(\monotail,0){\line(1,0){\monolength}}%
\put(#1,0){\ehead}%
\put(\monotail,0){\ehead}%
\end{picture}}%

% \EPI{n} draws an epimorphism of length n units
\newcommand{\EPI}[1]%
{\epilength=#1%
\advance\epilength by -\epihead%
\begin{picture}(#1,0)(-#1,0)%
\put(-#1,0){\line(1,0){\epilength}}%
\put(-\epihead,0){\ehead}%
\put(0,0){\ehead}%
\end{picture}}%

% \BIMO{n} draws a bimorphism of length n units
\newcommand{\BIMO}[1]%
{\monolength=#1%
\advance\monolength by -\monotail%
\epilength=\monolength%
\advance\epilength by -\epihead%
\begin{picture}(#1,0)(-#1,0)%
\put(-\monolength,0){\line(1,0){\epilength}}%
\put(-\monolength,0){\ehead}%
\put(-\epihead,0){\ehead}%
\put(0,0){\ehead}%
\end{picture}}%

% \BIAR{n} draws a pair of arrows of length n units
\newcommand{\BIAR}[1]%
{\begin{picture}(#1,700)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(0,700){\line(1,0){#1}}%
\put(#1,700){\ehead}%
\end{picture}}%

% \BIDIST{n} draws a pair of distributors of length n units
\newcommand{\BIDIST}[1]%
{\begin{picture}(#1,700)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(0,700){\line(1,0){#1}}%
\put(#1,700){\ehead}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{400}}%
\put(\NUMBER,700){\circle{400}}%
\end{picture}}%

% \EQL{n} draws an equality of length n units
\newcommand{\EQL}[1]%
{\begin{picture}(#1,0)%
\put(0,100){\line(1,0){#1}}%
\put(0,-100){\line(1,0){#1}}%
\end{picture}}%

% \ADJAR{n} draws a pair of adjoint arrows of length n units
\newcommand{\ADJAR}[1]%
{\begin{picture}(#1,700)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(#1,700){\line(-1,0){#1}}%
\put(0,700){\whead}
\end{picture}}%

% \ADJDIST{n} draws a pair of adjoint distibutors of length n units
\newcommand{\ADJDIST}[1]%
{\begin{picture}(#1,700)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(#1,700){\line(-1,0){#1}}%
\put(0,700){\whead}
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{400}}%
\put(\NUMBER,700){\circle{400}}%
\end{picture}}%


% All the following commands produce arrows with length 20pt
% and scriptstyle names in math mode but arrows with length
% \displayarrowlength pt and textstyle names in display math mode.

% arrow
\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%

% arrow with upper name [1]
\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%

% distributor
\newcommand{\dist}{\ifinner\tcase{\DIST}\else\dcase{\DIST}\fi}%

% distributor with upper name [1]
\newcommand{\Dist}[1]{\ifinner\Tcase{\DIST}{\TUP{#1}}%
\else\Dcase{\DIST}{\TUP{#1}}\fi}%

% dotted arrow
\newcommand{\dotar}{\ifinner\tcase{\DOTAR}\else\dcase{\DOTAR}\fi}%

% dotted arrow with upper name [1]
\newcommand{\Dotar}[1]{\ifinner\Tcase{\DOTAR}{#1}%
\else\Dcase{\DOTAR}{#1}\fi}%

% monomorphism
\newcommand{\mono}{\ifinner\tcase{\MONO}\else\dcase{\MONO}\fi}%

% monomorphism with upper name [1]
\newcommand{\Mono}[1]{\ifinner\Tcase{\MONO}{#1}\else\Dcase{\MONO}{#1}\fi}%

% epimorphism
\newcommand{\epi}{\ifinner\tcase{\EPI}\else\dcase{\EPI}\fi}%

% epimorphism with upper name [1]
\newcommand{\Epi}[1]{\ifinner\Tcase{\EPI}{#1}\else\Dcase{\EPI}{#1}\fi}%

% bimorphism
\newcommand{\bimo}{\ifinner\tcase{\BIMO}\else\dcase{\BIMO}\fi}%

% bimorphism with upper name [1]
\newcommand{\Bimo}[1]{\ifinner\Tcase{\BIMO}{#1}%
\else\Dcase{\BIMO}{#1}\fi}%

% isomorphism
\newcommand{\iso}{\ifinner\Tcase{\AR}{\cong}\else\Dcase{\AR}{\cong}\fi}%

% isomorphism with upper name [1]
\newcommand{\Iso}[1]{\ifinner\Tcase{\AR}{\cong{#1}}%
\else\Dcase{\AR}{\cong{#1}}\fi}%

% pair of arrows
\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%

% pair of arrows with names [1],[2]
\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
\else\Dbicase{\BIAR}{#1}{#2}\fi}%

% pair of distributors
\newcommand{\bidist}{\ifinner\tbicase{\BIDIST}\else\dbicase{\BIDIST}\fi}%

% pair of distributors with names [1],[2]
\newcommand{\Bidist}[2]{\ifinner\Tbicase{\BIDIST}{\TUP{#1}}{\TDOWN{#2}}%
\else\Dbicase{\BIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%

% equality
\newcommand{\eql}{\ifinner\tcase{\EQL}\else\dcase{\EQL}\fi}%

% equality with name [1]
\newcommand{\Eql}[1]{\ifinner\Tcase{\EQL}{\TUP{#1}}%
\else\Dcase{\EQL}{\DUP{#1}}\fi}%

% pair of adjoint arrows
\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%

% pair of adjoint arrows with names [1],[2]
\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
\else\Dbicase{\ADJAR}{#1}{#2}\fi}%

% pair of adjoint distributors
\newcommand{\adjdist}{\ifinner\tbicase{\ADJDIST}\else\dbicase{\ADJDIST}\fi}%

% pair of adjoint distributors with names [1],[2]
\newcommand{\Adjdist}[2]{\ifinner\Tbicase{\ADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
\else\Dbicase{\ADJDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%


% IN-TEXT BACK ARROWS

% \BKAR{n} draws a pointing back arrow of length n units
\newcommand{\BKAR}[1]%
{\begin{picture}(#1,0)%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\end{picture}}%

% \BKDIST{n} draws a pointing back distributor of length n units
\newcommand{\BKDIST}[1]%
{\begin{picture}(#1,0)%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{400}}%
\end{picture}}%

% \BKDOTAR{n} draws a backward dotted  arrow
% of length n units
\newcommand{\BKDOTAR}[1]%
{\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by 300%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(#1,0)%
\multiput(#1,0)(-300,0){\NUMBEROFDOTS}{\circle*{100}}%
\put(0,0){\whead}%
\end{picture}}%

% \BKMONO{n} draws a pointing back monomorphism of length n units
\newcommand{\BKMONO}[1]%
{\monolength=#1%
\advance\monolength by -\monotail%
\begin{picture}(#1,0)(-#1,0)%
\put(-\monotail,0){\line(-1,0){\monolength}}%
\put(-\monotail,0){\whead}%
\put(-#1,0){\whead}%
\end{picture}}%

% \BKEPI{n} draws a pointing back epimorphism of length n units
\newcommand{\BKEPI}[1]%
{\epilength=#1%
\advance\epilength by -\epihead%
\begin{picture}(#1,0)%
\put(#1,0){\line(-1,0){\epilength}}%
\put(\epihead,0){\whead}%
\put(0,0){\whead}%
\end{picture}}%

% \BKBIMO{n} draws a pointing back bimorphism of length n units
\newcommand{\BKBIMO}[1]%
{\monolength=#1%
\advance\monolength by -\monotail%
\epilength=\monolength%
\advance\epilength by -\epihead%
\begin{picture}(#1,0)%
\put(\monolength,0){\line(-1,0){\epilength}}%
\put(\monolength,0){\whead}%
\put(\epihead,0){\whead}%
\put(0,0){\whead}%
\end{picture}}%

% \BKBIAR{n} draws a pair of pointing back arrows of length n units
\newcommand{\BKBIAR}[1]%
{\begin{picture}(#1,700)%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\put(#1,700){\line(-1,0){#1}}%
\put(0,700){\whead}%
\end{picture}}%

% \BKBIDIST{n} draws a pair of pointing back distributors of length n units
\newcommand{\BKBIDIST}[1]%
{\begin{picture}(#1,700)%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\put(#1,700){\line(-1,0){#1}}%
\put(0,700){\whead}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{400}}%
\put(\NUMBER,700){\circle{400}}%
\end{picture}}%

% \BKADJAR{n} draws a pair of adjoint arrows of length n units
\newcommand{\BKADJAR}[1]%
{\begin{picture}(#1,700)%
\put(0,700){\line(1,0){#1}}%
\put(#1,700){\ehead}%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\end{picture}}%

% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
\newcommand{\BKADJDIST}[1]%
{\begin{picture}(#1,700)%
\put(0,700){\line(1,0){#1}}%
\put(#1,700){\ehead}%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{400}}%
\put(\NUMBER,700){\circle{400}}%
\end{picture}}%

% All the following commands produce back arrows with length 20pt
% and scriptstyle names in math mode but arrows with length
% \displayarrowlength and textstyle names in display math mode.

% back arrow
\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%

% back arrow with upper name [1]
\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%

% back distributor
\newcommand{\bkdist}{\ifinner\tcase{\BKDIST}\else\dcase{\BKDIST}\fi}%

% back distributor with upper name [1]
\newcommand{\Bkdist}[1]{\ifinner\Tcase{\BKDIST}{\TUP{#1}}%
\else\Dcase{\BKDIST}{\TUP{#1}}\fi}%

% backward dotted arrow
\newcommand{\bkdotar}{\ifinner\tcase{\BKDOTAR}\else\dcase{\BKDOTAR}\fi}%

% backward dotted arrow with upper name [1]
\newcommand{\Bkdotar}[1]{\ifinner\Tcase{\BKDOTAR}{#1}%
\else\Dcase{\BKDOTAR}{#1}\fi}%

% back monomorphism
\newcommand{\bkmono}{\ifinner\tcase{\BKMONO}\else\dcase{\BKMONO}\fi}%

% back monomorphism with upper name [1]
\newcommand{\Bkmono}[1]{\ifinner\Tcase{\BKMONO}{#1}%
\else\Dcase{\BKMONO}{#1}\fi}%

% back epimorphism
\newcommand{\bkepi}{\ifinner\tcase{\BKEPI}\else\dcase{\BKEPI}\fi}%

% back epimorphism with upper name [1]
\newcommand{\Bkepi}[1]{\ifinner\Tcase{\BKEPI}{#1}%
\else\Dcase{\BKEPI}{#1}\fi}%

% back bimorphism
\newcommand{\bkbimo}{\ifinner\tcase{\BKBIMO}\else\dcase{\BKBIMO}\fi}%

% back bimorphism with upper name [1]
\newcommand{\Bkbimo}[1]{\ifinner\Tcase{\BKBIMO}{\hspace{9pt}#1}%
\else\Dcase{\BKBIMO}{\hspace{9pt}#1}\fi}%

% back isomorphism
\newcommand{\bkiso}{\ifinner\Tcase{\BKAR}{\cong}%
\else\Dcase{\BKAR}{\cong}\fi}%

% back isomorphism with upper name [1]
\newcommand{\Bkiso}[1]{\ifinner\Tcase{\BKAR}{\cong{#1}}%
\else\Dcase{\BKAR}{\cong{#1}}\fi}%

% pair of back arrows
\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%

% pair of back arrows with names [1],[2]
\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%

% pair of back distributors
\newcommand{\bkbidist}{\ifinner\tbicase{\BKBIDIST}%
\else\dbicase{\BKBIDIST}\fi}%

% pair of back distributors with names [1],[2]
\newcommand{\Bkbidist}[2]{\ifinner\Tbicase{\BKBIDIST}{\TUP{#1}}{\TDOWN{#2}}%
\else\Tbicase{\BKBIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%

% back equality
\let\bkeql=\eql%

% back equality with name [1]
\let\Bkeql=\Eql%

% back pair of adjoint arrows
\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
\else\dbicase{\BKADJAR}\fi}%

% back pair of adjoint arrows with names [1],[2]
\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%

% back pair of adjoint distributors
\newcommand{\bkadjdist}{\ifinner\tbicase{\BKADJDIST}%
\else\dbicase{\BKADJDIST}\fi}%

% back pair of adjoint distributors with names [1],[2]
\newcommand{\Bkadjdist}[2]{\ifinner\Tbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
\else\Dbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}\fi}%


% MACROS FOR DRAWING HORIZONTAL PICTURES

% \lowername{P}{f} puts the name f under the picture P
\newcommand{\lowername}[2]%
{$\stackrel{\makebox[1pt]{#1}}%
{\begin{picture}(0,0)%
\truex{600}%
\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
\end{picture}}$}%

% \hcase{P}{n} draws the picture P with length n units
\newcommand{\hcase}[2]%
{\testdiagrammode\makebox[0pt]%
{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%

% \Hcase{P}{f}{n} draws the picture P with upper name f
% and length n units.
\newcommand{\Hcase}[3]%
{\testdiagrammode\makebox[0pt]
{\raisebox{0pt}[0pt][0pt]%
{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%

% \hcasE{P}{f}{n} draws the picture P with lower name f
% and length n units.
\newcommand{\hcasE}[3]%
{\testdiagrammode\makebox[0pt]%
{\raisebox{-8pt}[0pt][0pt]%
{\lowername{#1{#3}}{#2}}}}%

% \Hisocase{P}{f}{g}{n} draws an arrow P with names f, g
% and length n units.
\newcommand{\Hisocase}[4]%
{\testdiagrammode\makebox[0pt]
{\raisebox{-8pt}[0pt][0pt]%
{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
{\mbox{\lowername{#1{#4}}{#3}}}$}}}%

% \hbicase{P}{n} draws the bi-picture P with length n units.
\newcommand{\hbicase}[2]%
{\testdiagrammode\makebox[0pt]%
{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%

% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
% and length n units.
\newcommand{\Hbicase}[4]%
{\testdiagrammode\makebox[0pt]
{\raisebox{-10.4pt}[0pt][0pt]%
{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
{\mbox{\lowername{#1{#4}}{#3}}}$}}}%

% EAST ARROWS

% \EAR{n} draws an east arrow of length n units
\newcommand{\EAR}[1]%
{\begin{picture}(#1,0)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\end{picture}}%

% \EDIST{n} draws an east distributor of length n units
\newcommand{\EDIST}[1]%
{\begin{picture}(#1,0)%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\truex{400}
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{\value{x}}}
\end{picture}}%

% \EDOTAR draws a dotted arrow of length n units
\newcommand{\EDOTAR}[1]%
{\truex{100}\truey{300}%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(#1,0)%
\multiput(0,0)(\value{y},0){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(#1,0){\ehead}%
\end{picture}}%


% \EMONO{n} draws an east monomorphism of length n units
\newcommand{\EMONO}[1]%
{\truetail
\monolength=#1%
\advance\monolength by -\truemonotail%
\begin{picture}(#1,0)%
\put(\truemonotail,0){\line(1,0){\monolength}}%
\put(#1,0){\ehead}%
\put(\truemonotail,0){\ehead}%
\end{picture}}%


% \EEPI{n} draws an east epimorphism of length n units
\newcommand{\EEPI}[1]%
{\truehead%
\epilength=#1%
\advance\epilength by -\trueepihead%
\begin{picture}(#1,0)(-#1,0)%
\put(-#1,0){\line(1,0){\epilength}}%
\put(-\trueepihead,0){\ehead}%
\put(0,0){\ehead}%
\end{picture}}%


% \EBIMO{n} draws an east bimorphism of length n units
\newcommand{\EBIMO}[1]%
{\truehead\truetail%
\monolength=#1%
\advance\monolength by -\truemonotail%
\epilength=\monolength%
\advance\epilength by -\trueepihead%
\begin{picture}(#1,0)(-#1,0)%
\put(-\monolength,0){\line(1,0){\epilength}}%
\put(-\monolength,0){\ehead}%
\put(-\trueepihead,0){\ehead}%
\put(0,0){\ehead}%
\end{picture}}%


% \EBIAR{n} draws an east pair of arrows of length n units
\newcommand{\EBIAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(0,\value{x}){\line(1,0){#1}}%
\put(#1,\value{x}){\ehead}%
\end{picture}}%

% \EBIDIST{n} draws an east pair of distributors of length n units
\newcommand{\EBIDIST}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(0,\value{x}){\line(1,0){#1}}%
\put(#1,\value{x}){\ehead}%
\truey{400}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{\value{y}}}
\put(\NUMBER,\value{x}){\circle{\value{y}}}%
\end{picture}}%

% \EEQL{n} draws an east equality of length n units
\newcommand{\EEQL}[1]%
{\begin{picture}(#1,0)%
\truex{200}%
\put(0,\value{x}){\line(1,0){#1}}%
\put(0,0){\line(1,0){#1}}%
\end{picture}}%

% \EADJAR{n} draws an east pair of adjoint arrows of length n
% units
\newcommand{\EADJAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(#1,\value{x}){\line(-1,0){#1}}%
\put(0,\value{x}){\whead}%
\end{picture}}%

% \EADJDIST{n} draws an east pair of adjoint distributors of length n
% units
\newcommand{\EADJDIST}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,0){\line(1,0){#1}}%
\put(#1,0){\ehead}%
\put(#1,\value{x}){\line(-1,0){#1}}%
\put(0,\value{x}){\whead}%
\truey{400}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{\value{y}}}
\put(\NUMBER,\value{x}){\circle{\value{y}}}%
\end{picture}}%


% All the following commands produce east arrows

% basic east arrow
\def\basicear[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EAR}{\Z}}%

% east arrow
\newcommand{\ear}{\@ifnextchar[{\basicear}%
{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%

% basic east arrow with upper name
\def\basicEar[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EAR}{#2}{\Z}}%

% east arrow with upper name
\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%

% basic east arrow with lower name
\def\basiceaR[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EAR}{#2}{\Z}}%

% east arrow with lower name
\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%

% basic east distributor
\def\basicedist[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EDIST}{\Z}}%

% east distributor
\newcommand{\edist}{\@ifnextchar[{\basicedist}%
{\hspace{\SOURCE\unitlength}\basicedist[\ARROWLENGTH]}}%

% basic east distributor with upper name
\def\basicEdist[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EDIST}{\DUP{#2}}{\Z}}%

% east distributor with upper name
\newcommand{\Edist}{\@ifnextchar[{\basicEdist}%
{\hspace{\SOURCE\unitlength}\basicEdist[\ARROWLENGTH]}}%

% basic east distributor with lower name
\def\basicedisT[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EDIST}{\DDOWN{#2}}{\Z}}%

% east distributor with lower name
\newcommand{\edisT}{\@ifnextchar[{\basicedisT}%
{\hspace{\SOURCE\unitlength}\basicedisT[\ARROWLENGTH]}}%

% basic east dotted arrow
\def\basicedotar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EDOTAR}{\Z}}%

% east dotted arrow
\newcommand{\edotar}{\@ifnextchar[{\basicedotar}%
{\hspace{\SOURCE\unitlength}\basicedotar[\ARROWLENGTH]}}%

% basic east dotted arrow with upper name
\def\basicEdotar[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EDOTAR}{#2}{\Z}}%

% east dotted arrow with upper name
\newcommand{\Edotar}{\@ifnextchar[{\basicEdotar}%
{\hspace{\SOURCE\unitlength}\basicEdotar[\ARROWLENGTH]}}%

% basic east dotted arrow with lower name
\def\basicedotaR[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EDOTAR}{#2}{\Z}}%

% east dotted arrow with lower name
\newcommand{\edotaR}{\@ifnextchar[{\basicedotaR}%
{\hspace{\SOURCE\unitlength}\basicedotaR[\ARROWLENGTH]}}%

% basic east monomorphism
\def\basicemono[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EMONO}{\Z}}%

% east arrow
\newcommand{\emono}{\@ifnextchar[{\basicemono}%
{\hspace{\SOURCE\unitlength}\basicemono[\ARROWLENGTH]}}%

% basic east monomorphism with upper name
\def\basicEmono[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EMONO}{#2}{\Z}}%

% east monomorphism with upper name
\newcommand{\Emono}{\@ifnextchar[{\basicEmono}%
{\hspace{\SOURCE\unitlength}\basicEmono[\ARROWLENGTH]}}%

% basic east monomorphism with lower name
\def\basicemonO[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EMONO}{#2}{\Z}}%

% east monomorphism with lower name
\newcommand{\emonO}{\@ifnextchar[{\basicemonO}%
{\hspace{\SOURCE\unitlength}\basicemonO[\ARROWLENGTH]}}%

% basic east epimorphism
\def\basiceepi[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EEPI}{\Z}}%

% east epimorphism
\newcommand{\eepi}{\@ifnextchar[{\basiceepi}%
{\hspace{\SOURCE\unitlength}\basiceepi[\ARROWLENGTH]}}%

% basic east epimorphism with upper name
\def\basicEepi[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EEPI}{#2}{\Z}}%

% east epimorphism with upper name
\newcommand{\Eepi}{\@ifnextchar[{\basicEepi}%
{\hspace{\SOURCE\unitlength}\basicEepi[\ARROWLENGTH]}}%

% basic east epimorphism with lower name
\def\basiceepI[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EEPI}{#2}{\Z}}%

% east epimorphism with lower name
\newcommand{\eepI}{\@ifnextchar[{\basiceepI}%
{\hspace{\SOURCE\unitlength}\basiceepI[\ARROWLENGTH]}}%

% basic east bimorphism
\def\basicebimo[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EBIMO}{\Z}}%

% east bimorphism
\newcommand{\ebimo}{\@ifnextchar[{\basicebimo}%
{\hspace{\SOURCE\unitlength}\basicebimo[\ARROWLENGTH]}}%

% basic east bimorphism with upper name
\def\basicEbimo[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EBIMO}{#2}{\Z}}%

% east bimorphism with upper name
\newcommand{\Ebimo}{\@ifnextchar[{\basicEbimo}%
{\hspace{\SOURCE\unitlength}\basicEbimo[\ARROWLENGTH]}}%

% basic east bimorphism with lower name
\def\basicebimO[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EBIMO}{#2}{\Z}}%

% east bimorphism with lower name
\newcommand{\ebimO}{\@ifnextchar[{\basicebimO}%
{\hspace{\SOURCE\unitlength}\basicebimO[\ARROWLENGTH]}}%

% basic east isomorphism
\def\basiceiso[#1]{%
\Z=#1%
\multiply \Z by 100%
\Hisocase{\EAR}{\cong}{}{\Z}}%

% east isomorphism
\newcommand{\eiso}{\@ifnextchar[{\basiceiso}%
{\hspace{\SOURCE\unitlength}\basiceiso[\ARROWLENGTH]}}%

% basic east isomorphism with upper name
\def\basicEiso[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hisocase{\EAR}{#2}{\cong}{\Z}}%

% east isomorphism with upper name
\newcommand{\Eiso}{\@ifnextchar[{\basicEiso}%
{\hspace{\SOURCE\unitlength}\basicEiso[\ARROWLENGTH]}}%

% basic east isomorphism with lower name
\def\basiceisO[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hisocase{\EAR}{\cong}{#2}{\Z}}%

% east isomorphism with lower name
\newcommand{\eisO}{\@ifnextchar[{\basiceisO}%
{\hspace{\SOURCE\unitlength}\basiceisO[\ARROWLENGTH]}}%

% basic east equality
\def\basiceeql[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EEQL}{\Z}}%

% east equality
\newcommand{\eeql}{\@ifnextchar[{\basiceeql}%
{\hspace{\SOURCE\unitlength}\basiceeql[\ARROWLENGTH]}}%

% basic east equality with upper name
\def\basicEeql[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EEQL}{\DUP{#2}}{\Z}}%

% east equality with upper name
\newcommand{\Eeql}{\@ifnextchar[{\basicEeql}%
{\hspace{\SOURCE\unitlength}\basicEeql[\ARROWLENGTH]}}%

% basic east equality with lower name
\def\basiceeqL[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EEQL}{#2}{\Z}}%

% east equality with lower name
\newcommand{\eeqL}{\@ifnextchar[{\basiceeqL}%
{\hspace{\SOURCE\unitlength}\basiceeqL[\ARROWLENGTH]}}%

% basic pair of east arrows
\def\basicebiar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\EBIAR}{\Z}}%

% pair of east arrows
\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%

% basic pair of east arrows with names
\def\basicEbiar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\EBIAR}{#2}{#3}{\Z}}%

% pair of east arrows with names
\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
\let\ebiaR=\Ebiar

% basic pair of east distributors
\def\basicebidist[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\EBIDIST}{\Z}}%

% pair of east distributors
\newcommand{\ebidist}{\@ifnextchar[{\basicebidist}%
{\hspace{\SOURCE\unitlength}\basicebidist[\ARROWLENGTH]}}%

% basic pair of east distributors with names
\def\basicEbidist[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\EBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%

% pair of east distributors with names
\newcommand{\Ebidist}{\@ifnextchar[{\basicEbidist}%
{\hspace{\SOURCE\unitlength}\basicEbidist[\ARROWLENGTH]}}%
\let\ebidisT=\Ebidist

% basic pair of east adjoint arrows
\def\basiceadjar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\EADJAR}{\Z}}%

% pair of east adjoint arrows
\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%

% basic pair of east adjoint arrows with names
\def\basicEadjar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\EADJAR}{#2}{#3}{\Z}}%

% pair of east adjoint arrows with names
\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
\let\eadjaR=\Eadjar

% basic pair of east adjoint distributors
\def\basiceadjdist[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\EADJDIST}{\Z}}%

% pair of east adjoint distributors
\newcommand{\eadjdist}{\@ifnextchar[{\basiceadjdist}%
{\hspace{\SOURCE\unitlength}\basiceadjdist[\ARROWLENGTH]}}%

% basic pair of east adjoint distributors with names
\def\basicEadjdist[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\EADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%

% pair of east adjoint distributors with names
\newcommand{\Eadjdist}{\@ifnextchar[{\basicEadjdist}%
{\hspace{\SOURCE\unitlength}\basicEadjdist[\ARROWLENGTH]}}%
\let\eadjdisT=\Eadjdist

% WEST ARROWS

% \WAR{n} draws a pointing back arrow of length n units
\newcommand{\WAR}[1]%
{\begin{picture}(#1,0)%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\end{picture}}%

% \WDIST{n} draws a pointing back distributor of length n units
\newcommand{\WDIST}[1]%
{\begin{picture}(#1,0)%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\truex{400}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{\value{x}}}%
\end{picture}}%

% \WDOTAR draws a dotted arrow of length n units
\newcommand{\WDOTAR}[1]%
{\truex{100}\truey{300}%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(#1,0)%
\multiput(#1,0)(-\value{y},0){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(0,0){\whead}%
\end{picture}}%

% \WMONO{n} draws a pointing back monomorphism of length n units
\newcommand{\WMONO}[1]%
{\truetail%
\monolength=#1%
\advance\monolength by -\truemonotail%
\begin{picture}(#1,0)(-#1,0)%
\put(-\truemonotail,0){\line(-1,0){\monolength}}%
\put(-\truemonotail,0){\whead}%
\put(-#1,0){\whead}%
\end{picture}}%


% \WEPI{n} draws a pointing back epimorphism of length n units
\newcommand{\WEPI}[1]%
{\truehead%
\epilength=#1%
\advance\epilength by -\trueepihead%
\begin{picture}(#1,0)%
\put(#1,0){\line(-1,0){\epilength}}%
\put(\trueepihead,0){\whead}%
\put(0,0){\whead}%
\end{picture}}%

% \WBIMO{n} draws a pointing back bimorphism of length n units
\newcommand{\WBIMO}[1]%
{\truehead\truetail%
\monolength=#1
\advance\monolength by -\truemonotail%
\epilength=\monolength%
\advance\epilength by -\trueepihead%
\begin{picture}(#1,0)%
\put(\monolength,0){\line(-1,0){\epilength}}%
\put(\monolength,0){\whead}%
\put(\trueepihead,0){\whead}%
\put(0,0){\whead}%
\end{picture}}%

% \WBIAR{n} draws a pair of pointing back arrows of length n units
\newcommand{\WBIAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\put(#1,\value{x}){\line(-1,0){#1}}%
\put(0,\value{x}){\whead}%
\end{picture}}%

% \WBIDIST{n} draws a pair of pointing back distributors of length n units
\newcommand{\WBIDIST}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\put(#1,\value{x}){\line(-1,0){#1}}%
\put(0,\value{x}){\whead}%
\truey{400}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{\value{y}}}%
\put(\NUMBER,\value{x}){\circle{\value{y}}}%
\end{picture}}%

% \WADJAR{n} draws a pair of adjoint arrows of length n units
\newcommand{\WADJAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,\value{x}){\line(1,0){#1}}%
\put(#1,\value{x}){\ehead}%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\end{picture}}%

% \WADJDIST{n} draws a pair of adjoint distributors of length n units
\newcommand{\WADJDIST}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,\value{x}){\line(1,0){#1}}%
\put(#1,\value{x}){\ehead}%
\put(#1,0){\line(-1,0){#1}}%
\put(0,0){\whead}%
\truey{400}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{\value{y}}}%
\put(\NUMBER,\value{x}){\circle{\value{y}}}%
\end{picture}}%


% All the following commands produce west arrows

% basic west arrow
\def\basicwar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\WAR}{\Z}}%

% west arrow
\newcommand{\war}{\@ifnextchar[{\basicwar}%
{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%

% basic west arrow with upper name
\def\basicWar[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\WAR}{#2}{\Z}}%

% west arrow with upper name
\newcommand{\War}{\@ifnextchar[{\basicWar}%
{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%

% basic west arrow with lower name
\def\basicwaR[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\WAR}{#2}{\Z}}%

% west arrow with lower name
\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%

% basic west distributor
\def\basicwdist[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\WDIST}{\Z}}%

% west distributor
\newcommand{\wdist}{\@ifnextchar[{\basicwdist}%
{\hspace{\SOURCE\unitlength}\basicwdist[\ARROWLENGTH]}}%

% basic west distributor with upper name
\def\basicWdist[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\WDIST}{\DUP{#2}}{\Z}}%

% west distributor with upper name
\newcommand{\Wdist}{\@ifnextchar[{\basicWdist}%
{\hspace{\SOURCE\unitlength}\basicWdist[\ARROWLENGTH]}}%

% basic west distributor with lower name
\def\basicwdisT[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\WDIST}{\DDOWN{#2}}{\Z}}%

% west distributor with lower name
\newcommand{\wdisT}{\@ifnextchar[{\basicwdisT}%
{\hspace{\SOURCE\unitlength}\basicwdisT[\ARROWLENGTH]}}%

% basic west dotted arrow
\def\basicwdotar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\WDOTAR}{\Z}}%

% west dotted arrow
\newcommand{\wdotar}{\@ifnextchar[{\basicwdotar}%
{\hspace{\SOURCE\unitlength}\basicwdotar[\ARROWLENGTH]}}%

% basic west dotted arrow with upper name
\def\basicWdotar[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\WDOTAR}{#2}{\Z}}%

% west dotted arrow with upper name
\newcommand{\Wdotar}{\@ifnextchar[{\basicWdotar}%
{\hspace{\SOURCE\unitlength}\basicWdotar[\ARROWLENGTH]}}%

% basic west dotted arrow with lower name
\def\basicwdotaR[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\WDOTAR}{#2}{\Z}}%

% west dotted arrow with lower name
\newcommand{\wdotaR}{\@ifnextchar[{\basicwdotaR}%
{\hspace{\SOURCE\unitlength}\basicwdotaR[\ARROWLENGTH]}}%

% basic west monomorphism
\def\basicwmono[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\WMONO}{\Z}}%

% west arrow
\newcommand{\wmono}{\@ifnextchar[{\basicwmono}%
{\hspace{\SOURCE\unitlength}\basicwmono[\ARROWLENGTH]}}%

% basic west monomorphism with upper name
\def\basicWmono[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\WMONO}{#2}{\Z}}%

% west monomorphism with upper name
\newcommand{\Wmono}{\@ifnextchar[{\basicWmono}%
{\hspace{\SOURCE\unitlength}\basicWmono[\ARROWLENGTH]}}%

% basic west monomorphism with lower name
\def\basicwmonO[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\WMONO}{#2}{\Z}}%

% west monomorphism with lower name
\newcommand{\wmonO}{\@ifnextchar[{\basicwmonO}%
{\hspace{\SOURCE\unitlength}\basicwmonO[\ARROWLENGTH]}}%

% basic west epimorphism
\def\basicwepi[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\WEPI}{\Z}}%

% west epimorphism
\newcommand{\wepi}{\@ifnextchar[{\basicwepi}%
{\hspace{\SOURCE\unitlength}\basicwepi[\ARROWLENGTH]}}%

% basic west epimorphism with upper name
\def\basicWepi[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\WEPI}{#2}{\Z}}%

% west epimorphism with upper name
\newcommand{\Wepi}{\@ifnextchar[{\basicWepi}%
{\hspace{\SOURCE\unitlength}\basicWepi[\ARROWLENGTH]}}%

% basic west epimorphism with lower name
\def\basicwepI[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\WEPI}{#2}{\Z}}%

% west epimorphism with lower name
\newcommand{\wepI}{\@ifnextchar[{\basicwepI}%
{\hspace{\SOURCE\unitlength}\basicwepI[\ARROWLENGTH]}}%

% basic west bimorphism
\def\basicwbimo[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\WBIMO}{\Z}}%

% west bimorphism
\newcommand{\wbimo}{\@ifnextchar[{\basicwbimo}%
{\hspace{\SOURCE\unitlength}\basicwbimo[\ARROWLENGTH]}}%

% basic west bimorphism with upper name
\def\basicWbimo[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\WBIMO}{#2}{\Z}}%

% west bimorphism with upper name
\newcommand{\Wbimo}{\@ifnextchar[{\basicWbimo}%
{\hspace{\SOURCE\unitlength}\basicWbimo[\ARROWLENGTH]}}%

% basic west bimorphism with lower name
\def\basicwbimO[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\WBIMO}{#2}{\Z}}%

% west bimorphism with lower name
\newcommand{\wbimO}{\@ifnextchar[{\basicwbimO}%
{\hspace{\SOURCE\unitlength}\basicwbimO[\ARROWLENGTH]}}%

% basic west isomorphism
\def\basicwiso[#1]{%
\Z=#1%
\multiply \Z by 100%
\Hisocase{\WAR}{\cong}{}{\Z}}%

% west isomorphism
\newcommand{\wiso}{\@ifnextchar[{\basicwiso}%
{\hspace{\SOURCE\unitlength}\basicwiso[\ARROWLENGTH]}}%

% basic west isomorphism with upper name
\def\basicWiso[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hisocase{\WAR}{#2}{\cong}{\Z}}%

% west isomorphism with upper name
\newcommand{\Wiso}{\@ifnextchar[{\basicWiso}%
{\hspace{\SOURCE\unitlength}\basicWiso[\ARROWLENGTH]}}%

% basic west isomorphism with lower name
\def\basicwisO[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hisocase{\WAR}{\cong}{#2}{\Z}}%

% west isomorphism with lower name
\newcommand{\wisO}{\@ifnextchar[{\basicwisO}%
{\hspace{\SOURCE\unitlength}\basicwisO[\ARROWLENGTH]}}%

% west equality
\let\weql=\eeql%

% west equality with upper name
\let\Weql=\Eeql%

% west equality with lower name
\let\weqL=\eeqL%

% basic pair of west arrows
\def\basicwbiar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\WBIAR}{\Z}}%

% pair of west arrows
\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%

% basic pair of west arrows with names
\def\basicWbiar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\WBIAR}{#2}{#3}{\Z}}%

% pair of west arrows with names
\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
\let\wbiaR=\Wbiar

% basic pair of west distributors
\def\basicwbidist[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\WBIDIST}{\Z}}%

% pair of west distributors
\newcommand{\wbidist}{\@ifnextchar[{\basicwbidist}%
{\hspace{\SOURCE\unitlength}\basicwbidist[\ARROWLENGTH]}}%

% basic pair of west distributors with names
\def\basicWbidist[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\WBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%

% pair of west distributors with names
\newcommand{\Wbidist}{\@ifnextchar[{\basicWbidist}%
{\hspace{\SOURCE\unitlength}\basicWbidist[\ARROWLENGTH]}}%
\let\wbidisT=\Wbidist

% basic pair of west adjoint arrows
\def\basicwadjar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\WADJAR}{\Z}}%

% pair of west adjoint arrows
\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%

% basic pair of west adjoint arrows with names
\def\basicWadjar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\WADJAR}{#2}{#3}{\Z}}%

% pair of west adjoint arrows with names
\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
\let\wadjaR=\Wadjar

% basic pair of west adjoint distributors
\def\basicwadjdist[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\WADJDIST}{\Z}}%

% pair of west adjoint distributors
\newcommand{\wadjdist}{\@ifnextchar[{\basicwadjdist}%
{\hspace{\SOURCE\unitlength}\basicwadjdist[\ARROWLENGTH]}}%

% basic pair of west adjoint distributors with names
\def\basicWadjdist[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\WADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%

% pair of west adjoint distributors with names
\newcommand{\Wadjdist}{\@ifnextchar[{\basicWadjdist}%
{\hspace{\SOURCE\unitlength}\basicWadjdist[\ARROWLENGTH]}}%
\let\wadjdisT=\Wadjdist


% MACROS FOR DRAWING VERTICAL PICTURES

% \vcase{P}{n} draws the vertical picture P with length n units.
\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%

% \Vcase{P}{f}{n} draws the vertical picture P
% with left name f and length n units.
\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%

% \vcasE{P}{f}{n} draws the vertical picture P
% with right name f and length n units.
\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%

% \Visocase{P}{f}{g}{n} draws the vertical picture P
% with names f, g and length n units.
\newcommand{\Visocase}[4]{\testdiagrammode\makebox[0pt]%
{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{2pt}}}#1{#4}%
\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#3$}}}}%
% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%

% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
% with names f, g and length n units.
\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%



% SOUTH ARROWS

% \SAR{n} draws a south arrow of length n units
% and centers it in a box of width  0pt and height 0pt
\newcommand{\SAR}[1]%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,#1){\line(0,-1){#1}}%
\put(0,0){\shead}%
\end{picture}}}\end{picture}}%

% \SDIST{n} draws a south distributor of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SDIST}[1]%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,#1){\line(0,-1){#1}}%
\put(0,0){\shead}%
\end{picture}}}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\end{picture}}%

% \SDOTAR{n} draws a south dotted arrow of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SDOTAR}[1]%
{\truex{100}\truey{300}%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\multiput(0,#1)(0,-\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(0,0){\shead}%
\end{picture}}}\end{picture}}%

% \SMONO{n} draws a south monomorphism of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SMONO}[1]%
{\truetail%
\monolength=#1%
\advance\monolength by -\truemonotail%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,\monolength){\line(0,-1){\monolength}}%
\put(0,\monolength){\shead}%
\put(0,0){\shead}%
\end{picture}}}\end{picture}}%


% \SEPI{n} draws a south epimorphism of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SEPI}[1]%
{\truehead%
\epilength=#1%
\advance\epilength by -\trueepihead%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,#1){\line(0,-1){\epilength}}%
\put(0,\trueepihead){\shead}%
\put(0,0){\shead}%
\end{picture}}}\end{picture}}%

% \SBIMO{n} draws a south bimorphism of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SBIMO}[1]%
{\truehead\truetail%
\monolength=#1%
\advance\monolength by -\truemonotail%
\epilength=\monolength%
\advance\epilength by -\trueepihead%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,\monolength){\line(0,-1){\epilength}}%
\put(0,\monolength){\shead}%
\put(0,\trueepihead){\shead}%
\put(0,0){\shead}%
\end{picture}}}\end{picture}}%

% \SBIAR{n} draws a pair of south arrows of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SBIAR}[1]%
{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},#1){\line(0,-1){#1}}%
\put(-\value{x},0){\shead}%
\put(\value{x},#1){\line(0,-1){#1}}%
\put(\value{x},0){\shead}%
\end{picture}}}\end{picture}}%

% \SBIDIST{n} draws a pair of south distributors of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SBIDIST}[1]%
{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},#1){\line(0,-1){#1}}%
\put(-\value{x},0){\shead}%
\put(\value{x},#1){\line(0,-1){#1}}%
\put(\value{x},0){\shead}%
\end{picture}}}%
\truey{400}%
\put(-\value{x},0){\circle{\value{y}}}%
\put(\value{x},0){\circle{\value{y}}}%
\end{picture}}%

% \SEQL{n} draws a vertical equality of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SEQL}[1]%
{\begin{picture}(0,0)%
\truex{100}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)\put(-\value{x},#1){\line(0,-1){#1}}%
\put(\value{x},#1){\line(0,-1){#1}}%
\end{picture}}}\end{picture}}%

% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},#1){\line(0,-1){#1}}%
\put(-\value{x},0){\shead}%
\put(\value{x},0){\line(0,1){#1}}%
\put(\value{x},#1){\nhead}%
\end{picture}}}\end{picture}}%

% \SADJDIST{n} draws a pair of vertical adjoint distributors of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SADJDIST}[1]{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},#1){\line(0,-1){#1}}%
\put(-\value{x},0){\shead}%
\put(\value{x},0){\line(0,1){#1}}%
\put(\value{x},#1){\nhead}%
\end{picture}}}%
\truey{400}%
\put(-\value{x},0){\circle{\value{y}}}%
\put(\value{x},0){\circle{\value{y}}}%
\end{picture}}%


% All the following commands produce south arrows

% basic south arrow
\def\basicsar[#1]{\vcase{\SAR}{#100}}%

% south arrow
\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%

% basic south arrow with left name
\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%

% south arrow with left name
\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%

% basic south arrow with right name
\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%

% south arrow with right name
\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%

% basic south distributor
\def\basicsdist[#1]{\vcase{\SDIST}{#100}}%

% south distributor
\newcommand{\sdist}{\@ifnextchar[{\basicsdist}{\basicsdist[50]}}%

% basic south distributor with left name
\def\basicSdist[#1]#2{\Vcase{\SDIST}{#2\hspace*{2pt}}{#100}}%

% south distributor with left name
\newcommand{\Sdist}{\@ifnextchar[{\basicSdist}{\basicSdist[50]}}%

% basic south distributor with right name
\def\basicsdisT[#1]#2{\vcasE{\SDIST}{\hspace*{2pt}#2}{#100}}%

% south distributor with right name
\newcommand{\sdisT}{\@ifnextchar[{\basicsdisT}{\basicsdisT[50]}}%

% basic south dotted arrow
\def\basicsdotar[#1]{\vcase{\SDOTAR}{#100}}%

% south dotted arrow
\newcommand{\sdotar}{\@ifnextchar[{\basicsdotar}{\basicsdotar[50]}}%

% basic south dotted arrow with left name
\def\basicSdotar[#1]#2{\Vcase{\SDOTAR}{#2}{#100}}%

% south dotted arrow with left name
\newcommand{\Sdotar}{\@ifnextchar[{\basicSdotar}{\basicSdotar[50]}}%

% basic south dotted arrow with right name
\def\basicsdotaR[#1]#2{\vcasE{\SDOTAR}{#2}{#100}}%

% south dotted arrow with right name
\newcommand{\sdotaR}{\@ifnextchar[{\basicsdotaR}{\basicsdotaR[50]}}%

% basic south monomorphism
\def\basicsmono[#1]{\vcase{\SMONO}{#100}}%

% south arrow
\newcommand{\smono}{\@ifnextchar[{\basicsmono}{\basicsmono[50]}}%

% basic south monomorphism with left name
\def\basicSmono[#1]#2{\Vcase{\SMONO}{#2}{#100}}%

% south monomorphism with left name
\newcommand{\Smono}{\@ifnextchar[{\basicSmono}{\basicSmono[50]}}%

% basic south monomorphism with right name
\def\basicsmonO[#1]#2{\vcasE{\SMONO}{#2}{#100}}%

% south monomorphism with right name
\newcommand{\smonO}{\@ifnextchar[{\basicsmonO}{\basicsmonO[50]}}%

% basic south epimorphism
\def\basicsepi[#1]{\vcase{\SEPI}{#100}}%

% south epimorphism
\newcommand{\sepi}{\@ifnextchar[{\basicsepi}{\basicsepi[50]}}%

% basic south epimorphism with left name
\def\basicSepi[#1]#2{\Vcase{\SEPI}{#2}{#100}}%

% south epimorphism with left name
\newcommand{\Sepi}{\@ifnextchar[{\basicSepi}{\basicSepi[50]}}%

% basic south epimorphism with right name
\def\basicsepI[#1]#2{\vcasE{\SEPI}{#2}{#100}}%

% south epimorphism with right name
\newcommand{\sepI}{\@ifnextchar[{\basicsepI}{\basicsepI[50]}}%

% basic south bimorphism
\def\basicsbimo[#1]{\vcase{\SBIMO}{#100}}%

% south bimorphism
\newcommand{\sbimo}{\@ifnextchar[{\basicsbimo}{\basicsbimo[50]}}%

% basic south bimorphism with left name
\def\basicSbimo[#1]#2{\Vcase{\SBIMO}{#2}{#100}}%

% south bimorphism with left name
\newcommand{\Sbimo}{\@ifnextchar[{\basicSbimo}{\basicSbimo[50]}}%

% basic south bimorphism with right name
\def\basicsbimO[#1]#2{\vcasE{\SBIMO}{#2}{#100}}%

% south bimorphism with right name
\newcommand{\sbimO}{\@ifnextchar[{\basicsbimO}{\basicsbimO[50]}}%

% basic south isomorphism
\def\basicsiso[#1]{\Visocase{\SAR}{\cong}{}{#100}}%

% south isomorphism
\newcommand{\siso}{\@ifnextchar[{\basicsiso}{\basicsiso[50]}}%

% basic south isomorphism with left name
\def\basicSiso[#1]#2{\Visocase{\SAR}{#2}{\cong}{#100}}%

% south isomorphism with left name
\newcommand{\Siso}{\@ifnextchar[{\basicSiso}{\basicSiso[50]}}%

% basic south isomorphism with right name
\def\basicsisO[#1]#2{\Visocase{\SAR}{\cong}{#2}{#100}}%

% south isomorphism with right name
\newcommand{\sisO}{\@ifnextchar[{\basicsisO}{\basicsisO[50]}}%

% basic south equality
\def\basicseql[#1]{\vcase{\SEQL}{#100}}%

% south equality
\newcommand{\seql}{\@ifnextchar[{\basicseql}{\basicseql[50]}}%

% basic south equality with left name
\def\basicSeql[#1]#2{\Vcase{\SEQL}{#2\hspace*{2pt}}{#100}}%

% south equality with left name
\newcommand{\Seql}{\@ifnextchar[{\basicSeql}{\basicSeql[50]}}%

% basic south equality with right name
\def\basicseqL[#1]#2{\vcasE{\SEQL}{\hspace*{2pt}#2}{#100}}%

% south equality with right name
\newcommand{\seqL}{\@ifnextchar[{\basicseqL}{\basicseqL[50]}}%

% basic pair of south arrows
\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%

% pair of south arrows
\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%

% basic pair of south arrows with names
\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%

% pair of south arrows with names
\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
\let\sbiaR=\Sbiar

% basic pair of south distributors
\def\basicsbidist[#1]{\vbicase{\SBIDIST}{#100}}%

% pair of south distributors
\newcommand{\sbidist}{\@ifnextchar[{\basicsbidist}{\basicsbidist[50]}}%

% basic pair of south distributors with names
\def\basicSbidist[#1]#2#3%
{\Vbicase{\SBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%

% pair of south distributors with names
\newcommand{\Sbidist}{\@ifnextchar[{\basicSbidist}{\basicSbidist[50]}}%
\let\sbidisT=\Sbidist

% basic pair of south adjoint arrows
\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%

% pair of south adjoint arrows
\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%

% basic pair of south adjoint arrows with names
\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%

% pair of south adjoint arrows with names
\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
\let\sadjaR=\Sadjar

% basic pair of south adjoint distributors
\def\basicsadjdist[#1]{\vbicase{\SADJDIST}{#100}}%

% pair of south adjoint distributors
\newcommand{\sadjdist}{\@ifnextchar[{\basicsadjdist}{\basicsadjdist[50]}}%

% basic pair of south adjoint distributors with names
\def\basicSadjdist[#1]#2#3%
{\Vbicase{\SADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%

% pair of south adjoint distributors with names
\newcommand{\Sadjdist}{\@ifnextchar[{\basicSadjdist}{\basicSadjdist[50]}}%
\let\sadjdisT=\Sadjdist


% NORTH ARROWS

% \NAR{n} draws a north arrow of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NAR}[1]%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,0){\line(0,1){#1}}%
\put(0,#1){\nhead}%
\end{picture}}}\end{picture}}%

% \NDIST{n} draws a north distributor of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NDIST}[1]%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,0){\line(0,1){#1}}%
\put(0,#1){\nhead}%
\end{picture}}}
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\end{picture}}%

% \NDOTAR{n} draws a north dotted arrow of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NDOTAR}[1]%
{\truex{100}\truey{300}%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\multiput(0,0)(0,\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(0,#1){\nhead}%
\end{picture}}}\end{picture}}%


% \NMONO{n} draws a north monomorphism of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NMONO}[1]%
{\truetail%
\monolength=#1%
\advance\monolength by -\truemonotail%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,\truemonotail){\line(0,1){\monolength}}%
\put(0,#1){\nhead}%
\put(0,\truemonotail){\nhead}%
\end{picture}}}\end{picture}}%

% \NEPI{n} draws a north epimorphism of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NEPI}[1]%
{\truehead%
\epilength=#1%
\advance\epilength by -\trueepihead%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,0){\line(0,1){\epilength}}%
\put(0,#1){\nhead}%
\put(0,\epilength){\nhead}%
\end{picture}}}\end{picture}}%

% \NBIMO{n} draws a north bimorphism of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NBIMO}[1]%
{\truehead\truetail%
\epilength=#1%
\advance\epilength by -\trueepihead%
\monolength=\epilength%
\advance\monolength by -\truemonotail%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,\truemonotail){\line(0,1){\monolength}}%
\put(0,#1){\nhead}%
\put(0,\truemonotail){\nhead}%
\put(0,\epilength){\nhead}%
\end{picture}}}\end{picture}}%

% \NBIAR{n} draws a pair of north arrows of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NBIAR}[1]%
{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},0){\line(0,1){#1}}%
\put(-\value{x},#1){\nhead}%
\put(\value{x},0){\line(0,1){#1}}%
\put(\value{x},#1){\nhead}%
\end{picture}}}\end{picture}}%

% \NBIDIST{n} draws a pair of north distributors of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NBIDIST}[1]%
{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},0){\line(0,1){#1}}%
\put(-\value{x},#1){\nhead}%
\put(\value{x},0){\line(0,1){#1}}%
\put(\value{x},#1){\nhead}%
\end{picture}}}
\truey{400}%
\put(-\value{x},0){\circle{\value{y}}}%
\put(\value{x},0){\circle{\value{y}}}%
\end{picture}}%

% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(\value{x},#1){\line(0,-1){#1}}%
\put(\value{x},0){\shead}%
\put(-\value{x},0){\line(0,1){#1}}%
\put(-\value{x},#1){\nhead}%
\end{picture}}}\end{picture}}%

% \NADJDIST{n} draws a pair of vertical adjoint distributors of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NADJDIST}[1]{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(\value{x},#1){\line(0,-1){#1}}%
\put(\value{x},0){\shead}%
\put(-\value{x},0){\line(0,1){#1}}%
\put(-\value{x},#1){\nhead}%
\end{picture}}}
\truey{400}%
\put(-\value{x},0){\circle{\value{y}}}%
\put(\value{x},0){\circle{\value{y}}}%
\end{picture}}%


% All the following commands produce north arrows

% basic north arrow
\def\basicnar[#1]{\vcase{\NAR}{#100}}%

% north arrow
\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%

% basic north arrow with left name
\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%

% north arrow with left name
\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%

% basic north arrow with right name
\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%

% north arrow with right name
\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%

% basic north distributor
\def\basicndist[#1]{\vcase{\NDIST}{#100}}%

% north distributor
\newcommand{\ndist}{\@ifnextchar[{\basicndist}{\basicndist[50]}}%

% basic north distributor with left name
\def\basicNdist[#1]#2{\Vcase{\NDIST}{#2\hspace*{2pt}}{#100}}%

% north distributor with left name
\newcommand{\Ndist}{\@ifnextchar[{\basicNdist}{\basicNdist[50]}}%

% basic north distributor with right name
\def\basicndisT[#1]#2{\vcasE{\NDIST}{\hspace*{2pt}#2}{#100}}%

% north distributor with right name
\newcommand{\ndisT}{\@ifnextchar[{\basicndisT}{\basicndisT[50]}}%

% basic north dotted arrow
\def\basicndotar[#1]{\vcase{\NDOTAR}{#100}}%

% north dotted arrow
\newcommand{\ndotar}{\@ifnextchar[{\basicndotar}{\basicndotar[50]}}%

% basic north dotted arrow with left name
\def\basicNdotar[#1]#2{\Vcase{\NDOTAR}{#2}{#100}}%

% north dotted arrow with left name
\newcommand{\Ndotar}{\@ifnextchar[{\basicNdotar}{\basicNdotar[50]}}%

% basic north dotted arrow with right name
\def\basicndotaR[#1]#2{\vcasE{\NDOTAR}{#2}{#100}}%

% north dotted arrow with right name
\newcommand{\ndotaR}{\@ifnextchar[{\basicndotaR}{\basicndotaR[50]}}%

% basic north monomorphism
\def\basicnmono[#1]{\vcase{\NMONO}{#100}}%

% north arrow
\newcommand{\nmono}{\@ifnextchar[{\basicnmono}%
{\basicnmono[50]}}%

% basic north monomorphism with left name
\def\basicNmono[#1]#2{\Vcase{\NMONO}{#2}{#100}}%

% north monomorphism with left name
\newcommand{\Nmono}{\@ifnextchar[{\basicNmono}{\basicNmono[50]}}%

% basic north monomorphism with right name
\def\basicnmonO[#1]#2{\vcasE{\NMONO}{#2}{#100}}%

% north monomorphism with right name
\newcommand{\nmonO}{\@ifnextchar[{\basicnmonO}{\basicnmonO[50]}}%

% basic north epimorphism
\def\basicnepi[#1]{\vcase{\NEPI}{#100}}%

% north epimorphism
\newcommand{\nepi}{\@ifnextchar[{\basicnepi}{\basicnepi[50]}}%

% basic north epimorphism with left name
\def\basicNepi[#1]#2{\Vcase{\NEPI}{#2}{#100}}%

% north epimorphism with left name
\newcommand{\Nepi}{\@ifnextchar[{\basicNepi}{\basicNepi[50]}}%

% basic north epimorphism with right name
\def\basicnepI[#1]#2{\vcasE{\NEPI}{#2}{#100}}%

% north epimorphism with right name
\newcommand{\nepI}{\@ifnextchar[{\basicnepI}{\basicnepI[50]}}%

% basic north bimorphism
\def\basicnbimo[#1]{\vcase{\NBIMO}{#100}}%

% north bimorphism
\newcommand{\nbimo}{\@ifnextchar[{\basicnbimo}{\basicnbimo[50]}}%

% basic north bimorphism with left name
\def\basicNbimo[#1]#2{\Vcase{\NBIMO}{#2}{#100}}%

% north bimorphism with left name
\newcommand{\Nbimo}{\@ifnextchar[{\basicNbimo}{\basicNbimo[50]}}%

% basic north bimorphism with right name
\def\basicnbimO[#1]#2{\vcasE{\NBIMO}{#2}{#100}}%

% north bimorphism with right name
\newcommand{\nbimO}{\@ifnextchar[{\basicnbimO}{\basicnbimO[50]}}%

% basic north isomorphism
\def\basicniso[#1]{\Visocase{\NAR}{\cong}{}{#100}}%

% north isomorphism
\newcommand{\niso}{\@ifnextchar[{\basicniso}{\basicniso[50]}}%

% basic north isomorphism with left name
\def\basicNiso[#1]#2{\Visocase{\NAR}{#2}{\cong}{#100}}%

% north isomorphism with left name
\newcommand{\Niso}{\@ifnextchar[{\basicNiso}{\basicNiso[50]}}%

% basic north isomorphism with right name
\def\basicnisO[#1]#2{\Visocase{\NAR}{\cong}{#2}{#100}}%

% north isomorphism with right name
\newcommand{\nisO}{\@ifnextchar[{\basicnisO}{\basicnisO[50]}}%

% north equality
\let\neql=\seql%

% north equality with left name
\let\Neql=\Seql%

% north equality with right name
\let\neqL=\seqL%

% basic pair of north arrows
\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%

% pair of north arrows
\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%

% basic pair of north arrows with names
\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%

% pair of north arrows with names
\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
\let\nbiaR=\Nbiar

% basic pair of north distributors
\def\basicnbidist[#1]{\vbicase{\NBIDIST}{#100}}%

% pair of north distributors
\newcommand{\nbidist}{\@ifnextchar[{\basicnbidist}{\basicnbidist[50]}}%

% basic pair of north distributors with names
\def\basicNbidist[#1]#2#3%
{\Vbicase{\NBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%

% pair of north distributors with names
\newcommand{\Nbidist}{\@ifnextchar[{\basicNbidist}{\basicNbidist[50]}}%
\let\nbidisT=\Nbidist

% basic pair of north adjoint arrows
\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%

% pair of north adjoint arrows
\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%

% basic pair of north adjoint arrows with names
\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%

% pair of north adjoint arrows with names
\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
\let\nadjaR=\Nadjar

% basic pair of north adjoint distributors
\def\basicnadjdist[#1]{\vbicase{\NADJDIST}{#100}}%

% pair of north adjoint distributors
\newcommand{\nadjdist}{\@ifnextchar[{\basicnadjdist}{\basicnadjdist[50]}}%

% basic pair of north adjoint distributors with names
\def\basicNadjdist[#1]#2#3%
{\Vbicase{\NADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%

% pair of north adjoint distributors with names
\newcommand{\Nadjdist}{\@ifnextchar[{\basicNadjdist}{\basicNadjdist[50]}}%
\let\nadjdisT=\Nadjdist



% MACROS FOR  FIRST DIAGONAL PICTURES


% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
% and length n units
\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{200}\truey{600}\truez{600}%
\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
\end{picture}}%

% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
% and length n units
\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{900}\truey{150}%
\put(-\value{x},\value{y}){${#2}$}%
\truex{300}\truey{1050}%
\put(\value{x},-\value{y}){${#3}$}%
\end{picture}}%


% NORTH-EAST ARROWS

% \NEAR{n} draws a north-east arrow of length nx100 units
\newcommand{\NEAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\line(1,1){#1}}%
\put(\Y,\Y){\nehead}%
\end{picture}}%

% \NEDIST{n} draws a north-east distributor of length n units
\newcommand{\NEDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\line(1,1){#1}}%
\put(\Y,\Y){\nehead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\end{picture}}%

% \NEDOTAR{n} draws a north-east dotted arrow of length n units
\newcommand{\NEDOTAR}[1]%
{\truex{100}\truey{212}%
\Y=#1%
\divide\Y by 2%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(-\Y,-\Y)(\value{y},\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(\Y,\Y){\nehead}%
\end{picture}}%

% \NEMONO{n} draws a north-east monomorphism of length n units
\newcommand{\NEMONO}[1]{%
\Y=#1%
\divide \Y by 2%
\Truetail%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\begin{picture}(0,0)%
\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
\put(-\monolength,-\monolength){\nehead}%
\put(\Y,\Y){\nehead}%
\end{picture}}%

% \NEEPI{n} draws a north-east epimorphism of length n units
\newcommand{\NEEPI}[1]{%
\Y=#1%
\divide\Y by 2%
\Truehead%
\bimolength=#1%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\line(1,1){\bimolength}}%
\put(\epilength,\epilength){\nehead}%
\put(\Y,\Y){\nehead}%
\end{picture}}%

% \NEBIMO{n} draws a north-east bimorphism of length n units
\newcommand{\NEBIMO}[1]{%
\Y=#1%
\divide\Y by 2%
\Truetail\Truehead%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\begin{picture}(0,0)%
\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
\put(-\monolength,-\monolength){\nehead}%
\put(\epilength,\epilength){\nehead}%
\put(\Y,\Y){\nehead}%
\end{picture}}%

% \NEBIAR{n} draws a pair of north-east arrows of length n units
\newcommand{\NEBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\put(-\value{x},\value{x}){\line(1,1){#1}}%
\put(\value{x},-\value{x}){\line(1,1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\monolength,\epilength){\nehead}%
\put(\epilength,\monolength){\nehead}%
\end{picture}}\end{picture}}%

% \NEBIDIST{n} draws a pair of north-east distributors of length n units
\newcommand{\NEBIDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},-\value{x}){\line(1,1){#1}}%
\put(\epilength,\monolength){\nehead}%
\end{picture}}%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by \value{x}%
\epilength=#1%
\advance\epilength by -\value{x}%
\put(-\value{x},\value{x}){\line(1,1){#1}}%
\put(\epilength,\monolength){\nehead}%
\end{picture}}%
\put(-\value{x},\value{x}){\circle{\value{y}}}%
\put(\value{x},-\value{x}){\circle{\value{y}}}%
\end{picture}}%

% \NEEQL{n} draws a north-east equality of length n units
\newcommand{\NEEQL}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{70}%
\put(-\value{x},\value{x}){\line(1,1){#1}}%
\put(\value{x},-\value{x}){\line(1,1){#1}}%
\end{picture}}\end{picture}}%

% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
\newcommand{\NEADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},-\value{x}){\line(1,1){#1}}%
\put(\epilength,\monolength){\nehead}%
\end{picture}}%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
\put(-\epilength,-\monolength){\swhead}%
\end{picture}}\end{picture}}%

% \NEADJDIST{n} draws a north-east pair of adjoint distributors of length n units
\newcommand{\NEADJDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},-\value{x}){\line(1,1){#1}}%
\put(\epilength,\monolength){\nehead}%
\end{picture}}%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
\put(-\epilength,-\monolength){\swhead}%
\end{picture}}%
\put(-\value{x},\value{x}){\circle{\value{y}}}%
\put(\value{x},-\value{x}){\circle{\value{y}}}%
\end{picture}}%


% All the following commands draw north-east arrows

% north-east arrow of length nx100 units
\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%

% north-east arrow
\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%

% north-east arrow with upper name [1] and length nx100 units
\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%

% north-east arrow with upper name
\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%

% north-east arrow with lower name [1]  and length nx100 units
\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%

% north-east arrow with lower name [1]
\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%

% north-east distributor of length nx100 units
\def\basicnedist[#1]{\fdcase{\NEDIST}{}{}{#100}}%

% north-east distributor
\newcommand{\nedist}{\@ifnextchar[{\basicnedist}{\basicnedist[59]}}%

% north-east distributor with upper name [1] and length nx100 units
\def\basicNedist[#1]#2{\fdcase{\NEDIST}{#2}{}{#100}}%

% north-east distributor with upper name
\newcommand{\Nedist}{\@ifnextchar[{\basicNedist}{\basicNedist[59]}}%

% north-east distributor with lower name [1]  and length nx100 units
\def\basicnedisT[#1]#2{\fdcase{\NEDIST}{}{#2}{#100}}%

% north-east distributor with lower name [1]
\newcommand{\nedisT}{\@ifnextchar[{\basicnedisT}{\basicnedisT[59]}}%

% north-east dotted arrow of length nx100 units
\def\basicnedotar[#1]{\fdcase{\NEDOTAR}{}{}{#100}}%

% north-east dotted arrow
\newcommand{\nedotar}{\@ifnextchar[{\basicnedotar}{\basicnedotar[59]}}%

% north-east dotted arrow with upper name [1] and length nx100 units
\def\basicNedotar[#1]#2{\fdcase{\NEDOTAR}{#2}{}{#100}}%

% north-east dotted arrow with upper name
\newcommand{\Nedotar}{\@ifnextchar[{\basicNedotar}{\basicNedotar[59]}}%

% north-east dotted arrow with lower name [1]  and length nx100 units
\def\basicnedotaR[#1]#2{\fdcase{\NEDOTAR}{}{#2}{#100}}%

% north-east dotted arrow with lower name [1]
\newcommand{\nedotaR}{\@ifnextchar[{\basicnedotaR}{\basicnedotaR[59]}}%

% north-east monomorphism of length nx100 units
\def\basicnemono[#1]{\fdcase{\NEMONO}{}{}{#100}}%

% north-east monomorphism
\newcommand{\nemono}{\@ifnextchar[{\basicnemono}{\basicnemono[59]}}%

% north-east monomorphism with upper name [1] and length nx100 units
\def\basicNemono[#1]#2{\fdcase{\NEMONO}{#2}{}{#100}}%

% north-east monomophism with upper name
\newcommand{\Nemono}{\@ifnextchar[{\basicNemono}{\basicNemono[59]}}%

% north-east monomorphism with lower name [1]  and length nx100 units
\def\basicnemonO[#1]#2{\fdcase{\NEMONO}{}{#2}{#100}}%

% north-east monomorphism with lower name [1]
\newcommand{\nemonO}{\@ifnextchar[{\basicnemonO}{\basicnemonO[59]}}%

% north-east epimorphism of length nx100 units
\def\basicneepi[#1]{\fdcase{\NEEPI}{}{}{#100}}%

% north-east epimorphism
\newcommand{\neepi}{\@ifnextchar[{\basicneepi}{\basicneepi[59]}}%

% north-east epimorphism with upper name [1] and length nx100 units
\def\basicNeepi[#1]#2{\fdcase{\NEEPI}{#2}{}{#100}}%

% north-east epimorphism with upper name
\newcommand{\Neepi}{\@ifnextchar[{\basicNeepi}{\basicNeepi[59]}}%

% north-east epimorphism with lower name [1]  and length nx100 units
\def\basicneepI[#1]#2{\fdcase{\NEEPI}{}{#2}{#100}}%

% north-east epimorphism with lower name [1]
\newcommand{\neepI}{\@ifnextchar[{\basicneepI}{\basicneepI[59]}}%

% north-east bimorphism of length nx100 units
\def\basicnebimo[#1]{\fdcase{\NEBIMO}{}{}{#100}}%

% north-east bimorphism
\newcommand{\nebimo}{\@ifnextchar[{\basicnebimo}{\basicnebimo[59]}}%

% north-east bimorphism with upper name [1] and length nx100 units
\def\basicNebimo[#1]#2{\fdcase{\NEBIMO}{#2}{}{#100}}%

% north-east bimorphism with upper name
\newcommand{\Nebimo}{\@ifnextchar[{\basicNebimo}{\basicNebimo[59]}}%

% north-east bimorphism with lower name [1]  and length nx100 units
\def\basicnebimO[#1]#2{\fdcase{\NEBIMO}{}{#2}{#100}}%

% north-east bimorphism with lower name [1]
\newcommand{\nebimO}{\@ifnextchar[{\basicnebimO}{\basicnebimO[59]}}%

% north-east isomorphism of length nx100 units
\def\basicneiso[#1]{\fdcase{\NEAR}{\hspace{-2pt}\cong}{}{#100}}%

% north-east isomorphism
\newcommand{\neiso}{\@ifnextchar[{\basicneiso}{\basicneiso[59]}}%

% north-east isomorphism with upper name [1] and length nx100 units
\def\basicNeiso[#1]#2{\fdcase{\NEAR}{#2}{\cong}{#100}}%

% north-east isomorphism with upper name
\newcommand{\Neiso}{\@ifnextchar[{\basicNeiso}{\basicNeiso[59]}}%

% north-east isomorphism with lower name [1]  and length nx100 units
\def\basicneisO[#1]#2{\fdcase{\NEAR}{\hspace{-2pt}\cong}{#2}{#100}}%

% north-east isomorphism with lower name [1]
\newcommand{\neisO}{\@ifnextchar[{\basicneisO}{\basicneisO[59]}}%

% north-east equality of length nx100 units
\def\basicneeql[#1]{\fdcase{\NEEQL}{}{}{#100}}%

% north-east equality
\newcommand{\neeql}{\@ifnextchar[{\basicneeql}{\basicneeql[59]}}%

% north-east equality with upper name [1] and length nx100 units
\def\basicNeeql[#1]#2{\fdcase{\NEEQL}{#2}{}{#100}}%

% north-east equality with upper name
\newcommand{\Neeql}{\@ifnextchar[{\basicNeeql}{\basicNeeql[59]}}%

% north-east equality with lower name [1]  and length nx100 units
\def\basicneeqL[#1]#2{\fdcase{\NEEQL}{}{#2}{#100}}%

% north-east equality with lower name [1]
\newcommand{\neeqL}{\@ifnextchar[{\basicneeqL}{\basicneeqL[59]}}%

% pair of north-east arrows of length nx100 units
\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%

% pair of north-east arrows
\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%

% pair of north-east arrows with names [1][2] and length nx100 units
\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%

% pair of north-east arrows with names
\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
\let\nebiaR=\Nebiar

% pair of north-east adjoint arrows of length nx100 units
\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%

% pair of north-east adjoint arrows
\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%

% pair of north-east adjoint arrows with names [1][2] and length nx100 units
\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%

% pair of north-east adjoint arrows with names
\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
\let\neadjaR=\Neadjar

% pair of north-east distributors of length nx100 units
\def\basicnebidist[#1]{\fdbicase{\NEBIDIST}{}{}{#100}}%

% pair of north-east distributors
\newcommand{\nebidist}{\@ifnextchar[{\basicnebidist}{\basicnebidist[59]}}%

% pair of north-east distributors with names [1][2] and length nx100 units
\def\basicNebidist[#1]#2#3{\fdbicase{\NEBIDIST}{#2}{#3}{#100}}%

% pair of north-east distributors with names
\newcommand{\Nebidist}{\@ifnextchar[{\basicNebidist}{\basicNebidist[59]}}%
\let\nebidisT=\Nebidist

% pair of north-east adjoint distributors of length nx100 units
\def\basicneadjdist[#1]{\fdbicase{\NEADJDIST}{}{}{#100}}%

% pair of north-east adjoint distributors
\newcommand{\neadjdist}{\@ifnextchar[{\basicneadjdist}{\basicneadjdist[59]}}%

% pair of north-east adjoint distributors with names [1][2] and length nx100 units
\def\basicNeadjdist[#1]#2#3{\fdbicase{\NEADJDIST}{#2}{#3}{#100}}%

% pair of north-east adjoint distributors with names
\newcommand{\Neadjdist}{\@ifnextchar[{\basicNeadjdist}{\basicNeadjdist[59]}}%
\let\neadjdisT=\Neadjdist



% SOUT-WEST ARROWS

% \SWAR{n} draws a south-west arrow of length nx100 units
\newcommand{\SWAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,\Y){\line(-1,-1){#1}}%
\put(-\Y,-\Y){\swhead}%
\end{picture}}%

% \SWDIST{n} draws a south-west distributor of length n units
\newcommand{\SWDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,\Y){\line(-1,-1){#1}}%
\put(-\Y,-\Y){\swhead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\end{picture}}%

% \SWDOTAR{n} draws a south-west dotted arrow of length n units
\newcommand{\SWDOTAR}[1]%
{\truex{100}\truey{212}%
\Y=#1%
\divide\Y by 2%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(\Y,\Y)(-\value{y},-\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(-\Y,-\Y){\swhead}%
\end{picture}}%

% \SWMONO{n} draws a south-west monomorphism of length n units
\newcommand{\SWMONO}[1]{%
\Y=#1%
\divide \Y by 2%
\Truetail%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\begin{picture}(0,0)%
\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
\put(\monolength,\monolength){\swhead}%
\put(-\Y,-\Y){\swhead}%
\end{picture}}%

% \SWEPI{n} draws a south-west epimorphism of length n units
\newcommand{\SWEPI}[1]{%
\Y=#1%
\divide\Y by 2%
\Truehead%
\bimolength=#1%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\begin{picture}(0,0)%
\put(\Y,\Y){\line(-1,-1){\bimolength}}%
\put(-\epilength,-\epilength){\swhead}%
\put(-\Y,-\Y){\swhead}%
\end{picture}}%

% \SWBIMO{n} draws a south-west bimorphism of length n units
\newcommand{\SWBIMO}[1]{%
\Y=#1%
\divide\Y by 2%
\Truetail\Truehead%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\begin{picture}(0,0)%
\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
\put(\monolength,\monolength){\swhead}%
\put(-\epilength,-\epilength){\swhead}%
\put(-\Y,-\Y){\swhead}%
\end{picture}}%

% \SWBIAR{n} draws a pair of south-west arrows of length n units
\newcommand{\SWBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\monolength,-\epilength){\swhead}%
\put(-\epilength,-\monolength){\swhead}%
\end{picture}}\end{picture}}%

% \SWBIDIST{n} draws a pair of south-west distributors of length n units
\newcommand{\SWBIDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
\put(-\epilength,-\monolength){\swhead}%
\end{picture}}%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by \value{x}%
\epilength=#1%
\advance\epilength by -\value{x}%
\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
\put(-\epilength,-\monolength){\swhead}%
\end{picture}}%
\put(\value{x},-\value{x}){\circle{\value{y}}}%
\put(-\value{x},\value{x}){\circle{\value{y}}}%
\end{picture}}%

% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
\newcommand{\SWADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
\put(-\monolength,-\epilength){\swhead}%
\end{picture}}%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},\value{x}){\line(1,1){#1}}%
\put(\monolength,\epilength){\nehead}%
\end{picture}}\end{picture}}%

% \SWADJDIST{n} draws a south-west pair of adjoint distributors of length n units
\newcommand{\SWADJDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
\put(-\monolength,-\epilength){\swhead}%
\end{picture}}%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},\value{x}){\line(1,1){#1}}%
\put(\monolength,\epilength){\nehead}%
\end{picture}}%
\put(-\value{x},\value{x}){\circle{\value{y}}}%
\put(\value{x},-\value{x}){\circle{\value{y}}}%
\end{picture}}%


% All the following commands draw south-west arrows

% south-west arrow of length nx100 units
\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%

% south-west arrow
\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%

% south-west arrow with upper name [1] and length nx100 units
\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%

% south-west arrow with upper name
\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%

% south-west arrow with lower name [1]  and length nx100 units
\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%

% south-west arrow with lower name [1]
\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%

% south-west distributor of length nx100 units
\def\basicswdist[#1]{\fdcase{\SWDIST}{}{}{#100}}%

% south-west distributor
\newcommand{\swdist}{\@ifnextchar[{\basicswdist}{\basicswdist[59]}}%

% south-west distributor with upper name [1] and length nx100 units
\def\basicSwdist[#1]#2{\fdcase{\SWDIST}{#2}{}{#100}}%

% south-west distributor with upper name
\newcommand{\Swdist}{\@ifnextchar[{\basicSwdist}{\basicSwdist[59]}}%

% south-west distributor with lower name [1]  and length nx100 units
\def\basicswdisT[#1]#2{\fdcase{\SWDIST}{}{#2}{#100}}%

% south-west distributor with lower name [1]
\newcommand{\swdisT}{\@ifnextchar[{\basicswdisT}{\basicswdisT[59]}}%

% south-west dotted arrow of length nx100 units
\def\basicswdotar[#1]{\fdcase{\SWDOTAR}{}{}{#100}}%

% south-west dotted arrow
\newcommand{\swdotar}{\@ifnextchar[{\basicswdotar}{\basicswdotar[59]}}%

% south-west dotted arrow with upper name [1] and length nx100 units
\def\basicSwdotar[#1]#2{\fdcase{\SWDOTAR}{#2}{}{#100}}%

% south-west dotted arrow with upper name
\newcommand{\Swdotar}{\@ifnextchar[{\basicSwdotar}{\basicSwdotar[59]}}%

% south-west dotted arrow with lower name [1]  and length nx100 units
\def\basicswdotaR[#1]#2{\fdcase{\SWDOTAR}{}{#2}{#100}}%

% south-west dotted arrow with lower name [1]
\newcommand{\swdotaR}{\@ifnextchar[{\basicswdotaR}{\basicswdotaR[59]}}%

% south-west monomorphism of length nx100 units
\def\basicswmono[#1]{\fdcase{\SWMONO}{}{}{#100}}%

% south-west monomorphism
\newcommand{\swmono}{\@ifnextchar[{\basicswmono}{\basicswmono[59]}}%

% south-west monomorphism with upper name [1] and length nx100 units
\def\basicSwmono[#1]#2{\fdcase{\SWMONO}{#2}{}{#100}}%

% south-west monomophism with upper name
\newcommand{\Swmono}{\@ifnextchar[{\basicSwmono}{\basicSwmono[59]}}%

% south-west monomorphism with lower name [1]  and length nx100 units
\def\basicswmonO[#1]#2{\fdcase{\SWMONO}{}{#2}{#100}}%

% south-west monomorphism with lower name [1]
\newcommand{\swmonO}{\@ifnextchar[{\basicswmonO}{\basicswmonO[59]}}%

% south-west epimorphism of length nx100 units
\def\basicswepi[#1]{\fdcase{\SWEPI}{}{}{#100}}%

% south-west epimorphism
\newcommand{\swepi}{\@ifnextchar[{\basicswepi}{\basicswepi[59]}}%

% south-west epimorphism with upper name [1] and length nx100 units
\def\basicSwepi[#1]#2{\fdcase{\SWEPI}{#2}{}{#100}}%

% south-west epimorphism with upper name
\newcommand{\Swepi}{\@ifnextchar[{\basicSwepi}{\basicSwepi[59]}}%

% south-west epimorphism with lower name [1]  and length nx100 units
\def\basicswepI[#1]#2{\fdcase{\SWEPI}{}{#2}{#100}}%

% south-west epimorphism with lower name [1]
\newcommand{\swepI}{\@ifnextchar[{\basicswepI}{\basicswepI[59]}}%

% south-west bimorphism of length nx100 units
\def\basicswbimo[#1]{\fdcase{\SWBIMO}{}{}{#100}}%

% south-west bimorphism
\newcommand{\swbimo}{\@ifnextchar[{\basicswbimo}{\basicswbimo[59]}}%

% south-west bimorphism with upper name [1] and length nx100 units
\def\basicSwbimo[#1]#2{\fdcase{\SWBIMO}{#2}{}{#100}}%

% south-west bimorphism with upper name
\newcommand{\Swbimo}{\@ifnextchar[{\basicSwbimo}{\basicSwbimo[59]}}%

% south-west bimorphism with lower name [1]  and length nx100 units
\def\basicswbimO[#1]#2{\fdcase{\SWBIMO}{}{#2}{#100}}%

% south-west bimorphism with lower name [1]
\newcommand{\swbimO}{\@ifnextchar[{\basicswbimO}{\basicswbimO[59]}}%

% south-west isomorphism of length nx100 units
\def\basicswiso[#1]{\fdcase{\SWAR}{\hspace{-2pt}\cong}{}{#100}}%

% south-west isomorphism
\newcommand{\swiso}{\@ifnextchar[{\basicswiso}{\basicswiso[59]}}%

% south-west isomorphism with upper name [1] and length nx100 units
\def\basicSwiso[#1]#2{\fdcase{\SWAR}{#2}{\cong}{#100}}%

% south-west isomorphism with upper name
\newcommand{\Swiso}{\@ifnextchar[{\basicSwiso}{\basicSwiso[59]}}%

% south-west isomorphism with lower name [1]  and length nx100 units
\def\basicswisO[#1]#2{\fdcase{\SWAR}{\hspace{-2pt}\cong}{#2}{#100}}%

% south-west isomorphism with lower name [1]
\newcommand{\swisO}{\@ifnextchar[{\basicswisO}{\basicswisO[59]}}%

% south-west equality
\let\sweql\neeql%

% south-west equality with upper name [1]
\let\Sweql=\Neeql%

% south-west equality with lower name [1]
\let\sweqL=\neeqL%

% pair of south-west arrows of length nx100 units
\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%

% pair of south-west arrows
\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%

% pair of south-west arrows with names [1][2] and length nx100 units
\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%

% pair of south-west arrows with names
\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
\let\swbiaR=\Swbiar

% pair of south-west adjoint arrows of length nx100 units
\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%

% pair of south-west adjoint arrows
\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%

% pair of south-west adjoint arrows with names [1][2] and length nx100 units
\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%

% pair of south-west adjoint arrows with names
\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
\let\swadjaR=\Swadjar

% pair of south-west distributors of length nx100 units
\def\basicswbidist[#1]{\fdbicase{\SWBIDIST}{}{}{#100}}%

% pair of south-west distributors
\newcommand{\swbidist}{\@ifnextchar[{\basicswbidist}{\basicswbidist[59]}}%

% pair of south-west distributors with names [1][2] and length nx100 units
\def\basicSwbidist[#1]#2#3{\fdbicase{\SWBIDIST}{#2}{#3}{#100}}%

% pair of south-west distributors with names
\newcommand{\Swbidist}{\@ifnextchar[{\basicSwbidist}{\basicSwbidist[59]}}%
\let\swbidisT=\Swbidist

% pair of south-west adjoint distributors of length nx100 units
\def\basicswadjdist[#1]{\fdbicase{\SWADJDIST}{}{}{#100}}%

% pair of south-west adjoint distributors
\newcommand{\swadjdist}{\@ifnextchar[{\basicswadjdist}{\basicswadjdist[59]}}%

% pair of south-west adjoint distributors with names [1][2] and length nx100 units
\def\basicSwadjdist[#1]#2#3{\fdbicase{\SWADJDIST}{#2}{#3}{#100}}%

% pair of south-west adjoint distributors with names
\newcommand{\Swadjdist}{\@ifnextchar[{\basicSwadjdist}{\basicSwadjdist[59]}}%
\let\swadjdisT=\Swadjdist



% MACROS FOR  SECOND DIAGONAL PICTURES

% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
% and length n units
\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{100}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
\truex{300}\truey{800}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
\end{picture}}%

% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
% and length n units
\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{350}\truey{600}\truez{950}%
\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
\truex{450}\truey{600}\truez{1050}%
\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
\end{picture}}%


% SOUTH-EAST ARROWS

% \SEAR{n} draws a south-east arrow of length nx100 units
\newcommand{\SEAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\line(1,-1){#1}}%
\put(\Y,-\Y){\sehead}%
\end{picture}}%

% \SEDIST{n} draws a south-east distributor of length n units
\newcommand{\SEDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\line(1,-1){#1}}%
\put(\Y,-\Y){\sehead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\end{picture}}%

% \SEDOTAR{n} draws a south-east dotted arrow of length n units
\newcommand{\SEDOTAR}[1]%
{\truex{100}\truey{212}%
\Y=#1%
\divide\Y by 2%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(-\Y,\Y)(\value{y},-\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(\Y,-\Y){\sehead}%
\end{picture}}%

% \SEMONO{n} draws a south-east monomorphism of length n units
\newcommand{\SEMONO}[1]{%
\Y=#1%
\divide \Y by 2%
\Truetail%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\begin{picture}(0,0)%
\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
\put(-\monolength,\monolength){\sehead}%
\put(\Y,-\Y){\sehead}%
\end{picture}}%

% \SEEPI{n} draws a south-east epimorphism of length n units
\newcommand{\SEEPI}[1]{%
\Y=#1%
\divide\Y by 2%
\Truehead%
\bimolength=#1%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\begin{picture}(0,0)%
\put(-\Y,\Y){\line(1,-1){\bimolength}}%
\put(\epilength,-\epilength){\sehead}%
\put(\Y,-\Y){\sehead}%
\end{picture}}%

% \SEBIMO{n} draws a south-east bimorphism of length n units
\newcommand{\SEBIMO}[1]{%
\Y=#1%
\divide\Y by 2%
\Truetail\Truehead%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\begin{picture}(0,0)%
\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
\put(-\monolength,\monolength){\sehead}%
\put(\epilength,-\epilength){\sehead}%
\put(\Y,-\Y){\sehead}%
\end{picture}}%

% \SEBIAR{n} draws a pair of south-east arrows of length n units
\newcommand{\SEBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
\put(\value{x},\value{x}){\line(1,-1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\monolength,-\epilength){\sehead}%
\put(\epilength,-\monolength){\sehead}%
\end{picture}}\end{picture}}%

% \SEBIDIST{n} draws a pair of south-east distributors of length n units
\newcommand{\SEBIDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},\value{x}){\line(1,-1){#1}}%
\put(\epilength,-\monolength){\sehead}%
\end{picture}}%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by \value{x}%
\epilength=#1%
\advance\epilength by -\value{x}%
\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
\put(\epilength,-\monolength){\sehead}%
\end{picture}}%
\put(-\value{x},-\value{x}){\circle{\value{y}}}%
\put(\value{x},\value{x}){\circle{\value{y}}}%
\end{picture}}%

% \SEEQL{n} draws a south-east equality of length n units
\newcommand{\SEEQL}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{70}%
\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
\put(\value{x},\value{x}){\line(1,-1){#1}}%
\end{picture}}\end{picture}}%

% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
\newcommand{\SEADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
\put(\monolength,-\epilength){\sehead}%
\end{picture}}%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},\value{x}){\line(-1,1){#1}}%
\put(-\monolength,\epilength){\nwhead}%
\end{picture}}\end{picture}}%

% \SEADJDIST{n} draws a south-east pair of adjoint distributors of length n units
\newcommand{\SEADJDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
\put(\monolength,-\epilength){\sehead}%
\end{picture}}%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},\value{x}){\line(-1,1){#1}}%
\put(-\monolength,\epilength){\nwhead}%
\end{picture}}%
\put(-\value{x},-\value{x}){\circle{\value{y}}}%
\put(\value{x},\value{x}){\circle{\value{y}}}%
\end{picture}}%


% All the following commands draw south-east arrows

% south-east arrow of length nx100 units
\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%

% south-east arrow
\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%

% south-east arrow with upper name [1] and length nx100 units
\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%

% south-east arrow with upper name
\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%

% south-east arrow with lower name [1]  and length nx100 units
\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%

% south-east arrow with lower name [1]
\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%

% south-east distributor of length nx100 units
\def\basicsedist[#1]{\sdcase{\SEDIST}{}{}{#100}}%

% south-east distributor
\newcommand{\sedist}{\@ifnextchar[{\basicsedist}{\basicsedist[59]}}%

% south-east distributor with upper name [1] and length nx100 units
\def\basicSedist[#1]#2{\sdcase{\SEDIST}{#2}{}{#100}}%

% south-east distributor with upper name
\newcommand{\Sedist}{\@ifnextchar[{\basicSedist}{\basicSedist[59]}}%

% south-east distributor with lower name [1]  and length nx100 units
\def\basicsedisT[#1]#2{\sdcase{\SEDIST}{}{#2}{#100}}%

% south-east distributor with lower name [1]
\newcommand{\sedisT}{\@ifnextchar[{\basicsedisT}{\basicsedisT[59]}}%

% south-east dotted arrow of length nx100 units
\def\basicsedotar[#1]{\sdcase{\SEDOTAR}{}{}{#100}}%

% south-east dotted arrow
\newcommand{\sedotar}{\@ifnextchar[{\basicsedotar}{\basicsedotar[59]}}%

% south-east dotted arrow with upper name [1] and length nx100 units
\def\basicSedotar[#1]#2{\sdcase{\SEDOTAR}{#2}{}{#100}}%

% south-east dotted arrow with upper name
\newcommand{\Sedotar}{\@ifnextchar[{\basicSedotar}{\basicSedotar[59]}}%

% south-east dotted arrow with lower name [1]  and length nx100 units
\def\basicsedotaR[#1]#2{\sdcase{\SEDOTAR}{}{#2}{#100}}%

% south-east dotted arrow with lower name [1]
\newcommand{\sedotaR}{\@ifnextchar[{\basicsedotaR}{\basicsedotaR[59]}}%

% south-east monomorphism of length nx100 units
\def\basicsemono[#1]{\sdcase{\SEMONO}{}{}{#100}}%

% south-east monomorphism
\newcommand{\semono}{\@ifnextchar[{\basicsemono}{\basicsemono[59]}}%

% south-east monomorphism with upper name [1] and length nx100 units
\def\basicSemono[#1]#2{\sdcase{\SEMONO}{#2}{}{#100}}%

% south-east monomophism with upper name
\newcommand{\Semono}{\@ifnextchar[{\basicSemono}{\basicSemono[59]}}%

% south-east monomorphism with lower name [1]  and length nx100 units
\def\basicsemonO[#1]#2{\sdcase{\SEMONO}{}{#2}{#100}}%

% south-east monomorphism with lower name [1]
\newcommand{\semonO}{\@ifnextchar[{\basicsemonO}{\basicsemonO[59]}}%

% south-east epimorphism of length nx100 units
\def\basicseepi[#1]{\sdcase{\SEEPI}{}{}{#100}}%

% south-east epimorphism
\newcommand{\seepi}{\@ifnextchar[{\basicseepi}{\basicseepi[59]}}%

% south-east epimorphism with upper name [1] and length nx100 units
\def\basicSeepi[#1]#2{\sdcase{\SEEPI}{#2}{}{#100}}%

% south-east epimorphism with upper name
\newcommand{\Seepi}{\@ifnextchar[{\basicSeepi}{\basicSeepi[59]}}%

% south-east epimorphism with lower name [1]  and length nx100 units
\def\basicseepI[#1]#2{\sdcase{\SEEPI}{}{#2}{#100}}%

% south-east epimorphism with lower name [1]
\newcommand{\seepI}{\@ifnextchar[{\basicseepI}{\basicseepI[59]}}%

% south-east bimorphism of length nx100 units
\def\basicsebimo[#1]{\sdcase{\SEBIMO}{}{}{#100}}%

% south-east bimorphism
\newcommand{\sebimo}{\@ifnextchar[{\basicsebimo}{\basicsebimo[59]}}%

% south-east bimorphism with upper name [1] and length nx100 units
\def\basicSebimo[#1]#2{\sdcase{\SEBIMO}{#2}{}{#100}}%

% south-east bimorphism with upper name
\newcommand{\Sebimo}{\@ifnextchar[{\basicSebimo}{\basicSebimo[59]}}%

% south-east bimorphism with lower name [1]  and length nx100 units
\def\basicsebimO[#1]#2{\sdcase{\SEBIMO}{}{#2}{#100}}%

% south-east bimorphism with lower name [1]
\newcommand{\sebimO}{\@ifnextchar[{\basicsebimO}{\basicsebimO[59]}}%

% south-east isomorphism of length nx100 units
\def\basicseiso[#1]{\sdcase{\SEAR}{\hspace{-2pt}\cong}{}{#100}}%

% south-east isomorphism
\newcommand{\seiso}{\@ifnextchar[{\basicseiso}{\basicseiso[59]}}%

% south-east isomorphism with upper name [1] and length nx100 units
\def\basicSeiso[#1]#2{\sdcase{\SEAR}{#2}{\cong}{#100}}%

% south-east isomorphism with upper name
\newcommand{\Seiso}{\@ifnextchar[{\basicSeiso}{\basicSeiso[59]}}%

% south-east isomorphism with lower name [1]  and length nx100 units
\def\basicseisO[#1]#2{\sdcase{\SEAR}{\hspace{-2pt}\cong}{#2}{#100}}%

% south-east isomorphism with lower name [1]
\newcommand{\seisO}{\@ifnextchar[{\basicseisO}{\basicseisO[59]}}%

% south-east equality of length nx100 units
\def\basicseeql[#1]{\sdcase{\SEEQL}{}{}{#100}}%

% south-east equality
\newcommand{\seeql}{\@ifnextchar[{\basicseeql}{\basicseeql[59]}}%

% south-east equality with upper name [1] and length nx100 units
\def\basicSeeql[#1]#2{\sdcase{\SEEQL}{#2}{}{#100}}%

% south-east equality with upper name
\newcommand{\Seeql}{\@ifnextchar[{\basicSeeql}{\basicSeeql[59]}}%

% south-east equality with lower name [1]  and length nx100 units
\def\basicseeqL[#1]#2{\sdcase{\SEEQL}{}{#2}{#100}}%

% south-east equality with lower name [1]
\newcommand{\seeqL}{\@ifnextchar[{\basicseeqL}{\basicseeqL[59]}}%

% pair of south-east arrows of length nx100 units
\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%

% pair of south-east arrows
\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%

% pair of south-east arrows with names [1][2] and length nx100 units
\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%

% pair of south-east arrows with names
\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
\let\sebiaR=\Sebiar

% pair of south-east adjoint arrows of length nx100 units
\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%

% pair of south-east adjoint arrows
\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%

% pair of south-east adjoint arrows with names [1][2] and length nx100 units
\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%

% pair of south-east adjoint arrows with names
\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
\let\seadjaR=\Seadjar

% pair of south-east distributors of length nx100 units
\def\basicsebidist[#1]{\sdbicase{\SEBIDIST}{}{}{#100}}%

% pair of south-east distributors
\newcommand{\sebidist}{\@ifnextchar[{\basicsebidist}{\basicsebidist[59]}}%

% pair of south-east distributors with names [1][2] and length nx100 units
\def\basicSebidist[#1]#2#3{\sdbicase{\SEBIDIST}{#2}{#3}{#100}}%

% pair of south-east distributors with names
\newcommand{\Sebidist}{\@ifnextchar[{\basicSebidist}{\basicSebidist[59]}}%
\let\sebidisT=\Sebidist

% pair of south-east adjoint distributors of length nx100 units
\def\basicseadjdist[#1]{\sdbicase{\SEADJDIST}{}{}{#100}}%

% pair of south-east adjoint distributors
\newcommand{\seadjdist}{\@ifnextchar[{\basicseadjdist}{\basicseadjdist[59]}}%

% pair of south-east adjoint distributors with names [1][2] and length nx100 units
\def\basicSeadjdist[#1]#2#3{\sdbicase{\SEADJDIST}{#2}{#3}{#100}}%

% pair of south-east adjoint distributors with names
\newcommand{\Seadjdist}{\@ifnextchar[{\basicSeadjdist}{\basicSeadjdist[59]}}%
\let\seadjdisT=\Seadjdist


% NORTH-WEST ARROWS

% \NWAR{n} draws a north-west arrow of length nx100 units
\newcommand{\NWAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,-\Y){\line(-1,1){#1}}%
\put(-\Y,\Y){\nwhead}%
\end{picture}}%

% \NWDIST{n} draws a north-west distributor of length n units
\newcommand{\NWDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,-\Y){\line(-1,1){#1}}%
\put(-\Y,\Y){\nwhead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\end{picture}}%

% \NWDOTAR{n} draws a north-west dotted arrow of length n units
\newcommand{\NWDOTAR}[1]%
{\truex{100}\truey{212}%
\Y=#1%
\divide\Y by 2%
\NUMBEROFDOTS=#1%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(\Y,-\Y)(-\value{y},\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(-\Y,\Y){\nwhead}%
\end{picture}}%

% \NWMONO{n} draws a north-west monomorphism of length n units
\newcommand{\NWMONO}[1]{%
\Y=#1%
\divide \Y by 2%
\Truetail%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\begin{picture}(0,0)%
\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
\put(\monolength,-\monolength){\nwhead}%
\put(-\Y,\Y){\nwhead}%
\end{picture}}%

% \NWEPI{n} draws a north-west epimorphism of length n units
\newcommand{\NWEPI}[1]{%
\Y=#1%
\divide\Y by 2%
\Truehead%
\bimolength=#1%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\begin{picture}(0,0)%
\put(\Y,-\Y){\line(-1,1){\bimolength}}%
\put(-\epilength,\epilength){\nwhead}%
\put(-\Y,\Y){\nwhead}%
\end{picture}}%

% \NWBIMO{n} draws a north-west bimorphism of length n units
\newcommand{\NWBIMO}[1]{%
\Y=#1%
\divide\Y by 2%
\Truetail\Truehead%
\bimolength=#1%
\advance\bimolength by -\Truemonotail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\Trueepihead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\begin{picture}(0,0)%
\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
\put(\monolength,-\monolength){\nwhead}%
\put(-\epilength,\epilength){\nwhead}%
\put(-\Y,\Y){\nwhead}%
\end{picture}}%

% \NWBIAR{n} draws a pair of north-west arrows of length n units
\newcommand{\NWBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
\put(\value{x},\value{x}){\line(-1,1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\monolength,\epilength){\nwhead}%
\put(-\epilength,\monolength){\nwhead}%
\end{picture}}\end{picture}}%

% \NWBIDIST{n} draws a pair of north-west distributors of length n units
\newcommand{\NWBIDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
\put(-\epilength,\monolength){\nwhead}%
\end{picture}}%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by \value{x}%
\epilength=#1%
\advance\epilength by -\value{x}%
\put(\value{x},\value{x}){\line(-1,1){#1}}%
\put(-\epilength,\monolength){\nwhead}%
\end{picture}}%
\put(-\value{x},-\value{x}){\circle{\value{y}}}%
\put(\value{x},\value{x}){\circle{\value{y}}}%
\end{picture}}%

% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
\newcommand{\NWADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
\put(-\epilength,\monolength){\nwhead}%
\end{picture}}%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},\value{x}){\line(1,-1){#1}}%
\put(\epilength,-\monolength){\sehead}%
\end{picture}}\end{picture}}%

% \NWADJDIST{n} draws a north-west pair of adjoint distributors of length n units
\newcommand{\NWADJDIST}[1]{%
\Y=#1%
\divide\Y by 2%
\truey{400}%
\begin{picture}(0,0)%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
\put(-\epilength,\monolength){\nwhead}%
\end{picture}}%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},\value{x}){\line(1,-1){#1}}%
\put(\epilength,-\monolength){\sehead}%
\end{picture}}%
\put(-\value{x},-\value{x}){\circle{\value{y}}}%
\put(\value{x},\value{x}){\circle{\value{y}}}%
\end{picture}}%


% All the following commands draw north-west arrows

% north-west arrow of length nx100 units
\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%

% north-west arrow
\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%

% north-west arrow with upper name [1] and length nx100 units
\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%

% north-west arrow with upper name
\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%

% north-west arrow with lower name [1]  and length nx100 units
\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%

% north-west arrow with lower name [1]
\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%

% north-west distributor of length nx100 units
\def\basicnwdist[#1]{\sdcase{\NWDIST}{}{}{#100}}%

% north-west distributor
\newcommand{\nwdist}{\@ifnextchar[{\basicnwdist}{\basicnwdist[59]}}%

% north-west distributor with upper name [1] and length nx100 units
\def\basicNwdist[#1]#2{\sdcase{\NWDIST}{#2}{}{#100}}%

% north-west distributor with upper name
\newcommand{\Nwdist}{\@ifnextchar[{\basicNwdist}{\basicNwdist[59]}}%

% north-west distributor with lower name [1]  and length nx100 units
\def\basicnwdisT[#1]#2{\sdcase{\NWDIST}{}{#2}{#100}}%

% north-west distributor with lower name [1]
\newcommand{\nwdisT}{\@ifnextchar[{\basicnwdisT}{\basicnwdisT[59]}}%

% north-west dotted arrow of length nx100 units
\def\basicnwdotar[#1]{\sdcase{\NWDOTAR}{}{}{#100}}%

% north-west dotted arrow
\newcommand{\nwdotar}{\@ifnextchar[{\basicnwdotar}{\basicnwdotar[59]}}%

% north-west dotted arrow with upper name [1] and length nx100 units
\def\basicNwdotar[#1]#2{\sdcase{\NWDOTAR}{#2}{}{#100}}%

% north-west dotted arrow with upper name
\newcommand{\Nwdotar}{\@ifnextchar[{\basicNwdotar}{\basicNwdotar[59]}}%

% north-west dotted arrow with lower name [1]  and length nx100 units
\def\basicnwdotaR[#1]#2{\sdcase{\NWDOTAR}{}{#2}{#100}}%

% north-west dotted arrow with lower name [1]
\newcommand{\nwdotaR}{\@ifnextchar[{\basicnwdotaR}{\basicnwdotaR[59]}}%

% north-west monomorphism of length nx100 units
\def\basicnwmono[#1]{\sdcase{\NWMONO}{}{}{#100}}%

% north-west monomorphism
\newcommand{\nwmono}{\@ifnextchar[{\basicnwmono}{\basicnwmono[59]}}%

% north-west monomorphism with upper name [1] and length nx100 units
\def\basicNwmono[#1]#2{\sdcase{\NWMONO}{#2}{}{#100}}%

% north-west monomophism with upper name
\newcommand{\Nwmono}{\@ifnextchar[{\basicNwmono}{\basicNwmono[59]}}%

% north-west monomorphism with lower name [1]  and length nx100 units
\def\basicnwmonO[#1]#2{\sdcase{\NWMONO}{}{#2}{#100}}%

% north-west monomorphism with lower name [1]
\newcommand{\nwmonO}{\@ifnextchar[{\basicnwmonO}{\basicnwmonO[59]}}%

% north-west epimorphism of length nx100 units
\def\basicnwepi[#1]{\sdcase{\NWEPI}{}{}{#100}}%

% north-west epimorphism
\newcommand{\nwepi}{\@ifnextchar[{\basicnwepi}{\basicnwepi[59]}}%

% north-west epimorphism with upper name [1] and length nx100 units
\def\basicNwepi[#1]#2{\sdcase{\NWEPI}{#2}{}{#100}}%

% north-west epimorphism with upper name
\newcommand{\Nwepi}{\@ifnextchar[{\basicNwepi}{\basicNwepi[59]}}%

% north-west epimorphism with lower name [1]  and length nx100 units
\def\basicnwepI[#1]#2{\sdcase{\NWEPI}{}{#2}{#100}}%

% north-west epimorphism with lower name [1]
\newcommand{\nwepI}{\@ifnextchar[{\basicnwepI}{\basicnwepI[59]}}%

% north-west bimorphism of length nx100 units
\def\basicnwbimo[#1]{\sdcase{\NWBIMO}{}{}{#100}}%

% north-west bimorphism
\newcommand{\nwbimo}{\@ifnextchar[{\basicnwbimo}{\basicnwbimo[59]}}%

% north-west bimorphism with upper name [1] and length nx100 units
\def\basicNwbimo[#1]#2{\sdcase{\NWBIMO}{#2}{}{#100}}%

% north-west bimorphism with upper name
\newcommand{\Nwbimo}{\@ifnextchar[{\basicNwbimo}{\basicNwbimo[59]}}%

% north-west bimorphism with lower name [1]  and length nx100 units
\def\basicnwbimO[#1]#2{\sdcase{\NWBIMO}{}{#2}{#100}}%

% north-west bimorphism with lower name [1]
\newcommand{\nwbimO}{\@ifnextchar[{\basicnwbimO}{\basicnwbimO[59]}}%

% north-west isomorphism of length nx100 units
\def\basicnwiso[#1]{\sdcase{\NWAR}{\hspace{-2pt}\cong}{}{#100}}%

% north-west isomorphism
\newcommand{\nwiso}{\@ifnextchar[{\basicnwiso}{\basicnwiso[59]}}%

% north-west isomorphism with upper name [1] and length nx100 units
\def\basicNwiso[#1]#2{\sdcase{\NWAR}{#2}{\cong}{#100}}%

% north-west isomorphism with upper name
\newcommand{\Nwiso}{\@ifnextchar[{\basicNwiso}{\basicNwiso[59]}}%

% north-west isomorphism with lower name [1]  and length nx100 units
\def\basicnwisO[#1]#2{\sdcase{\NWAR}{\hspace{-2pt}\cong}{#2}{#100}}%

% north-west isomorphism with lower name [1]
\newcommand{\nwisO}{\@ifnextchar[{\basicnwisO}{\basicnwisO[59]}}%

% north-west equality
\let\nweql=\seeql%

% north-west equality with upper name
\let\Nweql=\Seeql%

% north-west equality with lower name [1]
\let\nweqL=\seeqL%

% pair of north-west arrows of length nx100 units
\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%

% pair of north-west arrows
\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%

% pair of north-west arrows with names [1][2] and length nx100 units
\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%

% pair of north-west arrows with names
\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
\let\nwbiaR=\Nwbiar

% pair of north-west adjoint arrows of length nx100 units
\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%

% pair of north-west adjoint arrows
\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%

% pair of north-west adjoint arrows with names [1][2] and length nx100 units
\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%

% pair of north-west adjoint arrows with names
\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
\let\nwadjaR=\Nwadjar

% pair of north-west distributors of length nx100 units
\def\basicnwbidist[#1]{\sdbicase{\NWBIDIST}{}{}{#100}}%

% pair of north-west distributors
\newcommand{\nwbidist}{\@ifnextchar[{\basicnwbidist}{\basicnwbidist[59]}}%

% pair of north-west distributors with names [1][2] and length nx100 units
\def\basicNwbidist[#1]#2#3{\sdbicase{\NWBIDIST}{#2}{#3}{#100}}%

% pair of north-west distributors with names
\newcommand{\Nwbidist}{\@ifnextchar[{\basicNwbidist}{\basicNwbidist[59]}}%
\let\nwbidisT=\Nwbidist

% pair of north-west adjoint distributors of length nx100 units
\def\basicnwadjdist[#1]{\sdbicase{\NWADJDIST}{}{}{#100}}%

% pair of north-west adjoint distributors
\newcommand{\nwadjdist}{\@ifnextchar[{\basicnwadjdist}{\basicnwadjdist[59]}}%

% pair of north-west adjoint distributors with names [1][2] and length nx100 units
\def\basicNwadjdist[#1]#2#3{\sdbicase{\NWADJDIST}{#2}{#3}{#100}}%

% pair of north-west adjoint distributors with names
\newcommand{\Nwadjdist}{\@ifnextchar[{\basicNwadjdist}{\basicNwadjdist[59]}}%
\let\nwadjdisT=\Nwadjdist


% EAST-NORTH-EAST ARROWS

% The following commands produce east-north-east arrows
% of horizontal extent n units

% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
% and length n units
\newcommand{\ENEAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\line(2,1){#3}}%
\put(\Y,\Z){\enehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEDIST{f}{g}{n} draws a east-north-east distributor
% with names f, g and length n units
\newcommand{\ENEDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\line(2,1){#3}}%
\put(\Y,\Z){\enehead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\ENEDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(-\Y,-\Z)(\value{y},\value{z}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(\Y,\Z){\enehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEMONO{f}{g}{n} draws a east-north-east monomorphism
% with names f,g and length n units
\newcommand{\ENEMONO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\begin{picture}(0,0)%
\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
\put(-\monolength,-\secondmonolength){\enehead}%
\put(\Y,\Z){\enehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEEPI{f}{g}{n} draws a east-north-east epimorphism
% with names f, g and length n units
\newcommand{\ENEEPI}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\line(2,1){\bimolength}}%
\put(\epilength,\secondepilength){\enehead}%
\put(\Y,\Z){\enehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEBIMO{f}{g}{n} draws a east-north-east bimorphism
% with names f,g and length n units
\newcommand{\ENEBIMO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
\put(-\monolength,-\secondmonolength){\enehead}%
\put(\epilength,\secondepilength){\enehead}%
\put(\Y,\Z){\enehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEEQL{f}{g}{n} draws a east-north-east equality
% with names f,g and length n units
\newcommand{\ENEEQL}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\begin{picture}(0,0)%
\truex{44}\truey{89}%
\put(-\value{x},\value{y}){\line(2,1){#3}}%
\put(\value{x},-\value{y}){\line(2,1){#3}}%
\end{picture}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows
% with names f,g and length n units
\newcommand{\ENEBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},\value{y}){\line(2,1){#3}}%
\put(\value{x},-\value{y}){\line(2,1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\monolength,\secondepilength){\enehead}%
\put(\epilength,\secondmonolength){\enehead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEBIDIST{f}{g}{n} draws a pair of east-north-east distributors
% with names f,g and length n units
\newcommand{\ENEBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(-\Y,-\Z){\begin{picture}(0,0)%
\put(-\value{x},\value{y}){\line(2,1){#3}}%
\put(\value{x},-\value{y}){\line(2,1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\monolength,\secondepilength){\enehead}%
\put(\epilength,\secondmonolength){\enehead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows
% with names f,g and length n units
\newcommand{\ENEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(2,1){#3}}%
\put(\epilength,\secondmonolength){\enehead}%
\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
\put(-\value{x},\value{y}){\wswhead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEADJDIST{f}{g}{n} draws a east-north-east pair of adjoint distributors
% with names f,g and length n units
\newcommand{\ENEADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(-\Y,-\Z){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(2,1){#3}}%
\put(\epilength,\secondmonolength){\enehead}%
\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
\put(-\value{x},\value{y}){\wswhead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce east-north-east arrows;
% the default length is 13300 units

% basic east-north-east arrow
\def\basicenear[#1]{\ENEAR{}{}{#100}}%

% east-north-east arrow
\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%

% basic east-north-east arrow with upper name
\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%

% east-north-east arrow with upper name
\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%

% basic east-north-east arrow with lower name
\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%

% east-north-east arrow with lower name
\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%

% basic east-north-east distributor
\def\basicenedist[#1]{\ENEDIST{}{}{#100}}%

% east-north-east distributor
\newcommand{\enedist}{\@ifnextchar[{\basicenedist}{\basicenedist[133]}}%

% basic east-north-east distributor with upper name
\def\basicEnedist[#1]#2{\ENEDIST{#2}{}{#100}}%

% east-north-east distributor with upper name
\newcommand{\Enedist}{\@ifnextchar[{\basicEnedist}{\basicEnedist[133]}}%

% basic east-north-east distributor with lower name
\def\basicenedisT[#1]#2{\ENEDIST{}{#2}{#100}}%

% east-north-east distributor with lower name
\newcommand{\enedisT}{\@ifnextchar[{\basicenedisT}{\basicenedisT[133]}}%

% basic east-north-east dotted arrow
\def\basicenedotar[#1]{\ENEDOTAR{}{}{#100}}%

% east-north-east dotted arrow
\newcommand{\enedotar}{\@ifnextchar[{\basicenedotar}{\basicenedotar[133]}}%

% basic east-north-east dotted arrow with upper name
\def\basicEnedotar[#1]#2{\ENEDOTAR{#2}{}{#100}}%

% east-north-east dotted arrow with upper name
\newcommand{\Enedotar}{\@ifnextchar[{\basicEnedotar}{\basicEnedotar[133]}}%

% basic east-north-east dotted arrow with lower name
\def\basicenedotaR[#1]#2{\ENEDOTAR{}{#2}{#100}}%

% east-north-east dotted arrow with lower name
\newcommand{\enedotaR}{\@ifnextchar[{\basicenedotaR}{\basicenedotaR[133]}}%

% basic east-north-east monomorphism
\def\basicenemono[#1]{\ENEMONO{}{}{#100}}%

% east-north-east monomorphism
\newcommand{\enemono}{\@ifnextchar[{\basicenemono}{\basicenemono[133]}}%

% basic east-north-east monomorphism with upper name
\def\basicEnemono[#1]#2{\ENEMONO{#2}{}{#100}}%

% east-north-east monomorphism with upper name
\newcommand{\Enemono}{\@ifnextchar[{\basicEnemono}{\basicEnemono[133]}}%

% basic east-north-east monomorphism with lower name
\def\basicenemonO[#1]#2{\ENEMONO{}{#2}{#100}}%

% east-north-east monomorphism with lower name
\newcommand{\enemonO}{\@ifnextchar[{\basicenemonO}{\basicenemonO[133]}}%

% basic east-north-east epimorphism
\def\basiceneepi[#1]{\ENEEPI{}{}{#100}}%

% east-north-east epimorphism
\newcommand{\eneepi}{\@ifnextchar[{\basiceneepi}{\basiceneepi[133]}}%

% basic east-north-east epimorphism with upper name
\def\basicEneepi[#1]#2{\ENEEPI{#2}{}{#100}}%

% east-north-east epimorphism with upper name
\newcommand{\Eneepi}{\@ifnextchar[{\basicEneepi}{\basicEneepi[133]}}%

% basic east-north-east epimorphism with lower name
\def\basiceneepI[#1]#2{\ENEEPI{}{#2}{#100}}%

% east-north-east epimorphism with lower name
\newcommand{\eneepI}{\@ifnextchar[{\basiceneepI}{\basiceneepI[133]}}%

% basic east-north-east bimorphism
\def\basicenebimo[#1]{\ENEBIMO{}{}{#100}}%

% east-north-east bimorphism
\newcommand{\enebimo}{\@ifnextchar[{\basicenebimo}{\basicenebimo[133]}}%

% basic east-north-east bimorphism with upper name
\def\basicEnebimo[#1]#2{\ENEBIMO{#2}{}{#100}}%

% east-north-east bimorphism with upper name
\newcommand{\Enebimo}{\@ifnextchar[{\basicEnebimo}{\basicEnebimo[133]}}%

% basic east-north-east bimorphism with lower name
\def\basicenebimO[#1]#2{\ENEBIMO{}{#2}{#100}}%

% east-north-east bimorphism with lower name
\newcommand{\enebimO}{\@ifnextchar[{\basicenebimO}{\basicenebimO[133]}}%

% basic east-north-east isomorphism
\def\basiceneiso[#1]{\ENEAR{\cong}{}{#100}}%

% east-north-east isomorphism
\newcommand{\eneiso}{\@ifnextchar[{\basiceneiso}{\basiceneiso[133]}}%

% basic east-north-east isomorphism with upper name
\def\basicEneiso[#1]#2{\ENEAR{#2}{\cong}{#100}}%

% east-north-east isomorphism with upper name
\newcommand{\Eneiso}{\@ifnextchar[{\basicEneiso}{\basicEneiso[133]}}%

% basic east-north-east isomorphism with lower name
\def\basiceneisO[#1]#2{\ENEAR{\cong}{#2}{#100}}%

% east-north-east isomorphism with lower name
\newcommand{\eneisO}{\@ifnextchar[{\basiceneisO}{\basiceneisO[133]}}%

% basic east-north-east equality
\def\basiceneeql[#1]{\ENEEQL{}{}{#100}}%

% east-north-east equality
\newcommand{\eneeql}{\@ifnextchar[{\basiceneeql}{\basiceneeql[133]}}%

% basic east-north-east equality with upper name
\def\basicEneeql[#1]#2{\ENEEQL{#2}{}{#100}}%

% east-north-east equality with upper name
\newcommand{\Eneeql}{\@ifnextchar[{\basicEneeql}{\basicEneeql[133]}}%

% basic east-north-east equality with lower name
\def\basiceneeqL[#1]#2{\ENEEQL{}{#2}{#100}}%

% east-north-east equality with lower name
\newcommand{\eneeqL}{\@ifnextchar[{\basiceneeqL}{\basiceneeqL[133]}}%

% basic east-north-east pair of arrows
\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%

% east-north-east pair of arrows
\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%

% basic east-north-east pair of arrows with names
\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%

% east-north-east pair of arrows with names
\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
\let\enebiaR=\Enebiar

% basic east-north-east pair of distributors
\def\basicenebidist[#1]{\ENEBIDIST{}{}{#100}}%

% east-north-east pair of distributors
\newcommand{\enebidist}{\@ifnextchar[{\basicenebidist}{\basicenebidist[133]}}%

% basic east-north-east pair of distributors with names
\def\basicEnebidist[#1]#2#3{\ENEBIDIST{#2}{#3}{#100}}%

% east-north-east pair of distributors with names
\newcommand{\Enebidist}{\@ifnextchar[{\basicEnebidist}{\basicEnebidist[133]}}%
\let\enebidisT=\Enebidist

% basic east-north-east pair of adjoint arrows
\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%

% east-north-east pair of adjoint arrows
\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%

% basic east-north-east pair of adjoint  arrows with names
\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%

% east-north-east pair of adjoint arrows with names
\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
\let\eneadjaR=\Eneadjar

% basic east-north-east pair of adjoint distributors
\def\basiceneadjdist[#1]{\ENEADJDIST{}{}{#100}}%

% east-north-east pair of adjoint distributors
\newcommand{\eneadjdist}{\@ifnextchar[{\basiceneadjdist}{\basiceneadjdist[133]}}%

% basic east-north-east pair of adjoint distributors with names
\def\basicEneadjdist[#1]#2#3{\ENEADJDIST{#2}{#3}{#100}}%

% east-north-east pair of adjoint distributors with names
\newcommand{\Eneadjdist}{\@ifnextchar[{\basicEneadjdist}{\basicEneadjdist[133]}}%
\let\eneadjdisT=\Eneadjdist


% EAST-SOUTH-EAST ARROWS

% The following commands produce east-south-east arrows
% of horizontal extent n units

% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
% and length n units
\newcommand{\ESEAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\line(2,-1){#3}}%
\put(\Y,-\Z){\esehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEDIST{f}{g}{n} draws a east-south-east distributor
% with names f, g and length n units
\newcommand{\ESEDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\line(2,-1){#3}}%
\put(\Y,-\Z){\esehead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\ESEDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(-\Y,\Z)(\value{y},-\value{z}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(\Y,-\Z){\esehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEMONO{f}{g}{n} draws a east-south-east monomorphism
% with names f,g and length n units
\newcommand{\ESEMONO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\begin{picture}(0,0)%
\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
\put(-\monolength,\secondmonolength){\esehead}%
\put(\Y,-\Z){\esehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEEPI{f}{g}{n} draws a east-south-east epimorphism
% with names f, g and length n units
\newcommand{\ESEEPI}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\line(2,-1){\bimolength}}%
\put(\epilength,-\secondepilength){\esehead}%
\put(\Y,-\Z){\esehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEBIMO{f}{g}{n} draws a east-south-east bimorphism
% with names f,g and length n units
\newcommand{\ESEBIMO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
\put(-\monolength,\secondmonolength){\esehead}%
\put(\epilength,-\secondepilength){\esehead}%
\put(\Y,-\Z){\esehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEEQL{f}{g}{n} draws a east-south-east equality
% with names f,g and length n units
\newcommand{\ESEEQL}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\begin{picture}(0,0)%
\truex{44}\truey{89}%
\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
\put(\value{x},\value{y}){\line(2,-1){#3}}%
\end{picture}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows
% with names f,g and length n units
\newcommand{\ESEBIAR}[3]{%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
\put(\value{x},\value{y}){\line(2,-1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\monolength,-\secondepilength){\esehead}%
\put(\epilength,-\secondmonolength){\esehead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEBIDIST{f}{g}{n} draws a pair of east-south-east distributors
% with names f,g and length n units
\newcommand{\ESEBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(-\Y,\Z){\begin{picture}(0,0)%
\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
\put(\value{x},\value{y}){\line(2,-1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\monolength,-\secondepilength){\esehead}%
\put(\epilength,-\secondmonolength){\esehead}%
\end{picture}}
\put(\value{x},\value{y}){\circle{\value{z}}}%
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows
% with names f,g and length n units
\newcommand{\ESEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
\put(\monolength,-\secondepilength){\esehead}%
\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
\put(\value{x},\value{y}){\wnwhead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEADJDIST{f}{g}{n} draws a east-south-east pair of adjoint distributors
% with names f,g and length n units
\newcommand{\ESEADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(-\Y,\Z){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
\put(\monolength,-\secondepilength){\esehead}%
\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
\put(\value{x},\value{y}){\wnwhead}%
\end{picture}}
\put(\value{x},\value{y}){\circle{\value{z}}}%
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% The following commands produce east-south-east arrows;
% the default length is 13300 units

% basic east-south-east arrow
\def\basicesear[#1]{\ESEAR{}{}{#100}}%

% east-south-east arrow
\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%

% basic east-south-east arrow with upper name
\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%

% east-south-east arrow with upper name
\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%

% basic east-south-east arrow with lower name
\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%

% east-south-east arrow with lower name
\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%

% basic east-south-east distributor
\def\basicesedist[#1]{\ESEDIST{}{}{#100}}%

% east-south-east distributor
\newcommand{\esedist}{\@ifnextchar[{\basicesedist}{\basicesedist[133]}}%

% basic east-south-east distributor with upper name
\def\basicEsedist[#1]#2{\ESEDIST{#2}{}{#100}}%

% east-south-east distributor with upper name
\newcommand{\Esedist}{\@ifnextchar[{\basicEsedist}{\basicEsedist[133]}}%

% basic east-south-east distributor with lower name
\def\basicesedisT[#1]#2{\ESEDIST{}{#2}{#100}}%

% east-south-east distributor with lower name
\newcommand{\esedisT}{\@ifnextchar[{\basicesedisT}{\basicesedisT[133]}}%

% basic east-south-east dotted arrow
\def\basicesedotar[#1]{\ESEDOTAR{}{}{#100}}%

% east-south-east dotted arrow
\newcommand{\esedotar}{\@ifnextchar[{\basicesedotar}{\basicesedotar[133]}}%

% basic east-south-east dotted arrow with upper name
\def\basicEsedotar[#1]#2{\ESEDOTAR{#2}{}{#100}}%

% east-south-east dotted arrow with upper name
\newcommand{\Esedotar}{\@ifnextchar[{\basicEsedotar}{\basicEsedotar[133]}}%

% basic east-south-east dotted arrow with lower name
\def\basicesedotaR[#1]#2{\ESEDOTAR{}{#2}{#100}}%

% east-south-east dotted arrow with lower name
\newcommand{\esedotaR}{\@ifnextchar[{\basicesedotaR}{\basicesedotaR[133]}}%

% basic east-south-east monomorphism
\def\basicesemono[#1]{\ESEMONO{}{}{#100}}%

% east-south-east monomorphism
\newcommand{\esemono}{\@ifnextchar[{\basicesemono}{\basicesemono[133]}}%

% basic east-south-east monomorphism with upper name
\def\basicEsemono[#1]#2{\ESEMONO{#2}{}{#100}}%

% east-south-east monomorphism with upper name
\newcommand{\Esemono}{\@ifnextchar[{\basicEsemono}{\basicEsemono[133]}}%

% basic east-south-east monomorphism with lower name
\def\basicesemonO[#1]#2{\ESEMONO{}{#2}{#100}}%

% east-south-east monomorphism with lower name
\newcommand{\esemonO}{\@ifnextchar[{\basicesemonO}{\basicesemonO[133]}}%

% basic east-south-east epimorphism
\def\basiceseepi[#1]{\ESEEPI{}{}{#100}}%

% east-south-east epimorphism
\newcommand{\eseepi}{\@ifnextchar[{\basiceseepi}{\basiceseepi[133]}}%

% basic east-south-east epimorphism with upper name
\def\basicEseepi[#1]#2{\ESEEPI{#2}{}{#100}}%

% east-south-east epimorphism with upper name
\newcommand{\Eseepi}{\@ifnextchar[{\basicEseepi}{\basicEseepi[133]}}%

% basic east-south-east epimorphism with lower name
\def\basiceseepI[#1]#2{\ESEEPI{}{#2}{#100}}%

% east-south-east epimorphism with lower name
\newcommand{\eseepI}{\@ifnextchar[{\basiceseepI}{\basiceseepI[133]}}%

% basic east-south-east bimorphism
\def\basicesebimo[#1]{\ESEBIMO{}{}{#100}}%

% east-south-east bimorphism
\newcommand{\esebimo}{\@ifnextchar[{\basicesebimo}{\basicesebimo[133]}}%

% basic east-south-east bimorphism with upper name
\def\basicEsebimo[#1]#2{\ESEBIMO{#2}{}{#100}}%

% east-south-east bimorphism with upper name
\newcommand{\Esebimo}{\@ifnextchar[{\basicEsebimo}{\basicEsebimo[133]}}%

% basic east-south-east bimorphism with lower name
\def\basicesebimO[#1]#2{\ESEBIMO{}{#2}{#100}}%

% east-south-east bimorphism with lower name
\newcommand{\esebimO}{\@ifnextchar[{\basicesebimO}{\basicesebimO[133]}}%

% basic east-south-east isomorphism
\def\basiceseiso[#1]{\ESEAR{\cong}{}{#100}}%

% east-south-east isomorphism
\newcommand{\eseiso}{\@ifnextchar[{\basiceseiso}{\basiceseiso[133]}}%

% basic east-south-east isomorphism with upper name
\def\basicEseiso[#1]#2{\ESEAR{#2}{\cong}{#100}}%

% east-south-east isomorphism with upper name
\newcommand{\Eseiso}{\@ifnextchar[{\basicEseiso}{\basicEseiso[133]}}%

% basic east-south-east isomorphism with lower name
\def\basiceseisO[#1]#2{\ESEAR{\cong}{#2}{#100}}%

% east-south-east isomorphism with lower name
\newcommand{\eseisO}{\@ifnextchar[{\basiceseisO}{\basiceseisO[133]}}%

% basic east-south-east equality
\def\basiceseeql[#1]{\ESEEQL{}{}{#100}}%

% east-south-east equality
\newcommand{\eseeql}{\@ifnextchar[{\basiceseeql}{\basiceseeql[133]}}%

% basic east-south-east equality with upper name
\def\basicEseeql[#1]#2{\ESEEQL{#2}{}{#100}}%

% east-south-east equality with upper name
\newcommand{\Eseeql}{\@ifnextchar[{\basicEseeql}{\basicEseeql[133]}}%

% basic east-south-east equality with lower name
\def\basiceseeqL[#1]#2{\ESEEQL{}{#2}{#100}}%

% east-south-east equality with lower name
\newcommand{\eseeqL}{\@ifnextchar[{\basiceseeqL}{\basiceseeqL[133]}}%

% basic east-south-east pair of arrows
\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%

% east-south-east pair of arrows
\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%

% basic east-south-east pair of arrows with names
\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%

% east-south-east pair of arrows with names
\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
\let\esebiaR=\Esebiar

% basic east-south-east pair of distributors
\def\basicesebidist[#1]{\ESEBIDIST{}{}{#100}}%

% east-south-east pair of distributors
\newcommand{\esebidist}{\@ifnextchar[{\basicesebidist}{\basicesebidist[133]}}%

% basic east-south-east pair of distributors with names
\def\basicEsebidist[#1]#2#3{\ESEBIDIST{#2}{#3}{#100}}%

% east-south-east pair of distributors with names
\newcommand{\Esebidist}{\@ifnextchar[{\basicEsebidist}{\basicEsebidist[133]}}%
\let\esebidisT=\Esebidist

% basic east-south-east pair of adjoint arrows
\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%

% east-south-east pair of adjoint arrows
\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%

% basic east-south-east pair of adjoint  arrows with names
\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%

% east-south-east pair of adjoint arrows with names
\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
\let\eseadjaR=\Eseadjar

% basic east-south-east pair of adjoint distributors
\def\basiceseadjdist[#1]{\ESEADJDIST{}{}{#100}}%

% east-south-east pair of adjoint distributors
\newcommand{\eseadjdist}{\@ifnextchar[{\basiceseadjdist}{\basiceseadjdist[133]}}%

% basic east-south-east pair of adjoint distributors with names
\def\basicEseadjdist[#1]#2#3{\ESEADJDIST{#2}{#3}{#100}}%

% east-south-east pair of adjoint distributors with names
\newcommand{\Eseadjdist}{\@ifnextchar[{\basicEseadjdist}{\basicEseadjdist[133]}}%
\let\eseadjdisT=\Eseadjdist

% WEST-SOUTH-WEST ARROWS

% The following commands produce west-south-west arrows
% of horizontal extent n units

% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
% and length n units
\newcommand{\WSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\line(-2,-1){#3}}%
\put(-\Y,-\Z){\wswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWDIST{f}{g}{n} draws a west-south-west distributor
% with names f, g and length n units
\newcommand{\WSWDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\line(-2,-1){#3}}%
\put(-\Y,-\Z){\wswhead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\WSWDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(\Y,\Z)(-\value{y},-\value{z}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(-\Y,-\Z){\wswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWMONO{f}{g}{n} draws a west-south-west monomorphism
% with names f,g and length n units
\newcommand{\WSWMONO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\begin{picture}(0,0)%
\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
\put(\monolength,\secondmonolength){\wswhead}%
\put(-\Y,-\Z){\wswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWEPI{f}{g}{n} draws a west-south-west epimorphism
% with names f, g and length n units
\newcommand{\WSWEPI}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\line(-2,-1){\bimolength}}%
\put(-\epilength,-\secondepilength){\wswhead}%
\put(-\Y,-\Z){\wswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWBIMO{f}{g}{n} draws a west-south-west bimorphism
% with names f,g and length n units
\newcommand{\WSWBIMO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
\put(\monolength,\secondmonolength){\wswhead}%
\put(-\epilength,-\secondepilength){\wswhead}%
\put(-\Y,-\Z){\wswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows
% with names f,g and length n units
\newcommand{\WSWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\monolength,-\secondepilength){\wswhead}%
\put(-\epilength,-\secondmonolength){\wswhead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWBIDIST{f}{g}{n} draws a pair of west-south-west distributors
% with names f,g and length n units
\newcommand{\WSWBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(\Y,\Z){\begin{picture}(0,0)%
\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\monolength,-\secondepilength){\wswhead}%
\put(-\epilength,-\secondmonolength){\wswhead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows
% with names f,g and length n units
\newcommand{\WSWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
\put(-\monolength,-\secondepilength){\wswhead}%
\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
\put(-\value{x},\value{y}){\enehead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWADJDIST{f}{g}{n} draws a west-south-west pair of adjoint distributors
% with names f,g and length n units
\newcommand{\WSWADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(\Y,\Z){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
\put(-\monolength,-\secondepilength){\wswhead}%
\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
\put(-\value{x},\value{y}){\enehead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce west-south-west arrows;
% the default length is 13300 units

% basic west-south-west arrow
\def\basicwswar[#1]{\WSWAR{}{}{#100}}%

% west-south-west arrow
\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%

% basic west-south-west arrow with upper name
\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%

% west-south-west arrow with upper name
\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%

% basic west-south-west arrow with lower name
\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%

% west-south-west arrow with lower name
\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%

% basic west-south-west distributor
\def\basicwswdist[#1]{\WSWDIST{}{}{#100}}%

% west-south-west distributor
\newcommand{\wswdist}{\@ifnextchar[{\basicwswdist}{\basicwswdist[133]}}%

% basic west-south-west distributor with upper name
\def\basicWswdist[#1]#2{\WSWDIST{#2}{}{#100}}%

% west-south-west distributor with upper name
\newcommand{\Wswdist}{\@ifnextchar[{\basicWswdist}{\basicWswdist[133]}}%

% basic west-south-west distributor with lower name
\def\basicwswdisT[#1]#2{\WSWDIST{}{#2}{#100}}%

% west-south-west distributor with lower name
\newcommand{\wswdisT}{\@ifnextchar[{\basicwswdisT}{\basicwswdisT[133]}}%

% basic west-south-west dotted arrow
\def\basicwswdotar[#1]{\WSWDOTAR{}{}{#100}}%

% west-south-west dotted arrow
\newcommand{\wswdotar}{\@ifnextchar[{\basicwswdotar}{\basicwswdotar[133]}}%

% basic west-south-west dotted arrow with upper name
\def\basicWswdotar[#1]#2{\WSWDOTAR{#2}{}{#100}}%

% west-south-west dotted arrow with upper name
\newcommand{\Wswdotar}{\@ifnextchar[{\basicWswdotar}{\basicWswdotar[133]}}%

% basic west-south-west dotted arrow with lower name
\def\basicwswdotaR[#1]#2{\WSWDOTAR{}{#2}{#100}}%

% west-south-west dotted arrow with lower name
\newcommand{\wswdotaR}{\@ifnextchar[{\basicwswdotaR}{\basicwswdotaR[133]}}%

% basic west-south-west monomorphism
\def\basicwswmono[#1]{\WSWMONO{}{}{#100}}%

% west-south-west monomorphism
\newcommand{\wswmono}{\@ifnextchar[{\basicwswmono}{\basicwswmono[133]}}%

% basic west-south-west monomorphism with upper name
\def\basicWswmono[#1]#2{\WSWMONO{#2}{}{#100}}%

% west-south-west monomorphism with upper name
\newcommand{\Wswmono}{\@ifnextchar[{\basicWswmono}{\basicWswmono[133]}}%

% basic west-south-west monomorphism with lower name
\def\basicwswmonO[#1]#2{\WSWMONO{}{#2}{#100}}%

% west-south-west monomorphism with lower name
\newcommand{\wswmonO}{\@ifnextchar[{\basicwswmonO}{\basicwswmonO[133]}}%

% basic west-south-west epimorphism
\def\basicwswepi[#1]{\WSWEPI{}{}{#100}}%

% west-south-west epimorphism
\newcommand{\wswepi}{\@ifnextchar[{\basicwswepi}{\basicwswepi[133]}}%

% basic west-south-west epimorphism with upper name
\def\basicWswepi[#1]#2{\WSWEPI{#2}{}{#100}}%

% west-south-west epimorphism with upper name
\newcommand{\Wswepi}{\@ifnextchar[{\basicWswepi}{\basicWswepi[133]}}%

% basic west-south-west epimorphism with lower name
\def\basicwswepI[#1]#2{\WSWEPI{}{#2}{#100}}%

% west-south-west epimorphism with lower name
\newcommand{\wswepI}{\@ifnextchar[{\basicwswepI}{\basicwswepI[133]}}%

% basic west-south-west bimorphism
\def\basicwswbimo[#1]{\WSWBIMO{}{}{#100}}%

% west-south-west bimorphism
\newcommand{\wswbimo}{\@ifnextchar[{\basicwswbimo}{\basicwswbimo[133]}}%

% basic west-south-west bimorphism with upper name
\def\basicWswbimo[#1]#2{\WSWBIMO{#2}{}{#100}}%

% west-south-west bimorphism with upper name
\newcommand{\Wswbimo}{\@ifnextchar[{\basicWswbimo}{\basicWswbimo[133]}}%

% basic west-south-west bimorphism with lower name
\def\basicwswbimO[#1]#2{\WSWBIMO{}{#2}{#100}}%

% west-south-west bimorphism with lower name
\newcommand{\wswbimO}{\@ifnextchar[{\basicwswbimO}{\basicwswbimO[133]}}%

% basic west-south-west isomorphism
\def\basicwswiso[#1]{\WSWAR{\cong}{}{#100}}%

% west-south-west isomorphism
\newcommand{\wswiso}{\@ifnextchar[{\basicwswiso}{\basicwswiso[133]}}%

% basic west-south-west isomorphism with upper name
\def\basicWswiso[#1]#2{\WSWAR{#2}{\cong}{#100}}%

% west-south-west isomorphism with upper name
\newcommand{\Wswiso}{\@ifnextchar[{\basicWswiso}{\basicWswiso[133]}}%

% basic west-south-west isomorphism with lower name
\def\basicwswisO[#1]#2{\WSWAR{\cong}{#2}{#100}}%

% west-south-west isomorphism with lower name
\newcommand{\wswisO}{\@ifnextchar[{\basicwswisO}{\basicwswisO[133]}}%

% west-south-west equality
\let\wsweql=\eneeql%

% west-south-west equality with upper name
\let\Wsweql=\Eneeql%

% west-south-west equality with lower name
\let\wsweqL=\eneeqL%

% basic west-south-west pair of arrows
\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%

% west-south-west pair of arrows
\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%

% basic west-south-west pair of arrows with names
\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%

% west-south-west pair of arrows with names
\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
\let\wswbiaR=\Wswbiar

% basic west-south-west pair of distributors
\def\basicwswbidist[#1]{\WSWBIDIST{}{}{#100}}%

% west-south-west pair of distributors
\newcommand{\wswbidist}{\@ifnextchar[{\basicwswbidist}{\basicwswbidist[133]}}%

% basic west-south-west pair of distributors with names
\def\basicWswbidist[#1]#2#3{\WSWBIDIST{#2}{#3}{#100}}%

% west-south-west pair of distributors with names
\newcommand{\Wswbidist}{\@ifnextchar[{\basicWswbidist}{\basicWswbidist[133]}}%
\let\wswbidisT=\Wswbidist

% basic west-south-west pair of adjoint arrows
\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%

% west-south-west pair of adjoint arrows
\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%

% basic west-south-west pair of adjoint  arrows with names
\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%

% west-south-west pair of adjoint arrows with names
\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
\let\wswadjaR=\Wswadjar

% basic west-south-west pair of adjoint distributors
\def\basicwswadjdist[#1]{\WSWADJDIST{}{}{#100}}%

% west-south-west pair of adjoint distributors
\newcommand{\wswadjdist}{\@ifnextchar[{\basicwswadjdist}{\basicwswadjdist[133]}}%

% basic west-south-west pair of adjoint distributors with names
\def\basicWswadjdist[#1]#2#3{\WSWADJDIST{#2}{#3}{#100}}%

% west-south-west pair of adjoint distributors with names
\newcommand{\Wswadjdist}{\@ifnextchar[{\basicWswadjdist}{\basicWswadjdist[133]}}%
\let\wswadjdisT=\Wswadjdist


% WEST-NORTH-WEST ARROWS

% The following commands produce west-north-west arrows
% of horizontal extent n units

% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
% and length n units
\newcommand{\WNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\line(-2,1){#3}}%
\put(-\Y,\Z){\wnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWDIST{f}{g}{n} draws a west-north-west distributor
% with names f, g and length n units
\newcommand{\WNWDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\line(-2,1){#3}}%
\put(-\Y,\Z){\wnwhead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\WNWDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{y}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(\Y,-\Z)(-\value{y},\value{z}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(-\Y,\Z){\wnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWMONO{f}{g}{n} draws a west-north-west monomorphism
% with names f,g and length n units
\newcommand{\WNWMONO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\begin{picture}(0,0)%
\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
\put(\monolength,-\secondmonolength){\wnwhead}%
\put(-\Y,\Z){\wnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWEPI{f}{g}{n} draws a west-north-west epimorphism
% with names f, g and length n units
\newcommand{\WNWEPI}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\Y%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\line(-2,1){\bimolength}}%
\put(-\epilength,\secondepilength){\wnwhead}%
\put(-\Y,\Z){\wnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWBIMO{f}{g}{n} draws a west-north-west bimorphism
% with names f,g and length n units
\newcommand{\WNWBIMO}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\TrueTail\TrueHead%
\bimolength=#3%
\advance\bimolength by -\TrueMonoTail%
\monolength=\bimolength%
\advance\monolength by -\Y%
\advance\bimolength by -\TrueEpiHead%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\divide\secondmonolength by 2%
\secondepilength=\epilength%
\divide\secondepilength by 2%
\begin{picture}(0,0)%
\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
\put(\monolength,-\secondmonolength){\wnwhead}%
\put(-\epilength,\secondepilength){\wnwhead}%
\put(-\Y,\Z){\wnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows
% with names f,g and length n units
\newcommand{\WNWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
\put(\value{x},\value{y}){\line(-2,1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\monolength,\secondepilength){\wnwhead}%
\put(-\epilength,\secondmonolength){\wnwhead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWBIDIST{f}{g}{n} draws a pair of west-north-west distributors
% with names f,g and length n units
\newcommand{\WNWBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(\Y,-\Z){\begin{picture}(0,0)%
\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
\put(\value{x},\value{y}){\line(-2,1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\monolength,\secondepilength){\wnwhead}%
\put(-\epilength,\secondmonolength){\wnwhead}%
\end{picture}}
\put(\value{x},\value{y}){\circle{\value{z}}}%
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows
% with names f,g and length n units
\newcommand{\WNWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
\put(-\epilength,\secondmonolength){\wnwhead}%
\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
\put(\value{x},\value{y}){\esehead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWADJDIST{f}{g}{n} draws a west-north-west pair of adjoint distributors
% with names f,g and length n units
\newcommand{\WNWADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\truex{156}\truey{313}\truez{400}%
\put(\Y,-\Z){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
\put(-\epilength,\secondmonolength){\wnwhead}%
\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
\put(\value{x},\value{y}){\esehead}%
\end{picture}}
\put(\value{x},\value{y}){\circle{\value{z}}}%
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% The following commands produce west-north-west arrows;
% the default length is 13300 units

% basic west-north-west arrow
\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%

% west-north-west arrow
\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%

% basic west-north-west arrow with upper name
\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%

% west-north-west arrow with upper name
\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%

% basic west-north-west arrow with lower name
\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%

% west-north-west arrow with lower name
\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%

% basic west-north-west distributor
\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%

% west-north-west distributor
\newcommand{\wnwdist}{\@ifnextchar[{\basicwnwdist}{\basicwnwdist[133]}}%

% basic west-north-west distributor with upper name
\def\basicWnwdist[#1]#2{\WNWDIST{#2}{}{#100}}%

% west-north-west distributor with upper name
\newcommand{\Wnwdist}{\@ifnextchar[{\basicWnwdist}{\basicWnwdist[133]}}%

% basic west-north-west distributor with lower name
\def\basicwnwdisT[#1]#2{\WNWDIST{}{#2}{#100}}%

% west-north-west distributor with lower name
\newcommand{\wnwdisT}{\@ifnextchar[{\basicwnwdisT}{\basicwnwdisT[133]}}%

% basic west-north-west dotted arrow
\def\basicwnwdotar[#1]{\WNWDOTAR{}{}{#100}}%

% west-north-west dotted arrow
\newcommand{\wnwdotar}{\@ifnextchar[{\basicwnwdotar}{\basicwnwdotar[133]}}%

% basic west-north-west dotted arrow with upper name
\def\basicWnwdotar[#1]#2{\WNWDOTAR{#2}{}{#100}}%

% west-north-west dotted arrow with upper name
\newcommand{\Wnwdotar}{\@ifnextchar[{\basicWnwdotar}{\basicWnwdotar[133]}}%

% basic west-north-west dotted arrow with lower name
\def\basicwnwdotaR[#1]#2{\WNWDOTAR{}{#2}{#100}}%

% west-north-west dotted arrow with lower name
\newcommand{\wnwdotaR}{\@ifnextchar[{\basicwnwdotaR}{\basicwnwdotaR[133]}}%

% basic west-north-west monomorphism
\def\basicwnwmono[#1]{\WNWMONO{}{}{#100}}%

% west-north-west monomorphism
\newcommand{\wnwmono}{\@ifnextchar[{\basicwnwmono}{\basicwnwmono[133]}}%

% basic west-north-west monomorphism with upper name
\def\basicWnwmono[#1]#2{\WNWMONO{#2}{}{#100}}%

% west-north-west monomorphism with upper name
\newcommand{\Wnwmono}{\@ifnextchar[{\basicWnwmono}{\basicWnwmono[133]}}%

% basic west-north-west monomorphism with lower name
\def\basicwnwmonO[#1]#2{\WNWMONO{}{#2}{#100}}%

% west-north-west monomorphism with lower name
\newcommand{\wnwmonO}{\@ifnextchar[{\basicwnwmonO}{\basicwnwmonO[133]}}%

% basic west-north-west epimorphism
\def\basicwnwepi[#1]{\WNWEPI{}{}{#100}}%

% west-north-west epimorphism
\newcommand{\wnwepi}{\@ifnextchar[{\basicwnwepi}{\basicwnwepi[133]}}%

% basic west-north-west epimorphism with upper name
\def\basicWnwepi[#1]#2{\WNWEPI{#2}{}{#100}}%

% west-north-west epimorphism with upper name
\newcommand{\Wnwepi}{\@ifnextchar[{\basicWnwepi}{\basicWnwepi[133]}}%

% basic west-north-west epimorphism with lower name
\def\basicwnwepI[#1]#2{\WNWEPI{}{#2}{#100}}%

% west-north-west epimorphism with lower name
\newcommand{\wnwepI}{\@ifnextchar[{\basicwnwepI}{\basicwnwepI[133]}}%

% basic west-north-west bimorphism
\def\basicwnwbimo[#1]{\WNWBIMO{}{}{#100}}%

% west-north-west bimorphism
\newcommand{\wnwbimo}{\@ifnextchar[{\basicwnwbimo}{\basicwnwbimo[133]}}%

% basic west-north-west bimorphism with upper name
\def\basicWnwbimo[#1]#2{\WNWBIMO{#2}{}{#100}}%

% west-north-west bimorphism with upper name
\newcommand{\Wnwbimo}{\@ifnextchar[{\basicWnwbimo}{\basicWnwbimo[133]}}%

% basic west-north-west bimorphism with lower name
\def\basicwnwbimO[#1]#2{\WNWBIMO{}{#2}{#100}}%

% west-north-west bimorphism with lower name
\newcommand{\wnwbimO}{\@ifnextchar[{\basicwnwbimO}{\basicwnwbimO[133]}}%

% basic west-north-west isomorphism
\def\basicwnwiso[#1]{\WNWAR{\cong}{}{#100}}%

% west-north-west isomorphism
\newcommand{\wnwiso}{\@ifnextchar[{\basicwnwiso}{\basicwnwiso[133]}}%

% basic west-north-west isomorphism with upper name
\def\basicWnwiso[#1]#2{\WNWAR{#2}{\cong}{#100}}%

% west-north-west isomorphism with upper name
\newcommand{\Wnwiso}{\@ifnextchar[{\basicWnwiso}{\basicWnwiso[133]}}%

% basic west-north-west isomorphism with lower name
\def\basicwnwisO[#1]#2{\WNWAR{\cong}{#2}{#100}}%

% west-north-west isomorphism with lower name
\newcommand{\wnwisO}{\@ifnextchar[{\basicwnwisO}{\basicwnwisO[133]}}%

% west-north-west equality
\let\wnweql=\eseeql%

% west-north-west equality with upper name
\let\Wnweql=\Eseeql%

% west-north-west equality with lower name
\let\wnweqL=\eseeqL%

% basic west-north-west pair of arrows
\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%

% west-north-west pair of arrows
\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%

% basic west-north-west pair of arrows with names
\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%

% west-north-west pair of arrows with names
\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
\let\wnwbiaR=\Wnwbiar

% basic west-north-west pair of distributors
\def\basicwnwbidist[#1]{\WNWBIDIST{}{}{#100}}%

% west-north-west pair of distributors
\newcommand{\wnwbidist}{\@ifnextchar[{\basicwnwbidist}{\basicwnwbidist[133]}}%

% basic west-north-west pair of distributors with names
\def\basicWnwbidist[#1]#2#3{\WNWBIDIST{#2}{#3}{#100}}%

% west-north-west pair of distributors with names
\newcommand{\Wnwbidist}{\@ifnextchar[{\basicWnwbidist}{\basicWnwbidist[133]}}%
\let\wnwbidisT=\Wnwbidist

% basic west-north-west pair of adjoint arrows
\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%

% west-north-west pair of adjoint arrows
\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%

% basic west-north-west pair of adjoint  arrows with names
\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%

% west-north-west pair of adjoint arrows with names
\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
\let\wnwadjaR=\Wnwadjar

% basic west-north-west pair of adjoint distributors
\def\basicwnwadjdist[#1]{\WNWADJDIST{}{}{#100}}%

% west-north-west pair of adjoint distributors
\newcommand{\wnwadjdist}{\@ifnextchar[{\basicwnwadjdist}{\basicwnwadjdist[133]}}%

% basic west-north-west pair of adjoint distributors with names
\def\basicWnwadjdist[#1]#2#3{\WNWADJDIST{#2}{#3}{#100}}%

% west-north-west pair of adjoint distributors with names
\newcommand{\Wnwadjdist}{\@ifnextchar[{\basicWnwadjdist}{\basicWnwadjdist[133]}}%
\let\wnwadjdisT=\Wnwadjdist


% NORTH-NORTH-EAST ARROWS

% The following commands produce north-north-east arrows
% of horizontal extent n units

% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
% and length n units
\newcommand{\NNEAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,-#3){\line(1,2){#3}}%
\put(\Z,#3){\nnehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEDIST{f}{g}{n} draws a north-north-east distributor
% with names f, g and length n units
\newcommand{\NNEDIST}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,-#3){\line(1,2){#3}}%
\put(\Z,#3){\nnehead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\NNEDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Z=#3%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{z}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(-\Z,-#3)(\value{z},\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(\Z,#3){\nnehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEMONO{f}{g}{n} draws a north-north-east monomorphism
% with names f,g and length n units
\newcommand{\NNEMONO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\begin{picture}(0,0)%
\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
\put(-\monolength,-\secondmonolength){\nnehead}%
\put(\Z,#3){\nnehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEEPI{f}{g}{n} draws a north-north-east epimorphism
% with names f, g and length n units
\newcommand{\NNEEPI}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\trueheaD%
\bimolength=#3%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\Z%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\Z,-#3){\line(1,2){\bimolength}}%
\put(\epilength,\secondepilength){\nnehead}%
\put(\Z,#3){\nnehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEBIMO{f}{g}{n} draws a north-north-east bimorphism
% with names f,g and length n units
\newcommand{\NNEBIMO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL\trueheaD%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
\put(-\monolength,-\secondmonolength){\nnehead}%
\put(\epilength,\secondepilength){\nnehead}%
\put(\Z,#3){\nnehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEEQL{f}{g}{n} draws a north-north-east equality
% with names f,g and length n units
\newcommand{\NNEEQL}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,-#3){\begin{picture}(0,0)%
\truex{44}\truey{89}%
\put(-\value{y},\value{x}){\line(1,2){#3}}%
\put(\value{y},-\value{x}){\line(1,2){#3}}%
\end{picture}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows
% with names f,g and length n units
\newcommand{\NNEBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},\value{y}){\line(1,2){#3}}%
\put(\value{x},-\value{y}){\line(1,2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\monolength,\secondepilength){\nnehead}%
\put(\epilength,\secondmonolength){\nnehead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEBIDIST{f}{g}{n} draws a pair of north-north-east distributors
% with names f,g and length n units
\newcommand{\NNEBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(-\Y,-#3){\begin{picture}(0,0)%
\put(-\value{x},\value{y}){\line(1,2){#3}}%
\put(\value{x},-\value{y}){\line(1,2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\monolength,\secondepilength){\nnehead}%
\put(\epilength,\secondmonolength){\nnehead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows
% with names f,g and length n units
\newcommand{\NNEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(1,2){#3}}%
\put(\epilength,\secondmonolength){\nnehead}%
\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
\put(-\value{x},\value{y}){\sswhead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEADJDIST{f}{g}{n} draws a north-north-east pair of adjoint distributors
% with names f,g and length n units
\newcommand{\NNEADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(-\Y,-#3){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(1,2){#3}}%
\put(\epilength,\secondmonolength){\nnehead}%
\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
\put(-\value{x},\value{y}){\sswhead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce north-north-east arrows;
% the default length is 6700 units

% basic north-north-east arrow
\def\basicnnear[#1]{\NNEAR{}{}{#100}}%

% north-north-east arrow
\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%

% basic north-north-east arrow with upper name
\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%

% north-north-east arrow with upper name
\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%

% basic north-north-east arrow with lower name
\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%

% north-north-east arrow with lower name
\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%

% basic north-north-east distributor
\def\basicnnedist[#1]{\NNEDIST{}{}{#100}}%

% north-north-east distributor
\newcommand{\nnedist}{\@ifnextchar[{\basicnnedist}{\basicnnedist[67]}}%

% basic north-north-east distributor with upper name
\def\basicNnedist[#1]#2{\NNEDIST{#2}{}{#100}}%

% north-north-east distributor with upper name
\newcommand{\Nnedist}{\@ifnextchar[{\basicNnedist}{\basicNnedist[67]}}%

% basic north-north-east distributor with lower name
\def\basicnnedisT[#1]#2{\NNEDIST{}{#2}{#100}}%

% north-north-east distributor with lower name
\newcommand{\nnedisT}{\@ifnextchar[{\basicnnedisT}{\basicnnedisT[67]}}%

% basic north-north-east dotted arrow
\def\basicnnedotar[#1]{\NNEDOTAR{}{}{#100}}%

% north-north-east dotted arrow
\newcommand{\nnedotar}{\@ifnextchar[{\basicnnedotar}{\basicnnedotar[67]}}%

% basic north-north-east dotted arrow with upper name
\def\basicNnedotar[#1]#2{\NNEDOTAR{#2}{}{#100}}%

% north-north-east dotted arrow with upper name
\newcommand{\Nnedotar}{\@ifnextchar[{\basicNnedotar}{\basicNnedotar[67]}}%

% basic north-north-east dotted arrow with lower name
\def\basicnnedotaR[#1]#2{\NNEDOTAR{}{#2}{#100}}%

% north-north-east dotted arrow with lower name
\newcommand{\nnedotaR}{\@ifnextchar[{\basicnnedotaR}{\basicnnedotaR[67]}}%

% basic north-north-east monomorphism
\def\basicnnemono[#1]{\NNEMONO{}{}{#100}}%

% north-north-east monomorphism
\newcommand{\nnemono}{\@ifnextchar[{\basicnnemono}{\basicnnemono[67]}}%

% basic north-north-east monomorphism with upper name
\def\basicNnemono[#1]#2{\NNEMONO{#2}{}{#100}}%

% north-north-east monomorphism with upper name
\newcommand{\Nnemono}{\@ifnextchar[{\basicNnemono}{\basicNnemono[67]}}%

% basic north-north-east monomorphism with lower name
\def\basicnnemonO[#1]#2{\NNEMONO{}{#2}{#100}}%

% north-north-east monomorphism with lower name
\newcommand{\nnemonO}{\@ifnextchar[{\basicnnemonO}{\basicnnemonO[67]}}%

% basic north-north-east epimorphism
\def\basicnneepi[#1]{\NNEEPI{}{}{#100}}%

% north-north-east epimorphism
\newcommand{\nneepi}{\@ifnextchar[{\basicnneepi}{\basicnneepi[67]}}%

% basic north-north-east epimorphism with upper name
\def\basicNneepi[#1]#2{\NNEEPI{#2}{}{#100}}%

% north-north-east epimorphism with upper name
\newcommand{\Nneepi}{\@ifnextchar[{\basicNneepi}{\basicNneepi[67]}}%

% basic north-north-east epimorphism with lower name
\def\basicnneepI[#1]#2{\NNEEPI{}{#2}{#100}}%

% north-north-east epimorphism with lower name
\newcommand{\nneepI}{\@ifnextchar[{\basicnneepI}{\basicnneepI[67]}}%

% basic north-north-east bimorphism
\def\basicnnebimo[#1]{\NNEBIMO{}{}{#100}}%

% north-north-east bimorphism
\newcommand{\nnebimo}{\@ifnextchar[{\basicnnebimo}{\basicnnebimo[67]}}%

% basic north-north-east bimorphism with upper name
\def\basicNnebimo[#1]#2{\NNEBIMO{#2}{}{#100}}%

% north-north-east bimorphism with upper name
\newcommand{\Nnebimo}{\@ifnextchar[{\basicNnebimo}{\basicNnebimo[67]}}%

% basic north-north-east bimorphism with lower name
\def\basicnnebimO[#1]#2{\NNEBIMO{}{#2}{#100}}%

% north-north-east bimorphism with lower name
\newcommand{\nnebimO}{\@ifnextchar[{\basicnnebimO}{\basicnnebimO[67]}}%

% basic north-north-east isomorphism
\def\basicnneiso[#1]{\NNEAR{\cong}{}{#100}}%

% north-north-east isomorphism
\newcommand{\nneiso}{\@ifnextchar[{\basicnneiso}{\basicnneiso[67]}}%

% basic north-north-east isomorphism with upper name
\def\basicNneiso[#1]#2{\NNEAR{#2}{\cong}{#100}}%

% north-north-east isomorphism with upper name
\newcommand{\Nneiso}{\@ifnextchar[{\basicNneiso}{\basicNneiso[67]}}%

% basic north-north-east isomorphism with lower name
\def\basicnneisO[#1]#2{\NNEAR{\cong}{#2}{#100}}%

% north-north-east isomorphism with lower name
\newcommand{\nneisO}{\@ifnextchar[{\basicnneisO}{\basicnneisO[67]}}%

% basic north-north-east equality
\def\basicnneeql[#1]{\NNEEQL{}{}{#100}}%

% north-north-east equality
\newcommand{\nneeql}{\@ifnextchar[{\basicnneeql}{\basicnneeql[67]}}%

% basic north-north-east equality with upper name
\def\basicNneeql[#1]#2{\NNEEQL{#2}{}{#100}}%

% north-north-east equality with upper name
\newcommand{\Nneeql}{\@ifnextchar[{\basicNneeql}{\basicNneeql[67]}}%

% basic north-north-east equality with lower name
\def\basicnneeqL[#1]#2{\NNEEQL{}{#2}{#100}}%

% north-north-east equality with lower name
\newcommand{\nneeqL}{\@ifnextchar[{\basicnneeqL}{\basicnneeqL[67]}}%

% basic north-north-east pair of arrows
\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%

% north-north-east pair of arrows
\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%

% basic north-north-east pair of arrows with names
\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%

% north-north-east pair of arrows with names
\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
\let\nnebiaR=\Nnebiar

% basic north-north-east pair of distributors
\def\basicnnebidist[#1]{\NNEBIDIST{}{}{#100}}%

% north-north-east pair of distributors
\newcommand{\nnebidist}{\@ifnextchar[{\basicnnebidist}{\basicnnebidist[67]}}%

% basic north-north-east pair of distributors with names
\def\basicNnebidist[#1]#2#3{\NNEBIDIST{#2}{#3}{#100}}%

% north-north-east pair of distributors with names
\newcommand{\Nnebidist}{\@ifnextchar[{\basicNnebidist}{\basicNnebidist[67]}}%
\let\nnebidisT=\Nnebidist

% basic north-north-east pair of adjoint arrows
\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%

% north-north-east pair of adjoint arrows
\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%

% basic north-north-east pair of adjoint  arrows with names
\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%

% north-north-east pair of adjoint arrows with names
\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
\let\nneadjaR=\Nneadjar

% basic north-north-east pair of adjoint distributors
\def\basicnneadjdist[#1]{\NNEADJDIST{}{}{#100}}%

% north-north-east pair of adjoint distributors
\newcommand{\nneadjdist}{\@ifnextchar[{\basicnneadjdist}{\basicnneadjdist[67]}}%

% basic north-north-east pair of adjoint distributors with names
\def\basicNneadjdist[#1]#2#3{\NNEADJDIST{#2}{#3}{#100}}%

% north-north-east pair of adjoint distributors with names
\newcommand{\Nneadjdist}{\@ifnextchar[{\basicNneadjdist}{\basicNneadjdist[67]}}%
\let\nneadjdisT=\Nneadjdist


% SOUTH-SOUTH-EAST ARROWS

% The following commands produce south-south-east arrows
% of horizontal extent n units

% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
% and length n units
\newcommand{\SSEAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,#3){\line(1,-2){#3}}%
\put(\Z,-#3){\ssehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEDIST{f}{g}{n} draws a south-south-east distributor
% with names f, g and length n units
\newcommand{\SSEDIST}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,#3){\line(1,-2){#3}}%
\put(\Z,-#3){\ssehead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\SSEDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Z=#3%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{z}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(-\Z,#3)(\value{z},-\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(\Z,-#3){\ssehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEMONO{f}{g}{n} draws a south-south-east monomorphism
% with names f,g and length n units
\newcommand{\SSEMONO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\begin{picture}(0,0)%
\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
\put(-\monolength,\secondmonolength){\ssehead}%
\put(\Z,-#3){\ssehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEEPI{f}{g}{n} draws a south-south-east epimorphism
% with names f, g and length n units
\newcommand{\SSEEPI}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\trueheaD%
\bimolength=#3%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\Z%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\Z,#3){\line(1,-2){\bimolength}}%
\put(\epilength,-\secondepilength){\ssehead}%
\put(\Z,-#3){\ssehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEBIMO{f}{g}{n} draws a south-south-east bimorphism
% with names f,g and length n units
\newcommand{\SSEBIMO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL\trueheaD%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
\put(-\monolength,\secondmonolength){\ssehead}%
\put(\epilength,-\secondepilength){\ssehead}%
\put(\Z,-#3){\ssehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEEQL{f}{g}{n} draws a south-south-east equality
% with names f,g and length n units
\newcommand{\SSEEQL}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,#3){\begin{picture}(0,0)%
\truex{44}\truey{89}%
\put(-\value{y},-\value{x}){\line(1,-2){#3}}%
\put(\value{y},\value{x}){\line(1,-2){#3}}%
\end{picture}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows
% with names f,g and length n units
\newcommand{\SSEBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
\put(\value{x},\value{y}){\line(1,-2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\monolength,-\secondepilength){\ssehead}%
\put(\epilength,-\secondmonolength){\ssehead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEBIDIST{f}{g}{n} draws a pair of south-south-east distributors
% with names f,g and length n units
\newcommand{\SSEBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(-\Y,#3){\begin{picture}(0,0)%
\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
\put(\value{x},\value{y}){\line(1,-2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\monolength,-\secondepilength){\ssehead}%
\put(\epilength,-\secondmonolength){\ssehead}%
\end{picture}}
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\put(\value{x},\value{y}){\circle{\value{z}}}%
\truex{500}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows
% with names f,g and length n units
\newcommand{\SSEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
\put(\monolength,-\secondepilength){\ssehead}%
\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
\put(\value{x},\value{y}){\nnwhead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEADJDIST{f}{g}{n} draws a south-south-east pair of adjoint distributors
% with names f,g and length n units
\newcommand{\SSEADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(-\Y,#3){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
\put(\monolength,-\secondepilength){\ssehead}%
\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
\put(\value{x},\value{y}){\nnwhead}%
\end{picture}}
\put(\value{x},\value{y}){\circle{\value{z}}}%
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\truex{500}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%


% The following commands produce south-south-east arrows;
% the default length is 6700 units

% basic south-south-east arrow
\def\basicssear[#1]{\SSEAR{}{}{#100}}%

% south-south-east arrow
\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%

% basic south-south-east arrow with upper name
\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%

% south-south-east arrow with upper name
\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%

% basic south-south-east arrow with lower name
\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%

% south-south-east arrow with lower name
\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%

% basic south-south-east distributor
\def\basicssedist[#1]{\SSEDIST{}{}{#100}}%

% south-south-east distributor
\newcommand{\ssedist}{\@ifnextchar[{\basicssedist}{\basicssedist[67]}}%

% basic south-south-east distributor with upper name
\def\basicSsedist[#1]#2{\SSEDIST{#2}{}{#100}}%

% south-south-east distributor with upper name
\newcommand{\Ssedist}{\@ifnextchar[{\basicSsedist}{\basicSsedist[67]}}%

% basic south-south-east distributor with lower name
\def\basicssedisT[#1]#2{\SSEDIST{}{#2}{#100}}%

% south-south-east distributor with lower name
\newcommand{\ssedisT}{\@ifnextchar[{\basicssedisT}{\basicssedisT[67]}}%

% basic south-south-east dotted arrow
\def\basicssedotar[#1]{\SSEDOTAR{}{}{#100}}%

% south-south-east dotted arrow
\newcommand{\ssedotar}{\@ifnextchar[{\basicssedotar}{\basicssedotar[67]}}%

% basic south-south-east dotted arrow with upper name
\def\basicSsedotar[#1]#2{\SSEDOTAR{#2}{}{#100}}%

% south-south-east dotted arrow with upper name
\newcommand{\Ssedotar}{\@ifnextchar[{\basicSsedotar}{\basicSsedotar[67]}}%

% basic south-south-east dotted arrow with lower name
\def\basicssedotaR[#1]#2{\SSEDOTAR{}{#2}{#100}}%

% south-south-east dotted arrow with lower name
\newcommand{\ssedotaR}{\@ifnextchar[{\basicssedotaR}{\basicssedotaR[67]}}%

% basic south-south-east monomorphism
\def\basicssemono[#1]{\SSEMONO{}{}{#100}}%

% south-south-east monomorphism
\newcommand{\ssemono}{\@ifnextchar[{\basicssemono}{\basicssemono[67]}}%

% basic south-south-east monomorphism with upper name
\def\basicSsemono[#1]#2{\SSEMONO{#2}{}{#100}}%

% south-south-east monomorphism with upper name
\newcommand{\Ssemono}{\@ifnextchar[{\basicSsemono}{\basicSsemono[67]}}%

% basic south-south-east monomorphism with lower name
\def\basicssemonO[#1]#2{\SSEMONO{}{#2}{#100}}%

% south-south-east monomorphism with lower name
\newcommand{\ssemonO}{\@ifnextchar[{\basicssemonO}{\basicssemonO[67]}}%

% basic south-south-east epimorphism
\def\basicsseepi[#1]{\SSEEPI{}{}{#100}}%

% south-south-east epimorphism
\newcommand{\sseepi}{\@ifnextchar[{\basicsseepi}{\basicsseepi[67]}}%

% basic south-south-east epimorphism with upper name
\def\basicSseepi[#1]#2{\SSEEPI{#2}{}{#100}}%

% south-south-east epimorphism with upper name
\newcommand{\Sseepi}{\@ifnextchar[{\basicSseepi}{\basicSseepi[67]}}%

% basic south-south-east epimorphism with lower name
\def\basicsseepI[#1]#2{\SSEEPI{}{#2}{#100}}%

% south-south-east epimorphism with lower name
\newcommand{\sseepI}{\@ifnextchar[{\basicsseepI}{\basicsseepI[67]}}%

% basic south-south-east bimorphism
\def\basicssebimo[#1]{\SSEBIMO{}{}{#100}}%

% south-south-east bimorphism
\newcommand{\ssebimo}{\@ifnextchar[{\basicssebimo}{\basicssebimo[67]}}%

% basic south-south-east bimorphism with upper name
\def\basicSsebimo[#1]#2{\SSEBIMO{#2}{}{#100}}%

% south-south-east bimorphism with upper name
\newcommand{\Ssebimo}{\@ifnextchar[{\basicSsebimo}{\basicSsebimo[67]}}%

% basic south-south-east bimorphism with lower name
\def\basicssebimO[#1]#2{\SSEBIMO{}{#2}{#100}}%

% south-south-east bimorphism with lower name
\newcommand{\ssebimO}{\@ifnextchar[{\basicssebimO}{\basicssebimO[67]}}%

% basic south-south-east isomorphism
\def\basicsseiso[#1]{\SSEAR{\cong}{}{#100}}%

% south-south-east isomorphism
\newcommand{\sseiso}{\@ifnextchar[{\basicsseiso}{\basicsseiso[67]}}%

% basic south-south-east isomorphism with upper name
\def\basicSseiso[#1]#2{\SSEAR{#2}{\cong}{#100}}%

% south-south-east isomorphism with upper name
\newcommand{\Sseiso}{\@ifnextchar[{\basicSseiso}{\basicSseiso[67]}}%

% basic south-south-east isomorphism with lower name
\def\basicsseisO[#1]#2{\SSEAR{\cong}{#2}{#100}}%

% south-south-east isomorphism with lower name
\newcommand{\sseisO}{\@ifnextchar[{\basicsseisO}{\basicsseisO[67]}}%

% basic south-south-east equality
\def\basicsseeql[#1]{\SSEEQL{}{}{#100}}%

% south-south-east equality
\newcommand{\sseeql}{\@ifnextchar[{\basicsseeql}{\basicsseeql[67]}}%

% basic south-south-east equality with upper name
\def\basicSseeql[#1]#2{\SSEEQL{#2}{}{#100}}%

% south-south-east equality with upper name
\newcommand{\Sseeql}{\@ifnextchar[{\basicSseeql}{\basicSseeql[67]}}%

% basic south-south-east equality with lower name
\def\basicsseeqL[#1]#2{\SSEEQL{}{#2}{#100}}%

% south-south-east equality with lower name
\newcommand{\sseeqL}{\@ifnextchar[{\basicsseeqL}{\basicsseeqL[67]}}%

% basic south-south-east pair of arrows
\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%

% south-south-east pair of arrows
\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%

% basic south-south-east pair of arrows with names
\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%

% south-south-east pair of arrows with names
\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
\let\ssebiaR=\Ssebiar

% basic south-south-east pair of distributors
\def\basicssebidist[#1]{\SSEBIDIST{}{}{#100}}%

% south-south-east pair of distributors
\newcommand{\ssebidist}{\@ifnextchar[{\basicssebidist}{\basicssebidist[67]}}%

% basic south-south-east pair of distributors with names
\def\basicSsebidist[#1]#2#3{\SSEBIDIST{#2}{#3}{#100}}%

% south-south-east pair of distributors with names
\newcommand{\Ssebidist}{\@ifnextchar[{\basicSsebidist}{\basicSsebidist[67]}}%
\let\ssebidisT=\Ssebidist

% basic south-south-east pair of adjoint arrows
\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%

% south-south-east pair of adjoint arrows
\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%

% basic south-south-east pair of adjoint  arrows with names
\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%

% south-south-east pair of adjoint arrows with names
\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
\let\sseadjaR=\Sseadjar

% basic south-south-east pair of adjoint distributors
\def\basicsseadjdist[#1]{\SSEADJDIST{}{}{#100}}%

% south-south-east pair of adjoint distributors
\newcommand{\sseadjdist}{\@ifnextchar[{\basicsseadjdist}{\basicsseadjdist[67]}}%

% basic south-south-east pair of adjoint distributors with names
\def\basicSseadjdist[#1]#2#3{\SSEADJDIST{#2}{#3}{#100}}%

% south-south-east pair of adjoint distributors with names
\newcommand{\Sseadjdist}{\@ifnextchar[{\basicSseadjdist}{\basicSseadjdist[67]}}%
\let\sseadjdisT=\Sseadjdist


% SOUTH-SOUTH-WEST ARROWS

% The following commands produce south-south-west arrows
% of horizontal extent n units

% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
% and length n units
\newcommand{\SSWAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Z,#3){\line(-1,-2){#3}}%
\put(-\Z,-#3){\sswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWDIST{f}{g}{n} draws a south-south-west distributor
% with names f, g and length n units
\newcommand{\SSWDIST}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Z,#3){\line(-1,-2){#3}}%
\put(-\Z,-#3){\sswhead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\SSWDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Z=#3%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{z}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(\Z,#3)(-\value{z},-\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(-\Z,-#3){\sswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWMONO{f}{g}{n} draws a south-south-west monomorphism
% with names f,g and length n units
\newcommand{\SSWMONO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\begin{picture}(0,0)%
\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
\put(\monolength,\secondmonolength){\sswhead}%
\put(-\Z,-#3){\sswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWEPI{f}{g}{n} draws a south-south-west epimorphism
% with names f, g and length n units
\newcommand{\SSWEPI}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\trueheaD%
\bimolength=#3%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\Z%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(\Z,#3){\line(-1,-2){\bimolength}}%
\put(-\epilength,-\secondepilength){\sswhead}%
\put(-\Z,-#3){\sswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWBIMO{f}{g}{n} draws a south-south-west bimorphism
% with names f,g and length n units
\newcommand{\SSWBIMO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL\trueheaD%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
\put(\monolength,\secondmonolength){\sswhead}%
\put(-\epilength,-\secondepilength){\sswhead}%
\put(-\Z,-#3){\sswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows
% with names f,g and length n units
\newcommand{\SSWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\monolength,-\secondepilength){\sswhead}%
\put(-\epilength,-\secondmonolength){\sswhead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWBIDIST{f}{g}{n} draws a pair of south-south-west distributors
% with names f,g and length n units
\newcommand{\SSWBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(\Y,#3){\begin{picture}(0,0)%
\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\monolength,-\secondepilength){\sswhead}%
\put(-\epilength,-\secondmonolength){\sswhead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows
% with names f,g and length n units
\newcommand{\SSWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
\put(-\monolength,-\secondepilength){\sswhead}%
\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
\put(-\value{x},\value{y}){\nnehead}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWADJDIST{f}{g}{n} draws a south-south-west pair of adjoint distributors
% with names f,g and length n units
\newcommand{\SSWADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(\Y,#3){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
\put(-\monolength,-\secondepilength){\sswhead}%
\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
\put(-\value{x},\value{y}){\nnehead}%
\end{picture}}
\put(-\value{x},\value{y}){\circle{\value{z}}}%
\put(\value{x},-\value{y}){\circle{\value{z}}}%
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce south-south-west arrows;
% the default length is 6700 units

% basic south-south-west arrow
\def\basicsswar[#1]{\SSWAR{}{}{#100}}%

% south-south-west arrow
\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%

% basic south-south-west arrow with upper name
\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%

% south-south-west arrow with upper name
\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%

% basic south-south-west arrow with lower name
\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%

% south-south-west arrow with lower name
\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%

% basic south-south-west distributor
\def\basicsswdist[#1]{\SSWDIST{}{}{#100}}%

% south-south-west distributor
\newcommand{\sswdist}{\@ifnextchar[{\basicsswdist}{\basicsswdist[67]}}%

% basic south-south-west distributor with upper name
\def\basicSswdist[#1]#2{\SSWDIST{#2}{}{#100}}%

% south-south-west distributor with upper name
\newcommand{\Sswdist}{\@ifnextchar[{\basicSswdist}{\basicSswdist[67]}}%

% basic south-south-west distributor with lower name
\def\basicsswdisT[#1]#2{\SSWDIST{}{#2}{#100}}%

% south-south-west distributor with lower name
\newcommand{\sswdisT}{\@ifnextchar[{\basicsswdisT}{\basicsswdisT[67]}}%

% basic south-south-west dotted arrow
\def\basicsswdotar[#1]{\SSWDOTAR{}{}{#100}}%

% south-south-west dotted arrow
\newcommand{\sswdotar}{\@ifnextchar[{\basicsswdotar}{\basicsswdotar[67]}}%

% basic south-south-west dotted arrow with upper name
\def\basicSswdotar[#1]#2{\SSWDOTAR{#2}{}{#100}}%

% south-south-west dotted arrow with upper name
\newcommand{\Sswdotar}{\@ifnextchar[{\basicSswdotar}{\basicSswdotar[67]}}%

% basic south-south-west dotted arrow with lower name
\def\basicsswdotaR[#1]#2{\SSWDOTAR{}{#2}{#100}}%

% south-south-west dotted arrow with lower name
\newcommand{\sswdotaR}{\@ifnextchar[{\basicsswdotaR}{\basicsswdotaR[67]}}%

% basic south-south-west monomorphism
\def\basicsswmono[#1]{\SSWMONO{}{}{#100}}%

% south-south-west monomorphism
\newcommand{\sswmono}{\@ifnextchar[{\basicsswmono}{\basicsswmono[67]}}%

% basic south-south-west monomorphism with upper name
\def\basicSswmono[#1]#2{\SSWMONO{#2}{}{#100}}%

% south-south-west monomorphism with upper name
\newcommand{\Sswmono}{\@ifnextchar[{\basicSswmono}{\basicSswmono[67]}}%

% basic south-south-west monomorphism with lower name
\def\basicsswmonO[#1]#2{\SSWMONO{}{#2}{#100}}%

% south-south-west monomorphism with lower name
\newcommand{\sswmonO}{\@ifnextchar[{\basicsswmonO}{\basicsswmonO[67]}}%

% basic south-south-west epimorphism
\def\basicsswepi[#1]{\SSWEPI{}{}{#100}}%

% south-south-west epimorphism
\newcommand{\sswepi}{\@ifnextchar[{\basicsswepi}{\basicsswepi[67]}}%

% basic south-south-west epimorphism with upper name
\def\basicSswepi[#1]#2{\SSWEPI{#2}{}{#100}}%

% south-south-west epimorphism with upper name
\newcommand{\Sswepi}{\@ifnextchar[{\basicSswepi}{\basicSswepi[67]}}%

% basic south-south-west epimorphism with lower name
\def\basicsswepI[#1]#2{\SSWEPI{}{#2}{#100}}%

% south-south-west epimorphism with lower name
\newcommand{\sswepI}{\@ifnextchar[{\basicsswepI}{\basicsswepI[67]}}%

% basic south-south-west bimorphism
\def\basicsswbimo[#1]{\SSWBIMO{}{}{#100}}%

% south-south-west bimorphism
\newcommand{\sswbimo}{\@ifnextchar[{\basicsswbimo}{\basicsswbimo[67]}}%

% basic south-south-west bimorphism with upper name
\def\basicSswbimo[#1]#2{\SSWBIMO{#2}{}{#100}}%

% south-south-west bimorphism with upper name
\newcommand{\Sswbimo}{\@ifnextchar[{\basicSswbimo}{\basicSswbimo[67]}}%

% basic south-south-west bimorphism with lower name
\def\basicsswbimO[#1]#2{\SSWBIMO{}{#2}{#100}}%

% south-south-west bimorphism with lower name
\newcommand{\sswbimO}{\@ifnextchar[{\basicsswbimO}{\basicsswbimO[67]}}%

% basic south-south-west isomorphism
\def\basicsswiso[#1]{\SSWAR{\cong}{}{#100}}%

% south-south-west isomorphism
\newcommand{\sswiso}{\@ifnextchar[{\basicsswiso}{\basicsswiso[67]}}%

% basic south-south-west isomorphism with upper name
\def\basicSswiso[#1]#2{\SSWAR{#2}{\cong}{#100}}%

% south-south-west isomorphism with upper name
\newcommand{\Sswiso}{\@ifnextchar[{\basicSswiso}{\basicSswiso[67]}}%

% basic south-south-west isomorphism with lower name
\def\basicsswisO[#1]#2{\SSWAR{\cong}{#2}{#100}}%

% south-south-west isomorphism with lower name
\newcommand{\sswisO}{\@ifnextchar[{\basicsswisO}{\basicsswisO[67]}}%

% south-south-west equality
\let\ssweql=\nneeql%

% south-south-west equality with upper name
\let\Ssweql=\Nneeql%

% south-south-west equality with lower name
\let\ssweqL=\nneeqL%

% basic south-south-west pair of arrows
\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%

% south-south-west pair of arrows
\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%

% basic south-south-west pair of arrows with names
\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%

% south-south-west pair of arrows with names
\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
\let\sswbiaR=\Sswbiar

% basic south-south-west pair of distributors
\def\basicsswbidist[#1]{\SSWBIDIST{}{}{#100}}%

% south-south-west pair of distributors
\newcommand{\sswbidist}{\@ifnextchar[{\basicsswbidist}{\basicsswbidist[67]}}%

% basic south-south-west pair of distributors with names
\def\basicSswbidist[#1]#2#3{\SSWBIDIST{#2}{#3}{#100}}%

% south-south-west pair of distributors with names
\newcommand{\Sswbidist}{\@ifnextchar[{\basicSswbidist}{\basicSswbidist[67]}}%
\let\sswbidisT=\Sswbidist

% basic south-south-west pair of adjoint arrows
\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%

% south-south-west pair of adjoint arrows
\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%

% basic south-south-west pair of adjoint  arrows with names
\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%

% south-south-west pair of adjoint arrows with names
\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
\let\sswadjaR=\Sswadjar

% basic south-south-west pair of adjoint distributors
\def\basicsswadjdist[#1]{\SSWADJDIST{}{}{#100}}%

% south-south-west pair of adjoint distributors
\newcommand{\sswadjdist}{\@ifnextchar[{\basicsswadjdist}{\basicsswadjdist[67]}}%

% basic south-south-west pair of adjoint distributors with names
\def\basicSswadjdist[#1]#2#3{\SSWADJDIST{#2}{#3}{#100}}%

% south-south-west pair of adjoint distributors with names
\newcommand{\Sswadjdist}{\@ifnextchar[{\basicSswadjdist}{\basicSswadjdist[67]}}%
\let\sswadjdisT=\Sswadjdist


% NORTH-NORTH-WEST ARROWS

% The following commands produce north-north-west arrows
% of horizontal extent n units

% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
% and length n units
\newcommand{\NNWAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Z,-#3){\line(-1,2){#3}}%
\put(-\Z,#3){\nnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWDIST{f}{g}{n} draws a north-north-west distributor
% with names f, g and length n units
\newcommand{\NNWDIST}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Z,-#3){\line(-1,2){#3}}%
\put(-\Z,#3){\nnwhead}%
\truex{400}%
\put(0,0){\circle{\value{x}}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWDOTAR{f}{g}{n} draws a north-east dotted arrow
% with names f,g and length n units
\newcommand{\NNWDOTAR}[3]{\testdiagrammode%
\truex{100}\truey{268}\truez{134}%
\Z=#3%
\divide\Z by 2%
\NUMBEROFDOTS=#3%
\divide\NUMBEROFDOTS by \value{z}%
\advance\NUMBEROFDOTS by 1%
\begin{picture}(0,0)%
\multiput(\Z,-#3)(-\value{z},\value{y}){\NUMBEROFDOTS}%
{\circle*{\value{x}}}%
\put(-\Z,#3){\nnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWMONO{f}{g}{n} draws a north-north-west monomorphism
% with names f,g and length n units
\newcommand{\NNWMONO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\begin{picture}(0,0)%
\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
\put(\monolength,-\secondmonolength){\nnwhead}%
\put(-\Z,#3){\nnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWEPI{f}{g}{n} draws a north-north-west epimorphism
% with names f, g and length n units
\newcommand{\NNWEPI}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\trueheaD%
\bimolength=#3%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\Z%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(\Z,-#3){\line(-1,2){\bimolength}}%
\put(-\epilength,\secondepilength){\nnwhead}%
\put(-\Z,#3){\nnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWBIMO{f}{g}{n} draws a north-north-west bimorphism
% with names f,g and length n units
\newcommand{\NNWBIMO}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\truetaiL\trueheaD%
\bimolength=#3%
\advance\bimolength by -\truemonotaiL%
\monolength=\bimolength%
\advance\monolength by -\Z%
\advance\bimolength by -\trueepiheaD%
\epilength=\bimolength%
\advance\epilength by -\monolength%
\secondmonolength=\monolength%
\multiply\secondmonolength by 2%
\secondepilength=\epilength%
\multiply\secondepilength by 2%
\begin{picture}(0,0)%
\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
\put(\monolength,-\secondmonolength){\nnwhead}%
\put(-\epilength,\secondepilength){\nnwhead}%
\put(-\Z,#3){\nnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows
% with names f,g and length n units
\newcommand{\NNWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
\put(\value{x},\value{y}){\line(-1,2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\monolength,\secondepilength){\nnwhead}%
\put(-\epilength,\secondmonolength){\nnwhead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWBIDIST{f}{g}{n} draws a pair of north-north-west distributors
% with names f,g and length n units
\newcommand{\NNWBIDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(\Y,-#3){\begin{picture}(0,0)%
\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
\put(\value{x},\value{y}){\line(-1,2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\monolength,\secondepilength){\nnwhead}%
\put(-\epilength,\secondmonolength){\nnwhead}%
\end{picture}}
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\put(\value{x},\value{y}){\circle{\value{z}}}%
\truex{500}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows
% with names f,g and length n units
\newcommand{\NNWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
\put(-\epilength,\secondmonolength){\nnwhead}%
\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
\put(\value{x},\value{y}){\ssehead}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWADJDIST{f}{g}{n} draws a north-north-west pair of adjoint distributors
% with names f,g and length n units
\newcommand{\NNWADJDIST}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\truex{313}\truey{156}\truez{400}%
\put(\Y,-#3){\begin{picture}(0,0)%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
\put(-\epilength,\secondmonolength){\nnwhead}%
\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
\put(\value{x},\value{y}){\ssehead}%
\end{picture}}
\put(\value{x},\value{y}){\circle{\value{z}}}%
\put(-\value{x},-\value{y}){\circle{\value{z}}}%
\truex{500}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% The following commands produce north-north-west arrows;
% the default length is 6700 units

% basic north-north-west arrow
\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%

% north-north-west arrow
\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%

% basic north-north-west arrow with upper name
\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%

% north-north-west arrow with upper name
\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%

% basic north-north-west arrow with lower name
\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%

% north-north-west arrow with lower name
\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%

% basic north-north-west distributor
\def\basicnnwdist[#1]{\NNWDIST{}{}{#100}}%

% north-north-west distributor
\newcommand{\nnwdist}{\@ifnextchar[{\basicnnwdist}{\basicnnwdist[67]}}%

% basic north-north-west distributor with upper name
\def\basicNnwdist[#1]#2{\NNWDIST{#2}{}{#100}}%

% north-north-west distributor with upper name
\newcommand{\Nnwdist}{\@ifnextchar[{\basicNnwdist}{\basicNnwdist[67]}}%

% basic north-north-west distributor with lower name
\def\basicnnwdisT[#1]#2{\NNWDIST{}{#2}{#100}}%

% north-north-west distributor with lower name
\newcommand{\nnwdisT}{\@ifnextchar[{\basicnnwdisT}{\basicnnwdisT[67]}}%

% basic north-north-west dotted arrow
\def\basicnnwdotar[#1]{\NNWDOTAR{}{}{#100}}%

% north-north-west dotted arrow
\newcommand{\nnwdotar}{\@ifnextchar[{\basicnnwdotar}{\basicnnwdotar[67]}}%

% basic north-north-west dotted arrow with upper name
\def\basicNnwdotar[#1]#2{\NNWDOTAR{#2}{}{#100}}%

% north-north-west dotted arrow with upper name
\newcommand{\Nnwdotar}{\@ifnextchar[{\basicNnwdotar}{\basicNnwdotar[67]}}%

% basic north-north-west dotted arrow with lower name
\def\basicnnwdotaR[#1]#2{\NNWDOTAR{}{#2}{#100}}%

% north-north-west dotted arrow with lower name
\newcommand{\nnwdotaR}{\@ifnextchar[{\basicnnwdotaR}{\basicnnwdotaR[67]}}%

% basic north-north-west monomorphism
\def\basicnnwmono[#1]{\NNWMONO{}{}{#100}}%

% north-north-west monomorphism
\newcommand{\nnwmono}{\@ifnextchar[{\basicnnwmono}{\basicnnwmono[67]}}%

% basic north-north-west monomorphism with upper name
\def\basicNnwmono[#1]#2{\NNWMONO{#2}{}{#100}}%

% north-north-west monomorphism with upper name
\newcommand{\Nnwmono}{\@ifnextchar[{\basicNnwmono}{\basicNnwmono[67]}}%

% basic north-north-west monomorphism with lower name
\def\basicnnwmonO[#1]#2{\NNWMONO{}{#2}{#100}}%

% north-north-west monomorphism with lower name
\newcommand{\nnwmonO}{\@ifnextchar[{\basicnnwmonO}{\basicnnwmonO[67]}}%

% basic north-north-west epimorphism
\def\basicnnwepi[#1]{\NNWEPI{}{}{#100}}%

% north-north-west epimorphism
\newcommand{\nnwepi}{\@ifnextchar[{\basicnnwepi}{\basicnnwepi[67]}}%

% basic north-north-west epimorphism with upper name
\def\basicNnwepi[#1]#2{\NNWEPI{#2}{}{#100}}%

% north-north-west epimorphism with upper name
\newcommand{\Nnwepi}{\@ifnextchar[{\basicNnwepi}{\basicNnwepi[67]}}%

% basic north-north-west epimorphism with lower name
\def\basicnnwepI[#1]#2{\NNWEPI{}{#2}{#100}}%

% north-north-west epimorphism with lower name
\newcommand{\nnwepI}{\@ifnextchar[{\basicnnwepI}{\basicnnwepI[67]}}%

% basic north-north-west bimorphism
\def\basicnnwbimo[#1]{\NNWBIMO{}{}{#100}}%

% north-north-west bimorphism
\newcommand{\nnwbimo}{\@ifnextchar[{\basicnnwbimo}{\basicnnwbimo[67]}}%

% basic north-north-west bimorphism with upper name
\def\basicNnwbimo[#1]#2{\NNWBIMO{#2}{}{#100}}%

% north-north-west bimorphism with upper name
\newcommand{\Nnwbimo}{\@ifnextchar[{\basicNnwbimo}{\basicNnwbimo[67]}}%

% basic north-north-west bimorphism with lower name
\def\basicnnwbimO[#1]#2{\NNWBIMO{}{#2}{#100}}%

% north-north-west bimorphism with lower name
\newcommand{\nnwbimO}{\@ifnextchar[{\basicnnwbimO}{\basicnnwbimO[67]}}%

% basic north-north-west isomorphism
\def\basicnnwiso[#1]{\NNWAR{\cong}{}{#100}}%

% north-north-west isomorphism
\newcommand{\nnwiso}{\@ifnextchar[{\basicnnwiso}{\basicnnwiso[67]}}%

% basic north-north-west isomorphism with upper name
\def\basicNnwiso[#1]#2{\NNWAR{#2}{\cong}{#100}}%

% north-north-west isomorphism with upper name
\newcommand{\Nnwiso}{\@ifnextchar[{\basicNnwiso}{\basicNnwiso[67]}}%

% basic north-north-west isomorphism with lower name
\def\basicnnwisO[#1]#2{\NNWAR{\cong}{#2}{#100}}%

% north-north-west isomorphism with lower name
\newcommand{\nnwisO}{\@ifnextchar[{\basicnnwisO}{\basicnnwisO[67]}}%

% north-north-west equality
\let\nnweql=\sseeql%

% north-north-west equality with upper name
\let\Nnweql=\Sseeql%

% north-north-west equality with lower name
\let\nnweqL=\sseeqL%

% basic north-north-east pair of arrows
\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%

% north-north-east pair of arrows
\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%

% basic north-north-east pair of arrows with names
\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%

% north-north-east pair of arrows with names
\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
\let\nnwbiaR=\Nnwbiar

% basic north-north-east pair of distributors
\def\basicnnwbidist[#1]{\NNWBIDIST{}{}{#100}}%

% north-north-east pair of distributors
\newcommand{\nnwbidist}{\@ifnextchar[{\basicnnwbidist}{\basicnnwbidist[67]}}%

% basic north-north-east pair of distributors with names
\def\basicNnwbidist[#1]#2#3{\NNWBIDIST{#2}{#3}{#100}}%

% north-north-east pair of distributors with names
\newcommand{\Nnwbidist}{\@ifnextchar[{\basicNnwbidist}{\basicNnwbidist[67]}}%
\let\nnwbidisT=\Nnwbidist

% basic north-north-east pair of adjoint arrows
\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%

% north-north-east pair of adjoint arrows
\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%

% basic north-north-east pair of adjoint  arrows with names
\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%

% north-north-east pair of adjoint arrows with names
\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
\let\nnwadjaR=\Nnwadjar

% basic north-north-east pair of adjoint distributors
\def\basicnnwadjdist[#1]{\NNWADJDIST{}{}{#100}}%

% north-north-east pair of adjoint distributors
\newcommand{\nnwadjdist}{\@ifnextchar[{\basicnnwadjdist}{\basicnnwadjdist[67]}}%

% basic north-north-east pair of adjoint distributors with names
\def\basicNnwadjdist[#1]#2#3{\NNWADJDIST{#2}{#3}{#100}}%

% north-north-east pair of adjoint distributors with names
\newcommand{\Nnwadjdist}{\@ifnextchar[{\basicNnwadjdist}{\basicNnwadjdist[67]}}%
\let\nnwadjdisT=\Nnwadjdist


% EAST-EAST-NORTH-EAST ARROWS
% default length: 21100 units

% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
% and length n units
\newcommand{\EENEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\line(3,1){#3}}%
\put(\Y,\Z){\eenehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic east-east-north-east arrow
\def\basiceenear[#1]{\EENEAR{}{}{#100}}%

% east-east-north-east arrow
\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%

% basic east-east-north-east arrow with upper name
\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%

% east-east-north-east arrow with upper name
\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%

% basic east-east-north-east arrow with lower name
\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%

% east-east-north-east arrow with lower name
\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%

% EAST-EAST-SOUTH-EAST ARROWS
% default length: 21100 units

% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
% and length n units
\newcommand{\EESEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,\Z){\line(3,-1){#3}}%
\put(\Y,-\Z){\eesehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic east-east-south-east arrow
\def\basiceesear[#1]{\EESEAR{}{}{#100}}%

% east-east-south-east arrow
\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%

% basic east-east-south-east arrow with upper name
\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%

% east-east-south-east arrow with upper name
\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%

% basic east-east-south-east arrow with lower name
\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%

% east-east-south-east arrow with lower name
\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%

% WEST-WEST-NORTH-WEST ARROWs
% default length: 21100 units

% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
%   and length n units
\newcommand{\WWNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,-\Z){\line(-3,1){#3}}%
\put(-\Y,\Z){\wwnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic west-west-north-west arrow
\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%

% west-west-north-west arrow
\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%

% basic west-west-north-west arrow with upper name
\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%

% west-west-north-west arrow with upper name
\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%

% basic west-west-north-west arrow with lower name
\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%

% west-west-north-west arrow with lower name
\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%

% WEST-WEST-SOUTH-WEST ARROWS
% default length: 21100 units

% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
\newcommand{\WWSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,\Z){\line(-3,-1){#3}}%
\put(-\Y,-\Z){\wwswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic west-west-south-west arrow
\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%

% west-west-south-west arrow
\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%

% basic west-west-south-west arrow with upper name
\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%

% west-west-south-west arrow with upper name
\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%

% basic west-west-south-west arrow with lower name
\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%

% west-west-south-west arrow with lower name
\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%


% NORTH-NORTH-NORTH-EAST ARROWS
% default length: 7100 units

% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
% and length n units
\newcommand{\NNNEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\line(1,3){#3}}%
\put(\Y,\Z){\nnnehead}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic north-north-north-east arrow
\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%

% north-north-north-east arrow
\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%

% basic north-north-north-east arrow with upper name
\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%

% north-north-north-east arrow with upper name
\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%

% basic north-north-north-east arrow with lower name
\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%

% north-north-north-east arrow with lower name
\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%

% SOUTH-SOUTH-SOUTH-WEST ARROWS
% default length: 7100 units

% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
% and length n units
\newcommand{\SSSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(\Y,\Z){\line(-1,-3){#3}}%
\put(-\Y,-\Z){\ssswhead}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic south-south-south-west arrow
\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%

% south-south-south-west arrow
\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%

% basic south-south-south-west arrow with upper name
\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%

% south-south-south-west arrow with upper name
\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%

% basic south-south-south-west arrow with lower name
\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%

% south-south-south-west arrow with lower name
\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%

% SOUTH-SOUTH-SOUTH-EAST ARROWS
% default length: 7100 units

% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
% and length n units
\newcommand{\SSSEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,\Z){\line(1,-3){#3}}%
\put(\Y,-\Z){\sssehead}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic south-south-south-east arrow
\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%

% south-south-south-east arrow
\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%

% basic south-south-south-east arrow with upper name
\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%

% south-south-south-east arrow with upper name
\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%

% basic south-south-south-east arrow with lower name
\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%

% south-south-south-east arrow with lower name
\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%

% NORTH-NORTH-NORTH-WEST ARROWS
% default length: 7100 units

% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
% and length n units
\newcommand{\NNNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(\Y,-\Z){\line(-1,3){#3}}%
\put(-\Y,\Z){\nnnwhead}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic north-north-north-west arrow
\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%

% north-north-north-west arrow
\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%

% basic north-north-north-west arrow with upper name
\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%

% north-north-north-west arrow with upper name
\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%

% basic north-north-north-west arrow with lower name
\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%

% north-north-north-west arrow with lower name
\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%

% NORTH-EAST-EAST-NORTH-EAST ARROWS
% default length: 21500 units

% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
% and length n units
\newcommand{\NEENEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\line(3,2){#3}}%
\put(\Y,\Z){\neenehead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic north-east-east-north-east arrow
\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%

% north-east-east-north-east arrow
\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%

% basic north-east-east-north-east arrow with upper name
\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%

% north-east-east-north-east arrow with upper name
\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%

% basic north-east-east-north-east arrow with lower name
\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%

% north-east-east-north-east arrow with lower name
\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%

% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
% DEFAULT LENGTH: 21500 UNITS

% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
% and length n units
\newcommand{\SEESEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,\Z){\line(3,-2){#3}}%
\put(\Y,-\Z){\seesehead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic south-east-east-south-east arrow
\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%

% south-east-east-south-east arrow
\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%

% basic south-east-east-south-east arrow with upper name
\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%

% south-east-east-south-east arrow with upper name
\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%

% basic south-east-east-south-east arrow with lower name
\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%

% south-east-east-south-east arrow with lower name
\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%

% NORTH-WEST-WEST-NORTH-WEST ARROWS
% default length: 21500 units

% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
% and length n units
\newcommand{\NWWNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,-\Z){\line(-3,2){#3}}%
\put(-\Y,\Z){\nwwnwhead}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic north-west-west-north-west arrow
\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%

% north-west-west-north-west arrow
\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%

% basic north-west-west-north-west arrow with upper name
\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%

% north-west-west-north-west arrow with upper name
\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%

% basic north-west-west-north-west arrow with lower name
\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%

% north-west-west-north-west arrow with lower name
\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%

% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
% default length: 21500 units

% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
% and length n units
\newcommand{\SWWSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,\Z){\line(-3,-2){#3}}%
\put(-\Y,-\Z){\swwswhead}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic south-west-west-south-west arrow
\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%

% south-west-west-south-west arrow
\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%

% basic south-west-west-south-west arrow with upper name
\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%

% south-west-west-south-west arrow with upper name
\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%

% basic south-west-west-south-west arrow with lower name
\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%

% south-west-west-south-west arrow with lower name
\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%


% NORTH-EAST-NORTH-NORTH-EAST ARROWS
% default length 14300 units

% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
% and length n units
\newcommand{\NENNEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\line(2,3){#3}}%
\put(\Y,\Z){\nennehead}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic north-east-north-north-east arrow
\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%

% north-east-north-north-east arrow
\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%

% basic north-east-north-north-east arrow with upper name
\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%

% north-east-north-north-east arrow with upper name
\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%

% basic north-east-north-north-east arrow with lower name
\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%

% north-east-north-north-east arrow with lower name
\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%

% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
% default length: 14300 units

% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
% and length n units
\newcommand{\SWSSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(\Y,\Z){\line(-2,-3){#3}}%
\put(-\Y,-\Z){\swsswhead}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic south-west-south-south-west arrow
\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%

% south-west-south-south-west arrow
\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%

% basic south-west-south-south-west arrow with upper name
\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%

% south-west-south-south-west arrow with upper name
\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%

% basic south-west-south-south-west arrow with lower name
\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%

% south-west-south-south-west arrow with lower name
\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%

% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
% default length: 14300 units

% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
% and length n units
\newcommand{\SESSEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(-\Y,\Z){\line(2,-3){#3}}%
\put(\Y,-\Z){\sessehead}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic south-east-south-south-east arrow
\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%

% south-east-south-south-east arrow
\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%

% basic south-east-south-south-east arrow with upper name
\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%

% south-east-south-south-east arrow with upper name
\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%

% basic south-east-south-south-east arrow with lower name
\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%

% south-east-south-south-east arrow with lower name
\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%

% NORTH-WEST-NORTH-NORTH-WEST ARROWS
% default length: 14300 units

% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
% and length n units
\newcommand{\NWNNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(\Y,-\Z){\line(-2,3){#3}}%
\put(-\Y,\Z){\nwnnwhead}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic north-west-north-north-west arrow
\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%

% north-west-north-north-west arrow
\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%

% basic north-west-north-north-west arrow with upper name
\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%

% north-west-north-north-west arrow with upper name
\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%

% basic north-west-north-north-west arrow with lower name
\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%

% north-west-north-north-west arrow with lower name
\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%

% HORIZONTAL CURVED ARROWS

% The following commands produce horizontal curved arrows
% default length: 160 units

% North\East curved arrow with name [1] and length [2]x100 units
\newcommand{\Necurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,\value{x}){\oval(#200,\value{y})[t]}%
\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,-1){\value{z}}}%
\put(#200,-\value{z}){\shead}%
\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
\truex{2500}%
\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
\end{picture}}%

% basic north\east curved arrow
\def\basicnecurvar[#1]{\Necurve{}{#1}}

% north\east curved arrow
\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%

% basic north\east curved arrow with name
\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%

% north\east curved arrow with name
\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
\let\necurvaR=\Necurvar

% North\West curved arrow with name [1] and length [2]x100 units
\newcommand{\Nwcurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,\value{x}){\oval(#200,\value{y})[t]}%
\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,-1){\value{z}}}%
\put(0,0){\line(0,-1){\value{z}}}%
\put(0,-\value{z}){\shead}%
\end{picture}}}%
\truex{2500}%
\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
\end{picture}}%

% basic north\west curved arrow
\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}

% north\west curved arrow
\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%

% basic north\west curved arrow with name
\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%

% north\west curved arrow with name
\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
\let\nwcurvaR=\Nwcurvar

% South\East curved arrow with name [1] and length [2]x100 units
\newcommand{\Securve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,1){\value{z}}}%
\put(0,0){\line(0,1){\value{z}}}%
\put(#200,\value{z}){\nhead}%
\end{picture}}}%
\truex{2500}%
\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
\end{picture}}%

% basic south\east curved arrow
\def\basicsecurvar[#1]{\Securve{}{#1}}

% south\east curved arrow
\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%

% basic south\east curved arrow with name
\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%

% south\east curved arrow with name
\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
\let\securvaR=\Securvar

% South\West curved arrow with name [1] and length [2]x100 units
\newcommand{\Swcurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,1){\value{z}}}%
\put(0,0){\line(0,1){\value{z}}}%
\put(0,\value{z}){\nhead}%
\end{picture}}}%
\truex{2500}%
\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
\end{picture}}%

% basic south\west curved arrow
\def\basicswcurvar[#1]{\Swcurve{}{#1}}

% south\west curved arrow
\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%

% basic south\west curved arrow with name
\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%

% south\west curved arrow with name
\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
\let\swcurvaR=\Swcurvar

% VERTICAL CURVED ARROWS

% The following commands produce vertical curved arrows
% default length: 160pt

% East\South curved arrow with name [1] and length [2]x100 units
\newcommand{\Escurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1400}\truey{2000}\truez{200}%
\put(\value{x},0){\oval(\value{y},#200)[r]}%
\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(-1,0){\value{z}}}%
\put(0,#200){\line(-1,0){\value{z}}}%
\put(-\value{z},0){\whead}%
\end{picture}}}%
\truex{2500}%
\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
\end{picture}}%

% basic east\south curved arrow
\def\basicescurvar[#1]{\Escurve{}{#1}}

% east\south curved arrow
\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%

% basic east\south curved arrow with name
\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%

% east\south curved arrow with name
\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
\let\escurvaR=\Escurvar

% East\North curved arrow with name [1] and length [2]x100 units
\newcommand{\Encurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1400}\truey{2000}\truez{200}%
\put(\value{x},0){\oval(\value{y},#200)[r]}%
\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(-1,0){\value{z}}}%
\put(0,#200){\line(-1,0){\value{z}}}%
\put(-\value{z},#200){\whead}%
\end{picture}}}%
\truex{2500}%
\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
\end{picture}}%

% basic east\north curved arrow
\def\basicencurvar[#1]{\Encurve{}{#1}}

% east\north curved arrow
\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%

% basic east\north curved arrow with name
\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%

% east\north curved arrow with name
\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
\let\encurvaR=\Encurvar

% West\South curved arrow with name [1] and length [2]x100 units
\newcommand{\Wscurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(-\value{x},0){\oval(\value{y},#200)[l]}%
\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(1,0){\value{z}}}%
\put(0,#200){\line(1,0){\value{z}}}%
\put(\value{z},0){\ehead}%
\end{picture}}}%
\truex{2400}%
\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
\end{picture}}%

% basic west\south curved arrow
\def\basicwscurvar[#1]{\Wscurve{}{#1}}

% west\south curved arrow
\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%

% basic west\south curved arrow with name
\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%

% west\south curved arrow with name
\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
\let\wscurvaR=\Wscurvar

% West\North curved arrow with name [1] and length [2]x100 units
\newcommand{\Wncurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(-\value{x},0){\oval(\value{y},#200)[l]}%
\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(1,0){\value{z}}}%
\put(\value{z},#200){\ehead}%
\put(0,#200){\line(1,0){\value{z}}}%
\end{picture}}}%
\truex{2400}%
\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
\end{picture}}%

% basic west\north curved arrow
\def\basicwncurvar[#1]{\Wncurve{}{#1}}

% west\north curved arrow
\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%

% basic west\north curved arrow with name
\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%

% west\north curved arrow with name
\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
\let\wncurvaR=\Wncurvar

\catcode`\@=12





\bibliographystyle{unsrt}

\begin{document}


\vbox{\vspace{6mm}}
\begin{center}{ {\large \bf Categorical Foundations of Quantum Logics and Their Truth Values Structures }
\\[7mm]
ELIAS ZAFIRIS\\ {\it University of Athens \\ Institute of
Mathematics
\\ Panepistimiopolis, 15784 Athens
\\ Greece  \\} \vspace{2mm} }\end{center} \vspace{8mm}

\footnotetext{{\it E-mail }:{ \bf ezafiris@math.uoa.gr}}





\begin{abstract}
We introduce a foundational sheaf theoretical scheme for the
comprehension of quantum event structures, in terms of
localization systems consisting of Boolean coordinatization
coverings induced by measurement. The scheme is based on the
existence of a categorical adjunction between presheaves of
Boolean event algebras and Quantum event algebras. On the basis of
this adjoint correspondence we prove the existence of an object of
truth values in the category of quantum logics, characterized as
subobject classifier. This classifying object plays the equivalent
role that the two-valued Boolean truth values object plays in
classical event structures. We construct the object of quantum
truth values explicitly and argue that it constitutes the
appropriate choice for the valuation of propositions describing
the behavior of quantum systems.



\end{abstract}









\newpage


\section{Prologue}


The notion of the logic of a physical theory has been introduced
in 1936 by von Neumann and G. Birkhoff in a paper entitled {\it
The Logic of Quantum Mechanics}. For classical theories the
appropriate logic is a Boolean algebra; but for quantum theories a
non-Boolean logical structure is necessary, which can be an
orthocomplemented lattice, or a partial Boolean algebra, or some
other structure of a related form. The logic of a physical theory
reflects the structure of the propositions describing the behavior
of a physical system in the domain of the corresponding theory.



Naturally, the typical mathematical structure associated with
logic is an ordered structure. The original quantum logical
formulation of Quantum theory [1, 2] depends in an essential way
on the identification of propositions with projection operators on
a complex Hilbert space. A non-classical, non-Boolean logical
structure is effectively induced which has its origins in Quantum
theory. More accurately the Hilbert space quantum logic is
axiomatized as a complete, atomic, orthomodular lattice.
Equivalently it can be isomorphic to the partial Boolean algebra
of closed subspaces of the Hilbert space associated with the
quantum system, or alternatively the partial Boolean algebra of
projection operators of the system. On the contrary, the
propositional logic of classical mechanics is Boolean logic,
meaning that the class of models over which validity and
associated semantic notions are defined for the propositions of
classical mechanics is the class of Boolean logic structures.



In the present work, our purpose is twofold: Firstly the
construction, and subsequent interpretation of a sheaf theoretical
scheme that accommodates the formalization of quantum event
algebras as structured interlocking  families of Boolean event
algebras, and secondly, the study of the truth values structures
suited to represent accurately the quantum domain of discourse
according to the sheaf theoretical perspective of this work. We
will argue that generalized classical logic structures,
interconnected non-trivially, provide the building blocks of an
appropriate conceptual environment by means of which it is
possible to comprehend the complexity of the structures of quantum
propositions.  We hold the view that the logic of quantum
propositions reflects literal ontological structures of the
quantum domain of discourse, and the perspective offered by the
proposed  scheme, with respect to a logical truth values
interpretation, reveals the relevant ontological aspects as well.





Traditionally the vast majority of the attempts to explore the
logical structures associated with quantum mechanical systems are
based on a set theoretical language. We propose a transition in
the syntax of the theory involved, which as will see effects a
transition in the semantics of quantum logics. This transition
hopefully clarifies the relationship between the ontological
structures associated with the classical and quantum domains of
discourse, as it is reflected on their logical
intertransformability. The mathematical language which is  best
suited to fulfill our objectives is provided by category and topos
theory [3-9]. This is due to the fact that these theories provide
the means to relate the form and meaning of non-Boolean quantum
logical structure with suitable interlocking locally Boolean
contexts, and most importantly, this can be done in a universal
way.


The adoption of categorical syntax involves at least two important
conceptual shifts from the way that one is likely to have
previously thought about the mathematical structures considered
here. The first shift concerns the primary significance of
structure-preserving mappings, named as arrows, in category theory
language. This shift reflects an opposition with the usual
prevailing significance of sets with structure,  named as objects
correspondingly. The second shift concerns the meaning of a
universal construction, which is made exact in the categorical
formalism, and moreover, consists the main objective of a
formulation in the syntactical terms of this theory.



We argue that the categorical syntax provides the means to
abstract a deep epistemological principle, an instance of which is
provided by the conceptual paradigm of geometric manifold theory.
The abstraction of this principle, in category-theoretical terms,
has made possible  the development of the theory of sheaves on
generalized spaces, the latter understood as categories of
generalized points, for appropriate covering systems of these
spaces. The idea embodied in this epistemological principle,
concerns the description of non-trivial global objects in terms of
simpler, adequately comprehended local objects, through a process
which consists of three levels:


The first level is constitutive of  the introduction of a covering
system with specified properties, such that the local objects
cover entirely the global object, and moreover shape it, by being
locally homomorphic to it. The local homomorphisms from the well
understood local objects capture essential complementary features
of the global object and succeed in coordinatizing it through
different charts or generalized reference frames.  The second
level is constitutive of the establishment of a suitable notion of
compatibility between the various reference frames. This is
necessary since it guarantees an efficient pasting code between
different coordinatizations of the global object.  The third level
is constitutive of the establishment of isomorphism between the
global object and the description of it through local
homomorphisms from the simpler objects in the covering system, in
conjunction with the pasting information between them.




The above general scheme provides an elucidation of the global
object through covering families of well known local objects
pasted together appropriately. In our case a quantum event algebra
or quantum logic plays the role of the global object and Boolean
event algebras or Boolean logics play the role of the local
modeling objects. We will show that the logic of propositions
describing  a quantum system can be comprehended via equivalence
relations in the sheaf of coefficients defined over  the category
of Boolean logical structures for an appropriate covering system
of the latter, defined as a Boolean localization system. The
significance of the sheaf-theoretical conception of a quantum
logical structure, lies on the fact that it is supported by the
well defined underlying notion of multi-valued truth structure of
a topos.


More concretely, quantum event algebras can be represented as
sheaves for an appropriate covering system  defined on the Boolean
localizing category. This process is formalized categorically by
the concept of localization systems, where, the specified maps
from Boolean contexts induced by measurement situations of
observables, play the role of covers of a quantum structure of
events. In more detail, the notion of local is characterized by a
categorical Grothendieck topology, the axioms of which express
closure conditions on the collection of covers. In this sense the
information available about each map of the specified covering
system may be used to determine completely a  quantum event
structure. In this paper we will avoid to mention Grothendieck
topologies explicitly in order to avoid unnecessary technical
complications in the exposition of the arguments, but the
interested reader may consult [10] for details.


The category of sheaves is a topos, and consequently, comes
naturally equipped with an object of generalized truth values,
called subobject classifier. This object of truth values, being
remarkably a sheaf itself, namely an object of the topos, is the
appropriate conceptual tool for the organization of the logical
dimension of the information included in the category of quantum
event algebras, as it is encoded in Boolean localization systems.




The fact that a quantum event algebra is actually a non-trivial
global object is fully justified by Kochen-Specker theorem [11].
According to this there are no two-valued homomorphisms on the
algebra of quantum propositions. Consequently  a quantum logical
algebra cannot be embedded into a Boolean one.  We note that a
two-valued homomorphism on a classical event algebra is a
classical truth value assignment on the propositions of the
physical theory,  represented by the elements of the Boolean
algebra, or a yes-no assignment on the corresponding properties
represented by the elements of the algebra. In this work, we will
show that the categorical environment specifying a quantum event
algebra in terms of Boolean localization systems, contains an
object of truth values, or classifying object, that constitutes
the appropriate tool for the definition of a quantum truth values
assignment corresponding to valuations of propositions describing
the behavior of quantum systems.



Contextual topos theoretical approaches to quantum structures of
truth values have been also considered, from a different viewpoint
in [12, 13], and discussed in [14-16]. Of particular relevance to
the present work, regarding the specification of a quantum truth
values object, although not based on category theory methods,
seems to be the approach to the foundations of quantum logic by
Takeuti and Davis [17, 18], according to whom, quantization of a
proposition of classical physics is equivalent to interpreting it
in a Boolean extension of a set theoretical universe, where $B$ is
a complete Boolean algebra of projection operators on a Hilbert
space.




In Section 2, we introduce the preliminary notions of categories,
functors and variable sets. In Section 3, we define the categories
of Classical and Quantum event algebras, or logics, and
furthermore, we construct Boolean cordinatization and Boolean
presheaf functors, as well as, their categories of generalized
elements. In Section 4, we establish the fundamental adjunction of
the scheme between the categories of Boolean presheaves and
Quantum event algebras. In Section 5, we introduce the notion of
systems of localization for quantum event algebras and  formulate
a representation theorem in terms of the counit of the fundamental
adjunction. Moreover, we analyze the physical semantics of the
induced sheaf theoretical representation.  In Section 6, we
introduce the notion of subobject functor and specify the
necessary and sufficient conditions for being representable by an
object in the category of quantum logics, to be identified as a
quantum truth values object. In Section 7, we determine explicitly
the quantum truth values object by means of a tensor product
construction. In Section 8, we verify explicitly that the truth
values object carries a quantum logic structure, and moreover,
plays the role of subobject classifier in the category of quantum
event algebras. In Section 9, we provide a detailed description of
quantum truth values and formulate the relevant criterion of truth
for a complete description of reality. In Section 10, we propose
the use of quantum truth values as the proper range for valuations
of propositions associated with the behavior of quantum systems
and demonstrate their functioning. Finally we conclude in Section
11.




\section{Preliminaries}

Category theory provides a general apparatus for dealing with
mathematical structures and their mutual relations and
transformations.  The basic categorical principles that we adopt
in the subsequent analysis are summarized as follows:

[i] To each species of mathematical structure, there corresponds a
{\bf category} whose objects  have that structure, and whose
morphisms preserve it.


[ii]  To any natural construction on structures of one species,
yielding structures of another species, there corresponds a {\bf
functor} from the category of first species to the category of the
second.

\paragraph{Categories:} A category $\mathcal C$ is a class of objects and
morphisms of objects such that the following properties are
satisfied:



[1]. For any objects $X$, $Y$ all morphisms $f: X \rightarrow Y$
form a set denoted ${Hom}_{\mathcal C}(X,Y)$;


[2]. For any object $X$ an element $id_{X} \in {Hom}_{\mathcal
C}(X,X)$ is distinguished; it is called the identity morphism;


[3]. For arbitrary objects $X$, $Y$, $Z$ the set mapping is
defined $${Hom}_{\mathcal C}(X,Y) \times {Hom}_{\mathcal C}(Y,Z)
\rightarrow {Hom}_{\mathcal C}(X,Z)$$ For morphisms $g \in
{Hom}_{\mathcal C}(X,Y)$, $h \in {Hom}_{\mathcal C}(Y,Z)$ the
image of the pair $(g,h)$ is called the composition; it is denoted
$h \circ g$. The composition operation is associative.

[4]. For any $f \in {Hom}_{\mathcal C}(X,Y)$ we have $id_{Y} \circ
f= f \circ id_{X}=f$.



For an arbitrary category $\mathcal C$ the opposite category
${\mathcal C}^{op}$ is defined in the following way: the objects
are the same, but ${Hom}_{{\mathcal C}^{op}}(X,Y)={Hom}_{\mathcal
C}(Y,X)$, namely all arrows are inverted.



\paragraph{Functors:} Let $\mathcal C$, $\mathcal D$ be categories; a
covariant functor $\mathbf F: \mathcal C \rightarrow \mathcal D$
is a class mapping that transforms objects to objects and
morphisms to morphisms preserving compositions and identity
morphisms: $${\mathbf F}(id_X)=id_{{\mathbf F}(X)}; {\mathbf F}(g
\circ f)={\mathbf F}(g) \circ {\mathbf F}(f)$$ A contravariant
functor $\mathbf F: \mathcal C \rightarrow \mathcal D$ is, by
definition, a covariant functor $\mathbf F: \mathcal C \rightarrow
{\mathcal D}^{op}$.



\paragraph{Variable Sets:} For a category  $\mathcal A$ we will be
considering the presheaf category ${\bf Sets}^{{\mathcal A}^{op}}$
of all contravariant functors from $\mathcal A$ to $\bf Sets$ and
all natural transformations between these. A functor $\mathbf P$
is a structure-preserving morphism of these categories, that is it
preserves composition and identities. A functor in the category
${\bf Sets}^{{\mathcal A}^{op}}$ can be thought of as constructing
an image of $\mathcal A$ in $\bf Sets$ contravariantly, or as a
contravariant translation of the language of  $\mathcal A$  into
that of $\bf Sets$. Given another such translation (contravariant
functor) $\mathbf Q$ of $\mathcal A$ into $\bf Sets$ we need to
compare them. This can be done by giving, for each  object $A$ in
$\mathcal A$ a transformation $ \tau_A: {\mathbf P}(A) \ar
{\mathbf Q}(A)$ which compares the two images of  the object $A$.
Not any morphism will do, however, as we would like the
construction to be parametric in $A$, rather than ad hoc. Since
$A$ is an object in $\mathcal A$ while ${\mathbf P}(A)$ is in $\bf
Sets$ we cannot link them by a morphism. Rather the goal is that
the transformation should respect the morphisms of $\mathcal A$,
or in other words the interpretations of $v : A \ar C$ by $\mathbf
P$ and $\mathbf Q$ should be compatible with the transformation
under $\tau$. Then $\tau$ is a natural transformation in the
presheaf category ${\bf Sets}^{{\mathcal A}^{op}}$.




An object $\mathbf P$ of ${\bf Sets}^{{\mathcal A}^{op}}$ may be
understood as a right action of $\mathcal A$ on a set which is
partitioned into sorts parameterized by the objects of $\mathcal
A$ and such that whenever $v : C \ar A$ is an arrow  and $p$ is an
element of $\mathbf P$ of sort $A$, then $pv$ is specified as an
element of $\mathbf P$ of sort $C$, such that the following
conditions are satisfied $$p1_A=p, \quad p(vw)=(pv)w, \quad vw : D
\ar C \ar A$$


Such an action $\mathbf P$ is referred as a  $\mathcal A$-variable
set. The fact that any morphism $ \tau : \mathbf P \ar \mathbf Q$
in the presheaf category ${\bf Sets}^{{\mathcal A}^{op}}$ is a
natural transformation is expressed by the condition $$\tau
(p,v)={\tau (p)}(v)$$ where the first action of $v$ is the one
given by $\mathbf P$ and the second by $\mathbf Q$.




\section{The Categorical Framework}
\subsection{Categories of Quantum and Classical Event Algebras}



A {\bf Quantum event structure} is a small category, denoted by
$\mathcal L$, which is called the category of Quantum event
algebras.



Its objects, denoted by $L$, are Quantum algebras of events, that
is orthomodular $\sigma$-orthoposets. More concretely, each object
$L$ in $\mathcal L$, is considered as a partially ordered set of
Quantum events, endowed with a maximal element 1, and with an
operation of orthocomplementation $[-]^{\ast} : L \ar L$, which
satisfy, for all $l \in L$, the following conditions: [a] $l \leq
1$,      [b] $l^{\ast \ast}=l$, [c] $l \vee l^{\ast}=1$, [d] $l
\leq {\acute l} \Rightarrow {{\acute l}^{\ast}}   \leq l^{\ast}$,
[e] $ l \bot {\acute l} \Rightarrow l \vee {\acute l} \in L$, [f]
for $l, {\acute l} \in L, l \leq {\acute l}$ implies that $l$ and
${\acute l}$ are compatible,  where $0:=1^{\ast}$, $l \bot {\acute
l} := l \leq {\acute l}^{\ast}$, and the operations of meet
$\wedge$ and join $\vee$ are defined as usually. We also recall
that $l, {\acute l} \in L$ are compatible if the sublattice
generated by $\{{l,l^{\ast},{\acute l},{{\acute l}^{\ast}}}\}$ is
a Boolean algebra, namely if it is a Boolean sublattice. The
$\sigma$-completeness condition, namely that the join of countable
families of pairwise orthogonal events must exist, is also
required in order to have a well defined theory of observables
over $L$.


Its arrows are Quantum algebraic homomorphisms, that is maps $K
\Ar H L$, which satisfy, for all $k \in K$, the following
conditions: [a] $H(1)=1$,        [b]
$H(k^{\ast})={[H(k)]}^{\ast}$, [c] $k \leq {\acute k} \Rightarrow
H(k) \leq H({\acute k})$, [d] $k \bot {\acute k} \Rightarrow H( k
\vee {\acute k}) \leq H(k) \vee H({\acute k})$, [e] $H({\bigvee}_n
k_n)={\bigvee}_n H(k_n)$ , where $k_1, k_2, \ldots$ countable
family of mutually orthogonal events.




A {\bf Classical event structure}  is a small category, denoted by
$\mathcal B$, which is called the category of Boolean event
algebras. Its objects are $\sigma$-Boolean algebras of events and
its arrows are the corresponding Boolean algebraic homomorphisms.





\subsection{Boolean Coordinatization Functors of Quantum Event Algebras}






\paragraph{Boolean Coefficients Functors : }

We define a  modeling local coefficients functor, ${\mathbf
A}:{\mathcal B} \ar {\mathcal L}$, which assigns to Boolean event
algebras in ${\mathcal B}$, that instantiates a model category,
the underlying quantum event algebras from ${\mathcal L}$, and to
Boolean homomorphisms the underlying quantum algebraic
homomorphisms. Hence ${\mathbf A}$ acts as a forgetful functor,
forgetting the extra Boolean structure of ${\mathcal B}$.


\paragraph{Boolean Presheaves Functors: }

If ${\mathcal B}^{op}$ is the opposite category of ${\mathcal B}$,
then ${{\bf Sets}^{{\mathcal B}^{op}}}$ denotes the functor
category of presheaves on Boolean event algebras, with objects all
functors $ {\mathbf P}: {\mathcal B}^{op} \ar  {\bf  Sets}$, and
morphisms all natural transformations between such functors. Each
object ${\mathbf P}$ in this category is a contravariant
set-valued functor on ${\mathcal B}$,  called a presheaf on
${\mathcal B}$. The functor category of presheaves on Boolean
event algebras ${{\bf Sets}^{{\mathcal B}^{op}}}$, provides an
instantiation of a structure known as topos. A topos exemplifies a
well defined notion of variable set. It can be conceived as a
local mathematical framework corresponding to a generalized model
of set theory or as a generalized space.


For each Boolean algebra B of ${\mathcal B}$,  ${\mathbf P}$(B) is
a set, and for each arrow $f : C \ar  B$, ${\mathbf P} (f) :
{\mathbf P}(B) \ar   {\mathbf P}$(C) is a set function. If
${\mathbf P}$ is a presheaf on ${\mathcal B}$ and $p \in {\mathbf
P}$(B), the value ${\mathbf P}(f) (p)$ for an arrow $f : C \ar B$
in ${\mathcal B}$ is called the restriction of $x$ along $f$ and
is denoted by ${\mathbf P}(f) (p)=p\circ f$.


Each object $B$ of $\mathcal B$ gives rise to a contravariant
Hom-functor ${\mathbf y} [B]:={Hom_{\mathcal B}}(-,B)$. This
functor defines a presheaf on $\mathcal B$. Its action on an
object $C$ of $\mathcal B$ is given by $${\mathbf
y}[B](C):={Hom_{\mathcal B}}(C,B)$$ whereas its action on a
morphism $D \Ar x C$, for $v : C \ar B$ is given by $$ {\mathbf
y}[B](x) : {Hom_{\mathcal B}}(C,B) \ar {Hom_{\mathcal B}}(D,B)$$
$${\mathbf y}[B](x)(v)=v \circ x$$ Furthermore ${\mathbf y}$ can
be made into a functor from $\mathcal B$ to the contravariant
functors on $\mathcal B$ $${\mathbf y} : \mathcal B \ar {{\bf
Sets}^{{\mathcal B}^{op}}}$$ such that $B {\mapsto} {Hom_{\mathcal
B}}(-,B)$. This is called the Yoneda embedding and it is a full
and faithful functor.






\paragraph{Boolean Fibrations : }
Next we construct the category of elements of ${\mathbf P}$,
denoted by $\bf{G}({\mathbf P},{\mathcal B})$. Its objects are all
pairs  $(B,p)$, and its morphisms ${(\acute{B},\acute{p})}
{\rightarrow}(B,p)$ are those morphisms $u : \acute{B}
{\rightarrow} B$ of ${\mathcal B}$ for which $pu=\acute{p}$.
Projection on the second coordinate of  $\bf{G}({\mathbf
P},{\mathcal B})$, defines a functor ${\bf{G}}_{\mathbf P} :
\bf{G}({\mathbf P},{\mathcal B})  {\rightarrow}  {\mathcal B}$.
$\bf{G}({\mathbf P},{\mathcal B})$ together with the projection
functor  ${\bf{G}}_{\mathbf P} $ is called the split discrete
fibration induced by ${\mathbf P}$, and ${\mathcal B}$ is the base
category of the fibration  as in the Diagram below. We note that
the fibers are categories in which the only arrows are identity
arrows. If $B$ is an object of ${\mathcal B}$, the inverse image
under ${\bf{G}}_{\mathbf P}$ of $B$ is simply the set ${\mathbf
P}$(B), although its elements are written as pairs so as to form a
disjoint union. The construction of the fibration induced by
${\mathbf P}$, is an instance of  the general Grothendieck
construction [7].

\begin{diagram}
�{\mathbf G}({\mathbf P}, {\mathcal B} )�� �\Sar {{\mathbf
G}_{\mathbf P}}�� �{\mathcal B} �\Ear {\mathbf P} � \bf Sets��
\end{diagram}








\section{ The Fundamental Adjunction}


The adjunctive correspondence, which will be proved in what
follows, provides the conceptual ground, concerning the
representation  of quantum event algebras in terms of sheaves of
structured families of Boolean event algebras, and is based on the
categorical construction of colimits over the category of elements
of a presheaf of Boolean algebras ${\mathbf P}$.


If we consider the category of quantum event algebras  ${\mathcal
L}$ and the coefficient functor ${\mathbf A}$,  we can define the
functor ${\mathbf R}$ from ${\mathcal L}$ to the category of
presheaves of Boolean event algebras given by:

$${\mathbf R}(L) : B {\mapsto} {{Hom}_{\mathcal L}({\mathbf A}(B),
L)}$$


A natural transformation $\tau$ between the presheaves on the
category of Boolean algebras ${\mathbf P}$ and ${\mathbf R}(L)$,
$\tau : {\mathbf P} \ar {\mathbf R}(L)$ is a family ${{\tau}_B}$
indexed by Boolean algebras $B$ of ${\mathcal B}$ for which each
${\tau}_B$ is a map of sets, $${\tau}_B : {\mathbf P}(B)  {\to}
{{Hom}_{\mathcal L}({\mathbf A}(B), L)}$$ such that the diagram of
sets below commutes for each Boolean homomorphism $u : {\acute{B}}
\to B$ of ${\mathcal B}$.


\begin{diagram} �{\mathbf P}(B) �\Ear   {{\tau}_B}
�{Hom_{\mathcal L}}({{\mathbf A}(B)}, L)�� �\Sar {{\mathbf P}(u)}
�                      �\saR {{\mathbf A}(u)}^*  �� �{\mathbf
P}(\acute B) �\Ear   {{\tau}_B} �{Hom_{\mathcal L}}({{\mathbf
A}(\acute B)}, L)��
\end{diagram}


From the perspective of the category of elements of the Boolean
algebras-variable set $P$ the map ${\tau}_B$, defined above, is
identical with the map: $${\tau}_B : (B,p) {\to} {{Hom}_{\mathcal
L}({{\mathbf A} \circ {G_{\mathbf P}}}(B,p), L)}$$ Subsequently
such a $\tau$ may be represented as a family of arrows of
${\mathcal L}$ which is being indexed by objects $(B,p)$ of the
category of elements of the presheaf of Boolean algebras ${\mathbf
P}$, namely $${\{{{\tau}_B}(p) : {\mathbf A}(B) \to L\}}_{(B,p)}$$
Thus, according to the point of view provided by the category of
elements of ${\mathbf P}$, the condition of the commutativity of
the diagram on the top, is equivalent to the condition that for
each arrow $u$ the following diagram commutes.


\begin{diagram}
�{{\mathbf A}(B)}   � \eeql � {\mathbf A} \circ {{{\mathbf
G}_{\mathbf P}}(B,p)}  �� �        �          � �\Sear {{{\tau}_B}
(p)} �� �\Nar[133] {{\mathbf A}(u)}  � �\naR[133] {u_*}      �   �
L    �� �       �            � �\neaR {{{\acute \tau}_B} (\acute
p)} �� �{{\mathbf A}(\acute B)} � \eeql � {\mathbf A} \circ
{{{\mathbf G}_{\mathbf P}}(\acute B,\acute p)}  ��
\end{diagram}



Consequently, according to the diagram above, the arrows
${{\tau}_B}(p)$ form a cocone from the functor ${{\mathbf A} \circ
{G_{\mathbf P}}}$ to the quantum event algebra $L$.  The
categorical definition of colimit, points to the conclusion that
each such cocone emerges by the composition of the colimiting
cocone with a unique arrow from the colimit $\mathbf L \mathbf P$
to the quantum event algebra object $L$. Equivalently, we conclude
that there is a bijection, natural in $\mathbf P$ and $L$ as
follows:

$$ Nat({\mathbf P},{\mathbf R}(L)) \cong {{Hom}_{\mathcal
L}({\mathbf L \mathbf P}, L)}$$


The established bijective correspondence, interpreted
functorially, says that the functor ${\mathbf R}$ from ${\mathcal
L}$ to presheaves given by $${\mathbf R}(L) : B {\mapsto}
{{Hom}_{\mathcal L}({\mathbf A}(B), L)}$$ has a left adjoint
$\mathbf L :  {{\bf Sets}^{{\mathcal B}^{op}}}  \to {\mathcal L}$,
which is defined for each presheaf of Boolean  algebras $\mathbf
P$ in ${{\bf Sets}^{{\mathcal B}^{op}}}$ as the colimit $${\mathbf
L}({\mathbf P})= {\it Colim} \{ \bf{G}({\mathbf P},{\mathcal B})
\Ar {{\mathbf G}_{\mathbf P}} {\mathcal B} \Ar {\mathbf A}
{\mathcal L} \}$$
\paragraph{Colimits Construction : }For readers not feeling comfortable with the
categorical notion of colimit we may construct it explicitly for
the case of interest $\mathbf P={\mathbf R}(L)$ in set-theoretical
language as follows:




We consider the set: $${\mathbf L}({\mathbf {\mathbf
R}(L)})=\{({\psi}_B,q)/ ({{\psi}_B : {\mathbf A}(B) \ar L}) \in
[{\bf{G}({\mathbf {\mathbf R}(L)},{\mathcal B})}]_0, q \in
{\mathbf A}(B)\}$$ We notice that if there exists
$u:{\psi}_{\acute B} \rightarrow {\psi}_B$ such that: $u(\acute
q)=q$ and ${\psi}_B \circ u={\psi}_{\acute B}$, where $[{\mathbf
R}(L) u]({\psi}_B):={\psi}_B \circ u$ as usual, then we may define
a transitive and reflexive relation $\Re$ on the set ${\mathbf
L}({\mathbf {\mathbf R}(L)})$. Of course the inverse also holds
true. We notice then that $$({\psi}_B \circ u,q) \Re ({\psi}_B,
u(\acute q))$$ for any $u:{\mathbf A}(\acute B) \rightarrow
{\mathbf A}(B)$ in the category ${\mathcal B}$. The next step is
to make this relation also symmetric by postulating that for
$\zeta$, $\eta$ in ${\mathbf L}({\mathbf {\mathbf R}(L)})$, where
$\zeta$, $\eta$ denote pairs in the above set, we have: $$\zeta
\sim \eta$$ if and only if $\zeta \Re \eta$ or $\eta \Re \zeta$.
Finally by considering a sequence $\xi_1$, $\xi_2$, \ldots
,$\xi_k$ of elements of the set ${\mathbf L}({\mathbf {\mathbf
R}(L)})$ and also $\zeta$, $\eta$ such that: $$\zeta \sim \xi_1
\sim \xi_2 \sim  \ldots \sim \xi_{k-1} \sim \xi_k \sim \eta$$ we
may define an equivalence relation on the set ${\mathbf
L}({\mathbf {\mathbf R}(L)})$ as follows: $$\zeta \bowtie
\eta:=\zeta \sim \xi_1 \sim \xi_2 \sim  \ldots \sim \xi_{k-1} \sim
\xi_k \sim \eta$$ Then for each $\zeta$ $\in$ ${\mathbf
L}({\mathbf {\mathbf R}(L)})$ we define the quantum at $\zeta$ as
follows: $$Q_\zeta=\{\iota \in {\mathbf L}({\mathbf {\mathbf
R}(L)}): \zeta \bowtie \iota\}$$ We finally put $${{\mathbf
L}({\mathbf {\mathbf R}(L)})}/ \bowtie:= \{Q_\zeta :
\zeta=({\psi}_B,q) \in {\mathbf L}({\mathbf {\mathbf R}(L)})\}$$
and use the notation $Q_\zeta=\| ({\psi}_B,q) \|$. The set
${{\mathbf L}({\mathbf {\mathbf R}(L)})}/ \bowtie$ is naturally
endowed with a quantum algebra structure if we are careful to
notice that:


[1]. The orthocomplementation is defined as: $Q_\zeta ^*$=${\|
({\psi}_B,q) \|}^*$= ${\| ({\psi}_B,q^*) \|}$.



[2]. The unit element is defined as: ${\mathbf 1}={\| ({\psi}_B,1)
\|}$.


[3]. The partial order structure on the set ${{\mathbf L}({\mathbf
{\mathbf R}(L)})}/ \bowtie$ is defined as:


${\| ({\psi}_B,q) \|} \preceq {\| ({\psi}_C,r) \|}$ if and only if
$d_1 \preceq d_2$ where we have made the following
identifications: ${\| ({\psi}_B,q) \|}={\| ({\psi}_D,d_1) \|}$ and
${\| ({\psi}_C,r) \|}={\| ({\psi}_D,d_2) \|}$, with $d_1$, $d_2$
$\in$ ${\mathbf A( D)}$ according to the fiber product diagram of
event algebras:
\begin{diagram}
�{{\mathbf A}(D)}  �\Ear {\beta} � {{\mathbf A}(B)} �� �\saR
{\gamma} � �\sar  �� �{{\mathbf A}(C)}�\ear �L��
\end{diagram}
such that $\beta(d_1)=q$, $\gamma(d_2)=r$. The rest of the
requirements such that ${{\mathbf L}({\mathbf {\mathbf R}(L)})}/
\bowtie$, namely the colimit in question, actually carries the
structure of a quantum event algebra are obvious.















The conclusion being drawn from the analysis presented in this
Section can be summarized as follows:
\paragraph{Conclusion:}
There exists a pair of adjoint functors ${\mathbf L} \dashv
{\mathbf R}$ as follows: $$\mathbf L :  {{\bf Sets}^{{\mathcal
B}^{op}}} \adjar {\mathcal L} : \mathbf R$$



Thus we have constructed an adjunction which consists of the
functors $\mathbf L$ and $\mathbf R$, called left and right
adjoints with respect to each other respectively, as well as the
natural bijection


\begin{diagram}
�Nat({\mathbf P},{{\mathbf R}(L)})�      �\Ear[50]   {\mathbf r}�
�{Hom_{\mathcal L}}({{\mathbf L}{\mathbf P}}, L)�� �\seql � �
 � �\seql �� �Nat({\mathbf P},{{\mathbf R}(L)})�     �\War[50]
{\mathbf l}� �{Hom_{\mathcal L}}({{\mathbf L}{\mathbf P}}, L)��
\end{diagram}

$$ Nat({\mathbf P},{\mathbf R}(L)) \cong {{Hom}_{\mathcal
L}({\mathbf L \mathbf P}, L)}$$



In this situation the map $\mathbf r$ is called the right
adjunction operator and the map $\mathbf l$ the left adjunction
operator. We call the above construction the fundamental
adjunction of the proposed categorical scheme between the category
of presheaves of Boolean event algebras and the category of
Quantum event algebras.





An important fact is revealed if in the bijection defining the
fundamental adjunction we use as $\mathbf P$ the representable
presheaf of the category of Boolean algebras ${\mathbf y} [B]$.
Then it takes the form $$ Nat({\mathbf y}[B],{\mathbf R}(L)) \cong
{{Hom}_{\mathcal L}({\mathbf L {\mathbf y}[B]}, L)}$$ We note that
when ${\mathbf P}={\mathbf y}[B]$ is representable, then the
corresponding category of elements $\bf{G}({\mathbf
y}[B],{\mathcal B})$ has a terminal object, namely the element
$1:B \ar B$ of ${\mathbf y}[B](B)$. Therefore the colimit of the
composite $\mathbf A \circ {\mathbf G}_{{\mathbf y}[B]}$ is going
to be just the value of $\mathbf A \circ {\mathbf G}_{{\mathbf
y}[B]}$ on the terminal object. Thus we have $${\mathbf L {\mathbf
y}[B]}(B) \cong {\mathbf A \circ {\mathbf G}_{{\mathbf
y}[B]}}(B,1_B)={\mathbf A}(B)$$ Hence we characterize ${\mathbf
A}(B)$ as the colimit of the representable presheaf on the
category of Boolean algebras.



We conclude that the  following diagram   (with the Yoneda
embedding $\mathbf y$) commutes.



\begin{diagram}
�{\mathcal B}�� �\Smono {\mathbf y} �\Sear {\mathbf A}�� �{\mathbf
Sets}^{{\mathcal B}^{op}}�\Edotar {\mathbf L}�{\mathcal L}��
\end{diagram}










\section{Boolean Localization Systems of Quantum Event Algebras}



\subsection{Functor of Generalized Points of Quantum Event Algebras}
The conceptual roots of the notion of functor of points for a
general structure in a categorical environment trace back to the
studies of Grothendieck in algebraic geometry as related with the
theory of schemes and topoi. In our present context of enquiry,
the foundational role of Boolean localization systems, associated
with physical measurement procedures, in the development of a
sheaf theoretical perspective on quantum logic is based exactly on
the notion of the functor of generalized points of a quantum event
algebra. We may briefly explain its functioning as follows:


If we consider the opposite of the category of quantum event
algebras, that is the category with the same objects but with
arrows reversed ${{\mathcal L}}^{op}$, each object in the context
of this category can be thought as the locus of a quantum event
algebra, or else it carries the connotation of space. The crucial
observation is that any such space is determined up to canonical
isomorphism if we know all morphisms into this locus from any
other locus in the category. For instance, the set of morphisms
from the one-point locus to $L$ in ${{\mathcal L}}^{op}$
determines the set of points of the locus $L$. The philosophy
behind this approach amounts to considering any morphism in
${{\mathcal L}}^{op}$ with target the locus $L$ as a generalized
point of $L$. It is obvious that the description of a locus $L$ in
terms of all possible morphisms from all other objects of
${{\mathcal L}}^{op}$ in most cases is redundant. For this reason
we may restrict the generalized points of $L$ to all those
morphisms in ${{\mathcal L}}^{op}$ having as domains locoi
corresponding to Boolean event algebras. These locoi acquire a
clear physical meaning because they can be legitimately identified
with local spaces for measurement of observables. Evidently such
measurement locoi correspond, if we take into account Stone's
representation theorem for Boolean algebras, to replacement of
each Boolean algebra $B$ in $\mathcal B$ by its set-theoretical
representation $[{\mathbf \Sigma}, B_\Sigma]$, consisting of a
local measurement space $\mathbf \Sigma$ and its local field of
subsets $B_\Sigma$.





Variation of generalized points over all domain-objects of the
subcategory of ${{\mathcal L}}^{op}$ consisting of Boolean event
algebras produces the functor of points of $L$ restricted to the
subcategory of Boolean coordinatizing objects, identified with
${{\mathcal B}}^{op}$. The functor of points of a quantum event
algebra $L$ is made then an object in the category of presheaves
${{\bf Sets}^{{\mathcal B}^{op}}}$, representing $L$ -(in the
sequel for simplicity we talk of an algebra and its associated
locus tautologically)- in the environment of the topos of
presheaves over the category of Boolean event algebras. This
methodology will prove to be successful if it could be possible to
establish an isomorphic representation of $L$ in terms of the
information being carried by its generalized points $B \rightarrow
L$, associated with measurement situations, collated together by
appropriate means.



\subsection{ Systems of Boolean Prelocalizations}
The central idea behind the notion of a prelocalization system for
a quantum event algebra, according to the philosophy of the
previous section, is based on the expectation that a global
quantum event algebra $ L$ in $\mathcal L$ is possible to be
studied by means of structure preserving maps $ B \ar  L$ with
local or modeling Boolean algebras $B$ in $\mathcal B$ as their
domains. Put differently, we try to coordinatize the information
contained in a quantum event algebra $L$ in $\mathcal L$ by means
of Boolean points, namely morphisms $ B \ar L$ having as their
domains, locally defined Boolean event algebras $B$ in $\mathcal
B$ for measurement of observables. Any single map from a Boolean
coordinates domain to a quantum event algebra is not enough for a
complete determination of its information content, and hence, it
contains only a limited amount of information about it. More
concretely, it includes the amount of information related to a
specified context, and thus, it is inevitably constrained to
represent the abstractions associated with the prepared Boolean
context. This problem may be tackled, only if, we employ many
structure preserving maps from the coordinatizing Boolean objects
to a quantum event algebra simultaneously, so as to cover it
completely. Of course it is desirable to consider the minimum
number of such maps which is specified by the requirement of
distinguishability of the elements of the quantum event algebra.
In turn, the information available about each map of the specified
covering may be used to determine the quantum algebra itself. In
this case, we say that,  the family of such maps generate a system
of prelocalizations for a quantum event algebra. We can formalize
these intuitive ideas as follows:







A {\bf system of Boolean prelocalizations} for a quantum event
algebra $L$ in $\mathcal L$ is a subfunctor of the Hom-functor
${\mathbf R}(L)$ of the form $\mathbf S : {\mathcal B}^{op} \to
\bf Sets$, that is for all $B$ in $\mathcal B$ satisfying
${\mathbf S}(B) \subseteq [{\mathbf R}(L)](B)$.



According to this definition a system of Boolean prelocalizations
for quantum event algebra $L$ in $\mathcal L$ is an ideal
${\mathbf S}(B)$ of quantum algebraic homomorphisms of the form
${\psi}_B : {\mathbf A}(B) \ar L$, $B$ in  ${\mathcal B}$, namely
a set as above with the following property




({\it Ideal}): \{If ${\psi}_B : {\mathbf A}(B) \ar L  \in {\mathbf
S}(B)$, and ${\mathbf A}(v) : {\mathbf A}({\acute B}) \ar {\mathbf
A}({B})$ in $\mathcal L$ for $v : {\acute B} \ar {B}$  in
${\mathcal B}$, implies ${\psi}_{B} \circ {\mathbf A}(v) :
{\mathbf A}({\acute B}) \ar \mathcal L \in {\mathbf S}(B)$\}.




We observe that the operational role of the Hom-functor ${\mathbf
R}(L)$ amounts  to the depiction of  an ideal of structure
preserving maps, in order to provide local coverings of a quantum
event algebra by coordinatizing Boolean points. They play exactly
the role of Boolean covers for the filtration of the information
associated with a quantum event structure. Their domains $B$
provide Boolean coefficients, associated with measurement
situations. The introduction of these systems is justified by the
consequences of the  Kochen-Specker theorem, according to which,
it is not possible to understand completely a quantum mechanical
system with the use of a single Boolean experimental arrangement.
Equivalently, there are no two-valued homomorphisms on the algebra
of quantum events, and thus, it  cannot be embedded into a Boolean
one. On the other side, in every concrete experimental context,
the set of events that have been actualized in this context forms
a Boolean algebra. Consequently, any Boolean domain cover in a
system of prelocalizations for quantum event algebra, corresponds
to a set of Boolean events that become actualized in the
experimental context of B. These Boolean points play the role of
information localizing devices in a quantum event structure, that
are induced by measurement situations. The above observation is
equivalent to the statement that a measurement-induced Boolean
algebra serves as a reference frame, relative to which a
measurement result is being coordinatized, in accordance to the
specification of the corresponding measurement context.



A family of Boolean  covers ${\psi}_B : {\mathbf A}(B) \ar L$, $B$
in ${\mathcal B}$,  is the generator of the system of
prelocalization $\mathbf S$, if and only if, this system is the
smallest among all that contains that family. It is evident that a
quantum event algebra,  can have many systems of Boolean
prelocalizations, that remarkably, form an ordered structure. More
specifically, systems of prelocalization constitute a partially
ordered set under inclusion. The minimal system is the empty one,
namely ${\mathbf S}(B) = \emptyset$ for all $B$ in ${\mathcal B}$,
whereas the maximal system is the Hom-functor ${\mathbf R}(L)$
itself.





\subsection{Systems of Boolean Localizations}


The transition from a system of prelocalizations to a system of
localizations for a quantum event algebra, is the key step that
guarantees the compatibility of the information content gathered
in different Boolean filtering mechanisms associated with
measurement of observables. A  system of Boolean localizations
contains all the necessary and sufficient conditions for the
comprehension of the information content of a quantum event
structure as a sheaf of Boolean coefficients associated with
measurement localization contexts. The concept of sheaf expresses
exactly the pasting conditions that the locally defined Boolean
covers have to satisfy on their overlapping regions, or else, the
specification by which local data, providing Boolean coefficients
obtained in measurement situations, can be collated. In order to
accomplish this task it is necessary to introduce the categorical
concept of pullback in ${\mathcal L}$.























\paragraph{Pullback construction: }The pullback of the Boolean covers:  ${\psi}_B :
{\mathbf A}(B) \ar L, B \in {\mathcal B}$, and ${\psi}_{\acute B}
: {\mathbf A}({\acute B}) \ar L$,  ${\acute B} \in {\mathcal B}$,
with common codomain the quantum event algebra  $L$, consists of
the object ${\mathbf A}(B) {\times}_L {\mathbf A}({\acute B})$ and
two arrows $\psi_{B \acute B}$ and $\psi_{\acute B B}$, called
projections, as shown in the following  diagram. The square
commutes and for any object $T$ and arrows $h$ and $g$ that make
the outer square commute, there is a unique $u : T \ar {\mathbf
A}(B) {\times}_L {\mathbf A}({\acute B})$ that makes the whole
diagram commute. Hence we obtain  the compatibility condition:
$${\psi}_{\acute B} \circ g={\psi}_B \circ h$$

\begin{diagram}
{T}��
 �\Sear u�\Esear h ��
 �\sseaR g �{{\mathbf A}(B)} {\times}_L {{\mathbf A}(\acute B)}       �\Ear {{\psi}_{B,{\acute B}}}  �{{\mathbf A}(B)} ��
 �          �\saR {{\psi}_{{\acute B},B}}   �         �\saR  {{\psi}_B}  ��
 �          �{{\mathbf A}({\acute B})}       �\Ear  {{\psi}_{\acute B}} �L��
\end{diagram}


We notice that if ${\psi}_B$ and ${\psi}_{\acute B}$ are
injective, then their pullback is isomorphic with the intersection
$ {\mathbf A}(B) \cap {\mathbf A}({\acute B})$. Then we can define
the pasting map, which is an isomorphism, as follows:
\paragraph{Pasting map and Boolean coordinates cocycle conditions: }$${\Omega}_{B, \acute B} :  \psi_{\acute B B}({\mathbf A}(B)
{\times}_L {\mathbf A}({\acute B})) \ar
 \psi_{B \acute B}({\mathbf A}(B) {\times}_L {\mathbf A}({\acute B}))$$
$${\Omega}_{B, \acute B}=\psi_{B \acute B} \circ  {\psi_{\acute B
B}}^{-1}$$ The following conditions are satisfied: $${\Omega}_{B,
B}=1_B \qquad 1_B : identity \quad  of  \quad B $$ $${\Omega}_{B,
\acute B} \circ {\Omega}_{\acute B,  \acute{\acute
B}}={\Omega}_{B, \acute{\acute B}} \qquad    if \quad {\mathbf
A}(B) \cap {\mathbf A}({\acute B}) \cap {\mathbf
A}({{\acute{\acute B}}}) \neq 0 $$ $${\Omega}_{B, \acute B}
={\Omega}_{\acute B, B} \qquad  if  \quad {\mathbf A}(B) \cap
{\mathbf A}({\acute B}) \neq 0$$ The pasting map assures that
$\psi_{\acute B B}({\mathbf A}(B) {\times}_L {\mathbf A}({\acute
B}))$ and $ \psi_{B \acute B}({\mathbf A}(B) {\times}_L {\mathbf
A}({\acute B}))$ are going to cover the same part of the quantum
event algebra in a compatible way.


Given a  system of prelocalizations for quantum event algebra $L
\in {\mathcal L}$, we call it {\bf a system of localizations}  iff
the above compatibility conditions are satisfied and moreover the
quantum algebraic event structure is preserved.



In essence the subfunctors of the Hom-functor ${\mathbf R}(L)$
supply ideals of algebraic homomorphisms which fulfill the task of
covering a quantum event algebra  by locally defined
coordinatizing Boolean event algebras completely. The Boolean
domain mappings  ${\psi}_B : {\mathbf A}(B) \ar L$, $B$ in
${\mathcal B}$, in a system of localizations for quantum event
algebra  $L$ are characterized as Boolean covers, whereas their
domains $B$ play the role of local Boolean coefficients domains,
the elements of $B$ the role of Boolean coefficients, and finally,
the Boolean homomorphisms $v : B \ar {\acute B}$ in ${\mathcal B}$
may be characterized as pasting maps.  If we focus our attention
to a Boolean covering system for quantum event algebra $L$, we
observe that the objects of the category of elements ${\mathbf
G}({\mathbf R}(L),B)$  are precisely the local coordinatizing
Boolean covers and its maps are the transition functions. It is
instructive to remind that the objects of the category of elements
${\mathbf G}({\mathbf R}(L),B)$  are pairs $(B,{\psi_B : {\mathbf
A}(B) \ar L})$, with $B$ in $\mathcal B$ and ${\psi_B}$ an arrow
in $\mathcal L$, namely a quantum algebraic homomorphism; a
morphism $({\acute B}, \psi_{\acute B}) \ar (B, \psi_B)$ in the
category of elements is an arrow $v : {\acute B} \ar B$ in
$\mathcal B$, namely a Boolean homomorphism, with the property
that $\psi_{\acute B}=\psi_B \circ {\mathbf A}(v) : {\mathbf
A}(\acute B) \ar L$;  in other words, $v$ must take the chosen
Boolean cover $\psi_B$ in   ${\mathbf G}({\mathbf R}(L),B)$ back
into $\psi_{\acute B}$ in ${\mathbf G}({\mathbf R}({ L}),{\acute
B})$. These morphisms are composed by composing the underlying
arrows $v$ of $\mathcal B$.





\subsection{Unit and Counit of the Fundamental Adjunction}
The fundamental adjunction can be characterized in terms of  the
unit and the counit categorical constructions. For any presheaf
$\mathbf P \in {\bf Sets}^{B^{op}}$, the unit is defined as
$${\delta}_{\mathbf P} : \mathbf P \ar \mathbf R \mathbf L
{\mathbf P}$$ On the other side, for each quantum event algebra
$L$ in $\mathcal L$ the counit is defined as $${\epsilon}_L :
\mathbf L {\mathbf R}(L) \ar L$$ The counit of the adjunction is
subsequently used to state a representation theorem of quantum
event algebras as follows:



\paragraph{Representation Theorem:}The
representation of a quantum event algebra $L$ in $\mathcal L$, in
terms of a coordinatization system of localizations, consisting of
Boolean coefficients, is full and faithful, if and only if the
counit of the established adjunction, restricted to that system,
is an isomorphism, that is, structure-preserving, 1-1 and onto.





It is easy to see that the counit of the adjunction, restricted to
a system of localizations is a quantum algebraic isomorphism, iff
the right adjoint functor is full and faithful, or equivalently,
iff the cocone  from the functor ${{\mathbf A} \circ {G_{\mathbf
{\mathbf R}(L)}}}$ to the quantum event algebra $L$ is universal
for each  $L$ in $\mathcal L$. In the latter case we characterize
the coordinatization functor  ${\mathbf A}:{\mathcal B} \ar
{\mathcal L}$, a proper modeling functor. As a consequence if we
consider as ${\mathcal B}$ the category of Boolean subalgebras of
a quantum event algebra $L$ of ordinary Quantum Mechanics, that is
an orthomodular $\sigma$-orthoposet of orthogonal projections of a
Hilbert space, together with a proper modeling inclusion functor
${\mathbf A}:{\mathcal B} \ar {\mathcal L}$, the counit of the
established adjunction restricted to a system of Boolean
localizations induced by measurements of observables is an
isomorphism.




\subsection{Physical Semantics}

The physical significance of this representation  lies on the fact
that the whole information content in a Quantum event algebra is
preserved by every covering Boolean system, qualified as a system
of measurement localizations. The preservation property is
established by the counit isomorphism. It is remarkable that the
categorical notion of adjunction provides the appropriate formal
tool for the formulation of invariant properties, giving rise to
preservation principles of a physical character.




If we return to the intended representation, we realize that the
surjective property of the counit guarantees that the Boolean
domain covers, being themselves objects in the category of
elements ${\mathbf G}({{\mathbf R}(L)},B)$, cover entirely the
quantum event algebra $L$, whereas its injective property
guarantees that any two covers are compatible in a system of
measurement localizations. Moreover, since the counit is also a
homomorphism, it preserves the algebraic structure.


In the physical state of affairs, each cover corresponds to a set
of Boolean events actualized locally in a measurement situation.
The equivalence classes of Boolean domain covers represent quantum
events in $L$ through compatible coordinatizations by Boolean
coefficients. Consequently, the structure of a quantum event
algebra is being generated by the information that its structure
preserving maps, encoded as Boolean  covers in localization
systems carry,  as well as their compatibility relations.  Most
significantly,  the same compatibility conditions provide the
necessary relations for understanding a system of localizations
for a quantum event algebra as a structure sheaf of Boolean
coefficients associated with local contexts of measurement of
observables.


Finally, the operational substantiation of the sheaf theoretical
scheme of representation of quantum event algebras, is naturally
provided by the application of Stone's representation theorem for
Boolean algebras. According to this theorem, it is legitimate to
replace Boolean algebras by fields of subsets of a space, playing
the equivalent role of a local context for measurement. We note
that in an equivalent topological interpretation, we could
consider a local measurement space as a compact Hausdorff space,
the compact open subsets of which are the maximal filters or the
prime ideals of the underlying Boolean algebra. If we replace each
Boolean algebra $B$ in $\mathcal B$ by its set-theoretical
representation $[{\mathbf \Sigma}, B_\Sigma]$, consisting of a
local measurement space $\mathbf \Sigma$ and its local field of
subsets $B_\Sigma$, it is possible to define local measurement
space covers $(B_\Sigma ,{{\psi_{B_\Sigma}} : {\mathbf
A}(B_\Sigma) \ar L})$ and corresponding space localization systems
for a quantum event algebra $L$ in $\mathcal L$. Again from local
measurement space covers  $(B_\Sigma ,{{\psi_{B_\Sigma}} :
{\mathbf A}(B_\Sigma) \ar L})$ we may form their equivalence
classes by using the colimits construction in the category of
elements of ${\mathbf {\mathbf R}(L)}$. Then by taking into
account the conditions for compatibility on overlaps we can
establish a full and faithful representation of quantum events in
$L$ by equivalence classes of local measurement space covers.
Under these circumstances we may interpret these equivalence
classes as the statistical experimental actualizations of the
quantum events in $\mathcal L$. The pullback compatibility
condition, which is in 1-1 correspondence with the one in
$\mathcal L$ since it holds in a localization system,  may be
interpreted in the operational context as denoting that two local
space representations of quantum events satisfy the compatibility
condition on overlaps iff they support measurements of observables
sharing the same experimental arrangement.


The above set-up could be the ideal starting point for the
development of quantum probability, as a contextual probability
theory on a structure sheaf of Boolean coefficients associated
with local contexts of measurement of observables. Following this
line of thought we may obtain important insights regarding
probabilistic notions in Quantum theory. In the prologue we have
expressed the thesis that the logic of quantum propositions
reflects literal ontological structures of the quantum domain of
discourse. Of course the substantiation of this claim necessitates
a thorough investigation of the truth values structures suited to
express the quantum domain of discourse. In classical theories it
is well known that  the logic of events, or equivalently,
propositions referring to the behavior of a classical system is
characterized by valuations into the trivial Boolean two-valued
truth values object ${\bf 2}:=\{{0,1}\}$ stating that a
proposition is true or false. Moreover the notion of probability
has been designed as a superstructure on the truth values object
${\bf 2}$, expressing an ignorance of all the relevant details
permitting a sharp true/false value assignment on the propositions
of the theory. In this sense classical probabilities are not
objective, but constitute a measure of ignorance. On the other
side, in quantum theories a true/false value assignment is
possible under the specification of a Boolean preparatory context
of measurement and only after a measurement device provides a
response as a result of its interaction with a quantum system.
This state of affairs is at the heart of the problem of quantum
measurement and makes necessary a careful re-examination of all
the relevant assumptions concerning valuations of propositions
that belong in quantum event structures. In this manner, if the
truth values structures suited for valuations of quantum
propositions prove to be different from the trivial two-valued
classical ones, the notion of quantum probability acquires an
objective meaning and its interpretation cannot be based on
ignorance. Rather, it can be conceived as a measure of
indistinguishability in the generalized topological sense of
covering systems on categories, being in agreement at the same
time, with the physical semantics of a sheaf theoretical
interpretation. In the sequel, our objective will be exactly the
investigation of the truth values structures suited to express
valuations in quantum event algebras. Fortunately the categorical
framework provides all the necessary means for this purpose.






\section{The Subobject Functor}
\subsection{Existence of the Subobject Functor in ${\mathcal L}$}

We have seen previously that the counit of the fundamental
adjunction, restricted to localization systems of a quantum event
algebra is a quantum algebraic isomorphism, iff the right adjoint
functor is full and faithful. This fact is important because it
permits us to consider the category of quantum event algebras as a
reflection of the category of presheaves of Boolean event algebras
${\bf Sets}^{B^{op}}$. It is methodologically appropriate to
remind that the coordinatization functor, ${\mathbf A}:{\mathcal
B} \ar {\mathcal L}$, is called a proper modeling functor iff the
right adjoint functor of the established adjunction is full and
faithful. In this sense, a proper modeling functor guarantees a
full and faithful corresponding representation of quantum event
algebras in terms of Boolean localization systems, such that the
whole information content contained in a quantum structure of
events is totally preserved by its covering systems of Boolean
domain coordinatizations. Furthermore, the fact that ${\mathcal
L}$ can be conceived as reflection of ${\bf Sets}^{B^{op}}$,
secures that ${\mathcal L}$ is a complete category, as well as
that, monic arrows are preserved by the right adjoint functor
$\mathbf R$. Since ${\mathcal L}$ is a complete category, there is
a terminal object for insertion of information related with the
structure of events it represents, and also, there exist pullbacks
securing the satisfaction of compatibility relations. In
particular, since pullbacks of monic arrows also exist, there
exists a subobject functor: $$ \mathbf {Sub} : {\mathcal L}^{op}
\rightarrow {\bf Sets}$$ This is, remarkably, a contravariant
functor by pulling back. Composition of this functor with a proper
modeling functor provides a presheaf functor in ${\bf
Sets}^{B^{op}}$ as follows: $$ \mathbf {Sub}\circ \mathbf A :
{\mathcal B}^{op} \rightarrow {\mathcal L}^{op} \rightarrow {\bf
Sets}$$ In a compact notation we obtain: $$\Theta(\mathbf A(-)) :
{\mathcal B}^{op} \rightarrow {\bf Sets}$$ such that: $${\mathcal
B}^{op} \ni B \mapsto [{\it Dom}(m) {\hookrightarrow}^m  \mathbf
A(B)] \in \mathbf {Sets}$$ where the range denotes an equivalence
class of monic algebraic homomorphisms to $\mathbf A(B)$. We say
that $\Theta(\mathbf A(B))$, is the set of all subobjects of
${\mathbf A}(B)$ in the category of quantum event algebras
${\mathcal L}$. Furthermore, this is a partially ordered set under
inclusion of subobjects.



\subsection{Representation of the Subobject Functor in ${\mathcal L}$}
A natural question that arises in this context, is if it could be
possible to represent the subobject functor by a quantum event
algebra, $\Omega$, that is an object of ${\mathcal L}$, which
would play precisely the role of a classifying object in
${\mathcal L}$. The representation of the subobject functor in
${\mathcal L}$, is significant from a physical perspective, since
it would allow to associate the concrete classifying object with
the meaning of truth values object, in a sense similar to the role
played by the two-valued Boolean object ${\bf 2}:=\{{0,1}\}$ in
characterization of the logic of propositions referring to the
behavior of classical systems.


\paragraph{Representation Theorem:} The subobject functor can be
represented in the category of quantum event algebras or quantum
logics  ${\mathcal L}$ iff there exists an object $\Omega$, in
${\mathcal L}$, such that $$\Theta(\mathbf A(-))\simeq {\mathbf
R}(\Omega):=Hom_{\mathcal L}{(\mathbf A(-),\Omega)}$$ namely,
there exists an isomorphism for each Boolean domain object of the
model category.


\paragraph{Interpretation:}Thus, in case that, the above condition is satisfied, we conclude
that, the subobject functor is represented by the quantum event
algebra $\Omega$, that plays the role of a classifying, or
equivalently, truth values object in ${\mathcal L}$, and moreover
that, the category of quantum event algebras has a subobject
classifier. In this case, subobjects  of a quantum event algebra
are characterized in terms of characteristic functions, which take
values, not in $\mathbf 2$, but precisely, in the truth values
object $\Omega$ in ${\mathcal L}$.


\paragraph{Subobject Classifier:}We may clarify the preceding remarks by stating that, if the
subobject functor is possible to become representable in
${\mathcal L}$, by a truth values object $\Omega$ (that has to be
specified concretely), then the category of quantum events
algebras ${\mathcal L}$, has a subobject classifier, that is a
universal monic quantum homomorphism, $$\emph{T}:={\it True}
:1\hookrightarrow \Omega$$ such that, to every monic arrow,
$m:K\hookrightarrow L$ in ${\mathcal L}$, there is a unique
characteristic arrow $\phi_m$, which, with the given monic arrow
$m$, forms a pullback diagram

\begin{diagram}
�K  �\Ear ! � 1 �� �\saR m � �\saR T �� �L�\Ear {\phi_m}�\Omega��
\end{diagram}

This is equivalent to saying that every subobject of $L$ in
${\mathcal L}$, is uniquely a pullback of the universal monic
$\emph{T}$.


\paragraph{Quantum Sets:}Another significant observation is related with the notion of
quantum sets. This notion can acquire a precise meaning in the
present framework, if we remind the analogy with classical sets.
We notice that classical sets are specified by the rule which
states that the subsets of any set are represented as
characteristic functions into $\mathbf 2$. By analogy we may say
that quantum sets admit a specification by the rule according to
which the subsets of a quantum set are represented as
characteristic arrows in the quantum truth values object $\Omega$.
We may easily associate a quantum set, specified as above, by the
colimit in the category of elements of a presheaf of local spaces,
where each local space is the  representation of a Boolean event
algebra using Stone's representation theorem, as has already been
explained in 5.5.


It is evident that the concrete characterization of such a quantum
truth values object $\Omega$, in ${\mathcal L}$ is rich in
interpretational consequences regarding the logical behavior of
quantum systems.

\paragraph{Construction of Truth Values Structure:}Our guiding conceptual device in the specification of such a
quantum event algebra $\Omega$ will be the fundamental adjunction
of the scheme, and more precisely, its characterization in terms
of the notions of unit and counit.

We have seen previously that the counit of the adjunction, for
each quantum event algebra object $L$ of $\mathcal L$, is
$${\epsilon}_L : \mathbf L {\mathbf R}(L) \ar L$$ $ {\epsilon}_L$,
being a a quantum algebraic isomorphism, guarantees a full and
faithful representation of a quantum event algebra in terms of a
covering or localization system consisting of Boolean domain
coordinatizations via the action of a proper modeling functor.

From the other side, we have seen that  for any presheaf $\mathbf
P \in {\bf Sets}^{B^{op}}$, the unit is defined as
$${\delta}_{\mathbf P} : \mathbf P \ar \mathbf R \mathbf L {\mathbf
P}$$

It is easy to see that if we consider as $\mathbf P \in {\bf
Sets}^{B^{op}}$, the subobject functor $\Theta(\mathbf A(-))$ we
obtain the following arrow:
$${\delta}_ {\Theta(\mathbf A(-))}: \Theta(\mathbf A(-)) \ar \mathbf R \mathbf L {\Theta(\mathbf A(-))}$$
or equivalently:
$${\delta}_ {\Theta(\mathbf A(-))}: \Theta(\mathbf A(-)) \ar Hom_{\mathcal L}{(\mathbf
A(-),{{\mathbf L}{\Theta(\mathbf A(-))}}}$$

Hence, by inspecting the unit of the adjunction arrow ${\delta}_
{\Theta(\mathbf A(-))}$, we arrive at the following conclusion:


\subparagraph{Unit Proposition:}If the unit ${\delta}_
{\Theta(\mathbf A(-))}$ is an isomorphism, then the subobject
functor becomes representable in ${\mathcal L}$, by the quantum
event algebra object $\Omega:={{\mathbf L}{\Theta(\mathbf A(-))}}$
(as a consequence of the counit isomorphism), and thus, the
category of quantum event algebras is endowed with a subobject
classifier.





It is remarkable that the unit of the adjunction ${\delta}_
{\Theta(\mathbf A(-))}$, depicts exactly the object of truth
values $\Omega$, in ${\mathcal L}$, which is represented, in
virtue of the counit isomorphism, as the colimit in the category
of elements of the subobject functor $\Theta(\mathbf A(-))$. It is
straightforward to verify the latter remark, in case the unit
${\delta}_ {\Theta(\mathbf A(-))}$ is an isomorphism, by noticing
that: $$\Omega:={{\mathbf L}{\Theta(\mathbf A(-))}}\simeq
{{\mathbf L}[\mathbf R \mathbf L {\Theta(\mathbf A(-))}]} \simeq
{{\mathbf L} \mathbf R} \Omega$$ is precisely an expression of the
counit isomorphism for the quantum event algebra $\Omega$.





It is necessary for the comprehension of the arguments presented
to verify the claim, according to which, if the unit ${\delta}_
{\Theta(\mathbf A(-))}$ is an isomorphism, then the category of
quantum events algebras, ${\mathcal L}$, is endowed with a
subobject classifier, the characterizing object of which,
$\Omega$, is going to play the role of a quantum truth values
object. We may notice that the inverse of this claim also holds in
an obvious way.



The verification of this claim proceeds as follows: We consider a
monic quantum homomorphism $l : K\hookrightarrow L$, denoting a
subobject of $L$, in ${\mathcal L}$, and subsequently we define a
natural transformation in ${\bf Sets}^{B^{op}}$:
$$\Phi_l : {\mathbf R}(L) \rightarrow {\Theta(\mathbf A(-))}$$
specified for each Boolean event algebra $B$, in ${\mathcal B}$
by:
$$[{\Phi_l}]_B : {\mathbf R}(L) (B) \rightarrow {\Theta(\mathbf A(B))}$$
such that for an element e in ${\mathbf R}(L) (B)$, we have:
$${[{\Phi_l}]_B}(e):=l\ast e$$
where the monic arrow $l \ast e$, denotes the pullback of $l$
along $e$ in ${\mathcal L}$, as in the following diagram:

\begin{diagram}
�{\it Dom}(l \ast e)  �\ear � K �� �\saR l\ast e � �\saR l ��
�{\mathbf A}(B)�\Ear e�L��
\end{diagram}


Furthermore, if we take into account the subobjects of the
terminal object $1$ in ${\mathcal L}$, denoted by the uniquely
defined monic quantum algebraic homomorphisms $\kappa:
K\hookrightarrow 1$, we may define a natural transformation in
${\bf Sets}^{B^{op}}$:
$$\Upsilon : {\mathbf R}(1) \rightarrow {\Theta(\mathbf A(-))}$$
specified for each Boolean event algebra $B$, in ${\mathcal B}$
by:
$$[{\Upsilon}]_B : {\mathbf R}(1) (B) \rightarrow {\Theta(\mathbf A(B))}$$
such that for the unique element $\alpha(B)$ in ${\mathbf R}(1)
(B)$, we have:
$${[{\Upsilon}]_B}(\alpha(B)):=id_{{\mathbf A}(B)}$$

At a next stage, we may combine the natural transformations,
defined previously, in order to obtain, for each monic quantum
algebraic homomorphism  $l : K\hookrightarrow L$, the following
commutative diagram in ${\bf Sets}^{B^{op}}$, that by construction
is a pullback as it can be easily seen.


\begin{diagram}
�{\mathbf R}(K) �\ear  � {\mathbf R}(1) �� �\saR {{\mathbf R}(l)}
� �\saR \Upsilon �� �{{\mathbf R}(L)}�\Ear
{\Phi_l}�{\Theta(\mathbf A(-))}��
\end{diagram}

Moreover we consider the arrows obtained by composing, the arrows
$[{\Phi_l}]$ and $[{\Upsilon}]$, with the unit isomorphism
${\delta}_ {\Theta(\mathbf A(-))}$ as follows: $${\delta}_
{\Theta(\mathbf A(-))} \circ \Phi_l : {\mathbf R}(L) \rightarrow
{\Theta(\mathbf A(-))} \rightarrow {{\mathbf R}(\Omega)}$$

$${\delta}_
{\Theta(\mathbf A(-))} \circ \Upsilon : {\mathbf R}(1) \rightarrow
{\Theta(\mathbf A(-))} \rightarrow {{\mathbf R}(\Omega)}$$
Concerning the latter composite arrow, we may define:
$${{\mathbf R}({\emph{T}} )}:={\delta}_
{\Theta(\mathbf A(-))} \circ \Upsilon : {\mathbf R}(1)
\hookrightarrow {{\mathbf R}(\Omega)}$$ and using the fact that
the right adjoint functor is full and faithful, by the counit
isomorphism, we obtain a uniquely defined monic quantum
homomorphism $$\emph{T}:=true :1\hookrightarrow \Omega$$


The previous pullback diagram, together with the composite arrows
${\delta}_ {\Theta(\mathbf A(-))} \circ \Phi_l$, ${\delta}_
{\Theta(\mathbf A(-))} \circ \Upsilon$, facilitate the immediate
verification of the claim, as follows:



We wish to show that, if the unit of the adjunction ${\delta}_
{\Theta(\mathbf A(-))}$ is an isomorphism, then $${\mathbf
{Sub}}(L)\simeq {Hom_L}(L,\Omega)$$ such that that the category of
quantum event algebras ${\mathcal L}$ is endowed with a subobject
classifier.


So we define a map $$\varpi_L : {\mathbf {Sub}}(L) \rightarrow
{Hom_L}(L,\Omega)$$ such that the element $e$ of the range,
defined by:
$$ {\mathbf {Sub}}(L) \ni l \mapsto [e: L\rightarrow \Omega]$$ is
specified by the requirement:
$${{\mathbf R}(e)}={\delta}_ {\Theta(\mathbf A(-))} \circ \Phi_l:
{\mathbf R}(L)  \rightarrow {{\mathbf R}(\Omega)}$$ Hence, for the
subobject $l$ of $L$, in ${\mathcal L}$, and the element $e$ of
${Hom_L}(L,\Omega)$, with $e=\varpi_L(l)$, we obtain the following
pullback diagram in ${\bf Sets}^{B^{op}}$,


\begin{diagram}
�{\mathbf R}(K) �\ear  � {\mathbf R}(1) �� �\saR {{\mathbf R}(l)}
� �\saR {{\mathbf R}({\it T})} �� �{{\mathbf R}(L)}�\Ear {{\mathbf
R}(e)}�{\mathbf R}(\Omega)��
\end{diagram}


Using again the argument of the counit isomorphism, that specifies
the right adjoint as a full and faithful functor, we obtain a
pullback diagram in ${\mathcal L}$:


\begin{diagram}
�K  �\Ear ! � 1 �� �\saR l � �\saR T �� �L�\Ear {e}�\Omega��
\end{diagram}




Moreover, it is straightforward  to show that, $\varpi_L :
{\mathbf {Sub}}(L) \rightarrow {Hom_L}(L,\Omega)$ is 1-1 and epi.
Thus, we have verified that, if the unit ${\delta}_
{\Theta(\mathbf A(-))}$ is an isomorphism, then the category of
quantum events algebras, ${\mathcal L}$, is endowed with a
subobject classifier, according to the above pullback diagram.
Precisely stated, the subobject classifier in ${\mathcal L}$, is
specified by the monic quantum algebraic homomorphism
$\emph{T}:=True :1\hookrightarrow \Omega$, such that, ${{\mathbf
R}({\emph{T}} )}:={\delta}_ {\Theta(\mathbf A(-))} \circ
\Upsilon$. As we have already mentioned, the inverse, obviously
holds.


After having verifying the previous claim, conjectured by the form
of the unit ${\delta}_ {\Theta(\mathbf A(-))}$, we notice that the
latter also depicts the quantum truth values object $\Omega$, as
constructed by application of the left adjoint functor, and in
virtue of the counit isomorphism, as: $\Omega={{\mathbf
L}{\Theta(\mathbf A(-))}}$, that is, as the colimit taken in the
category of elements of the modeled subobject functor. As a
consequence we conclude that the diagram below


\begin{diagram}
�{\it Dom}(\lambda)�  �\Ear [90] !� �{{\mathbf L}{\mathbf R}(1)}
�� �\saR \lambda � � � �\saR {{{{\mathbf L}{\Upsilon}}}={\it T}}�
� �� �{\mathbf A}(B)�  �\Ear [90] {{\varpi_{{\mathbf
A}(B)}(\lambda)=\zeta}}� �{{\mathbf L}{\Theta(\mathbf A(-))}}�  ��
\end{diagram}


is a pullback square for each quantum algebraic homomorphism
$$\varpi_{{\mathbf A}(B)}(\lambda)=\zeta : {{\mathbf
A}(B)}\rightarrow {{\mathbf L}{\Theta(\mathbf A(-))}}$$ from a
Boolean domain modelled object, such that $\lambda$ is a subobject
of ${{\mathbf A}(B)}$.



It is important to notice, that in this case:
$$\varpi_{{\mathbf A}(B)}(\lambda)={{\delta}_
{\Theta(\mathbf A(B))}(\lambda)}$$ and since this holds for
arbitrary subobject $\lambda$ of ${{\mathbf A}(B)}$, we have
$$\varpi_{{\mathbf A}(B)}={{\delta}_
{\Theta(\mathbf A(B))}}$$











\section{Tensor Product Representation of Quantum Truth Values}
The category of elements of ${\Theta(\mathbf A(-))}$, is denoted
by $\bf{G}({\Theta(\mathbf A(-))} ,{\mathcal B})$. Its objects are
all pairs $(B,\varphi_{\mathbf A(B)})$, where $\varphi_{\mathbf
A(B)}$ is a subobject of ${\mathbf A(B)}$, that is, a monic
quantum homomorphism in ${\mathbf A(B)}$. The morphisms of the
category of elements of ${\Theta(\mathbf A(-))}$ are given by the
arrows ${(\acute{B},{\phi_{\mathbf A(\acute B)}})} \ar
(B,\varphi_{\mathbf A(B)})$, namely they  are those morphisms $u :
\acute{B} \ar B$ of ${\mathcal B}$ for which $\varphi_{\mathbf
A(B)} \ast u={\phi_{\mathbf A(\acute B)}}$, where
$\varphi_{\mathbf A(B)} \ast u$ denotes the pullback of the
subobject of ${\mathbf A(\acute B)}$, $\varphi_{\mathbf A(B)}$,
along u.




The quantum truth values object $\Omega$, is constructed by
application of the left adjoint functor, and in virtue of the
counit isomorphism, as follows: $\Omega={{\mathbf
L}{\Theta(\mathbf A(-))}}$, that is, as the colimit taken in the
category of elements of the modeled subobject functor. In what
follows we need to exploit the categorical construction of the
colimit defined above, as a coequalizer of a coproduct.


\paragraph{Coequalizer of Coproduct:}We consider the colimit of any functor $\mathbf X : I \ar
{\mathcal L}$ from some index category $\mathbf I$ to $\mathcal
L$. Let ${\mu}_i : {\mathbf X}(i) \to {\amalg}_i {\mathbf X}(i)$,
$i \in I$, be the injections into the coproduct. A morphism from
this coproduct, $\chi :  {\amalg}_i {\mathbf X}(i) \to {\mathcal
L}$, is determined uniquely by the set of its components
${\chi}_i=\chi {\mu}_i$. These components ${\chi}_i$ are going to
form a cocone over $\mathbf X$ to the quantum event algebra vertex
$ L$ only when for all arrows $v : i \ar j$ of the index category
$I$ the following conditions are satisfied $$ (\chi {\mu}_j)
{\mathbf X}(v)=\chi {\mu}_i$$


\begin{diagram}
�{{\mathbf X}(i)}�� �\Sar {\mu_i} �\Sear {{\chi}{\mu_i}}��
�\coprod {{\mathbf X}(i)}�\Edotar {\chi}�L�� �\Nar {\mu_j} �\Near
{{\chi}{\mu_j}}�� �{{\mathbf X}(j)}��
\end{diagram}




So we consider all ${\mathbf X}(Dom v)$ for all arrows $v$ with
its injections ${\nu}_v$ and obtain their coproduct ${\amalg}_{v :
i \to j} {\mathbf X}(Dom v)$. Next we construct two arrows $\zeta$
and $\eta$, defined in terms of the injections ${\nu}_v$ and
${\mu}_i$, for each $v : i \ar j$ by the conditions $$\zeta
{\nu}_v={\mu}_i$$ $$\eta {\nu}_v={\mu}_j {\mathbf X}(v)$$ as well
as their coequalizer $\chi$:


\begin{diagram}
 �{{\mathbf X}(Dom v)}                        �                                             �                �               �{{\mathbf X}(i)}��
 �\Sar {\mu_v}                                   �                                    �              �                  �\Sar {\mu_i} �\Sedotar {{\chi}{\mu_i}}��
 �{{\coprod}_ {v : i \to j}}{{{\mathbf X}(Dom v)}}� � \Ebiar[70]{\zeta}{\eta}�  �\coprod {{\mathbf X}(i)}�\Edotar {\chi}�L��
\end{diagram}




The coequalizer condition $\chi \zeta=\chi \eta$ tells us that the
arrows $\chi{ {\mu}_i}$ form a cocone over $\mathbf X$ to the
quantum event algebra vertex $\mathcal L$. We further note that
since $\chi$ is the coequalizer of the arrows $\zeta$ and $\eta$
this cocone is the colimiting cocone for the functor $\mathbf X :
I \to {\mathcal L}$ from some index category $I$ to $\mathcal L$.
Hence the colimit of the functor $\mathbf X$ can be constructed as
a coequalizer of coproduct according to:



\begin{diagram}
�{{\coprod}_ {v : i \to j}}{{{\mathbf X}(Dom v)}}� �
\Ebiar[70]{\zeta}{\eta}�  �\coprod {{\mathbf X}(i)}�\Ear
{\chi}�Colim \mathbf X��
\end{diagram}




In our case the index category is the category of elements of the
modeled subobject functor ${\Theta(\mathbf A(-))}$ and the functor
${{\mathbf A} \circ {G_{{\Theta(\mathbf A(-))}}}}$ plays the role
of the functor $\mathbf X : I \ar {\mathcal L}$. In the diagram
above the second coproduct is over all the objects
$(B,\varphi_{\mathbf A(B)})$ with $\varphi_{\mathbf A(B)} \in
{{{{\Theta(\mathbf A(B))}}}}$ of the category of elements, while
the first coproduct is over all the maps
$v:{(\acute{B},{\phi_{\mathbf A(\acute B)}})} \ar
(B,\varphi_{\mathbf A(B)})$ of that category, so that $v : {\acute
B} \ar B$ and the condition $\varphi_{\mathbf A(B)} \ast
u={\phi_{\mathbf A(\acute B)}}$ is satisfied. We conclude that the
colimit ${{\mathbf L}_A}({\Theta(\mathbf A(-))})$ can be
equivalently presented as the coequalizer:


\begin{diagram}
�{{\coprod}_ {v : {\acute B} \to B}}{{{\mathbf A}(\acute B)}}� �
\Ebiar[70]{\zeta}{\eta}� �{{\coprod}_{(B,\varphi_{\mathbf
A(B)}))}} {{\mathbf A}(B)}� �\Ear {\chi}� {{\Theta(\mathbf A(-))}}
{{\otimes}_{\mathcal B}} {\mathbf A}��
\end{diagram}



The preceding coequalizer presentation of the colimit shows
vividly that the Hom-functor  ${\mathbf R}_{A}$ has a left adjoint
which looks like a tensor product $- {\otimes}_{\mathcal B}
{\mathbf A}$. In order to illustrate the analogy observed, we
forget for the moment the quantum event algebra structure of the
category $\mathcal L$, and we simply take $\mathcal L=\bf Sets$.
Then the coproduct ${{\amalg}_{\varphi_{\mathbf A(B)})}} {\mathbf
A}(B)$ is a coproduct of sets, which is equivalent to the product
${{\Theta(\mathbf A(B))}} \times {\mathbf A}(B)$ for $B \in
\mathcal B$. The coequalizer is thus the definition of the tensor
product ${{\Theta(\mathbf A(-))}} \otimes {\mathcal A}$ of the set
valued functors: $${\Theta(\mathbf A(-))} : {\mathcal B}^{op} \ar
{\bf Sets}, \qquad  \mathbf A : {\mathcal B} \ar {\bf Sets}$$



\begin{diagram}
�{{\coprod}_ {B, \acute B}} {{{{\Theta(\mathbf A(B))}}}} \times
Hom(\acute B, B) \times {{{\mathbf A}(\acute B)}}� �   �\Ebiar[30]
{\zeta}{\eta}� �� � \Ebiar[30] {\zeta}{\eta}�  �{{\coprod}_B}
{{{{\Theta(\mathbf A(B))}}}} \times {{\mathbf A}(B)} �\Ear {\chi}�
�{{\Theta(\mathbf A(-))}} \otimes {\mathbf A}(B)��
\end{diagram}



According to the preceding diagram  for elements $\varphi_{\mathbf
A(B)} \in {{{\Theta(\mathbf A(B))}}}$, $v : {\acute B} \to B$ and
$\acute q \in {\mathbf A}({\acute B})$ the following equations
hold:
$$\zeta (\varphi_{\mathbf
A(B)},v, \acute q)=(\varphi_{\mathbf A(B)} \ast v, \acute q),
\qquad \eta(\varphi_{\mathbf A(B)},v, {\acute
q})=(\varphi_{\mathbf A(B)}, v (\acute q))$$ symmetric in
${{\Theta(\mathbf A(B))}}$ and $\mathbf A$. Hence the elements of
the set ${{{\Theta(\mathbf A(B))}}} {\otimes}_{\mathcal B}
{\mathbf A}$ are all of the form $\chi (\varphi_{\mathbf
A(B)}),q)$. This element can be written as $$
\chi(\varphi_{\mathbf A(B)}),q)=\varphi_{\mathbf A(B)} \otimes q,
\quad  \varphi_{\mathbf A(B)} \in {{{\Theta(\mathbf A(B))}}}, q
\in {\mathbf A}(B)$$ Thus if we take into account the definitions
of $\zeta$ and $\eta$ above, we obtain $$ [\varphi_{\mathbf A(B)}
\ast v] \otimes \acute q=\varphi_{\mathbf A(B)} \otimes v({\acute
q}), \quad \varphi_{\mathbf A(B)} \in {{{\Theta(\mathbf A(B)}}},
\acute q \in {\mathbf A}(\acute B), v : {\acute B} \ar B$$ We
conclude that the set ${{{\Theta(\mathbf A(B))}}}
{\otimes}_{\mathcal B} {\mathbf A}$ is actually the quotient of
the set ${\amalg}_B {{{\Theta(\mathbf A(B))}}} \times {\mathbf
A}(B)$ by the equivalence relation generated by the above
equations.





\section{Quantum Logic Structure of Truth Values}


According to the equations characterizing the colimit as a tensor
product $$ [\varphi_{\mathbf A(B)} \ast v] \otimes \acute
q=\varphi_{\mathbf A(B)} \otimes v({\acute q}), \quad
\varphi_{\mathbf A(B)} \in {{{\Theta(\mathbf A(B)}}}, \acute q \in
{\mathbf A}(\acute B), v : {\acute B} \ar B$$ we have concluded
that the set ${{{\Theta(\mathbf A(B))}}} {\otimes}_{\mathcal B}
{\mathbf A}$ is the quotient of the set ${\amalg}_B
{{{\Theta(\mathbf A(B))}}} \times {\mathbf A}(B)$ by the
equivalence relation generated by these equations. If,
furthermore, we define:
$$ [\varphi_{\mathbf A(B)} \ast v]=\phi_{\mathbf A(\acute B)}$$ $$v(\acute q)=q$$ where
$\phi_{\mathbf A(\acute B)}$ is a subobject of ${\mathbf A(\acute
B)}$ and $q \in {\mathbf A(B)}$ we obtain the equations:
$$\phi_{\mathbf A(\acute B)} \otimes \acute
q=\varphi_{\mathbf A(B)} \otimes q$$ At a next stage, since
pullbacks exist in $\mathcal L$ ,  we may consider the arrows $h :
{{\mathbf A}(D)} \rightarrow {{\mathbf A}(B)}$ and $\acute h :
{{\mathbf A}(D)} \rightarrow {{\mathbf A}({\acute B})}$ and the
following pullback diagram in $\mathcal L$:


\begin{diagram}
�{{\mathbf A}(D)}  �\Ear h � {{\mathbf A}(B)} �� �\saR {\acute h}
� �\sar  �� �{{\mathbf A}({\acute B})}�\ear �L��
\end{diagram} such that the relations that follow are satisfied: $h(d)=q$,
${\acute h}(d)=\acute q$ and $\varphi_{\mathbf A( B)} \otimes
 h=\phi_{\mathbf A(\acute B)} \otimes \acute h$. Then we obtain:
$$\varphi_{\mathbf A( B)} \otimes q=\varphi_{\mathbf A( B)} \otimes
 h(d)=[\varphi_{\mathbf A( B)} \ast h] \otimes d=
 [\phi_{\mathbf A(\acute B)} \ast \acute h] \otimes d=
\phi_{\mathbf A(\acute B)} \otimes
 {\acute h}(d)=
\phi_{\mathbf A(\acute B)} \otimes
 {\acute q}$$ We may further define: $$\varphi_{\mathbf A( B)} \ast
h=\phi_{\mathbf A(\acute B)} \ast \acute h=\varepsilon_{\mathbf A(
D)}$$ Then, it is obvious that: $$\varphi_{\mathbf A( B)} \otimes
q=\varepsilon_{\mathbf A( D)} \otimes d$$ $$\phi_{\mathbf A(\acute
B)} \otimes {\acute q}=\varepsilon_{\mathbf A( D)} \otimes d$$ It
is then evident that we may define a partial order on the set
${{{\Theta(\mathbf A(B))}}} {\otimes}_{\mathcal B} {\mathbf A}$ as
follows: $$\varphi_{\mathbf A( B)} \otimes b \leq \varrho_{\mathbf
A( C)} \otimes c$$ iff there exist quantum algebraic homomorphisms
$\beta : {\mathbf A( D)} \rightarrow {\mathbf A( B)}$ and $\gamma
:{\mathbf A( D)} \rightarrow {\mathbf A( C)}$, and some $d_1$,
$d_2$ in ${\mathbf A( D)}$, such that: $\beta(d_1)=b$,
$\gamma(d_2)=c$, and $\varphi_{\mathbf A( B)} \ast
\beta=\varrho_{\mathbf A(C)} \ast \gamma=\varepsilon_{\mathbf A(
D)}$.  Thus we obtain: $$\varphi_{\mathbf A( B)} \otimes
b=\varepsilon_{\mathbf A( D)} \otimes d_1$$ $$\varrho_{\mathbf
A(C)} \otimes
 {c}=\varepsilon_{\mathbf A( D)} \otimes
d_2$$  We conclude that: $$\varphi_{\mathbf A( B)} \otimes b \leq
\varrho_{\mathbf A( C)} \otimes c$$ iff $$\varepsilon_{\mathbf A(
D)} \otimes d_1 \leq \varepsilon_{\mathbf A( D)} \otimes d_2
\Longleftrightarrow d_1 \leq d_2$$ The set ${{{\Theta(\mathbf
A(B))}}} {\otimes}_{\mathcal B} {\mathbf A}$ may be further
endowed with a maximal element which admits the following
presentations: $$ \mathbf 1=\varepsilon_{\mathbf A(Z)} \otimes 1
\qquad \forall \varepsilon_{\mathbf A(Z)}\in {{{\Theta(\mathbf
A(Z))}}}$$




$$ \mathbf 1={id}_{\mathbf A(B)}\otimes b \qquad \forall b \in
{\mathbf A}(B)$$ and an orthocomplementation operator:
$$[{\varepsilon_{\mathbf A( Z)} \otimes z}] ^\star =
\varepsilon_{\mathbf A( Z)} \otimes
 z^ \star$$ Then it is easy to verify that the set ${{{\Theta(\mathbf A(-))}}}
{\otimes}_{\mathcal B} {\mathbf A}$ endowed with the prescribed
operations is actually a quantum event algebra, for every $B$ in
$\mathcal{B}$. At this point, we remind that, the quantum truth
values object $\Omega$, as is being constructed by application of
the left adjoint functor, and in virtue of the counit isomorphism,
has the form: $\Omega={{\mathbf L}{\Theta(\mathbf A(-))}}$,
namely, is expressed as the colimit taken in the category of
elements of the modeled subobject functor.  By exploiting the
categorical construction of the colimit, as a coequalizer of a
coproduct, via the preceding discussion, we finally conclude that
the quantum truth values is expressed as:
$$\Omega={{{\Theta(\mathbf A(-))}}} {\otimes}_{\mathcal B}
{\mathbf A}$$ for every $B$ in $\mathcal{B}$. Consequently the
truth values in $\Omega$ are represented in the form
$$[{{{\delta}_ {\Theta(\mathbf A(B))}}}]^{\varphi_{\mathbf A(
B)}}(b)=\varphi_{\mathbf A( B)} \otimes b$$ where $$
[\varphi_{\mathbf A(B)} \ast v] \otimes \acute b=\varphi_{\mathbf
A(B)} \otimes v({\acute b}), \quad \varphi_{\mathbf A(B)} \in
{{{\Theta(\mathbf A(B)}}}, \acute b \in {\mathbf A}(\acute B), v :
{\acute B} \rightarrow B, v(\acute b)=b$$ and a Boolean cover of
the truth values object in a localization system, using the unit
of the adjunction, is expressed as: $${{\delta}_ {\Theta(\mathbf
A(B))}}(\varphi_{\mathbf A( B)})= [{{{\delta}_ {\Theta(\mathbf
A(B))}}}]^{\varphi_{\mathbf A( B)}}$$


\section{Description of Quantum Truth Values}

In order to comprehend the functioning of the quantum truth values
object $\Omega$ in the category of quantum event algebras, it is
necessary to provide a definition of the value {\it true}. For
this purpose we remind the following:

$${\it True}:{{\mathbf L}{R(1)}}\hookrightarrow {{\mathbf
L}{\Theta(\mathbf A(-))}}$$ $$\Upsilon : {\mathbf R}(1)
\rightarrow {\Theta(\mathbf A(-))}$$ specified for each Boolean
event algebra $B$, in ${\mathcal B}$ by: $$[{\Upsilon}]_B :
{\mathbf R}(1) (B) \rightarrow {\Theta(\mathbf A(B))}$$ such that
for the unique element $\alpha(B)$ in ${\mathbf R}(1) (B)$, we
have: $${[{\Upsilon}]_B}(\alpha(B)):=id_{{\mathbf A}(B)}$$ Then by
the commutativity of the diagram below

\begin{diagram}
� � �{{\mathbf A}(B)}  �  � �� � �\Swar {[{{{\delta}_ {{\mathbf
R}(1)}}}]^{\alpha(B)}} �  �\Sear {[{{{\delta}_ {\Theta(\mathbf
A(B))}}}]^{id_{\mathbf A( B)}}}� �� �{{\mathbf L}{{\mathbf
R}(1)}}� �\Ear[100]{\it {True}}  � �{{\mathbf L}{\Theta(\mathbf
A(-))}} ��
\end{diagram} we may easily conclude that

$$\mathbf 1={id}_{\mathbf A(B)}\otimes b = {\it True} (([{{{\delta}_
{{\mathbf R}(1)}}}]^{\alpha(B)})(b)):={\it true}$$

Having specified the value $\it true$ of the quantum truth values
object $\Omega$, we define the notion of truth with respect to the
category of quantum event algebras as follows:

$$[{{{\delta}_
{\Theta(\mathbf A(B))}}}]^{\varphi_{\mathbf A(
B)}}(b)=\varphi_{\mathbf A( B)} \otimes b={\it true} \qquad {\bf
iff} \qquad b \in {\it Dom}({\varphi_{\mathbf A( B)}})$$ where
$$ [\varphi_{\mathbf A(B)} \ast v] \otimes \acute
b=\varphi_{\mathbf A(B)} \otimes v({\acute b}), \quad
\varphi_{\mathbf A(B)} \in {{{\Theta(\mathbf A(B)}}}, \acute b \in
{\mathbf A}(\acute B), v : {\acute B} \rightarrow B, v(\acute
b)=b$$ and a Boolean cover of the truth values object in a
localization system, using the unit of the adjunction, is
expressed as:
$${{\delta}_
{\Theta(\mathbf A(B))}}(\varphi_{\mathbf A( B)})= [{{{\delta}_
{\Theta(\mathbf A(B))}}}]^{\varphi_{\mathbf A( B)}}$$ Furthermore
according to the pullback diagram below ${\varphi_{\mathbf A(
B)}}=l \star e$, for a subobject of a quantum event algebra $l:K
\hookrightarrow L$, and a Boolean domain cover $e:{\mathbf A( B)}
\rightarrow L$.

\begin{diagram}
�{\it Dom}(l \ast e)  �\ear � K �� �\saR l\ast e � �\saR l ��
�{\mathbf A}(B)�\Ear e�L��
\end{diagram}




If we remind the relevant discussion of truth in the category of
classical sets, we notice that in the present case, the
characteristic function of a subobject of a quantum event algebra
$l:K \hookrightarrow L$, is specified as an equivalence class of
pullbacks of the subobject along its restrictions on a
localization system of compatible Boolean domain covers. It is
straightforward to see that, in case of monic covers, each
pullback is expressed as intersection of the subobject with the
corresponding cover in the Boolean localization system. In
particular, the value $\mathbf 1={\it true}$ in $\Omega$ is
assigned to all those $b$ that belong in ${\it
Dom}({\varphi_{\mathbf A( B)}})$ according to the pullback diagram
above, or equivalently, to all those $b$, that belong to the
restrictions of a subobject of a quantum event algebra along the
covers of a localization system of the latter. We may notice that
the specification of the quantum truth values object $\Omega$, as
characterized by the values $[{{{\delta}_ {\Theta(\mathbf
A(B))}}}]^{\varphi_{\mathbf A( B)}}(b)=\varphi_{\mathbf A( B)}
\otimes b$, does not in general, allows to say that not being true
is equivalent to false, as in the classical case. Another
important remark is related with the value $\mathbf 1={\it true}$
in $\Omega$, in conjunction with the definition of the maximal
element of $\Omega$, as $\mathbf 1=\varepsilon_{\mathbf A(Z)}
\otimes 1 \qquad \forall \varepsilon_{\mathbf A(Z)}\in
{{{\Theta(\mathbf A(Z))}}}$. It implies that $\mathbf 1$ belongs
in $\varepsilon_{\mathbf A(Z)}$, for all $\varepsilon_{\mathbf
A(Z)}\in {{{\Theta(\mathbf A(Z))}}}$. In this perspective, the
truth values can be characterized as equivalence classes of
filters of covers in a Boolean localization system, and the
maximal value true corresponds to an equivalence class of
ultrafilters. Using this observation it is straightforward to
verify that the truth value criterion, in case of monic covers in
a Boolean localization system of a quantum event algebra can be
re-expressed in terms of the pasting map, which is an isomorphism
$${\Omega}_{B, \acute B} :  \psi_{\acute B B}({\mathbf A}(B)
\bigcap {\mathbf A}({\acute B})) \ar
 \psi_{B \acute B}({\mathbf A}(B) {\bigcap} {\mathbf A}({\acute B}))$$ or equivalently
$${\Omega}_{B, \acute B} :  {\rho_{{\mathbf A}(B)}}({\mathbf A}(B) \bigcap {\mathbf A}({\acute B}))
  \ar {\varrho_{{\mathbf A}(\acute B)}}({\mathbf A}(B) \bigcap {\mathbf A}({\acute B}))$$
according to the diagram below:
\begin{diagram}
 �{{\mathbf A}(B)} {\bigcap} {{\mathbf A}(\acute B)} �\Ear
  {\varrho_{{\mathbf A}(B)}}�{{\mathbf A}(B)} ��
 �          \saR {\rho_{{\mathbf A}(B)}}   �         �\saR  {{\psi}_B}  ��
 �          {{\mathbf A}({\acute B})}       �\Ear  {{\psi}_{\acute B}} �L��
\end{diagram} Taking into account  the definition of the pasting isomorphism
map: $${\Omega}_{B, \acute B}={\rho_{{\mathbf A}(B)}} \circ
{{\varrho_{{\mathbf A}(\acute B)}}}^{-1}$$  we conclude that,  the
truth value criterion, in this case is expressed as:
$$[{{{\delta}_ {\Theta(\mathbf A(C))}}}]^{\varphi_{\mathbf A(
C)}}(c)=\varphi_{\mathbf A( C)} \otimes c={\it true} \qquad {\bf
iff} \qquad c={\Omega}_{B, C}(1)$$ namely iff $c$ is in the image
of the maximal element in ${\mathbf A}(B)$, via the isomorphism
pasting map ${\Omega}_{B,C}$.


\section{Valuations of propositions and Measurement}


The conceptual essence of existence of a quantum truth values
object $\Omega$ in the category of quantum event algebras, as
specified concretely in the previous section, is associated with
the fact that $\Omega$ constitutes the appropriate  quantum
algebra or quantum logic for valuations of propositions describing
the behavior of a quantum system, in correspondence with the
classical case, where the two element Boolean algebra $\mathbf 2$,
is used for valuations of propositions related with the behavior
of a classical system. In this sense, propositions associated with
the description of the behavior of a quantum system in various
contexts of observation, identified by Boolean domain charts in
localization systems of a quantum event algebra, are being
naturally assigned truth values in $\Omega$, by means of:
$$[{{{\delta}_
{\Theta(\mathbf A(B))}}}]^{\varphi_{\mathbf A(
B)}}(b)=\varphi_{\mathbf A( B)} \otimes b$$ where
$$ [\varphi_{\mathbf A(B)} \ast v] \otimes \acute
b=\varphi_{\mathbf A(B)} \otimes v({\acute b}), \quad
\varphi_{\mathbf A(B)} \in {{{\Theta(\mathbf A(B)}}}, \acute b \in
{\mathbf A}(\acute B), v : {\acute B} \rightarrow B, v(\acute
b)=b$$ and furthermore $b$ may be though as representing the
element (for instance projection operator) that identifies a
proposition $p$ in the context of $\mathbf A(B)$.


More specifically, a complete description of reality is
characterized by the requirement that:

$${\it true}= \mathbf 1=\varepsilon_{\mathbf A(Z)} \otimes 1 \qquad
\forall \varepsilon_{\mathbf A(Z)}\in {{{\Theta(\mathbf A(Z))}}}$$

$${\it true}= \mathbf 1={id}_{\mathbf A(B)}\otimes b \qquad
\forall b \in {\mathbf A}(B)$$ For example, we may discuss
briefly, a typical measurement situation referring to a quantum
system prepared to pass through a slit, where a counter has been
put to record by clicking, the passage through the slit. If we
denote a Boolean domain preparation context, that contains both
the measuring apparatus as well as the system observed, by
${\mathbf A(B)}$, then it is obvious that the proposition:


$\langle$ Counter clicks $\Rightarrow$ system passes through the
slit $\rangle$, or, $\langle$ $p\rightarrow q$ $\rangle$




is assigned the value $\it true$ in $\Omega$, expressing a
complete description of the state of affairs. It is evident that
in every Boolean cover of a localization system the maximal
element corresponds to $p \rightarrow q=\neg p \bigvee q$. We
notice that this is not enough to infer that $q$ is true. In order
to infer the above, we need to use the Boolean reference frame
that contains only the measuring apparatus, being obviously a
subobject of the preparatory Boolean frame ${\mathbf A(B)}$. If we
denote by $\varepsilon_{\mathbf A(B)}$, the monic that corresponds
to the specified subobject, we easily deduce that
$$\varepsilon_{\mathbf A( B)} \otimes p={\it true}$$ since
obviously $p$ is contained in ${\it Dom}(\varepsilon_{\mathbf A(
B)})$, and for notational convenience we have identified the
proposition p with its corresponding element $b$ in ${\mathbf
A(B)}$. Now, it is evident that with respect to the Boolean frame
containing only the apparatus we can say that the proposition
q:{\it system passes through the slit} is true. In this
perspective, the existence of a measuring apparatus plays the role
of an ultrafilter in the preparatory context ${\mathbf A(B)}$,
transforming truth with respect to $\Omega$, into two-valued truth
with respect to $\mathbf 2$. This is effected by the fact that the
monic subobject of ${\mathbf A(B)}$, containing only the measuring
apparatus, is equivalent to a classical valuation map ${\mathbf
A(B)} \rightarrow {\mathbf 2}$, as can be easily seen from the
ultrafilter characterization.



The use of the quantum truth values object $\Omega$, in
conjunction with the language of Boolean reference frames, for
valuations of propositions related with the behavior of a quantum
system, provides a powerful formal tool capable of resolving
problems associated with the quantum framework of description of
reality, that have been essentially created due to the use of an
inappropriate object of truth values, that cannot play the role of
a subobject classifier in the category of quantum event algebras,
as in the classical case. Hopefully, in a forthcoming paper we
will present an exposition of quantum paradoxes and their
resolution from the viewpoint of the theoretical scheme of the
present paper. At this stage, it is instructive to notice that the
role of the apparatus in a typical measurement situation provides
exactly the means for the transformation of the quantum truth
values object $\Omega$, into the classical object ${\mathbf 2}$.
In this sense, we may claim that the physics of the apparatus
specifies a frame in which a unique decomposition of the
proposition $p\rightarrow q$ is possible such that the proposition
$q$ is legitimately assigned the value {\it true}, only with
respect to this frame, namely an ultrafilter in ${\mathbf A(B)}$.
Subsequently, Kochen-Specker theorem is an expression of the fact
that a unique apparatus cannot reduce all propositions in a
quantum event algebra to classical two-valued truth, and exactly
this fact, substantiates the viewpoint of the present work,
necessitating the use of variable Boolean contexts interlocking
non-trivially in localization systems of a quantum algebra of
events. We may further argue that, the variation of the base
Boolean event algebra is actually arising from any operational
procedure aiming to fix the state of a quantum system, and
corresponds in this sense, to the variation of all possible
Boolean preparatory contexts for measurement. In this setting the
notion of truth is adjacent to equivalent classes of compatible
filters, instantiating subobjects of preparatory contexts for
measurement, whereas the value {\it true}, that provides a
complete description of reality, is prescribed by the rule ${\it
true}= \mathbf 1=\varepsilon_{\mathbf A(B)} \otimes 1 \qquad
\forall  \varepsilon_{\mathbf A(B)}\in {{{\Theta(\mathbf
A(B))}}}$.




\section{Epilogue}
It is an astonishing observation that both, the interpretation of
quantum event structures in terms of operationally substantiated
localization systems consisting of compatible overlapping Boolean
reference frames, and, the existence of a quantum truth values
object playing the role of subobject classifier and used naturally
for valuations of propositions describing the behavior of quantum
systems, are obtained as consequences of the fundamental
adjunction of the categorical scheme. Thus the adjunction
construction embodies both, the semantics of representation of
quantum logics as manifolds of Boolean coordinatizing
coefficients, and, the semantics of truth values encoded in the
specification of a classifying object in the category of quantum
logics.


Because of the foundational significance underlying the notion of
adjunction in the interpretation of quantum event structures, it
is necessary to examine more closely its functioning from a
physical viewpoint. If we consider the natural bijection $$
Nat({\mathbf P},{\mathbf R}(L)) \cong {{Hom}_{\mathcal L}({\mathbf
L \mathbf P}, L)}$$  the functors $\mathbf R$ and $\mathbf L$ are
not inverses, since we can see that neither $\mathbf R \mathbf L$
nor $\mathbf L \mathbf R$ need be isomorphic to an identity
functor. One way of thinking about this is to recall the analogy
between functors and translations and make it literal.


If we consider that ${\bf Sets}^{{\mathcal B}^{op}}$ is the
universe of [Boolean event algebras]- variable sets, and $\mathcal
L$ that of quantum event algebras, then the functor $\mathbf L :
{\bf Sets}^{{\mathcal B}^{op}} \ar \mathcal L$ can be understood
as a translational code from variable sets of Boolean localization
domains, standing as physical contexts of measurement, to the
algebra of events describing globally the behavior of a quantum
system. On the other side, the functor $\mathbf R : \mathcal L \ar
{\bf Sets}^{{\mathcal B}^{op}}$ can be conceived as a
translational code in the inverse direction. In general, the
content of the information is not possible to remain completely
invariant translating from one language to another and back, that
is by encoding and decoding a message. However, there remain two
ways for a [Boolean event algebras]- variable set $\mathbf P$, or
else multiple filters structured window, to communicate a message
to a quantum event algebra $L$. Either the information is
specified in quantum descriptive terms with $\mathbf P$
translating, which we can represent as the quantum homomorphism
${\mathbf L \mathbf P} \to L$, or the information is given in
Boolean descriptive terms with $L$ translating, represented as the
natural transformation ${\mathbf P} \to {{\mathbf R}(L)}$. In the
first case, $L$  thinks that is questioned in its own quantum
descriptive terms, while in the second $\mathbf P$  thinks that it
poses a question in Boolean terms. The natural bijection then
corresponds to the assertion that these two distinct ways of
communication, objectified as interactions via the channels of
measuring devices, are equivalent.


Thus, the adjunctive correspondence is precisely constitutive of
the meaning embodied in the process of relating relations arising
from the partial congruences of two different globally descriptive
levels of event language in communication. Most importantly, it
engulfs all the necessary and sufficient conditions for the
formulation of a two-directional dependent variation regulated
simultaneously by the Boolean and quantum structural levels in
local congruence. This process is actualized operationally in any
preparatory context of a measurement situation with the purpose of
extracting information semantically associated with the behavior
of a quantum system via observable quantities.  Of course, the
global closure of this process,  is necessary to be constrained to
obey certain conditions, such that its total constitutive
information content, unfolded in the multitude of local Boolean
reference frames, is both, preserved and, coherently organized in
a logical manner.



Remarkably the necessary and sufficient conditions for both of
these requirements, namely, [i] preservation of information
content and [ii] logical organization of information under
classification, is supplied by the adjunctive correspondence
itself, via the counit and unit constructions respectively,
characterizing the adjunction itself. More concretely, the Boolean
manifold representation, which guarantees the first requirement,
is a consequence of the isomorphism property of the counit map for
every quantum event algebra, whereas the existence of a quantum
truth values object, which in turn, guarantees the second
requirement, is a consequence of the isomorphism property of the
unit for the subobject functor.





It is instructive to discuss in some detail the above arguments.
On the one side, we notice that a full and faithful representation
of the structure of events of a globally non-Boolean quantum
algebra, in terms of families of coordinatizing Boolean domain
homomorphisms, being qualified as covering or localization
systems, is guaranteed if and only if the counit is a quantum
isomorphism. This conclusion, subsequently, is the referent of the
invariance property pertaining the preservation of the total
qualitative information content embodied in a quantum algebra of
events through the process of unfolding in Boolean reference
frames of covering systems and then enfolding back. On the other
side, we notice that the subobject functor is representable in the
category of quantum event algebras by a classifying object if and
only if the unit is an isomorphism. In this case the classifying
object is characterized as quantum truth values object and may be
legitimately used for valuations of quantum propositions, in exact
correspondence with the use of the two-valued Boolean object for
valuations of classical propositions. This conclusion is, in turn,
the referent of a powerful formal tool for the organization of the
logical dimension of the information included in the category of
quantum event algebras, as it is encoded in Boolean localization
systems. Thus, finally, the isomorphic properties of the counit
and unit of the fundamental adjunction stand as global closure
conditions for the complete comprehension of the information
contained in a quantum event structure via  processes of
localization in Boolean reference frames and subsequent processes
of classification in terms of truth values.


\vspace{6mm}
\newpage
{\bf{Acknowledgments:}} I would gratefully like to acknowledge
support of this work by a Hellenic State research grant in
Mathematical Physics.

\vspace{10mm}















\begin{thebibliography}{99}

\bibitem
[1]. G. Birkhoff and J. von Neumann, The logic of Quantum
Mechanics, {\it Annals of Mathematics} {\bf 37}, 823 (1936).




\bibitem
[2]. V. S. Varadarajan, {\it Geometry of Quantum Mechanics}, Vol.
1, Van Nostrand, Princeton, New Jersey, 1968.



\bibitem
[3]. F. W. Lawvere and S. H. Schanuel, {\it Conceptual
Mathematics}, Cambridge University Press, Cambridge, 1997.



\bibitem
[4]. S. MacLane, {\it Categories for the Working Mathematician},
Springer-Verlag, New York, 1971.


\bibitem
[5]. S. MacLane and I. Moerdijk, {\it Sheaves in Geometry and
Logic}, Springer-Verlag, New York, 1992.


\bibitem
[6]. J. L. Bell, {\it Toposes and Local Set Theories}, Oxford
University Press, Oxford, 1988.

\bibitem
[7]. M. Artin, A. Grothendieck, and J. L. Verdier, {\it Theorie de
topos et cohomologie etale des schemas}, (Springer LNM 269 and
270, Springer-Verlag, Berlin, 1972).



\bibitem
[8]. Bell J. L., From Absolute to Local Mathematics, {\it
Synthese} {\bf 69}, 1986.

\bibitem
[9]. Bell J. L., Categories, Toposes and Sets, {\it Synthese},
{\bf 51}, No.3, 1982.




\bibitem
[10]. E. Zafiris, Quantum Event Structures from the perspective of
Grothendieck Topoi, submitted for publication in  {\it Foundations
of Physics}.


\bibitem
[11]. S. Kochen and E. Specker, The problem of hidden variables in
Quantum Mechanics, {\it J. Math. and Mech.} {\bf 17}, 59 (1967).


\bibitem
[12]. J. Butterfield and C. J. Isham, A Topos Perspective on the
Kochen-Specker Theorem: I. Quantum States as Generalized
Valuations, {\it International Journal of Theoretical Physics}
{\bf 37}, 2669 (1998).

\bibitem
[13]. J. Butterfield and C. J. Isham, A Topos Perspective on the
Kochen-Specker Theorem: II. Conceptual Aspects and Classical
Analogues, {\it International Journal of Theoretical Physics} {\bf
38}, 827 (1999).


\bibitem
[14]. J. P. Rawling and S. A. Selesnick, Orthologic and Quantum
Logic. Models and Computational Elements, {\it Journal of the
Association for Computing Machinery} {\bf 47}, 721 (2000).

\bibitem
[15]. I. Raptis, Presheaves, Sheaves, and their Topoi in Quantum
Gravity and Quantum Logic, gr-qc/0110064.


\bibitem
[16]. J. Butterfield and C. J. Isham, Some Possible Roles for
Topos Theory in Quantum Theory and Quantum Gravity, {\it
Foundations of Physics } {\bf 30}, 1707 (2000).







\bibitem
[17]. G. Takeuti, Two Applications of Logic to Mathematics, {\it
Mathematical Society of Japan} {\bf 13}, Kano Memorial Lectures 3
(1978).


\bibitem
[18]. M. Davis, A Relativity Principle in Quantum Mechanics, {\it
International Journal of Theoretical Physics} {\bf 16}, 867
(1977).







\end{thebibliography}






















\end{document}

quant-ph0402174.extracted_bib
\begin{thebibliography}{99}

\bibitem
[1]. G. Birkhoff and J. von Neumann, The logic of Quantum
Mechanics, {\it Annals of Mathematics} {\bf 37}, 823 (1936).




\bibitem
[2]. V. S. Varadarajan, {\it Geometry of Quantum Mechanics}, Vol.
1, Van Nostrand, Princeton, New Jersey, 1968.



\bibitem
[3]. F. W. Lawvere and S. H. Schanuel, {\it Conceptual
Mathematics}, Cambridge University Press, Cambridge, 1997.



\bibitem
[4]. S. MacLane, {\it Categories for the Working Mathematician},
Springer-Verlag, New York, 1971.


\bibitem
[5]. S. MacLane and I. Moerdijk, {\it Sheaves in Geometry and
Logic}, Springer-Verlag, New York, 1992.


\bibitem
[6]. J. L. Bell, {\it Toposes and Local Set Theories}, Oxford
University Press, Oxford, 1988.

\bibitem
[7]. M. Artin, A. Grothendieck, and J. L. Verdier, {\it Theorie de
topos et cohomologie etale des schemas}, (Springer LNM 269 and
270, Springer-Verlag, Berlin, 1972).



\bibitem
[8]. Bell J. L., From Absolute to Local Mathematics, {\it
Synthese} {\bf 69}, 1986.

\bibitem
[9]. Bell J. L., Categories, Toposes and Sets, {\it Synthese},
{\bf 51}, No.3, 1982.




\bibitem
[10]. E. Zafiris, Quantum Event Structures from the perspective of
Grothendieck Topoi, submitted for publication in  {\it Foundations
of Physics}.


\bibitem
[11]. S. Kochen and E. Specker, The problem of hidden variables in
Quantum Mechanics, {\it J. Math. and Mech.} {\bf 17}, 59 (1967).


\bibitem
[12]. J. Butterfield and C. J. Isham, A Topos Perspective on the
Kochen-Specker Theorem: I. Quantum States as Generalized
Valuations, {\it International Journal of Theoretical Physics}
{\bf 37}, 2669 (1998).

\bibitem
[13]. J. Butterfield and C. J. Isham, A Topos Perspective on the
Kochen-Specker Theorem: II. Conceptual Aspects and Classical
Analogues, {\it International Journal of Theoretical Physics} {\bf
38}, 827 (1999).


\bibitem
[14]. J. P. Rawling and S. A. Selesnick, Orthologic and Quantum
Logic. Models and Computational Elements, {\it Journal of the
Association for Computing Machinery} {\bf 47}, 721 (2000).

\bibitem
[15]. I. Raptis, Presheaves, Sheaves, and their Topoi in Quantum
Gravity and Quantum Logic, gr-qc/0110064.


\bibitem
[16]. J. Butterfield and C. J. Isham, Some Possible Roles for
Topos Theory in Quantum Theory and Quantum Gravity, {\it
Foundations of Physics } {\bf 30}, 1707 (2000).







\bibitem
[17]. G. Takeuti, Two Applications of Logic to Mathematics, {\it
Mathematical Society of Japan} {\bf 13}, Kano Memorial Lectures 3
(1978).


\bibitem
[18]. M. Davis, A Relativity Principle in Quantum Mechanics, {\it
International Journal of Theoretical Physics} {\bf 16}, 867
(1977).







\end{thebibliography}