\documentstyle[11pt]{article} 

%\lineskip 4pt 
\normallineskip 4pt 
\parskip 8pt plus 1pt 
\parindent 1cm \raggedbottom

% Macro concernant les esp¸ces.

\newcommand{\nwcmd}{\newcommand}

% Entiers et nombres rationnels.
\nwcmd{\N}{{\bf N}}
\nwcmd{\Z}{{\bf Z}}
\nwcmd{\Q}{{\bf Q}}
\nwcmd{\R}{{\bf R}}

% ieme
\nwcmd{\ieme}[1]{${#1}^e$}

% Ensemble par comprˇ.
\nwcmd{\ens}[2]{\mbox{$ \{ {#1} \mbox{\rm ~: } {#2} \} $}}

% Ensemble par extens.
\nwcmd{\ensex}[1]{\left\{ {#1} \right\}}

% Application.
\nwcmd{\appli}[3]{\mbox{${#1}:\,{#2} \to {#3}$}}

% Groupe symˇtrique.
\nwcmd{\Sym}[1]{S_{{#1}}}
\nwcmd{\Sn}{\Sym{n}}

% {1,2,, ... x }
\nwcmd{\ensn}[1]{\ensex{ 1,2,\;\ldots ,\;{#1}}}

%{1,2,...,n}
\nwcmd{\crochetn}{\ensn{n}}

% Notation pour {1,2,..,n}
\nwcmd{\nn}{\bf n}

% Aut.
\nwcmd{\aut}[1]{\mbox{\rm aut(}{#1}\mbox{\rm )}}

% Quotient
\nwcmd{\quoti}[2]{{#1}/{#2}}

% Regroupement.
\nwcmd{\regr}[2]{{#1}//{#2}}

% Classe d'un regroupement.
\nwcmd{\classe}[2]{\mbox{$\left[{#1}\right]_{{#2}}$}}

% Bij
\nwcmd{\Bij}[2]{\mbox{{\rm Bij(}}{#1}\mbox{\rm ,}{#2}\mbox{\rm )}}

% Groupes conjuguˇs.
\nwcmd{\conj}{\approx}

% Prod. semi-direct.
\nwcmd{\semidir}[2]
{{#1} 
{\times  {\hskip-3pt\raise1.4pt\hbox{$\scriptscriptstyle\mid$}}}
\,{#2}}

% <X>
\nwcmd{\greng}[1]{\left\langle{#1}\right\rangle} 
\nwcmd{\grengtab}[1]{\left\langle\mbox{\scriptsize{#1}}\right\rangle} 


% Stab.
\nwcmd{\stab}[1]{\mbox{\rm stab(}{#1}\mbox{\rm )}}

% Card.
\nwcmd{\card}[1]{\left| {#1} \right|}
% Si et seul. si.
\nwcmd{\ssi}{\mbox{$\Leftrightarrow$}}
% Egal par dˇf.
\nwcmd{\eqdef}
{\mbox{$\,\,\buildrel{\mbox{\scriptsize{d\'ef}}}\over{=}\,\,$}}

% Esp¸ces.
\nwcmd{\cyc}{{\cal C}}
\nwcmd{\polyg}{{\cal P}}
\nwcmd{\polbic}{{\cal P}^{\rm bic}}
\nwcmd{\eor}{{E}^{\pm}}

\nwcmd{\cardi}[1]{\left|{#1}\right|}

% Sous-groupe normal.
\nwcmd{\norm}{\triangleleft}

% Fix.
\nwcmd{\fix}[2]{\mbox{$\mbox{fix}_{{#1}}[{#2}]}}
% G-ensemble
\nwcmd{\Gens}[2]{\left( {#1},{#2} \right)}
\nwcmd\orbs[1]{{\cal O}\left( {#1} \right)}


% Environnement des thˇor¸mes et autre.
\newtheorem{thme}{Th\'eor\`eme}[section]
\newtheorem{cor}[thme]{Corollaire}
\newtheorem{lemme}[thme]{Lemme}
\newtheorem{prop}[thme]{Proposition}
\newtheorem{defin}[thme]{D\'efinition}
\newtheorem{rem}[thme]{Remarque}
\newtheorem{ex}[thme]{Exemple}
\newtheorem{algo}[thme]{Algorithme}

\nwcmd{\dem}{{\bf D\'emonstration:\ }}
\nwcmd{\findem}{\hfill \vrule height4pt width3pt depth2pt}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\typeout{Document Style Option `epsf' (October 17 90)}%
\catcode `@=11 %vive la macro
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Inclusion of EPSF documents into [Oz]TeX documents.
%% Michel Mauny - April 25 90.
%% Emmanuel Chailloux - October  17 90
%% History:
% ---------
%% April 11 91
%%      Fixed several bugs [mauny]
%%          * Now accepts lines as %%BoundingBox:100 200 102 23 
%%                           without space here ^
%%          * Added a \leavevmode for \epfs{} to be accepted as single
%%              element of a \begin{center} ... \end{center}
%%          * Extracted calls to \newdimen for them to be global
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TeX does itself the recognition of the Bounding Box of the drawing.
%% The macro is:
%%
%%   \epsf{filename}
%%        [xscale=<number>/<number>,yscale=<number>/<number>]  <- optional
%% or     (hsize=<number>,vsize=<number>)in pt 
%%        [ps=<PostScript>]  <- optional
%%
%% Order of parameters is important, and the 3rd cannot be used without the
%% 2nd.
%%
%% A null hsize indicates the hsize scaled by the vsize scaling.
%% A null vsize indicates the vsize scaled by the hsize scaling.
%% A double null is the unit.
%%
%% This is not the first package to do that sort of things, but that one
%% reads by itself the size of drawings, and is thus really trivial to use.
%%
%% This package may be extended in two ways:
%%    * usage of different versions of TeX (dvi2ps) (simple, but not trivial)
%%    * usage of different EPSF files types (tested only with FreeHand 2.0)
%%              should be trivial...
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% How to use this package?
%% Two things to do:
%%
%%     1. Create an EPSF file
%%           Use FreeHand or any program capable of creating such files from
%%           drawings or whatever.
%%           Use the `Export' menu item (or anything equivalent), creating
%%           the file (say) draw.eps
%% 
%%     2. In your [La]TeX document, place the following command where you
%%        want your drawing to appear:
%%                                      \epsf{draw.eps}
%%        And your drawing will be at that place, in a TeX box.
%%        You don't have to leave extra place for your drawing:
%%        it will be in a TeX box.
%%
%%   Z    If you want to specify a scaling (say 33.33333 %) then use the
%%        optional argument:
%%                             \epsf{draw.eps}[xscale=2/3,yscale=2/3]
%%        Scalings may be negative, but must be specified with the form:
%%        <number>/<number>.
%%        IMPORTANT: try to use small numbers, otherwise you risk to get
%%        a TeX internal registers overflow.
%%
%%   Z   if you prefer to specify the vsize of  you picture then use the 
%%       optional argument :
%%			\epsf{draw.ps}(hsize=200,vsize=300)
%%	Dimensions are given in points with the TeX convension  : 
%%                      1in or 72pt.
%%		
%%  ZZ    For real hackers only: if you want to add some PostScript to your
%%        drawing (indeed at its beginning), then use the second optional
%%        argument:
%%                   \epsf{draw.eps}[xscale=1/1,yscale=1/1][ps=<my program>]
%%        The second argument must be specified in order to use the
%%        second one (if you are tired to do that, make a new macro with
%%        your default scaling.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% \DVITOPS indicates the default TeX.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\oztex{OzTeX}%
\def\dvips{dvips}%
\def\dvitops{dvitops}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Provide the appropriate value to \DVITOPS before installation.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%\let\DVITOPS=\dvitops%
\let\DVITOPS=\dvips%
%%\let\DVITOPS=\oztex%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Debugging options.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\yes={yes}%
\def\no={no}%
\let\DEBUGepsf=\yes%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% \@doTeXspecial has to be extended in order to work
%%      with other VI2PS programs
%% OzTeX produces \special{<filename> <postscript to be added>}
%%       and we produce -<xmin> -<ymin> translate
%%                      <hscale> <vscale> scale
%%                      %%%% Added by ... (PostScript comment)
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{%
% #1 = filename
% #2 = xmin, #3 = ymin
% #4 = xmax, #5 = ymax
% #6 = hscale, #7 = vscale
% #8 = user postcript 
% \ifx\DEBUGepsf\yes
% \typeout{doTexSpecial #1 #2 #3 #4 #5 #6 #7 #8}
% \fi
%%%% Added by \DVITOPS\space PostScript inclusion (epsf.sty)
%
%\advance\@pshoffset by -3pt
%\catcode`\%=11
\newdimen\@pshscale\newdimen\@psvscale\newdimen\@pshoffset\newdimen\@psvoffset
\gdef\@doTeXspecial#1#2#3#4#5#6#7#8{%
\ifx\DVITOPS\oztex%
\special{#1\space#6\space#7\space scale\space-#2\space-#3\space translate\space#8\space}%
\else%
\ifx\DVITOPS\dvips%
\@pshscale=#6pt\@psvscale=#7pt
%%% Some dvips require a percentage. In this case, comment out the next line
\multiply\@pshscale by 100\multiply\@psvscale by 100%
\@pshoffset=-#6pt\multiply\@pshoffset by #2
%\advance\@pshoffset by -1pt%
\@psvoffset=-#7pt\multiply\@psvoffset by #3%
\special{psfile="#1"\space%
vscale=\expandafter\@numbof\the\@psvscale\space%
hoffset=\expandafter\@numbof\the\@pshoffset\space%
voffset=\expandafter\@numbof\the\@psvoffset\space% 
hscale=\expandafter\@numbof\the\@pshscale\space}%
\else%
\ifx\DVITOPS\dvitops%
\@pshscale=#6pt%
\@psvscale=#7pt%
\@pshoffset=-#6pt\multiply\@pshoffset by #2%
\@psvoffset=-#7pt\multiply\@psvoffset by #3%
\special{psfile="#1"\space%
hoffset=\expandafter\@numbof\the\@pshoffset\space%
voffset=\expandafter\@numbof\the\@psvoffset\space%
hscale=\expandafter\@numbof\the\@pshscale\space% 
vscale=\expandafter\@numbof\the\@psvscale}%
\else%
\let\DVITOPS=\dvitops%
\@doTeXspecial{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
\fi%
\fi%
\fi%
}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%%
%%  Following definitions should not be changed (except bug fixes)
%%
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Will change the catcodes of % when `parsing' header of EPS file
% The ``:'' character will be parsed as a space (catcode = 10)
\def\@setdrawingsyntax{\catcode`\%=11\catcode`\:=10\catcode`\!=11}%
%
% Need some counters and an input channel
\newread\@drawingchannel%
\newcount\@drawhsize%
\newcount\@drawvsize%
\newdimen\@xscale%
\newdimen\@yscale%
\newdimen\@vsize%
\newdimen\@hsize%
\newcount\@newvsize%
\newcount\@newhsize%
\newcount\@ovsize%
\newcount\@ohsize%
%
%
% \@scale <count> at <ratio> will multiply <count> by <ratio>
%         <ratio> must be <number>/<number> (big numbers may produce overflows)
\def\@scale#1at#2/#3{\divide#1 by #3\multiply#1 by #2}%
%
%
{\catcode`\.=12\catcode`\p=12\catcode`\t=12\gdef\@dimentocount#1.#2pt{#1}}%
%
{\catcode`\p=12\catcode`\t=12\gdef\@numbof#1pt{#1}}%
% \@drawingscale{p1}{q1}{p1}{q2} => xscale:=p1/q1, yscale:=p2/q2
\def\@scale#1at#2/#3{\divide#1 by #3\multiply#1 by #2}%
\def\@drawingscale#1#2#3#4{%
\@xscale=#1pt%
\divide\@xscale by #2%
\@yscale=#3pt\divide\@yscale by #4%
}%
%
% \firstitem<arg1> to<arg2> => arg1:=car(arg2); arg2:=cdr(arg2)
\def\firstitem#1to#2{\expandafter\makeseq#1\makeseq#1#2}%
\long\def\makeseq#1 #2\makeseq#3#4{\gdef#4{#1}\gdef#3{#2}}%
%%
%% The user function
%%       \epsf{<filename>}[xscale=p1/q1,yscale=p2/q2][ps=<postscript>]
%%   or  \epsf{<filename>}(hsize=w,vsize=h)[ps=<postscript>]
%% Two optional arguments. If second is needed, then the first one must be
%% present.
%%
\def\epsf#1{\leavevmode% Must leave vertical mode in order to execute \everypar
\@ifnextchar[{\s@epsf{#1}}%
{\@ifnextchar({\h@epsf{#1}}%
{\s@epsf{#1}[xscale=1/1,yscale=1/1]}}}%
%%
\def\s@epsf#1[xscale=#2/#3,yscale=#4/#5]{%
\@ifnextchar[{\scale@epsf{#1}[xscale={#2}/{#3},yscale={#4}/{#5}]}%
{\scale@epsf{#1}[xscale={#2}/{#3},yscale={#4}/{#5}][ps=\space]}}%
%
% More arguments to come?
\def\h@epsf#1(hsize=#2,vsize=#3){%
\@ifnextchar[{\dimen@epsf{#1}(hsize={#2},vsize={#3})}%
{\dimen@epsf{#1}(hsize={#2},vsize={#3})[ps=\space]}}%
%
% The main function (not user acessible)
%
%% Used to check wether we found the box or not
\newif\ifnosize
\begingroup
%%% Warning: comment character is & (and no more %)
\@setdrawingsyntax\catcode`\&=14
&&
&& What we will be looking for (`pt' is the supposed unit)
\gdef\BoundingBox{%%BoundingBox}&
&&
&&
\gdef\read@epsf#1{&
&& We accept PostScript and scales as optional parameters
\bgroup\@setdrawingsyntax
&& Change the code of %
\typeout{Opening #1}&     && Verbose!
\openin\@drawingchannel=#1
\ifeof\@drawingchannel\closein\@drawingchannel&&
\typeout{LaTeX warning: can't open #1.}&     && If no file, then ask the user
\typeout{Size of the drawing? }&             && the size of its drawing.
  \gdef\@minX{0}\gdef\@minY{0}&                  &&
  \gdef\@maxX{596}\gdef\@maxY{846}&
&  \message{X (in pts): }&
&  \read-1 to\mX\global\edef\@maxX{\mX}&
&  \message{Y (in pts): }&
&  \read-1 to\mY\global\edef\@maxY{\mY}&
\else                                          && Otherwise:
    \read\@drawingchannel to\@drsize& Skipping first line (%!PS-Adobe...)
  \loop                                        && repeat "get one line"
    \read\@drawingchannel to\@drsize&
\typeout{\space\space\space\space \@drsize}&& echo it to the terminal
    \firstitem\@drsize to\BBox&
    \ifx\BBox\BoundingBox&                      && First word =? Bounding Box
	  \nosizefalse&
          \firstitem\@drsize to\@minX&& If yes, then get the informations
	  \firstitem\@drsize to\@minY&& i.e. minX, minY, maxX and maxY
	  \firstitem\@drsize to\@maxX&& in that order
      \firstitem\@drsize to\@maxY&&
    \else\nosizetrue&&
	\fi
  \ifnosize\relax\repeat&&           && If no, then get one more line, etc.
\typeout{Closing}&               && Verbose!
  \closein\@drawingchannel&&
\fi
\egroup
}
&&
\gdef\scale@epsf#1[xscale=#2/#3,yscale=#4/#5][ps=#6]{&
\read@epsf{#1}&
\common@epsf{#1}[xscale=#2/#3,yscale=#4/#5][ps=#6]&
}
&
&
\gdef\dimen@epsf#1(hsize=#2,vsize=#3)[ps=#4]{&
\read@epsf{#1}&
\@newvsize=#3&
\@newhsize=#2&
&&
&& Computing vsize&
\@drawvsize=\@maxY&
\advance\@drawvsize by-\@minY&
\ifnum\@newvsize=0&                                 if  newvsize=0
\ifnum\@newhsize=0&                                     if newhsize=0
\common@epsf{#1}[xscale=1/1,yscale=1/1][ps=#4]&
\else&                                                  else
&& Computing hsize
\@drawhsize=\@maxX&
\advance\@drawhsize by-\@minX&
&&\ifnum\@newhsize=0&
\@ohsize=\@drawhsize&
\divide\@drawhsize by\@ohsize&
\multiply\@drawhsize by\@newhsize&
\multiply\@drawvsize by\@newhsize&
\divide\@drawvsize by\@ohsize&
\@drawingscale{\the\@newhsize}{\@ohsize}
{\the\@newhsize}{\@ohsize}&
\fi&                                                    fi
\else&                                                else
\@ovsize=\@drawvsize&
\divide\@drawvsize by\@ovsize&
\multiply\@drawvsize by\@newvsize&
&&
&& Computing hsize
\@newhsize=#2&
\@drawhsize=\@maxX&
\advance\@drawhsize by-\@minX&
\ifnum\@newhsize=0&                                     if newhsize=0
\multiply\@drawhsize by\@newvsize&
\divide\@drawhsize by\@ovsize&
\@drawingscale{\the\@newvsize}{\@ovsize}
{\the\@newvsize}{\@ovsize}&
\else&                                                  else
\@ohsize=\@drawhsize&
\divide\@drawhsize by\@ohsize&
\multiply\@drawhsize by\@newhsize&
\@drawingscale{\the\@newhsize}{\@ohsize}
{\the\@newvsize}{\@ovsize}&
\fi&                                                    fi
\fi&                                                  fi
&& Infos to the terminal.
\typeout{Drawing #1:}&
\typeout{\space\space\space Width=\the\@drawhsize pt  Heigth=\the\@drawvsize pt}&
&&
&&
&\@newhsize=\@drawhsize\multiply\@newhsize by \@xscale
&\@newvsize=\@drawvsize\multiply\@newvsize by \@yscale
\typeout{\space\space\space Scalings: X=\the\@xscale\space Y=\the\@yscale}&
&\fbox{&
\vbox to\@drawvsize pt{\vfill\hbox to\@drawhsize pt{&  
{{\@doTeXspecial{#1}\@minX\@minY\@maxX\@maxY&
        {\expandafter\@numbof\the\@xscale}&
		{\expandafter\@numbof\the\@yscale}&
		{#4}}&
&\hfill&
}}}}&
&}&
&
&
\gdef\common@epsf#1[xscale=#2/#3,yscale=#4/#5][ps=#6]{&
&& Computing hsize
\@drawhsize=\@maxX&
\advance\@drawhsize by-\@minX&
\@scale\@drawhsize at #2/#3&
&& Computing vsize
\@drawvsize=\@maxY&
\advance\@drawvsize by-\@minY&
\@scale\@drawvsize at #4/#5&
&& Infos to the terminal.
\typeout{Drawing #1:}&
\typeout{\space\space\space Width \the\@drawhsize pt=(\@maxX -\@minX)*(#2/#3)Heigth \the\@drawvsize pt=(\@maxY -\@minY)*(#4/#5)}&
&&
&\typeout{*********** #2 #3 #4 #5}&
\@drawingscale{#2}{#3}{#4}{#5}&
\typeout{\space\space\space Scalings: X=\the\@xscale\space Y=\the\@yscale}&
&&
&\fbox{&
\vbox to\@drawvsize pt{\vfill\hbox to\@drawhsize pt{&
{{\@doTeXspecial{#1}\@minX\@minY\@maxX\@maxY&
        {\expandafter\@numbof\the\@xscale}&
		{\expandafter\@numbof\the\@yscale}&
		{#6}}&
&\hfill&
}}}&
&}&
}
\endgroup
\catcode `@=12 %mort de la macro



\newcommand{\perm}{{\bf perm }}
\newcommand{\map}[1]{\mbox {\tt {#1}} }
\newcommand{\mapcl}[1]{\centerline{\mbox {\tt {#1}} }}
\begin{document}
\title{La librairie Maple \perm} 
\author{Yves Chiricota\\
        {\em LaBRI,} \\
        {\em Universit\'e Bordeaux I,}\\
        {\em 351, cours de la Lib\'eration,}\\
        {\em 33405, Talence, France}\\
        {\em e-mail:  chiricot@labri.u-bordeaux.fr}\\
} 
\date{1993}
\maketitle
\tableofcontents
\section{Introduction}
\indent La librarie \perm contient des programmes
dont la principale utilit\'e est la manipulation de
structures combinatoires et l'\'etude de repr\'esentations
ensemblistes des groupes symtriques $\Sn$. Certaines
proc\'edures servent \`a d\'efinir des structures
combinatoires (graphes, cycles, etc) et \`a les
manipuler. Il est entre autre possible de faire agir
une permutation sur une structure, de calculer le
stabilisateurs de celles-ci, etc. On retrouvera aussi
des proc\'edures effectuant certaines op\'erations dans les
groupes sym\'etriques $\Sn$ (groupes de permutations de
$\crochetn$).  Par exemple, une proc\'edure engendre
l'ensemble des permutations du sous-groupe $\greng{X}$,
o\`u $X \subset \Sn$. La librairie contient aussi une
proc\'edure qui permet de d\'eterminer si deux sous-groupes
sont conjugu\'es. De plus, nous avons impl\'ement\'e un
op\'erateur de multiplication dans l'alg\`ebre de $\Sn$. 

\section{Consid\'erations techniques}
Le chargement de la librairie en m\'emoire se fait de fa\c{c}on usuelle
avec la commande \map{with}. Il suffit d'\'ecrire \map{with(perm)}
pour l'appeler. Lors du chargement, un message est affich\'e
indiquant qu'une table a \'et\'e lue ou non. Cette table nomm\'ee
\map{tabsg} doit se trouver dans une des librairies d\'efinies par la
variable \map{libname}. C'est une table qui contient les
repr\'esentants des classes de conjugaison de sous-groupes du
groupe sym\'etrique $\Sym{7}$. La table doit \^etre cr\'ee et sauv\'ee par
l'utilisateur s'il ou elle d\'esire l'utiliser. 
Pour ce faire, une variable globale
nomm\'ee \map{`perm/tab\_gen`} contient des g\'en\'erateurs pour les~$96$
classes de conjugaisons de sous-groupes de $\Sym{7}$. Les
indices de cette table sont des noms r\'eserv\'es. La nomenclature
utilis\'ee pour d\'esigner les classes de conjugaisons est emprunt\'ee \`a
Wensley (voir~\cite{Wensley}). La cr\'eation de la table se fait comme
suit: 

\mapcl{tabsg:=gentabsg(op(`perm/tab\_gen`),7);}

Cette instruction  s'ex\'ecute en une dizaine de minutes sur un
Sparc-10.
Lorsque la table est cr\'ee, il suffit de la sauver dans un
des r\'epertoires sp\'ecifi\'e par la variable \map{libname}.

La lecture de \map{tabsg} se fait gr\^ace au processus
d'initialisation propre \`a Maple V.2. La lecture de cette table
n'aura donc pas lieu si l'on utilise une version de Maple ant\'erieure
\`a V.2. 

\section{Structures}
De fa\c{c}on informelle, une structure est une construction
sur un ensemble fini $U$. Dans notre cas, l'ensemble $U$ sous-jacent sera
sera toujours un sous-ensemble fini de $\N$. 
Par exemple, un graphe
sur $U$ est une structure. Les structures consid\'er\'ees ici sont
repr\'esentables par des classes lat\'erales de sous-groupes de $\Sn$.
C'est que nous consid\'erons celles-ci dans le contexte de
repr\'esentations ensembliste de $\Sn$. Toute action transitive de
$\Sn$ sur un ensemble $A$ (de structures) est isomorphe \`a une action
(par multiplication) sur les classes $\Sn / K$, o\`u $K$ est un
sous-groupe de $\Sn$. Si $a \in A$, il suffit de prendre 
$K:=\stab{a}$. Remarquons que si $b\in A$, alors $\stab{b}$ est
conjugu\'e \`a $\stab{a}$. Par ailleurs, il est bien connu que les
actions de $\Sn$ sur $\Sn / K$ et $\Sn / H$ sont isomorphes si et
seulement si $H$ et $K$ sont conjugu\'es. La repr\'esentation est donc
ind\'ependante du choix de $a$. Du point de vue de la th\'eorie des
groupes, les structures qui nous int\'eressent sont donc les classes
lat\'erales de $\Sn / K$, o\`u $K \le \Sn$.

Pour repr\'esenter un graphe non-orient\'e en
Maple, il suffit d'utiliser les ensembles (construits
avec ``\map{\{}" et ``\map{\}}"). L'ensemble
$\ensex{\ensex{1,2},\ensex{2,3},\ensex{3,4}}$ repr\'esente le
graphe de la figure~\ref{fig:graphe1}. 

\begin{figure}[hbt]
\begin{center}
\epsf{permgra1.ps}
\end{center}
\caption{Un graphe. \label{fig:graphe1}}
\end{figure}

On peut aussi utiliser les
listes pour repr\'esenter un graphe orient\'e. Le graphe orient\'e de
la figure~\ref{fig:cycle} est repr\'esent\'e par
$\ensex{[1,2],[2,3],[3,4],[4,1]}$. 

\begin{figure}[hbt]
\begin{center}
\epsf{permgra2.ps}
\end{center}
\caption{Un cycle. \label{fig:cycle}}
\end{figure}




Cette fa\c{c}on de proc\'eder donne la
possibilit\'e de repr\'esenter une vaste gamme de structures. Par
contre, certaines structures se repr\'esentent difficilement de
cette fa\c{c}on. C'est le cas, par exemple, des ensembles
orient\'es (voir~\cite{Joyal1,Jacques:petites,Yeh:these}). Un ensemble
orient\'e est un ensemble muni d'une orientation $+$ ou $-$. Le
stabilisateur de telles structures est conjugu\'e au groupe altern\'e
$A_n$. On pourrait toujours coder un ensemble orient\'e en donnant la
liste des \'el\'ements de $A_n$. Mais cette m\'ethode devient vite
inutilisable m\^eme lorsque $n$ est petit lorsque l'on d\'esire manipuler
effectivement les structures dans un environnement interactif
comme Maple. Il est par exemple difficile de voir qu'une structure
est un ensemble orient\'e (ou tout autre structure) directement \`a
partir de l'ensemble des permutations formant le stabilisateur.

Nous avons mis au point une version compacte de cette approche qui
consiste \`a utiliser une proc\'edure pour coder une structure. Cette
approche permet aussi de construire de nouvelles structures \`a
partir de celle existantes; on obtient alors de nouvelles
repr\'esentation ensemblistes de $\Sn$. Nous nommons {\em
p-structures} les structures d\'efinies au moyen d'une proc\'edure.
Une p-structure $s$ est d\'esign\'ee en Maple par un appel de la forme
$S(t_1,t_2,\ldots\, t_n)$ o\`u les $t_i$ sont des structures. Le
r\'esultat de l'appel sera $S(t_{i_1},t_{i_2},\ldots\, t_{i_n})$ o\`u
les $t_i$ seront permut\'es selon un syst\`eme de repr\'esentants des
classes lat\'erales de $\stab{s}$ dans $\Sn$. On trouvera
dans~\cite{yc:tcs93} une description d\'etaill\'ee des p-structures.
Certaines p-structures sont pr\'ed\'efinies dans la librairie (par
exemple les cycles (\map{C}) et les polygones (\map{P})). 
On dispose aussi d'un proc\'edure (\map{makestruct}) qui sert \`a
d\'efinir de nouvelles p-structures.

Donnons maintenant une d\'efinition pr\'ecise de ce qu'est une
structure dans le contexte de \perm. L'ensemble ${\cal S}$ des
{\em structure} est d\'efini inductivement comme suit:
\begin{itemize}  
\item Si $n\in\N$, alors $n\in {\cal S}$;
\item les p-structures sont des \'el\'ements de ${\cal S}$;
\item si $t_1,t_2,\ldots\,,t_k\in{\cal S}$,
        alors $[t_1,t_2,\ldots\,,t_k]\in{\cal S}$ et 
        $\ensex{t_1,t_2,\ldots\,,t_k}\in{\cal S}$;
\item si $t_1,t_2,\ldots\,,t_k\in{\cal S}$ et $S$ est une
p-structure, alors $S(t_1,t_2,\ldots\,,t_k)\in{\cal S}.$ 
\end{itemize}

De cette fa\c{c}on, il est possible de d\'ecrire une vaste gamme de
structures. Cette approche permet de d\'efinir de
nouvelles structures \`a partir de celle existantes. Par exemple,
l'appel {\map C(\{1,2\},\{4,5\},\{3,6\})} repr\'esente un cycle sur
trois \'el\'ements qui sont quant \`a eux des ensembles de
cardinalit\'e~$2$.

\section{Proc\'edures concernant les structures}
La librairie \perm offre un certain nombre de proc\'edure dont le
r\^ole est la cr\'eation et la manipulation de structures.

\subsection{Cr\'eation de p-structures}
\map{makestruct} -  Cette proc\'edure sert \`a cr\'eer une p-structure \`a
partir d'un stabilisateur (donn\'e sous la forme d'un ensemble de
permutation). \map{makestruct} cr\'e\'e une proc\'edure repr\'esentant la
p-structure. Par exemple,

\mapcl{makestruct(C3,\{[1,2,3],[2,3,1],[3,1,2]\})} 

cr\'ee une
proc\'edure \map{C3} qui repr\'esente un cycle sur trois points. Par
la suite, on peut utiliser \map{C3} dans des calculs, par
exemple 

\mapcl{stab(C3([2,3],[1,4],[5,6]))}

retourne le stabilisateur du cycle de trois couples donn\'e.

\noindent\map{regroup} -  Fait le regroupement de structure
relativement \`a un sous-groupe de $H\le\Sn$. \'Etant donn\'ee une
structure $s$ sur $\crochetn$, le regroupement de $s$ relativement
\`a $H$ est la structure $H.s \eqdef \ens{h.s}{h\in H}$ (o\`u $h.s$
d\'enote l'action de $h$ sur $s$ obtenue en renommant les points de
$s$). On montre que si $K\eqdef\stab{s}$ et $H$ commutent, alors le
stabilisateur de la structure $H.s$ est $HK$.

\noindent\map{C, P} -  Structures cycle et polygone.

\subsection{Manipulation de structures}
Les proc\'edures suivantes impl\'ementent diverses op\'erations sur les
structures. 

\noindent\map{ulset,ulcard} -  Retourne l'ensemble
sous-jacent $U$ \`a une structure et la cardinalit\'e de ce dernier.
L'ensemble $U$ doit \^etre un sous-ensemble de $\N$.

\noindent\map{genstruct} -  Engendre les structures formant
l'orbite d'une structure $s$.  

\noindent\map{action} -  Calcule l'action d'une permutation sur une
structure.

\noindent\map{stab,stabit} -  Calcul du stabilisateur d'une
structure.

\section{Permutations}
Les permutations sont donn\'ees sous la forme de liste. Par
exemple, \map{[2,3,1]} repr\'esente la permutation $1\mapsto 2, 2\mapsto
3, 3\mapsto 1$. 

\subsection{Op\'erations de base}

Les proc\'edures qui suivent impl\'ementent les op\'erations de base
(produit, conjugaison, etc) sur les permutations.

\noindent\map{conj} -  Conjugaison d'une permutation par un autre.

\noindent\map{inv} -  Calcul de l'inverse d'une permutation.

\noindent\map{prod} -  Effectue le produit de deux permutations. 

\noindent\map{sgn} -  Retourne le signe d'une permutation.

\subsection{Proc\'edure pour engendrer des sous-groupes}
Les proc\'edures d\'ecrites ici servent \`a engendrer des sous-groupes de
permutations.

\noindent\map{dihedral} -  Calcul du groupe di\'edral de
d'ordre $n$.

\noindent\map{gensg} -  Engendre un sous-groupe de $\Sn$ \`a partir
d'un ensemble fini de permutations.

\noindent\map{grcyc} -  Calcul du groupe cyclique engendr\'e par une
permutation.

\subsection{Orbites, types cyclique}
On retrouve ici des proc\'edure pour calculer
le type cyclique de permutations ainsi qu'\`a d\'eterminer les orbites
de sous-groupes de $\Sn$.

\noindent\map{ctype} -  Type cyclique d'une permutation. Le
type cyclique est retourne sous la forme d'une liste.

\noindent\map{cyc} -  Retourne le cycle (orbite) d'une
permutation auquel appartient un entier.
\noindent\map{decomp} -   D\'ecomposition d'une permutation (donn\'ee
sous la forme d'un mot) en cycle disjoints.

\noindent\map{orbits} -  Retourne l'ensemble form\'e des orbites d'un
sous-groupe de permutations.

\subsection{Statistiques, ordre lexicographique}
Les proc\'edures suivantes servent \`a calculer certaines
statistiques sur les permutations. On retrouve aussi des proc\'edures
pour comparer des permutations relativement \`a l'ordre
lexicographique.

\noindent\map{desc} -  Retourne les descentes d'une permutation
\map{p}. Les descentes sont les positions \map{i} telles que
\map{p[i]} $>$ \map{p[i+1]}.

\noindent\map{inversions} -  Retourne la liste des inversions d'une
permutation. Une inversion de \map{p} est un couple \map{[i,j]} tel
que \map{i} $<$ \map{j} et que \map{p[i]} $>$ \map{p[j]}.

\noindent\map{nextperm} -  Retourne la permutation qui suit une
permutation donn\'ee relativement \`a l'ordre lexicographique sur les
mots.

\noindent\map{minlex} -  Compare deux permutations relativement \`a
l'ordre lexicographique. 

\noindent\map{pmin} -  Retourne la plus petite permutation d'une
liste relativement \`a
l'ordre lexicographique.

\subsection{Divers}
\noindent\map{cllat} Retourne la classe
lat\'erale d'un sous-groupe de permutations.

\noindent\map{complete} -  Sert \`a ajuster la longueur d'une
permutation. Par exemple l'appel \map{complete([2,1,4,3],6)}
retournera \map{[2,1,4,3,5,6]}.

\noindent\map{Id} -  Permutation identit\'e.

\noindent\map{grconj} -  D\'etermine si deux sous-groupes de
permutations sont conjugu\'es.

\noindent\map{gentabsg} - Cette proc\'edure cr\'ee une table dont
chaque \'el\'ement est un sous-groupe engendr\'e \`a partir d'un ensemble
de g\'en\'erateurs contenu dans un autre table donn\'ee comme argument.

\section{Alg\`ebre de $\Sn$}
On retrouve ici deux proc\'edures servant \`a faire des calculs dans
l'alg\`ebre du groupe sym\'etrique $\Sn$. Les \'el\'ements de cette alg\`ebre
sont de la forme 
$$\sum\limits_{\sigma \in \Sn} {a_\sigma \sigma },$$ o\`u $a_\sigma$
est un scalaire dans un corps de base (par exemple, $\R$).
L'addition se fait terme \`a terme et la multiplication se fait en
utilisant le produit de permutation usuel.

\noindent\map{\&X} -  Effectue la multiplication de deux \'el\'ements
de l'alg\'ebre du groupe sym\'etrique $\Sn$.

\noindent\map{supp} -  Retourne le support d'un \'el\'ement $k$ de
l'alg\`ebre de $\Sn$. Le support consiste en les permutations
apparraissant dans $k$.

\begin{thebibliography}{9cm}
%
\bibitem[Ch]{yc:tcs93}	Chiricota,ŹY., Repr\'esentation des structures
en Maple, \`a para\^{i}tre dans {\em Theorical Computer Sciences}.
%
\bibitem[Ja1]{Joyal1} Joyal, A., Une
th\'{e}orie combinatoire des  s\'{e}ries formelles, {\em Adv. in
Math.}, {\bf 42}, 1981, 1-82. 
%
\bibitem[LJ1]{Jacques:applic} Labelle,  J., Applications diverses de
la th\'eorie  des esp\`eces de structures, {\em Ann.  Sc. Math. 
Qu\'ebec}, {\bf 7}, no. 1, 1983, 59-94.
%
\bibitem[LJ2]{Jacques:petites} Labelle,  J., Quelques esp\`eces sur les
ensembles de petite cardinalit\'e, {\em Ann.  Sc. Math.  Qu\'ebec},
{\bf 9}, no. 1, 1985, 31-58. 
%
\bibitem[Ro]{rotman} Rotman, J.J., An introduction to the theory of groups,
Allyn and Bacon, $3^e$ \'ed., Boston, 1984. 
%
\bibitem[We]{Wensley} Wensley, C. D., The supercharacter table of
the symmetric  group $\Sym{7}$, {\em U.C.N.W. Pure Maths Preprint
(preliminary version)}, Bangor (U.K.) 1983.
%
\bibitem[Ye1]{Yeh:these} Yeh,  Y.-N., On the combinatorial species of
Joyal, {\em Ph. D. Thesis}, State Univ. of New York at Buffalo (1985).
%
\end{thebibliography}

\end{document}
