An observable effects a schematization of the Quantum event structure by correlating Boolean algebras picked by measurements with the Borel algebra of the real line. In a well-defined sense Boolean observables play the role of coordinatizing objects in the Quantum world, by picking Boolean figures and subsequently opening Boolean windows for the perception of the latter, interpreted as local measurement charts. A mathematical scheme for the implementation of this thesis is being proposed based on Category theoretical methods. The scheme leads to a manifold representation of Quantum structure in terms of topos-theoretical Boolean reference frames. The coordinatizing objects give rise to structure preserving maps with the modeling objects as their domains, effecting finally an isomorphism between quantum event algebra objects and Boolean localization systems for the masurement of observables.
quant-ph0202057.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



\renewcommand{\baselinestretch}{2}

\bibliographystyle{unsrt}

\begin{document}

 \vbox{\vspace{6mm}} 
\begin{center}{ {\large \bf TOPOS THEORETICAL REFERENCE FRAMES ON THE CATEGORY OF QUANTUM OBSERVABLES
}\\[7mm] Elias Zafiris\\  {\it e.mail:e.zafiris@ic.ac.uk \\} \vspace{2mm} }\end{center} \vspace{4mm} 
\footnotetext{Previous address: \it Theoretical Physics Group, Imperial College, The Blackett Laboratory, London SW7 2BZ, U.K.} 
\begin{abstract}   An observable effects a schematization of the Quantum event structure by correlating Boolean algebras picked by measurements with the Borel algebra  of the real line.  In a well-defined sense Boolean observables play the role of   coordinatizing objects in the  Quantum world, by picking Boolean figures and subsequently opening Boolean windows for the perception  of the latter, interpreted as local measurement charts.  A mathematical scheme for the implementation of this thesis is being proposed based on Category theoretical methods. The scheme leads to a  manifold representation of Quantum structure in terms of topos-theoretical Boolean reference frames. 
The coordinatizing  objects give rise to structure preserving maps with the modeling  objects as their domains, effecting finally an isomorphism between quantum event algebra objects and Boolean  localization systems for the masurement of observables. 
\end{abstract} 


\newpage













\section{Introduction}
 

In the working understanding of physical theories the concept of observables is associated with physical quantities that in principle can be measured. Quantum theory stipulates that quantities admissible as measured results must be real numbers. The resort to real numbers has the advantage of making our empirical access secure, since real number representability consists our form of observation. In any experiment performed by an observer, the propositions  that can be made concerning a physical quantity are of the type which asserts that the value of the physical quantity lies in some Borel set of the real numbers.  The proposition that the value of a physical quantity lies in a Borel set of the real line corresponds to an event in the ordered event structure of the theory as it is apprehended by an observer. Thus we obtain a mapping from the Borel sets of the real line to the event structure which captures precisely the notion of observable. 
$$Z : Bor(\mathbf R) \to L$$
Most importantly the above mapping is required to be a homomorphism. In this representation $Bor(\mathbf R)$ stands for  the algebra of events associated with a measurement device interacting with a physical system. The homomorphism assigns to every empirical event in  $Bor(\mathbf R)$ a proposition or event in $L$, stating a measurement fact about the physical system interacting with the measuring device.
We may argue that the real line endowed with its Borel structure serves as a modeling object which schematizes the event algebra of an observed system by projecting into it 
its structure. In the Hilbert space formalism of Quantum theory events are considered as closed subspaces of a seperable, complex Hilbert space corresponding to a physical system. Then the quantum event algebra  is identified with the lattice of closed subspaces of the Hilbert space, ordered by inclusion and carrying an orthocomplementation operation which is given by the orthogonal complements of the closed subspaces [1, 2]. Subsequently a quantum event structure is defined to be the category of quantum event algebras and quantum algebraic homomorphisms.


In this work we will develop the idea that in Quantum theory, observables can be understood as providing a coordinatization of the Quantum world by establishing a relativity principle. An intuitive flavour of this insight is provided by  Kohen-Specker  theorem [3], according to which  it is not possible to understand completely a quantum mechanical system with the use of a single system of Boolean devices. On the other side, in every concrete experimental context, the set of events that have been actualized in this context forms a Boolean algebra. Hence it is reasonable to assert that an observable picks a specific Boolean algebra, which can be considered as a Boolean subalgebra of the Quantum lattice of events. In essence an observable schematizes the Quantum event structure by correlating its Boolean subalgebras picked by measurements with the smallest Boolean algebra containing all the clopen sets of the real line.  In the light of this Boolean observables play the role of   coordinatizing objects in the attempt to probe the Quantum world.   This is equivalent to the statement that  a Boolean algebra in the lattice of Quantum events picked by an observable, serves as a reference frame, conceived in a precise topos-theoretical sense, relative to which the measurement result is being coordinatized, suggesting  a contextualistic perspective on the structure of Quantum events. Philosophically speaking, we can assert that the quantum world is being perceived through Boolean reference frames, regulated by our measurement procedures, which interlock to form a coherent picture in a non-trivial way. 


In  this work we propose a mathematical scheme for the implementation of the above thesis based on Category theoretical methods [4-7]. The main guiding idea in our investigation consists of  the use of  objects belonging to the Boolean species of observable structure as modeling figures for probing the objects belonging to the Quantum species of observable structure. The language of Category theory is perfectly suited to implement this idea in a universal way. The Boolean event algebras shaping objects, being formed by our measurement procedures, give rise to structure preserving maps with these objects as their domains, which under appropriate compatibility relations, provide an isomorphism between Quantum algebras of events and measurement Boolean localisation systems.  The essense of this scheme is the development of a Boolean manifold perspective on Quantum event structures, according to which a Quantum event algebra consists an interconnected family of Boolean ones interlocking in a non-trivial way.
The physical interpretation of the Boolean manifold scheme takes place through the identification of Boolean charts in systems of measurement localisation for quantum event algebras with reference frames of a topos-theoretical nature, relative to which the results of measurements can be coordinatized.  Thus any Boolean chart in an atlas for a quantum algebra of events corresponds to a set of classical Boolean events which become realizable in the experimental context of it. The above identification is equivalent to the introduction of a relativity principle in Quantum theory and suggests a contextualistic  interpretation of its formalism.  To sum up the Quantum world is being perceived through Boolean reference frames objectified by measuring arrangements being set up experimentally.  




In Section 2, we introduce the categories associated with  observable structures. In Section 3, we construct Boolean shaping and Boolean presheaf observable functors,  and also develop the idea of fibrations over Boolean observables. In Section 4, we prove the existence of an adjunction between the topos of presheaves of Boolean observables and the category of Quantum observables. In Section 5, we analyze this adjoint situation and show that the  adjunctive correspondence is based on a ''tensor product'' construction. In Section 6, the notion of systems of localization for measurement of  observables over a quantum event algebra is being introduced and analyzed. Finally in Section 7, we establish the representation of quantum event algebras   as  manifolds of Boolean measurement localization systems.







\section{Categories associated with Observables}






According to the category-theoretical approach to each species of mathematical structure, there corresponds a {\bf category} whose objects  have that structure, and whose morphisms preserve it. Moreover  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.

 


A {\bf Classical event structure}  is a category, denoted by $\mathcal B$, which is called the category of Boolean event algebras. Its objects are Boolean algebras of events, and its arrows are Boolean algebraic homomorphisms.



A {\bf Quantum event structure} is a category, denoted by $\mathcal L$, which is called the category of Quantum event algebras. 



Its objects are Quantum algebras of events, that is, partially ordered sets 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$,         [g] $l \vee {\acute l}=1,   l \wedge {\acute l}=0 \Rightarrow l={\acute l}^{\ast}$, 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.


Its arrows are Quantum algebraic homomorphisms, that is maps $L \Ar H K$, 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})$.






Next we introduce the categories associated with structures of observables.




A {\bf Quantum observable space structure}  is a category, denoted by $\mathcal OB$, which is called the category of spaces of Quantum observables.



Its objects are the sets  $\Omega$ of real-valued observables on a quantum event algebra $L$, where each observable $\Xi$ is defined to be an algebraic homomorphism from the Borel algebra of the real line $Bor(\mathbf{R})$, to the quantum event algebra $L$.
$$ \Xi : Bor(\mathbf{R}) \to L$$
such that the following conditions are satisfied:




[i] $ \Xi(\emptyset)=0, \Xi(\mathbf R)=1$,
[ii]  $E \bigcap F=\emptyset  \Rightarrow \Xi(E) \perp \Xi(F)$, for  $E, F \in Bor(\mathbf R)$, 
[iii] $\Xi({\bigcup}_n E_n)={\bigvee}_n \Xi(E_n)$,  where $E_1, E_2, \ldots$  sequence of mutually disjoint Borel sets of the real line. 


If $L$ is isomorphic with the orthocomplemented lattice of orthogonal projections on a Hilbert space, then it follows from von Neumann's spectral theorem that the observables are in 1-1 correspondence with the hypermaximal Hermitian operators on the Hilbert space.





Moreover each set $\Omega$  is endowed with a right action
$R : \Omega  \times Borf({\mathbf{R}}) \to \Omega$
from the semigroup of all real-valued Borel functions of a real variable $f : \mathbf R \to \mathbf R$ which satisfy the following condition:
$$ E \in Bor(\mathbf R) \Rightarrow {f^{-1}}(E) \in Bor(\mathbf R)$$
According to the above we have
$$(\Xi,f) \in \Omega  \times Borf(\mathbf R) \longmapsto  \Xi \bullet f=\Xi ({f^{-1}}(E)) \in \Omega$$
To sum up the objects of the category of Quantum Observables are the spaces $\mathbf {\Omega}=<\Omega,\mathbf R>$ of real-valued observables.



Its arrows are the quantum observable spaces homomorphisms $h : \mathbf \Omega  \to \mathbf U$, namely set-homomorphisms $[   ]^h : \Omega  \to U$ which respect the right action of $Borf(\mathbf R)$:
$$[\Xi  \bullet f]^h=\Xi^h \bullet  f$$ 
We note that $\mathbf \Omega$ and $\mathbf U$ are regarded as defined over the same quantum event algebra $L$, otherwise we have to take into account the quantum algebraic homomorphisms as well.


Using the information encoded in the categories of Quantum event algebras $\mathcal L$, and spaces of Quantum observables $\mathcal OB$,  it is possible to construct a new category, called the category of Quantum observables, which is going to play a key role in the subsequent analysis, and defined as follows:


A {\bf Quantum observable structure}  is a category, denoted by $\mathcal O_Q$, which is called the category of Quantum observables.
 

Its objects are the quantum observables $ \Xi : Bor(\mathbf{R}) \to L$ and its arrows $\Xi \ar \Theta$ are the commutative triangles [Diagram 1], or equivalently the quantum algebraic homomorphisms $L \Ar H K$ in $\mathcal L$, such that $\Theta= H \circ \Xi$ in [Diagram 1] is again a quantum  observable.



\begin{floatingdiagram}
� � �{Bor{\mathbf (R)}}�  � ��
� �\Swar {\Xi} �  �\Sear {\Theta}� ��
�{L}�  �\Ear[133]{H}  � �{K}   ��
\end{floatingdiagram}




Correspondingly, a {\bf Boolean observable structure} is a category, denoted by $\mathcal O_B$, which is called the category of Boolean observables.


Its objects are the Boolean observables $ \xi : Bor(\mathbf{R}) \to B$ and its arrows are the Boolean algebraic homomorphisms $B \Ar h C$ in $\mathcal B$, such that $\theta= h \circ \xi$ in [Diagram 2]  is again a Boolean  observable.


\begin{floatingdiagram}
� � �{Bor{\mathbf (R)}}�  � ��
� �\Swar {\xi} �  �\Sear {\theta}� ��
�{B}�  �\Ear[133]{h}  � �{C}   ��
\end{floatingdiagram}









\section{Presheaf and Coordinatization Boolean Observable Functors}
\subsection{Presheaves of Boolean Observables and their Categories of Elements}


If ${\mathcal O_B}^{op}$ is the opposite category of ${\mathcal O_B}$, then ${{\bf Sets}^{{\mathcal O_B}^{op}}}$ denotes the functor category of presheaves on Boolean observables, which remarkably is a topos. Its  objects are all functors $ {\mathbf X}: {\mathcal O_B}^{op} \ar  {\bf  Sets}$, and its morphisms are all natural transformations between such functors. Each object ${\mathbf X}$ in this category is a contravariant set-valued functor on ${\mathcal O_B}$,  called a presheaf on  ${\mathcal O_B}$.


For each Boolean observable $\xi$  of ${\mathcal O_B}$,  ${\mathbf X}(\xi)$  is a set, and for each arrow $f : \theta \ar  \xi$, ${\mathbf X} (f) :  {\mathbf X}(\xi)  \ar   {\mathbf X}(\theta)$  is a set function. 
If ${\mathbf X}$ is a presheaf on ${\mathcal O_B}$ and $x \in {\mathbf X}$(O), the value ${\mathbf X}(f) (x)$ for an arrow $f : \theta \ar \xi$ in ${\mathcal O_B}$ is called the restriction of $x$ along $f$ and is denoted by ${\mathbf X}(f) (x)=x/f$.


Each object $\xi$ of $\mathcal O_B$ gives rise to a contravariant Hom-functor $y[\xi]:={Hom_{\mathcal O_B}}(-,\xi)$. This functor defines a presheaf on $\mathcal O_B$. Its action on an object $\theta$ of $\mathcal O_B$ is given by 
$$y[\xi]:={Hom_{\mathcal O_B}}(\theta,\xi)$$
whereas its action on a morphism $\eta \Ar w \theta$, for $v : \theta \ar \xi$ is given by
$$ y[\xi](w) : {Hom_{\mathcal O_B}}(\theta,\xi) \ar {Hom_{\mathcal O_B}}(\eta,\xi)$$
$$y[\xi](w)(v)=v \circ w$$
Furthermore $y$ can be made into a functor from $\mathcal O_B$ to the contravariant functors on $\mathcal O_B$
$$y : \mathcal O_B \ar {{\bf Sets}^{{\mathcal O_B}^{op}}}$$
such that $\xi {\mapsto} {Hom_{\mathcal O_B}}(-,\xi)$. This is an embedding and it is a full and faithful functor.





Since ${\mathcal O_B}$ is a small category,  there  is a set consisting of all the elements of all the sets  ${\mathbf X}(\xi)$, and similarly there is a set consisting of all the functions ${\mathbf X}(f)$. This observation  regarding $ {\mathbf X}: {\mathcal O_B}^{op} \ar {\bf  Sets}$ permits us to take  the disjoint union of all the sets of the form  ${\mathbf X}(\xi)$  for all objects $\xi$ of ${\mathcal O_B}$. The elements of this disjoint union can be represented as pairs $(\xi,x)$ for all objects $\xi$ of ${\mathcal O_B}$ and elements $x \in {\mathbf X}(\xi)$. Thus the disjoint union of sets is made by labeling the elements. Now we can construct a category whose set of objects is the disjoint union just mentioned. This structure is called the category of elements of the presheaf  ${\mathbf X}$, denoted by  $\bf{G}({\mathbf X},{\mathcal O_B})$. Its objects are all pairs  $(\xi,x)$, and its morphisms ${(\acute{\xi},\acute{x})} \ar (\xi,x)$ are those morphisms $u : \acute{\xi} \ar \xi$ of ${\mathcal O_B}$ for which $xu=\acute{x}$. Projection on the second coordinate of  $\bf{G}({\mathbf X},{\mathcal O_B})$, defines a functor $\bf{G}_{\mathbf X} :  \bf{G}({\mathbf X},{\mathcal O_B})  \ar  {\mathcal O_B}$.  $\bf{G}({\mathbf X},{\mathcal O_B})$ together with the projection functor  $\bf{G}_{\mathbf X} $ is called the split discrete fibration induced by ${\mathbf X}$, and ${\mathcal O_B}$ is the base category of the fibration. The word ''discrete'' refers to the fact that the fibers are categories in which the only arrows are identity arrows. If $\xi$ is a Boolean observable  object of ${\mathcal O_B}$, the inverse image under $\bf{G}_{\mathbf P}$ of $\xi$ is simply the set  ${\mathbf X}(\xi)$, although its elements are written as pairs so as to form a disjoint union.



\begin{floatingdiagram}
�{\mathbf G}({\mathbf X}, \mathcal O_B)��
�\Sar {{\mathbf G}_{\mathbf X}}��
�{\mathcal O_B} �\Ear {\mathbf X} � \bf Sets��
\end{floatingdiagram}


\subsection{Coordinatization Functor}


We define a shaping or modeling or coordinatisation functor,  ${\mathbf A}:{\mathcal O_B} \ar {\mathcal O_Q}$, which assigns to Boolean observables in ${\mathcal O_B}$ (that plays the role of the model category) the underlying Quantum observables from ${\mathcal O_Q}$, 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}$. 





Equivalently the shaping  functor can be characterized as,  ${\mathbf A}:{\mathcal B} \ar {\mathcal L}$, which assigns to Boolean event algebras in ${\mathcal B}$ (that plays the role of the model category) the underlying quantum event algebras from ${\mathcal L}$, and to Boolean homomorphisms the underlying quantum algebraic homomorphisms, such that [Diagram 4] commutes:

\begin{floatingdiagram}
� � �{Bor{\mathbf (R)}}�  � ��
� �\Swar {\xi} �  �\Sear {\Xi}� ��
�{\mathbf A(B_\Xi)}�  �\Ear[100]{{[\psi_B]}_\Xi}  � �{L}   ��
\end{floatingdiagram}








\section{Adjointness between Presheaves of Boolean Observables and Quantum Observables}

We consider the category of quantum observables  ${\mathcal O_Q}$ and the modeling functor ${\mathbf A}$, and we define the functor ${\mathbf R}$ from ${\mathcal O_Q}$ to the topos of presheaves given by $${\mathbf R}(\Xi) : \xi {\mapsto} {{Hom}_{\mathcal O_Q}({\mathbf A}(\xi), \Xi)}$$


A natural transformation $\tau$ between the topos of presheaves on the category of Boolean observables ${\mathbf X}$ and ${\mathbf R}(\Xi)$, $\tau : {\mathbf X} \ar {\mathbf R}(\Xi)$ is a family ${{\tau}_\xi}$ indexed by Boolean observables $\xi$ of ${\mathcal O_B}$ for which each ${\tau}_\xi$ is a map $${\tau}_\xi : {\mathbf X}(\xi)  {\to} {{Hom}_{\mathcal O_Q}({\mathbf A}(\xi), \Xi)}$$
of sets, such that the diagram of sets [Diagram 5] commutes for each Boolean homomorphism $u : {\acute{\xi}} \to \xi$ of ${\mathcal O_B}$.


\begin{floatingdiagram}
�{\mathbf X}(\xi) �\Ear   {{\tau}_\xi}   �{Hom_{\mathcal O_Q}}({{\mathbf A}(\xi)}, \Xi)��
�\Sar {{\mathbf X}(u)}  �                      �\saR {{\mathbf A}(u)}^*  ��
�{\mathbf X}(\acute \xi) �\Ear   {{\tau}_\xi}   �{Hom_{\mathcal O_Q}}({{\mathbf A}(\acute \xi)}, \Xi)��
\end{floatingdiagram}


 If we make use of  the category of elements of the Boolean observables-variable set $X$, being an object in the topos of presheaves, then the map ${\tau}_\xi$, defined above, can be characterized as:
$${\tau}_\xi : (\xi,p) {\to} {{Hom}_{\mathcal O_Q}({{\mathbf A} \circ {G_{\mathbf X}}}(\xi,p), \Xi)}$$
Equivalently  such a $\tau$ can be seen as a family of arrows of ${\mathcal O_Q}$ which is being indexed by objects $(\xi,p)$ of the category of elements of the presheaf of Boolean observables ${\mathbf X}$, namely
$${\{{{\tau}_\xi}(p) : {\mathbf A}(\xi) \to \Xi\}}_{(\xi,p)}$$
From the perspective of  the category of elements of ${\mathbf X}$, the condition of the commutativity of [Diagram 5] is equivalent with the condition that for each arrow $u$  [Diagram 6] commutes. 


\begin{floatingdiagram}
�{{\mathbf A}(\xi)}   � \eeql � {\mathbf A} \circ {{{\mathbf G}_{\mathbf X}}(\xi,p)}  ��
�        �          �              �\Sear {{{\tau}_\xi} (p)} ��
�\Sar[133] {{\mathbf A}(u)}  �                      �\saR[133] {u_*}      �   �  \Xi    ��
�       �            �             �\neaR {{{\acute \tau}_\xi} (\acute p)} ��
�{{\mathbf A}(\acute \xi)}   � \eeql � {\mathbf A} \circ {{{\mathbf G}_{\mathbf X}}(\acute \xi,\acute p)}  ��
\end{floatingdiagram}
 


From [Diagram 6] we can see  that the arrows ${{\tau}_\xi}(p)$ form a cocone from the functor ${{\mathbf A} \circ {G_{\mathbf X}}}$ to the quantum observable algebra object $\Xi$.  Making use of the definition of the colimit, we conclude that each such cocone emerges by the composition of the colimiting cocone with a unique arrow from the colimit $\mathbf L \mathbf X$ to the quantum observable object $\Xi$. In other words, there is a bijection which is natural in $\mathbf X$ and $\Xi$
$$ Nat({\mathbf X},{\mathbf R}(\Xi)) \cong {{Hom}_{\mathcal O_Q}({\mathbf L \mathbf X}, \Xi)}$$


From the above bijection we are driven to the conclusion that the functor ${\mathbf R}$ from ${\mathcal O_Q}$ to the topos of presheaves given by $${\mathbf R}(\Xi) : \xi {\mapsto} {{Hom}_{\mathcal O_Q}({\mathbf A}(\xi), \Xi)}$$ has a left adjoint $\mathbf L :  {{\bf Sets}^{{\mathcal O_B}^{op}}}  \to  {\mathcal O_Q}$, which is defined for each presheaf of Boolean observables $\mathbf X$ in ${{\bf Sets}^{{\mathcal O_B}^{op}}}$ as the colimit 
$${\mathbf L}({\mathbf X})= {\it Colim} \{ \bf{G}({\mathbf X},{\mathcal O_B}) \Ar {{\mathbf G}_{\mathbf X}} {\mathcal O_B} \Ar {\mathbf A}  {\mathcal O_Q} \}$$


Consequently there is a {\bf pair of adjoint functors}  ${\mathbf L} \dashv {\mathbf R}$ as follows:
$$\mathbf L :  {{\bf Sets}^{{\mathcal O_B}^{op}}}  \adjar  {\mathcal O_Q} : \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{floatingdiagram}
�Nat({\mathbf X},{{\mathbf R}(\Xi)}�\Ear   {\mathbf r}  �{Hom_{\mathcal O_Q}}({{\mathbf L}{\mathbf X}}, \Xi)��
�\seql �                      �\seql ��
�Nat({\mathbf X},{{\mathbf R}(\Xi)}�\War  {\mathbf l}  �{Hom_{\mathcal O_Q}}({{\mathbf L}{\mathbf X}}, \Xi)��
\end{floatingdiagram}

$$ Nat({\mathbf X},{\mathbf R}(\Xi)) \cong {{Hom}_{\mathcal O_Q}({\mathbf L \mathbf X}, \Xi)}$$



In the adjoint  situation described above, between the topos of presheaves of Boolean observables and the category of Quantum observables, [Diagram 7]  the map $\mathbf r$ is called the right adjunction operator and the map $\mathbf l$ the left adjunction operator. 





 If in the bijection defining the  adjunction we use as $\mathbf X$ the representable presheaf of the topos of Boolean observables ${\mathbf y} [\xi]$, it takes the form:
$$ Nat({\mathbf y}[\xi],{\mathbf R}(\Xi)) \cong {{Hom}_{\mathcal O_Q}({\mathbf L {\mathbf y}[\xi]}, \Xi)}$$
We note that when ${\mathbf X}={\mathbf y}[\xi]$ is representable, then the corresponding category of elements 
$\bf{G}({\mathbf y}[\xi],{\mathcal O_B})$ has a terminal object, namely the element $1:\xi \ar \xi$ of ${\mathbf y}[\xi](\xi)$. Therefore the colimit of the composite $\mathbf A \circ {\mathbf G}_{{\mathbf y}[\xi]}$ is going to be just the value of  
$\mathbf A \circ {\mathbf G}_{{\mathbf y}[\xi]}$ on the terminal object. Thus we have
$${\mathbf L {\mathbf y}[\xi]}(\xi) \cong {\mathbf A \circ {\mathbf G}_{{\mathbf y}[\xi]}}(\xi,1_\xi)={\mathbf A}(\xi)$$
Thus we can characterize ${\mathbf A}(\xi)$ as the colimit of the representable presheaf on the category of Boolean observables according to [Diagram 6].



\begin{floatingdiagram}
�{\mathcal O_B}��
�\Smono {\mathbf y} �\Sear {\mathbf A}��
�{\mathbf Sets}^{{\mathcal O_B}^{op}}�\Edotar {\mathbf L}�{\mathcal O_Q}��
\end{floatingdiagram}


















\section{Analysis of the Adjunction}



The content of the adjunction between  the topos of presheaves of Boolean observables and the category of Quantum observables can be analyzed if we make use of the categorical construction of the colimit defined above, as a coequalizer of a coproduct. We consider the colimit of any functor $\mathbf F : I \ar {\mathcal O_Q}$ from some index category $\mathbf I$ to $\mathcal O_Q$. Let ${\mu}_i : {\mathbf F}(i) \to {\amalg}_i {\mathbf F}(i)$, $i \in I$, be the injections into the coproduct. A morphism from this coproduct, $\chi :  {\amalg}_i {\mathbf F}(i) \to {\mathcal O_Q}$, 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 F$ to the quantum observable vertex $\Xi$ only when for all arrows $v : i \ar j$ of the index category $I$ the following conditions are satisfied
$$ (\chi {\mu}_j) {\mathbf F}(v)=\chi {\mu}_i$$


\begin{floatingdiagram}
�{{\mathbf F}(i)}��
�\Sar {\mu_i} �\Sear {{\chi}{\mu_i}}��
�\coprod {{\mathbf F}(i)}�\Edotar {\chi}�\Xi��
�\Nar {\mu_j} �\Near {{\chi}{\mu_j}}��
�{{\mathbf F}(j)}��
\end{floatingdiagram}




So we consider all ${\mathbf F}(dom v)$ for all arrows $v$ with its injections ${\nu}_v$ and obtain their coproduct ${\amalg}_{v : i \to j} {\mathbf F}(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 F}(v)$$
as well as their coequalizer $\chi$ [Diagram 10]


\begin{floatingdiagram}
 �{{\mathbf F}(dom v)}                        �                                             �                �               �{{\mathbf F}(i)}��
 �\Sar {\mu_v}                                   �                                    �              �                  �\Sar {\mu_i} �\Sedotar {{\chi}{\mu_i}}��
 �{{\coprod}_ {v : i \to j}}{{{\mathbf F}(dom v)}}� � \Ebiar[70]{\zeta}{\eta}�  �\coprod {{\mathbf F}(i)}�\Edotar {\chi}�\Xi��
\end{floatingdiagram}




The coequalizer condition $\chi \zeta=\chi \eta$ tells us that the arrows $\chi{ {\mu}_i}$ form a cocone over $\mathbf F$ to the quantum observable vertex $\mathcal O_Q$. 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 F : I \to {\mathcal O_Q}$ from some index category $I$ to $\mathcal O_Q$. Hence the colimit of the functor $\mathbf F$ can be constructed as a coequalizer of coproduct according to [Diagram 11]



\begin{floatingdiagram}
�{{\coprod}_ {v : i \to j}}{{{\mathbf F}(dom v)}}� � \Ebiar[70]{\zeta}{\eta}�  �\coprod {{\mathbf F}(i)}�\Ear {\chi}�Colim \mathbf F��
\end{floatingdiagram}




In the case considered the index category is the category of elements of the presheaf of Boolean observables $\mathbf X$ and the functor  ${{\mathbf A} \circ {G_{\mathbf X}}}$ plays the role of the functor $\mathbf F : I \ar {\mathcal O_Q}$. In the diagram above the second coproduct is over all the objects $(\xi,p)$ with $p \in {\mathbf X}(\xi)$ of the category of elements, while the first coproduct is over all the maps $v : ({\acute \xi},{\acute p}) \ar (\xi,p)$ of that category, so that $v : {\acute \xi} \ar \xi$ and the condition $pv=\acute p$ is satisfied. We conclude that the colimit ${{\mathbf L}_A}(P)$ can be equivalently presented as the  coequalizer [Diagram 12]:


\begin{floatingdiagram}
�{{\coprod}_ {v : {\acute \xi} \to \xi}}{{{\mathbf A}(\acute \xi)}}�        � \Ebiar[70]{\zeta}{\eta}�        
�{{\coprod}_{(\xi,p)}} {{\mathbf A}(\xi)} �\Ear {\chi}�{\mathbf X} {{\otimes}_{\mathcal O_B}} {\mathbf A}��
\end{floatingdiagram}



The  coequalizer presentation of the colimit  shows that the ''Hom-functor'' ${\mathbf R}_{A}$ has a left adjoint which can be characterized categorically as  the  tensor product $- {\otimes}_{\mathcal O_B} {\mathbf A}$. 



In order to clarify the above observation, we forget for the moment that the discussion concerns the category of quantum observables $\mathcal O_Q$, and we consider instead the category $\bf Sets$. Then the coproduct ${{\amalg}_p} {\mathbf A}(\xi)$ is a coproduct of sets, which is equivalent to the product ${\mathbf X}(\xi)  \times {\mathbf A}(\xi)$ for $\xi \in \mathcal O_B$. The coequalizer is thus the definition of the tensor product ${\mathcal P} \otimes {\mathcal A}$ of the set valued factors: $$\mathbf X : {\mathcal O_B}^{op} \ar {\bf Sets}, \qquad  \mathbf A : {\mathcal O_B} \ar {\bf Sets}$$



\begin{floatingdiagram}
�{{\coprod}_ {\xi, \acute \xi}} {{\mathbf X}(\xi)} \times Hom(\acute \xi, \xi) \times {{{\mathbf A}(\acute \xi)}}�        �       � \Ebiar[70]   {\zeta}{\eta}�        
�{{\coprod}_\xi}  {{\mathbf X}(\xi)} \times {{\mathbf A}(\xi)} �\Ear {\chi}�{\mathbf X} {{\otimes}_{\mathcal O_B}} {\mathbf A}��
\end{floatingdiagram}



According to  [Diagram 13] above for elements $p \in {\mathbf X}(\xi)$, $v : {\acute \xi} \to \xi$ and $\acute q \in {\mathbf A}({\acute \xi})$ the following equations hold:  
$$\zeta (p,v, \acute q)=(pv, \acute q),  \qquad \eta(p,v, {\acute q})=(p, v \acute q)$$
symmetric in $\mathbf X$ and $\mathbf A$. Hence the elements of the set ${\mathbf X} {\otimes}_{\mathcal O_B} {\mathbf A}$ are all of the form $\chi (p,q)$. This element can be written as 
$$ \chi(p,q)=p \otimes q, \quad  p \in {\mathbf X}(\xi), q \in {\mathbf A}(\xi)$$
Thus if we take into account the definitions of $\zeta$ and $\eta$ above, we obtain
$$ pv \otimes \acute q=p \otimes v{\acute q}, \quad  p \in {\mathbf X}(\xi), \acute q \in {\mathbf A}(\acute \xi), v : {\acute \xi} \ar \xi$$
We conclude that the set ${\mathbf X} {\otimes}_{\mathcal O_B} {\mathbf A}$ is actually the quotient of the set 
${\amalg}_\xi {\mathbf X}(\xi) \times {\mathbf A}(\xi)$ by the equivalence relation generated by the above equations.


Furthermore if we define the arrows
$$ k_\xi :  {\mathbf X} {\otimes}_{\mathcal O_B} {\mathbf A} \ar { \Xi}, \qquad  l_\xi :  {\mathbf X}(\xi) \ar  {{Hom}_{\mathcal O_Q}({\mathbf A}(\xi), \Xi)}$$
they are related under the fundamental adjunction by
$$ {k_\xi}(p,q)={l_\xi}(p)(q), \qquad \xi \in {\mathcal O_B},  p \in {\mathbf X}(\xi), q \in {\mathbf A}(\xi)$$
Here we consider $k$ as a function on ${\amalg}_\xi {\mathbf X}(\xi) \times {\mathbf A}(\xi)$  with components 
$ k_\xi :  {{\mathbf X}(\xi)} {\times} {{\mathbf A}(\xi)}  \ar { \Xi}$ satisfying
$${k_{\acute \xi}}(pv,q)={k_\xi}(p,vq)$$
in agreement with the equivalence relation defined above.



Now we replace the category $\bf Sets$ by the category of quantum observables $\mathcal O_Q$ under study. The element $q$ in the set ${\mathbf A}(\xi)$ is replaced by a generalized element $q : C \to {\mathbf A}(\xi) $ from some object $C$ of $\mathcal O_Q$. Then we consider $k$ as a function ${\amalg}_{(\xi,p)} {{\mathbf A}(\xi)} \ar \Xi$ with components $k_{(\xi,p)} : {\mathbf  A}(\xi) \to { \Xi}$ for each $p \in {\mathbf X}(\xi)$,  that  for all arrows $v : {\acute \xi} \ar  \xi$ satisfy
$$ k_{({\acute \xi}, pv)}=k_{(\xi,p)} \circ {{\mathbf A}(v)}$$
Then the condition defining the bijection holding by virtue of the fundamental adjunction is given by
$$k_{{(\xi,p)}} \circ q={l_\xi}(p) \circ q : C \to \Xi$$
This argument, being natural in the object $C$, is determined by setting $C={\mathbf A}(\xi)$ with $q$ being the identity map. Hence the bijection takes the form $k_{{(\xi,p)}}={l_\xi}(p) $, where $k:{\amalg}_{(\xi,p)} {{\mathbf A}(\xi)} \ar \Xi$, and $l_\xi :  {\mathbf X}(\xi) \ar  {{Hom}_{\mathcal O_Q}({\mathbf A}(\xi), \Xi)}$.




\section{System Of Measurement Localizations For Quantum Observables}
The central idea behind the notion of a system of localizations for a quantum observable, which will be defined shortly, is based on the expectation that the complex object $ \Xi$ in $\mathcal O_Q$ is possible to be studied by means of certain sructure preserving maps $ \xi \ar  \Xi$ with local  or modeling objects Boolean observables $\xi$ in $\mathcal O_B$ as their domains. Of course any single  map from any modeling Boolean observable to a quantum observable is not sufficient to determine it fully and hence it is a priori destined to suppress information about it.  The only way to cope with this problem is to consider many certain structure preserving maps from the modeling Boolean observables to a quantum observable simultaneously so as to cover it completely.  In turn the information available about each map of the specified kind may be used to determine the quantum observable itself. In this case we say that   the family of such maps generate a system of prelocalizations for a quantum observable. We can formalize these intuitive ideas as follows:


A {\bf system of prelocalizations} for quantum observable $\Xi$ in $\mathcal O_Q$ is a subfunctor of the Hom-functor ${\mathbf R}(\Xi)$ of the form $\mathbf S : {\mathcal O_B}^{op} \to \bf Sets$, namely for all $\xi$ in $\mathcal O_B$ it satisfies ${\mathbf S}(\xi) \subseteq [{\mathbf R}(\Xi)](\xi)$. Hence a system of prelocalizations for quantum observable $\Xi$ in $\mathcal O_Q$ is a set ${\mathbf S}(\xi)$ of quantum algebraic homomorphisms of the form $${\psi}_\xi : {\mathbf A}(\xi) \ar \Xi, \qquad \xi \in {\mathcal O_B}$$ such that  
$\langle  {\psi}_\xi : {\mathbf A}(\xi) \ar \Xi$, in ${\mathbf S}(\xi)$ and ${\mathbf A}(v) : {\mathbf A}(\xi) \ar {\mathbf A}({\acute \xi})$ in $\mathcal O_Q$ for $v : \xi \ar {\acute \xi}$  in ${\mathcal O_B}$,  implies ${\psi}_{\xi} \circ {\mathbf A}(v) :  {\mathbf A}({\acute \xi}) \ar \mathcal O_Q$ in ${\mathbf S}(\xi) \rangle$.





In order to establish the connection of the above equivalent definitions with the fundamental adjunction of the previous section we note that we have made use of the bijection establishing the adjunction, and for the definition of the system of prelocalizations for a quantum observable, through this bijective correspondence, we have used as $\mathbf X$ the representable presheaf ${\mathbf y}[\xi]$ on the category of Boolean observables. This is obvious since 
$${\mathbf S}(\xi) \subseteq [{\mathbf R}(\Xi)](\xi)$$ implies by use of the Yoneda lemma
$${\mathbf S}(\xi) \subseteq Nat({{\mathbf y}[\xi], {\mathbf R}(\Xi)}) \cong Hom_{\mathcal O_Q} ({{\mathbf L}{\mathbf y}[\xi],\Xi})$$


The introduction of the notion of a system of prelocalizations has a physical basis. According to Kohen-Specker  theorem it not possible to understand completely a quantum mechanical system with the use of a single system of Boolean devices. On the other side, in every concrete experimental context, the set of events that have been actualized in this context forms a Boolean algebra. In the light of this we can say that any Boolean object  $(B_\Xi,{[\psi_B]_\Xi  : {\mathbf A}(B_\Xi) \ar L})$ in a system of prelocalizations for quantum event algebra, making [Diagram 14] commutative, corresponds to a set of Boolean classical events that become actualized in the experimental context of B. These Boolean objects play the role  of  measurement shaping objects.The above observation is equivalent to the statement  that a measurement Boolean algebra serves as a reference frame in a topos-theoretical environment, relative to which a measurement result is being coordinatized. Correspondingly, by [Diagram 14],  we obtain naturally the notion of coordinatizing Boolean observables in a system of prelocalizations for a quantum observable over Quantum event algebra $L$. The above notion suggests an effective  way of viewing the quantum formalism in a contextualistic perspective, pointing to a relativity principle of a topos-theoretical origin. Philosophically speaking, it supports the assertion that  the quantum world is being perceived through Boolean reference frames, regulated by its observers' measurement procedures, which interlock to form a coherent picture in a non-trivial way. 


\begin{floatingdiagram}
�Bor(\mathbf R)� �\Ear[100] {\acute \xi}� �{\mathbf A({{\acute B}_{\Xi}})}��
�\Sar {\xi} �   �\Esear {\Xi}� �\Sar {[{\psi_{\acute B}]_\Xi}}��
�{\mathbf A}(B_\Xi)    � �\Ear[100]  {[{\psi_B]}_\Xi}� �L��
\end{floatingdiagram}




Adopting the aforementioned  perspective on quantum observable structures, the operation of the Hom-functor ${\mathbf R}(\Xi)$ is equivalent to  singling  out a set of algebraic homomorphisms which are to play the role of local coverings of a quantum observable by modeling objects. The notion of a system of prelocalizations boils down essentially to sending many Boolean observables into the quantum observable homomorphically, expecting that these modeling objects will prove to be sufficient for determination of the quantum observable. If we consider the point of view offered by the geometric manifold theory we may legitimately characterize the maps  ${\psi}_\xi : {\mathbf A}(\xi) \ar \Xi, \quad \xi \in {\mathcal O_B}$ in a system of prelocalizations for quantum observable $\Xi$ as Boolean observable charts.  Correspondingly the shaping Boolean objects $(B_\Xi,{[\psi_B]_\Xi  : {\mathbf A}(B_\Xi) \ar L})$ in a system of prelocalizations for a quantum event algebra, making [Diagram 14] commutative, may be characterized as measurement charts. In turn their domains  $B_\Xi$ may be called  Boolean coordinate domains for measurement, the elements of $B_\Xi$ measured Boolean coordinates, and the elements of $L$ as quantum events or quantum propositions. Finally, the Boolean homomorphisms $v : B_\Xi \ar {\acute {B_\Xi}}$  in ${\mathcal B}$ play the equivalent role of transition maps.



It is evident that a quantum observable, and correspondingly the quantum event algebra over which it is defined, can have many systems of measurement prelocalizations, which form a partial ordered set under inclusion. We note that the minimal system is the empty one, namely ${\mathbf S}(\xi) = \emptyset$ for all $\xi \in {\mathcal O_B}$, whereas the maximal system is the Hom-functor ${\mathbf R}(\Xi)$ itself. Moreover intersection of any number of systems of prelocalization is again a system of prelocalization. We say that a family of Boolean observable charts ${\psi}_\xi : {\mathbf A}(\xi) \ar \Xi, \quad \xi \in {\mathcal O_B}$ (or correspondingly a family of Boolean measurement charts ${[\psi_B]_\Xi  : {\mathbf A}(B_\Xi) \ar L})$ making [Diagram 14] commutative, generates the system of prelocalization $\mathbf S$ iff this system is the smallest among all that contain this family.



The passage from a system of prelocalizations to a system of localizations for a quantum observable is achieved if certain compatibility conditions are satisfied on the overlap of the modeling Boolean charts covering the quantum observable under investigation. In order to accomplish this it is necessary to introduce the categorical concept of pullback in ${\mathcal O_Q}$ [Diagram 15].


\begin{floatingdiagram}
{\mathbf T}��
 �\Sear u�\Esear h ��
 �\sseaR g �{{\mathbf A}(\xi)} {\times}_\Xi {{\mathbf A}(\acute \xi)}       �\Ear {{\psi}_{\xi,{\acute \xi}}}  �{{\mathbf A}(\xi)} ��
 �          �\saR {{\psi}_{{\acute \xi},\xi}}   �         �\saR  {{\psi}_\xi}  ��  
 �          �{{\mathbf A}({\acute \xi})}       �\Ear  {{\psi}_{\acute \xi}} �\Xi��
\end{floatingdiagram}




The pullback of the Boolean charts  ${\psi}_\xi : {\mathbf A}(\xi) \ar \Xi,  \xi \in {\mathcal O_B}$ and ${\psi}_{\acute \xi} : {\mathbf A}({\acute \xi}) \ar \Xi,  {\acute \xi} \in {\mathcal O_B}$ with common codomain the quantum observable $\Xi$, consists of the object 
${\mathbf A}(\xi) {\times}_\Xi {\mathbf A}({\acute \xi})$ and two arrows $\psi_{\xi \acute \xi}$ and $\psi_{\acute \xi \xi}$, called projections, as shown in the above 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}(\xi) {\times}_\Xi {\mathbf A}({\acute \xi})$ that makes the whole diagram commute. Hence we obtain  the condition: $${\psi}_{\acute \xi} \circ g={\psi}_\xi \circ h$$
The pullback of the Boolean charts  ${\psi}_\xi : {\mathbf A}(\xi) \ar \Xi,  \xi \in {\mathcal O_B}$ and ${\psi}_{\acute \xi} : {\mathbf A}({\acute \xi}) \ar \Xi,  {\acute \xi} \in {\mathcal O_B}$ is equivalently characterized as their fibre product, because ${\mathbf A}(\xi) {\times}_\Xi {\mathbf A}({\acute \xi})$ is not the whole product ${\mathbf A}(\xi) {\times} {\mathbf A}({\acute \xi})$ but the product taken fibre by fibre. We notice that if ${\psi}_\xi$ and ${\psi}_{\acute \xi}$ are 1-1, then their pullback is isomorphic with the intersection $ {\mathbf A}(\xi) \cap {\mathbf A}({\acute \xi})$. Then we can define the pasting map, which is an isomorphism, as follows:
$${\Omega}_{\xi, \acute \xi} :  \psi_{\acute \xi \xi}({\mathbf A}(\xi) {\times}_\Xi {\mathbf A}({\acute \xi})) \ar
 \psi_{\xi \acute \xi}({\mathbf A}(\xi) {\times}_\Xi {\mathbf A}({\acute \xi}))$$ by putting
$${\Omega}_{\xi, \acute \xi}=\psi_{\xi \acute \xi} \circ  {\psi_{\acute \xi \xi}}^{-1}$$

Then we have the following conditions:
$${\Omega}_{\xi,  \xi}=1_\xi \qquad 1_\xi : identity \quad  of  \quad \xi $$
$${\Omega}_{\xi, \acute \xi} \circ {\Omega}_{\acute \xi,  \acute{\acute \xi}}={\Omega}_{\xi, \acute{\acute \xi}} \qquad    if \quad
{\mathbf A}(\xi) \cap {\mathbf A}({\acute \xi}) \cap {\mathbf A}({{\acute{\acute \xi}}}) \neq 0 $$
$${\Omega}_{\xi, \acute \xi} ={\Omega}_{\acute \xi, \xi} \qquad  if  \quad {\mathbf A}(\xi) \cap {\mathbf A}({\acute \xi}) \neq 0$$


The pasting map assures that $\psi_{\acute \xi \xi}({\mathbf A}(\xi) {\times}_\Xi {\mathbf A}({\acute \xi}))$ and 
$ \psi_{\xi \acute \xi}({\mathbf A}(\xi) {\times}_\Xi {\mathbf A}({\acute \xi}))$ are going to cover the same part of the quantum observable in a compatible way.

It is obvious that the above compatibility conditions are translated immediately to corresponding compatibility conditions concerning Boolean measurement charts on the Quantum event structure.

Given a system of measurement prelocalizations for quantum observable $\Xi \in {\mathcal O_Q}$,  and correspondingly  for the Quantum event algebra over which it is defined,  we call it a {\bf system of localizations} iff the above compatibility conditions are satisfied and moreover the quantum algebraic  structure is preserved.




\section{Representation of Quantum Observables and Event Algebras}
\subsection{Unit and Counit of the Fundamental Adjunction}


We focus again our attention in the fundamental adjunction and investigate the unit and the counit of it. For any presheaf $\mathbf X in the topos  {\bf Sets}^{\mathcal O_B^{op}}$, the {\bf unit} ${\delta}_{\mathbf X} : \mathbf X \ar {{Hom}_{\mathcal O_Q}}({\mathbf A}(\_), {\mathbf X} {\otimes}_{\mathcal O_B} \mathbf A)$ has components:
$${{\delta}_{\mathbf X}}(\xi) : {\mathbf X}(\xi)  \ar {{Hom}_{\mathcal O_Q}}({\mathbf A}(\xi), {\mathbf X} {\otimes}_{\mathcal O_B} \mathbf A)$$
for each Boolean observable object $\xi$ of $\mathcal O_B$. 


If we make use of the representable presheaf $y[\xi]$ we obtain
$${\delta}_{{\mathbf y}[\xi]} : {\mathbf y}[\xi] \to {{Hom}_{\mathcal O_Q}}({\mathbf A}(\_), {\mathbf y}[\xi]  {\otimes}_{\mathcal O_B} \mathbf A)$$ 
Hence for each object $\xi$ of $\mathcal O_B$ the unit, in the case considered, corresponds to a map 
$${\mathbf A}(\xi) \to  {\mathbf y}[\xi]  {\otimes}_{\mathcal O_B} \mathbf A$$
But since $$ {\mathbf y}[\xi]  {\otimes}_{\mathcal O_B} \mathbf A \cong {\mathbf A}(\xi)$$ 
the unit for the representable presheaf of Boolean observables is clearly an isomorphism. By the preceding discussion we can see that  [Diagram 16] commutes.


\begin{floatingdiagram}
�{\mathcal O_B}��
�\Smono {\mathbf y} �   �\Esear[133] {\mathbf A}��
�{\mathbf Sets}^{{\mathcal O_B}^{op}}�    �\Ear[100] [-] {{\otimes}_{\mathcal O_Q}}  {\mathbf A}� �{\mathcal O_Q}��
\end{floatingdiagram}



Thus the unit of the fundamental adjunction referring to the representable presheaf of the category of Boolean observables  provides a map (Quantum algebraic  homomorphism) ${\mathbf A}(\xi) \ar  {\mathbf y}[\xi]  {\otimes}_{\mathcal O_B} \mathbf A$  which is an isomorphism.


On the other side, for each Quantum observable object $\Xi$ of $\mathcal O_Q$ the {\bf counit} is
$${\epsilon}_\Xi : {{Hom}_{\mathcal O_Q}}({\mathbf A}(\_),\Xi) {\otimes}_{\mathcal O_B} \mathbf A \ar \Xi$$
The counit corresponds to the vertical map in  [Diagram 17].


\begin{floatingdiagram}
�{{\coprod}_ {v : {\acute \xi} \to \xi}}{{{\mathbf A}(\acute \xi)}}�        � \Ebiar[70]{\zeta}{\eta}�        
�{{\coprod}_{(\xi,p)}} {{\mathbf A}(\xi)} �\ear �[{{\mathbf R}(\Xi)}](-)  {{\otimes}_{\mathcal O_B}} {\mathbf A}��
�    �    �    �      �     �\sear           �\sdotar {{\epsilon}_\Xi}                ��
�    �    �     �     �                    � �\Xi                                                 ��
\end{floatingdiagram}










\subsection{Boolean Manifold Representation by Measurement Localizations}
The manifold representaion of a quantum observable structure in terms of Boolean masurement localizations, consisting  of Boolean reference  frames in a topos-theoretical environment, is described by the following proposition:


{\bf Proposition:} Given a quantum observable  $\Xi$ in $\mathcal O_Q$ and a system of compatible measurement prelocalizations consisting of Boolean observables, then  it is  a system of measurement localizations iff the counit of the fundamental adjunction restricted to this system is an isomorphism.
This statement may equivalently and more fundamentally be expressed in terms of the quantum event algebra over which observables are defined, if we take into account [Diagram 14], as follows: 



{\bf Proposition:} Given a quantum event algebra $L$ in $\mathcal L$ and a system of compatible measurement prelocalizations for quantum observable $\Xi$ over $L$, consisting of Boolean measurement charts, then  it is  a system of measurement localizations, or a measurement atlas,  iff the counit of the fundamental adjunction restricted to this system is an isomorphism.  



In this case we say that a quantum event algebra $L$ in $\mathcal L$ admits a Boolean manifold representation induced by Boolean measurement charts for observables defined over $L$.


{\bf Proof:}
 The proof of the proposition goes as folows: (For simplicity in the notation we avoid writing the observable index  $\Xi$  explicitly when we refer to measurement charts).



 We suppose that we are given a quantum event algebra, a system of measurement compatible prelocalizations of it, and moreover let the counit of the  adjunction (expessed in terms of event algebras)  restricted to this system is an isomorphism
$${\epsilon}_L : {\mathbf R}(L) {\otimes}_{\mathcal B} \mathbf A \ar L$$
such that
$${\psi} _B={\epsilon}_L \circ [{\psi}_B {\otimes}  {\_}]$$
or in the notation of elements equivalently:
$${\epsilon}_L([{\psi}_B {\otimes} a])={{\psi}_B}(a), \qquad a \in {\mathbf A}(B)$$
where ${{\psi}_B}(a)=\Xi({{\Xi_B}^{-1}}(a))$, for all $\psi_B : {\mathbf A}(B) \ar L$
according to the commutative triangle [Diagram 18].





\begin{floatingdiagram}
�[{{\mathbf R}(L)}](-)  {{\otimes}_{\mathcal B}} {\mathbf A}��
�\Nar {{{\psi}_B} {\otimes}[-] }�\Sear {{\epsilon}_L}   ��
�{{\mathbf A}(B)}�\Ear  {{\psi}_B} �L��
�\Nar {\xi=\Xi_B} �\Near {\Xi}��
�{Bor({\mathbf R})}��
\end{floatingdiagram}









Let $\mathbf T$ be any system of measurement prelocalizations for quantum event algebra $L$ in $\mathcal L$. Since the counit ${\epsilon}_L$  is surjective map, for given element $l$ in $L$ we obtain $l={{\psi}_B}(a)= {\epsilon}_L([{\psi}_B {\otimes} a])$ for some
${\psi}_{B} : {\mathbf A}(B) \ar L$. Since $\mathbf T$ is a system of prelocalizations, we have ${\psi}_B={\psi}_C \circ {\mathbf A}(v)$  for some $v : C \ar B$ in $\mathcal B$ and ${\psi}_C$ in $\mathbf T$. Hence 
$$l= {\psi}_{C} \circ [{\mathbf A}(v)](a)={{\psi}_C}(b), \qquad {\psi}_{C} : {\mathbf A}(C) \ar  L \in  {\mathbf T}, b \in 
{\mathbf A}(C)$$
Hence for every quantum event $l$ there exists a measurement Boolean chart in $\mathbf T$ and "Boolean coordinates" $a$  in ${\mathbf  A}(B)$  such that $l={{\psi}_B}(a)$, or else every quantum event gets covered.



Moreover let ${\psi}_{B} : {\mathbf A}(B) \ar L$ and  ${\psi}_{C} : {\mathbf A}(C) \ar L$ in ${\mathbf T}$. Then the fibre product structure $\mathbf K={{\mathbf A}(B)} {\times}_{L} {{\mathbf A}(C)}$ with projections $h : \mathbf K \ar {{\mathbf A}(B)}$, $g : \mathbf K \ar {{\mathbf A}(C)}$,  and the fact that the counit is 1-1, provides compatibility relations on overlaps for the ''Boolean coordinates'' of a quantum event. Concretely, for every two Boolean charts ${\psi}_{B} : {\mathbf A}(B) \ar L$ and  ${\psi}_{C} : {\mathbf A}(C) \ar L$ in ${\mathbf T}$ such that ${\psi}_{B}(a)={\psi}_{C}(b)$, $a \in {\mathbf A}(B)$ and  $b \in {\mathbf A}(C)$, there exists a pair of transition functions provided by the projections of the fibre product,  $h : \mathbf K \ar {{\mathbf A}(B)}$, $g : \mathbf K \ar {{\mathbf A}(C)}$ and a ''Boolean coordinate'' $k \in \mathbf K$ such that 
$${\psi}_{B} \circ h={\psi}_{C} \circ g, \qquad a=h(k), b=g(k)$$



Furthermore from the definition of  the left adjoint functor we know that ${\mathbf R}(L) {\otimes}_{\mathcal B} \mathbf A$ 
has a quantum event algebra structure. Since the counit is an isomorphism, the quantum event algebra structure is in to 1-1 correspodence with that of $L$. More explicitly the quantum event algebra structure of $L$ is identical with the one induced by the system $\mathbf T$, namely:
$$l=1 \Leftrightarrow l={{\psi}_{B}}(1), \forall {\psi}_B \in {\mathbf T}$$
$$l=m^{\ast}  \Leftrightarrow m= {{\psi}_B}(a) \Rightarrow l= {{\psi}_B}(a^{\ast}), \forall {\psi}_B \in {\mathbf T}, \forall a
 \in  Dom({\psi}_B)$$
$$l \leq m \Leftrightarrow [l={{\psi}_{B}}(a) \wedge m={{\psi}_{B}}(b) \Rightarrow a \leq b, \forall {\psi}_B \in {\mathbf T}, \forall a, b \in  Dom({\psi}_B)$$


Conversely, let $\mathbf T$ be any system of measurement localizations for quantum event algebra $L$ in $\mathcal L$,  such that the measurement Boolean charts are endowed with  the properties of covering entirely $L$, are compatible on overlaps and carry a quantum event algebra structure. Then we claim that the counit ${\epsilon}_L : {\mathbf R}(L) {\otimes}_{\mathcal B} \mathbf A \ar L$ defines a quantum algebraic  homomorphism which is an isomorphism.


Firstly, by the property of covering, the counit has to be ''onto''. In order to prove that it is 1-1, we suppose that  
${\psi}_{B} : {\mathbf A}(B) \ar L$ and  ${\psi}_{C} : {\mathbf A}(C) \ar L$ in ${\mathbf T}$ are in a system of localizations, and let ${\epsilon}_L([{\psi}_B {\otimes} a])={\epsilon}_L([{\psi}_C {\otimes} b])$, or equivalently ${{\psi}_B}(a)={{\psi}_C}(b)$. We wish to show that $[{\psi}_B {\otimes} a]=[{\psi}_C {\otimes} b]$. We set ${{\psi}_B}={{\psi}_D} \circ {\mathbf A}(v)$ and  ${{\psi}_C}={{\psi}_E} \circ {\mathbf A}(w)$ for ${{\psi}_D}$ and ${{\psi}_E}$  in $\mathbf T$, and some transition functions ${\mathbf A}(v)$, ${\mathbf A}(w)$. It is clear that 
$[{\psi}_B {\otimes} a]=[{\psi}_D {\otimes} [{\mathbf A}(v)](a)]$ and 
$[{\psi}_C {\otimes} b]=[{\psi}_E{\otimes} [{\mathbf A}(w)](b)]$ and moreover 
${{\psi}_D}([{\mathbf A}(v)](a))={{\psi}_E}([{\mathbf A}(w)](b))$. At this point the compatibility on ovelaps property of the system of localizations considered, will supply us with transition functions ${\mathbf A}(\acute v)$, ${\mathbf A}(\acute w)$, such that we are going to have $[{\psi}_D {\otimes} [{\mathbf A}(v)](a)]=[{\psi}_E{\otimes} [{\mathbf A}(w)](b)]$.



It remains to show that the counit preserves the quantum algebraic  structure in order to establish the isomorphism. Immediately we can show that
$${\epsilon}_L([{\psi}_B {\otimes} 1])={{\psi}_B}(1)=1$$
$${\epsilon}_L({([{\psi}_B {\otimes} a])} ^{\ast})={\epsilon}_L([{\psi}_B {\otimes} {a^{\ast}}])={{\psi}_B}({a^{\ast}})={[{{\psi}_B}(a)]}^{\ast}={[{\epsilon}_L([{\psi}_B {\otimes} a])]}^{\ast}$$
The partial ordering can be shown as follows: $[{\psi}_B {\otimes} a] \leq [{\psi}_C {\otimes} b]$ iff $\langle c \leq d \Rightarrow {{\psi}_K}(c) \leq {{\psi}_K}(d) \rangle$ or equivalently $ {\epsilon}_L([{\psi}_K {\otimes} c]) \leq 
{\epsilon}_L([{\psi}_K {\otimes} d])$, where $[{\psi}_B {\otimes} a] =[{\psi}_K {\otimes} c]$ and 
$[{\psi}_C {\otimes} b]=[{\psi}_K {\otimes} c]$, and  the pullback of the arrows  ${\psi}_B$ and ${\psi}_C$ has been used, in which $h(c)=a$, $g(d)=b$, ${\psi}_K= {\psi}_B \circ h={\psi}_B \circ g$. Next we observe that since the counit is "onto" and 1-1, we obtain: ${\epsilon}_L([{\psi}_B {\otimes} a]) \leq {\epsilon}_L([{\psi}_C {\otimes} b])$ iff 
${\epsilon}_L([{\psi}_K {\otimes} c]) \leq {\epsilon}_L([{\psi}_K {\otimes} d]) \Rightarrow {{{\psi}_K}(c)} \leq {{{\psi}_K}(d)}
\Rightarrow 
\langle c \leq d $ iff $ [{\psi}_B {\otimes} a] \leq [{\psi}_C {\otimes} b] \rangle$. 




\section{Conclusions}
By virtue of the fundamental proposition we conclude that:


1.  A system of localizations  $\mathbf S : {\mathcal B}^{op} \ar \bf Sets$ plays the role of a measurement atlas for a quantum event algebra $L$ in $\mathcal L$ and 


2.  The quantum event algebra $L$, endowed with an atlas of Boolean measurement localizations,  is a Boolean manifold.  


3.  The objects of the category of elements ${\mathbf G}({{\mathbf R}(L)},B)$ are the local modeling measurement Boolean charts and its maps are the pasting maps.  These objects are identified as the reference frames on a quantum observable structure, considered in a topos-theoretical environment, in conjunction with the adjunction eastablished between the Boolean and quantum species of observable structure. 




The fact that the counit is surjective means that the Boolean charts in  ${\mathbf G}({{\mathbf R}(L)},B)$ cover entirely the quantum event algebra $L$. The fact that the counit is injective means that any two measurement Boolean charts are compatible. Moreover since the counit is also an algebraic homomorphism, means that is preserves the structure, hence in effect the quantum event algebra $L$ is determined completely by the Boolean measurement charts and their compatibility relations in a system of localizations of it. Each  measurement chart corresponds to a set of Boolean events locally. The equivalence classes of measurement charts represent the same quantum events in $L$. We notice that since two different local Boolean measurement  charts may overlap, there exists  the possibility of probing the quantum structure by observing quantum events  from different frames, or in different contexts. But due to the presence of the equivalence and compatibility relations, these different contexts of observing are equivalent and moreover establish the same quantum event. 














\begin{thebibliography}{99}

\item
[1] V. S. Varadarajan, {\it Geometry of Quantum Mechanics}, Vol. 1, Van Nostrand, Princeton, New Jersey, 1968.


\item
[2] G. Birkhoff and J. von Neumann, The logic of Quantum Mechanics, {\it Annals of Mathematics} {\bf 37}, 823-843, 1936.


\item
[3] S. Cohen and E. Specker, The problem of hidden variables in Quantum Mechanics, {\it J. Math. and Mech.} {\bf 17}, 59-87, 1967.


\item
[4] F. W. Lawvere and S. H. Schanuel, {\it Conceptual Mathematics}, Cambridge University Press, Cambridge, 1997.



\item
[5] S. MacLane, {\it Categories for the Working Mathematician}, Springer-Verlag, New York, 1971.


\item
[6] S. MacLane and I. Moerdijk, {\it Sheaves in Geometry and Logic}, Springer-Verlag, New York, 1992.


\item
[7] J. L. Bell, {\it Toposes and Local Set Theories}, Oxford University Press, Oxford, 1988.



\end{thebibliography}









\end{document}

quant-ph0202057.extracted_bib
\begin{thebibliography}{99}

\item
[1] V. S. Varadarajan, {\it Geometry of Quantum Mechanics}, Vol. 1, Van Nostrand, Princeton, New Jersey, 1968.


\item
[2] G. Birkhoff and J. von Neumann, The logic of Quantum Mechanics, {\it Annals of Mathematics} {\bf 37}, 823-843, 1936.


\item
[3] S. Cohen and E. Specker, The problem of hidden variables in Quantum Mechanics, {\it J. Math. and Mech.} {\bf 17}, 59-87, 1967.


\item
[4] F. W. Lawvere and S. H. Schanuel, {\it Conceptual Mathematics}, Cambridge University Press, Cambridge, 1997.



\item
[5] S. MacLane, {\it Categories for the Working Mathematician}, Springer-Verlag, New York, 1971.


\item
[6] S. MacLane and I. Moerdijk, {\it Sheaves in Geometry and Logic}, Springer-Verlag, New York, 1992.


\item
[7] J. L. Bell, {\it Toposes and Local Set Theories}, Oxford University Press, Oxford, 1988.



\end{thebibliography}