\def\fileversion{1.05} \def\filedate{2005/03/19} % \iffalse meta-comment % % This file can be redistributed and/or modified under the terms of % the LaTeX Project Public License from CTAN archives, as described at % http://www.latex-project.org/lppl.txt. Either LPPL Version 1.3 or, % at your option, any later version. % % \fi % % \CheckSum{423} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% % % \iffalse %% %% Source File: galois.dtx %% Copyright 1994 1998 1999 2006 Patrick.Cousot@ens.fr %% % %<*dtx> \ProvidesFile{galois.dtx} % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{galois} % \begin{macrocode} %<*driver> \documentclass{ltxdoc} % \end{macrocode} % % We don't want everything to appear in the index. % \begin{macrocode} \DoNotIndex{\,,\:,\ ,\hfill,\hskip,\hspace} \DoNotIndex{\@ifundefined,\@tempdima,\@tempdimb,\@tempdimc} \DoNotIndex{\DoNotIndex,\NeedsTeXFormat,\ifx,\else,\fi,\ifdim,\fi,\endtrivlist} \DoNotIndex{\addtolength,\divide,\circ,\cleaders,\ensuremath} \DoNotIndex{\begin,\end,\bgroup,\egroup,\begingroup,\endgroup} \DoNotIndex{\catcode,\noexpand,\protect,\string,\space,\put,\equiv} \DoNotIndex{\filedate,\filename,\fileversion,\ProcessOptions} \DoNotIndex{\hbox,\raisebox,\rlap,\llap,\relax,\rule,\smash} \DoNotIndex{\let,\def,\newcommand,\newenvironment,\DeclareOption} \DoNotIndex{\m@th,\mathchoice,\mathord,\mathrel,\max,\mkern,\newlength} \DoNotIndex{\setlength,\settodepth,\settoheight,\settowidth} \DoNotIndex{\tiny,\scriptstyle,\scriptscriptstyle,\undefined} \DoNotIndex{\leftarrow,\rightarrow,\longleftarrow,\longrightarrow} \makeatother % \CodelineNumbered \CodelineIndex \EnableCrossrefs \RecordChanges % \usepackage[color]{galois} \begin{document} \DocInput{galois.dtx} \PrintIndex \PrintChanges \end{document} % % \end{macrocode} % \fi % \ProvidesFile{galois.dtx} [\filedate\space v\fileversion, Galois connections, Patrick.Cousot@ens.fr] % % % \changes{v0.00}{1996/11/25}% % {Initial version for LaTeX 2.09} % \changes{v1.00}{1997/05/19}% % {Adapted to LaTeX2e} % \changes{v1.01}{1998/10/19}% % {Check "\textbackslash comp" is not already defined (as in "mathtime.sty")} % \changes{v1.02}{1998/11/13}% % {Rewritting of extendable arrows using the TeX book left/right arrowfill % p. 357. Added and renamed style parameters ("\textbackslash GaloisSep" now % "\textbackslash GaloisArrowTagSep")} % \changes{v1.03}{1999/04/02}% % {Renamed internal macros to avoid interferences with other packages % "\textbackslash rightarrowfill" $\rightarrow$ "\textbackslash @GALOISrightarrowfill" % "\textbackslash leftarrowfill" $\rightarrow$ "\textbackslash @GALOISleftarrowfill"} % \changes{v1.04}{1999/05/01}% % {\LaTeX{} package file documentation} % \changes{v1.05}{2005/03/19}% % {Added color option} % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \title{The \textsf{galois} package\thanks{This file % has version number \fileversion, last % revised \filedate.}} % \author{Patrick Cousot\\ % \texttt{Patrick.Cousot@ens.fr}} % % \date{\filedate} % % \maketitle % % ^^A x % ^^A \mor{x} = |-------> total morphism % ^^A % \newcommand{\mor}[1]{\mathrel{\raisebox{-0.1ex}^^A fix heigt of 2nd parameter of stackrel % {$\stackrel{\hbox{$\scriptscriptstyle #1$}}{\raisebox{0pt}[0.5ex][0pt]^^A fix height of 1st parameter of stackrel % {$\longmapsto$}}$}}} % % \section{Introduction} % % This |galois| package introduces two-dimensional notations for % Galois connections. % % \section{Detailled explanations on Galois connections} % % If $(L$, ${\leq})$ and $(M$, ${\sqsubseteq})$ are posets, $\alpha\in % L\mapsto M$, $\gamma\in M\mapsto L$ and $\forall x\in L, y\in M$: % $\alpha(x)\sqsubseteq y$ $\iff$ $x\leq\gamma(y)$ then the pair % $\langle \alpha$, $\gamma\rangle$ is a {\em Galois connection}, % written |\galois{\alpha}{\gamma}|: % \DescribeMacro{\galois} % \begin{displaymath} % (L,\,{\leq})\galois{\alpha}{\gamma}(M,\,{\sqsubseteq}) % \end{displaymath} % In a Galois connection, $\alpha$ is onto if and only if $\gamma$ is % one-to-one if and only if $\alpha \comp \gamma$ = 1 (where ${\comp}$ % is the functional composition and 1 the identity), written % |\galoiS{\alpha}{\gamma}|: % \DescribeMacro{\galoiS} % \begin{displaymath} % (L,\,{\leq})\galoiS{\alpha}{\gamma}(M,\,{\sqsubseteq}) % \end{displaymath} % $\alpha$ is one-to-one if and only if $\gamma$ is onto % if and only if $\gamma\comp\alpha$ = 1, written % |\Galois{\alpha}{\gamma}|: % \DescribeMacro{\Galois} % \begin{displaymath} % (L,\,{\leq})\Galois{\alpha}{\gamma}(M,\,{\sqsubseteq}) % \end{displaymath} % For a bijection, we write % |\GaloiS{\alpha}{\gamma}|: % \DescribeMacro{\GaloiS} % \begin{displaymath} % (L,\,{\leq})\GaloiS{\alpha}{\gamma}(M,\,{\sqsubseteq}) % \end{displaymath} % The surjection on the quotient of $M$ by the equivalence relation % $x\equiv y$ defined by $\gamma(x)=\gamma(y)$ is denoted % |\galoiSr{\alpha}{\gamma}|: % \DescribeMacro{\galoiSr} % \begin{displaymath} % (L,\,{\leq})\galoiSr{\alpha}{\gamma}(M,\,{\sqsubseteq}) % \end{displaymath} % The composition of Galois connections: % \begin{displaymath} % (L,\,{\leq})\galois{\alpha_1}{\gamma_1}(M,\,{\sqsubseteq}) % \quad{\rm and}\quad % (M,\,{\sqsubseteq})\galois{\alpha_2}{\gamma_2}(N,\,{\preceq}) % \end{displaymath} % is a Galois connection (the composition $\comp$ of functions is % |\comp|): % \DescribeMacro{\comp} % \begin{displaymath} % (L,\,{\leq})\galois{\alpha_2\comp\alpha_1}{\gamma_1\comp\gamma_2}(N,\,{\preceq}) % \end{displaymath} % Galois connections % $(L,\,{\leq})\galois{\alpha}{\gamma}(M,\,\sqsubseteq)$ can be lifted % from sets of properties to sets of monotone functions: % \begin{displaymath} % (L\mor{m}L,\,{\leq})\galois{\lambda{\varphi}\cdot{\alpha\comp\varphi\comp\gamma}}{\lambda{\phi}\cdot{\gamma\comp\phi\comp\alpha}}(M\mor{m}M,\,{\sqsubseteq}) % \end{displaymath} % where the ordering on functions is pointwise that is % $\varphi\preceq\phi$ if and only if $\forall % x:\varphi(x)\preceq\phi(x)$. Observe that the length of the arrows % stretches automatically to the appropriate width. % % \section{Package options} % % \begin{macro}{color} % The \texttt{color} option is required for colored Galois % connections is in % \begin{center} % \begin{tabular}{cc} % |\galois[red]{\alpha}{\gamma}| & % $\galois[red]{\alpha}{\gamma}$,\\[1ex] % |\Galois{\alpha}[blue]{\gamma}| & % $\Galois{\alpha}[blue]{\gamma}$,\\[1ex] % |\GaloiS[red]{\alpha}[blue]{\gamma}| & % $\GaloiS[red]{\alpha}[blue]{\gamma}$,\\[1ex] % |\galoiSr[red]{\alpha}[blue]{\gamma}| & % $\galoiSr[red]{\alpha}[blue]{\gamma}$, or\\[1ex] % |\comp[red]| & $\comp[red]$\ . % \end{tabular} % \end{center} % Without '|color|' option, these colors are ignored. % \begin{macro}{\@GALOIScolor} % |\@GALOIScolor| is |\color| with the |color| option and later % defined as |\relax| in absence of |color| option. % \begin{macrocode} \DeclareOption{color}{% \def\@GALOIScolor{\color}} % \end{macrocode} % % \begin{macrocode} \ProcessOptions % \end{macrocode} % \end{macro} % \end{macro} % % \section{Style parameters} % % You can use Galois connections in any size (footnotes, transparencies, % etc.) : % {\tiny tiny $L\galois{\alpha}{\gamma}M$}, % {\scriptsize scriptsize $L\galois{\alpha}{\gamma}M$}, % {\footnotesize footnotesize $L\galois{\alpha}{\gamma}M$}, % {\small small $L\galois{\alpha}{\gamma}M$}, % {\normalsize normalsize $L\galois{\alpha}{\gamma}M$}, % {\large large $L\galois{\alpha}{\gamma}M$}, % {\Large Large $L\galois{\alpha}{\gamma}M$}, % {\LARGE LARGE $L\galois{\alpha}{\gamma}M$}, % {\huge huge $L\galois{\alpha}{\gamma}M$}, % {\Huge Huge $L\galois{\alpha}{\gamma}M$}. % Observe that in $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$ the % width of arrows and height of enclosing box are automatically adjusted % according to the size of $\alpha$ and $\gamma$. You can adjust the % following parameters: % \DescribeMacro{\GaloisStyle} % \begin{description} % \item[]|\GaloisStyle| : style of upper and lower tags % (|\scripstyle | by default); % \end{description} % \DescribeMacro{\GaloisArrowThickness} % \begin{description} % \item[]|\GaloisArrowThickness| : thickness of the arrow stems % \footnote{stem is ``tige'' in french.}; % (|0.1ex| by default); % \end{description} % \DescribeMacro{\GaloisArrowsSep} % \begin{description} % \item[]|\GaloisArrowsSep| : distance between the arrows % (|0.2ex| by default); % \end{description} % \DescribeMacro{\GaloisArrowTagSep} % \begin{description} % \item[]|\GaloisArrowTagSep| : distance between arrows and tags % (|0.5ex| by default). % \end{description} % For example with: % \begin{quote} % |\renewcommand{\GaloisArrowsSep}{1cm}|\\ % |\renewcommand{\GaloisArrowTagSep}{0pt}| % \end{quote} % we get % \renewcommand{\GaloisArrowsSep}{1cm}\renewcommand{\GaloisArrowTagSep}{0pt} % $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$ while with: % \begin{quote} % |\renewcommand{\GaloisArrowsSep}{0pt}|\\ % |\renewcommand{\GaloisArrowTagSep}{5mm}| % \end{quote} % we get \renewcommand{\GaloisArrowsSep}{0pt}\renewcommand{\GaloisArrowTagSep}{5mm} % $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$ and with % \begin{quote} % |\renewcommand{\GaloisArrowsSep}{0pt}|\\ % |\renewcommand{\GaloisArrowTagSep}{0pt}| % \end{quote} % we get % \renewcommand{\GaloisArrowsSep}{0pt}\renewcommand{\GaloisArrowTagSep}{0pt} % $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$. % % \StopEventually{} % % \section{Implementation} % \begin{macrocode} %<*package> % \end{macrocode} % % Require |color| package for '|color|' option else coloring is ignored. % \begin{macrocode} \ifx\@GALOIScolor\undefined \def\@GALOIScolor#1{\relax}% \else \RequirePackage{color}% \fi % \end{macrocode} % % ^^A Reset style parameters to default % \renewcommand{\GaloisStyle}{\scriptstyle}% % \renewcommand{\GaloisArrowThickness}{0.1ex}% % \renewcommand{\GaloisArrowsSep}{0.2ex}% % \renewcommand{\GaloisArrowTagSep}{0.5ex}% % \begin{macro}{\comp} % \begin{macro}{\@GALOIScomp} % Define functional composition $f\comp g(x)$ is $f(g(x))$ (if not % already defined e.g.\ as in |mathtime.sty|). |\comp[color]| will % draw in color (black by default). % \begin{macrocode} \@ifundefined{comp}{% % Scan the optional color argument \newcommand{\comp}{\@ifnextchar[{\@GALOIScomp}{\@GALOIScomp[black]}}% % Defined the colored functional composition \@GALOIScomp[color] \def\@GALOIScomp[#1]{\mathchoice {\mathrel{\raisebox{0.2ex}{$\@GALOIScolor{#1}\scriptstyle\circ$}}}% {\mathrel{\raisebox{0.2ex}{$\@GALOIScolor{#1}\scriptstyle\circ$}}}% {\mathrel{\raisebox{0.1ex}{$\@GALOIScolor{#1}\scriptscriptstyle\circ$}}}% {\mathrel{\raisebox{0.1ex}{$\@GALOIScolor{#1}\scriptscriptstyle\circ$}}}}% }{}% % \end{macrocode} % \end{macro} % \end{macro} % % Style commands: % \begin{macro}{\GaloisStyle} % Style of $a$ and $b$ in $\galois{a}{b}$, $\Galois{a}{b}$, $\galoiS{a}{b}$ or % $\GaloiS{a}{b}$: % \begin{macrocode} \newcommand{\GaloisStyle}{\scriptstyle}% % \end{macrocode} % \end{macro} % % \begin{macro}{\GaloisArrowThickness} % Thickness of the arrow stems (0.1ex by default): % \begin{macrocode} \newcommand{\GaloisArrowThickness}{0.1ex}% % \end{macrocode} % \end{macro} % % \begin{macro}{\GaloisArrowsSep} % Distance between the lower and upper arrows (0.2ex by default): % \begin{macrocode} \newcommand{\GaloisArrowsSep}{0.2ex}% % \end{macrocode} % \end{macro} % % \begin{macro}{\GaloisArrowTagSep} % Distance between the lower arrow and the top of $a$ and the % top-arrow and the bottom of $b$ (0.5ex by default) % \begin{macrocode} \newcommand{\GaloisArrowTagSep}{0.5ex}% % \end{macrocode} % \end{macro} % % \begin{macro}{\@GALOISalphadepth} % \begin{macro}{\@GALOISalphaheight} % \begin{macro}{\@GALOISgammadepth} % \begin{macro}{\@GALOISwidth} % \begin{macro}{\@GALOISheight} % \begin{macro}{\@GALOISdepth} % \begin{macro}{\@GALOIStotalheight} % \begin{macro}{\@GALOISGap} % \begin{macro}{\@GALOISalphaarrowwidth} % \begin{macro}{\@GALOISalphaarrowhalfheight} % \begin{macro}{\@GALOISgammaarrowwidth} % \begin{macro}{\@GALOISgammaarrowhalfheight} % Auxiliary lengths: % \begin{macrocode}{} \newlength{\@GALOISalphadepth}% \newlength{\@GALOISalphaheight}% \newlength{\@GALOISgammadepth}% \newlength{\@GALOISwidth}% \newlength{\@GALOISheight}% \newlength{\@GALOISdepth}% \newlength{\@GALOIStotalheight}% \newlength{\@GALOISGap}% \newlength{\@GALOISalphaarrowwidth}% \newlength{\@GALOISalphaarrowhalfheight}% \newlength{\@GALOISgammaarrowwidth}% \newlength{\@GALOISgammaarrowhalfheight}% % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\Galois@put} % |\Galois@put(x,y-d){text}| puts text at coordinates $(x,y-d)$, in % a box of size 0\texttt{pt} $\times$ 0\texttt{pt}: % \begin{macrocode} \def\Galois@put(#1,#2-#3)#4{\rlap{\smash{\hskip#1\setlength{\@tempdimc}{#2}% \addtolength{\@tempdimc}{-#3}\raisebox{\@tempdimc}{#4}}}}% % \end{macrocode} % \end{macro} % % \begin{macro}{\@GALOISrightarrowfill} % |\@GALOISrightarrowfill{\rightarrow}|, see \TeX book p.\ 357. % \begin{macrocode} \def\@GALOISrightarrowfill#1{$\m@th \smash- \mkern-7mu% \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill% \mkern-7mu \mathord{#1}$}% % \end{macrocode} % \end{macro} % % \begin{macro}{\@GALOISleftarrowfill} % |\@GALOISleftarrowfill{\leftarrow}|, see \TeX book p.\ 357. % \begin{macrocode} \def\@GALOISleftarrowfill#1{$\m@th \mathord{#1} \mkern-7mu% \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill% \mkern-7mu \smash-$}% % \end{macrocode} % \end{macro} % % Stacking $a$, the arrows and $g$ in $\galois{a}{g}$: % \begin{macro}{\@GALOIS} % \begin{macro}{\@GALOISca} % \begin{macro}{\@GALOISca} % |\@GALOIS{-->}{<--}{a}{g}| constructs $\galois{a}{g}$. % |\@GALOIS{-->}{<--}[colora]{a}{g}|, % |\@GALOIS{-->}{<--}{a}[colorg]{g}| and % |\@GALOIS{-->}{<--}[colora]{a}[colorg]{g}| % add colors |colora| for the $a$-arrow and |colorg| for % the$ g$ arrow. % \begin{macrocode} % First, scan the alpha color optional argument (black % otherwise) \def\@GALOIS#1#2{\@ifnextchar[{\@GALOISca{#1}{#2}}{\@GALOISca{#1}{#2}[black]}}% % Second scan the gamma color optional argument (black % otherwise) \def\@GALOISca#1#2[#3]#4{\@ifnextchar[{\@GALOIScacg{#1}{#2}[#3]{#4}}% {\@GALOIScacg{#1}{#2}[#3]{#4}[black]}}% % Finally \@GALOIScacg{-->}{<--}[colora]{a}[colorg]{g} stacks $a$, % the arrows and $g$ in $\galois{a}{g}$, using colors with the % 'color' option. \def\@GALOIScacg#1#2[#3]#4[#5]#6{% \ensuremath{\mathrel{% \def\@GALOISalphatag{\ $\@GALOIScolor{#3}\GaloisStyle#4$\ }% \def\@GALOISgammatag{\ $\@GALOIScolor{#5}\GaloisStyle#6$\ }% % compute width of alpha/lower and gamma/upper arrows \settowidth{\@GALOISalphaarrowwidth}{$\mathord{#1}$}% \settowidth{\@GALOISgammaarrowwidth}{$\mathord{#2}$}% % compute width of the picture \@GALOISwidth \ifdim\@GALOISalphaarrowwidth>\@GALOISgammaarrowwidth% \settowidth{\@tempdima}{\hbox{\hspace*{\@GALOISalphaarrowwidth}\@GALOISalphatag}}% \settowidth{\@tempdimb}{\hbox{\hspace*{\@GALOISalphaarrowwidth}\@GALOISgammatag}}% \else% \settowidth{\@tempdima}{\hbox{\hspace*{\@GALOISgammaarrowwidth}\@GALOISalphatag}}% \settowidth{\@tempdimb}{\hbox{\hspace*{\@GALOISgammaarrowwidth}\@GALOISgammatag}}% \fi% \ifdim\@tempdima>\@tempdimb% \setlength{\@GALOISwidth}{\@tempdima}% \else% \setlength{\@GALOISwidth}{\@tempdimb}% \fi% \def\@GALOISrightarrow{\hbox to\@GALOISwidth {\@GALOIScolor{#3}\@GALOISrightarrowfill{#1}}}% \def\@GALOISleftarrow{\hbox to\@GALOISwidth {\@GALOIScolor{#5}\@GALOISleftarrowfill{#2}}}% % compute half height of alpha/lower arrow \settodepth{\@GALOISalphaarrowhalfheight}{$\mathord{#1}$}% \settoheight{\@tempdima}{$\mathord{#1}$}% \addtolength{\@GALOISalphaarrowhalfheight}{\@tempdima}% \divide \@GALOISalphaarrowhalfheight by 2% % compute half height of gamma/upper arrow \settodepth{\@GALOISgammaarrowhalfheight}{$\mathord{#2}$}% \settoheight{\@tempdima}{$\mathord{#2}$}% \addtolength{\@GALOISgammaarrowhalfheight}{\@tempdima}% \divide \@GALOISgammaarrowhalfheight by 2% % compute the distance between the two arrows \@GALOISGap = % \max(\@GALOISalphaarrowhalfheight, % \@GALOISgammaarrowhalfheight)+\GaloisArrowsSep \ifdim\@GALOISalphaarrowhalfheight>\@GALOISgammaarrowhalfheight% \setlength{\@GALOISGap}{\@GALOISalphaarrowhalfheight}% \else% \addtolength{\@GALOISGap}{\@GALOISgammaarrowhalfheight}% \fi% \addtolength{\@GALOISGap}{\GaloisArrowsSep}% % lift from the stems thickness \addtolength{\@GALOISGap}{\GaloisArrowThickness }% \addtolength{\@GALOISGap}{\GaloisArrowThickness }% % compute height \@GALOISheight depth \@GALOISdepth % and total height \@GALOIStotalheight of the picture \settodepth{\@GALOISalphadepth}{\@GALOISalphatag}% \settoheight{\@GALOISalphaheight}{\@GALOISalphatag}% \settodepth{\@GALOISgammadepth}{\@GALOISgammatag}% % compute depth \@GALOISdepth of the picture % \@GALOISdepth = \@GALOISalphadepth % + \@GALOISalphaheight % vertical size of alpha tag % + \GaloisArrowTagSep % between top of tag and arrow \setlength{\@GALOISdepth}{\@GALOISalphadepth}% \addtolength{\@GALOISdepth}{\@GALOISalphaheight}% \addtolength{\@GALOISdepth}{\GaloisArrowTagSep}% % lift from the stem thickness \addtolength{\@GALOISdepth}{-\GaloisArrowThickness }% % compute height \@GALOISheight of the picture \setlength{\@GALOISheight}{\@GALOISGap}% \addtolength{\@GALOISheight}{\GaloisArrowTagSep}% \addtolength{\@GALOISheight}{\@GALOISgammadepth}% \settoheight{\@tempdima}{\@GALOISgammatag}% \addtolength{\@GALOISheight}{\@tempdima}% % compute total height \@GALOIStotalheight of the picture % \@GALOIStotalheight = \@GALOISdepth + \@GALOISheight \setlength{\@GALOIStotalheight}{\@GALOISdepth}% \addtolength{\@GALOIStotalheight}{\@GALOISheight}% % put alpha arrow \Galois@put(0pt,0pt-\@GALOISalphaarrowhalfheight){\@GALOISrightarrow}% % put gamma arrow \Galois@put(0pt,\@GALOISGap-\@GALOISalphaarrowhalfheight){\@GALOISleftarrow}% % put alpha \setlength{\@tempdima}{\@GALOISwidth}% \settowidth{\@tempdimb}{\@GALOISalphatag}% \addtolength{\@tempdima}{-\@tempdimb}% \divide\@tempdima by 2% \Galois@put(\@tempdima,\@GALOISalphadepth-\@GALOISdepth){\@GALOISalphatag}% % put gamma \setlength{\@tempdima}{\@GALOISwidth}% \settowidth{\@tempdimb}{\@GALOISgammatag}% \addtolength{\@tempdima}{-\@tempdimb}% \divide\@tempdima by 2% \setlength{\@tempdimb}{\@GALOISalphadepth}% \addtolength{\@tempdimb}{\@GALOISalphaheight}% \addtolength{\@tempdimb}{\GaloisArrowTagSep}% \addtolength{\@tempdimb}{\GaloisArrowTagSep}% \addtolength{\@tempdimb}{\@GALOISGap}% \addtolength{\@tempdimb}{\@GALOISgammadepth}% \Galois@put(\@tempdima,\@tempdimb-\@GALOISdepth){\@GALOISgammatag}% \rule[-\@GALOISdepth]{0pt}{\@GALOIStotalheight}% set depth and height \hspace*{\@GALOISwidth}% set width }}}% % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\galois} % |\galois{a}{g}| is $\galois{a}{g}$. % \begin{macrocode} \newcommand{\galois}{\@GALOIS{\rightarrow}{\leftarrow}}% % \end{macrocode} % \end{macro} % % \begin{macro}{\galoiS} % |\galoiS{a}{g}| is $\galoiS{a}{g}$ ($a$ onto, $g$ one-to-one, $a % \comp g = 1$): % \begin{macrocode} \def\@GALOISmytwoheadrightarrow{\rlap{$\:\,{\rightarrow}$}{\longrightarrow}}% \def\@GALOIStwoheadrightarrow{\protect\@GALOISmytwoheadrightarrow}% \newcommand{\galoiS}{\@GALOIS{\@GALOIStwoheadrightarrow}{\leftarrow}}% % \end{macrocode} % \end{macro} % % \begin{macro}{\galoiSr} % |\galoiSr{a}{g}| is $\galoiSr{a}{g}$. % \begin{macrocode} \def\@GALOISmytwoheadrightarrowreduc{\rlap{\smash{\hskip1ex\raisebox{0.815ex}% {\tiny$\equiv$}}}\rlap{$\:\,{\rightarrow}$}{\longrightarrow}}% \def\@GALOIStwoheadrightarrowreduc{\protect\@GALOISmytwoheadrightarrowreduc}% \newcommand{\galoiSr}{\@GALOIS{\@GALOIStwoheadrightarrowreduc}{\leftarrow}}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Galois} % |\Galois{a}{g}| is $\Galois{a}{g}$ ($a$ one-to-one, $g$ onto, $g % \comp a = 1$): % \begin{macrocode} \def\@GALOISmytwoheadleftarrow{\rlap{$\:{\leftarrow}$}{\longleftarrow}}% \def\@GALOIStwoheadleftarrow{\protect\@GALOISmytwoheadleftarrow}% \newcommand{\Galois}{\@GALOIS{\rightarrow}{\@GALOIStwoheadleftarrow}}% % \end{macrocode} % \end{macro} % % \begin{macro}{\GaloiS} % |\GaloiS{a}{g}| is $\GaloiS{a}{g}$ ($a$ bijective with inverse $g$). % \begin{macrocode} \newcommand{\GaloiS}{\@GALOIS% {\@GALOIStwoheadrightarrow}{\@GALOISmytwoheadleftarrow}}% % \end{macrocode} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % \Finale % \endinput