\documentclass[12pt,a4paper]{article}
\usepackage{multicol}
\usepackage[french]{babel}
\newfont{\mini}{cmssi10 scaled 480}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\euro{\mbox{\textsf{C}\kern -2.33em{\raise0.24ex\vbox{\small\it =}}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fin{\nolinebreak \raise-0.1em\hbox{$\Box$}}
\def\stackunder#1#2{\mathrel{\mathop{#2}\limits_{#1}}}
\def\dual{ ^{\rm v}}
\def\bidual{ ^{\rm vv}}
\def\primedual{ ^{\prime \rm v}}
\def\ideal{{\cal J}}
\def\LL{{\cal L}}
\def\max{{\cal M}}
\def\quot#1#2{\mbox{\raise 0.1cm\hbox{$#1$}{\big /}\raise -0.1cm\hbox{$#2$}}}
\def\danger{{\Large \bf
    $\bigtriangleup$}\kern-0.32cm\raise0.05cm\hbox{\small
    !}\kern0.32cm\lower0.05cm\hbox{}}
%%%%%%%
\newlength{\largeurtmp}
\def\rela{\settoheight{\largeurtmp}{Z}{\rm Z} \kern -0.6\largeurtmp
  \raise 0.05cm\hbox{\tiny{\it /}}\kern 0.6\largeurtmp}
\def\petitrela{\settoheight{\largeurtmp}{Z}{\rm Z} \kern -0.4\largeurtmp
  \raise 0.05cm\hbox{\tiny{\it /}}\kern 0.4\largeurtmp}
\def\petitcomplex{{
    \settoheight{\largeurtmp}{$_C$}{\rm C}\kern -\largeurtmp
    \rule{0.25pt}{1.3\largeurtmp}\kern \largeurtmp}}
\def\complex{{
    \settoheight{\largeurtmp}{Q}{\rm C}\kern -0.66\largeurtmp
    \rule{0.25pt}{0.9\largeurtmp}\kern 0.66\largeurtmp}}
\def\ratio{{
    \settoheight{\largeurtmp}{C}{\rm Q}\kern -0.75\largeurtmp
    \rule{0.25pt}{0.9\largeurtmp}\kern 0.75\largeurtmp}}
\def\petitratio{{
    \settoheight{\largeurtmp}{C}{\rm Q}\kern -0.6\largeurtmp
    \rule{0.25pt}{0.6\largeurtmp}\kern 0.6\largeurtmp}}
\newcommand{\proj}{{\rm I} \! {\rm P}}
\newcommand{\reel}{{\rm I} \! {\rm R}}
\newcommand{\Fp}{{\rm I} \! {\rm F}_p}
\newcommand{\nat}{{\rm I} \! {\rm N}}
%%%%%%%%%%%%%%%Debut de macros de fiches d'exos
%%les macros sont \exo, \qu, \quskip \squ \qusqu \qusquskip
\newcounter{exo}
\newcounter{question}
\newlength{\lng}
\newcounter{sousquestion}
\setcounter{exo}{1}
\def\exo{

  \bigskip
  \noindent{\bf Exercice
    \Roman{exo}:}\addtocounter{exo}{1}\setcounter{question}{0}\nopagebreak 

  }
\def\exotitre#1{

  \bigskip
  \noindent{\bf Exercice
    \Roman{exo}: #1}\addtocounter{exo}{1}\setcounter{question}{0}\nopagebreak 

  }
\def\qu{

  \addtocounter{question}{1}\arabic{question})
  \setcounter{sousquestion}{1} }
\def\quskip{

  \bigskip
  \qu}
\def\squ{

  \settowidth{\lng}{\arabic{question})
  }\hspace{\the\lng}\alph{sousquestion}) \addtocounter{sousquestion}{1}} 
\def\qusqu{\qu\nopagebreak \vskip -1\baselineskip \squ}
\def\qusquskip{\quskip\nopagebreak \vskip -1\baselineskip \squ}

%%reference pour exos,squ \`a placer avant la question, qu est a placer apres
\def\labelexo#1{\expandafter\edef\csname refexo#1\endcsname {\Roman{exo}}}
\def\refexo#1{\csname refexo#1\endcsname}
\def\labelqu#1{\expandafter\edef\csname refqu#1\endcsname {\arabic{question})}}
\def\refqu#1{\csname refqu#1\endcsname}
\def\labelsqu#1{\expandafter\edef\csname refsqu#1\endcsname
  {\arabic{question}\alph{sousquestion})}} 
\def\refsqu#1{\csname refsqu#1\endcsname}  

%%%%%%%%%%fin de macros fiche d'exos
%%macros taille page
\newlength{\elargir}
\setlength{\elargir}{2.5cm}
\addtolength{\leftmargin}{-\elargir}
%%\addtolength{\hoffset}{-\elargir}
\addtolength{\oddsidemargin}{-\elargir}
\addtolength{\evensidemargin}{-\elargir}
\addtolength{\elargir}{\elargir}
\addtolength{\textwidth}{\elargir}
\addtolength{\textheight}{14\baselineskip}
\topmargin=-5.5\baselineskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        
\everymath={\displaystyle}
\begin{document}
\noindent{\bf Universit\'e de Paris 7 \hfill \framebox{\Large \bf
    \hspace{ 1cm} TP11 Anneaux principaux\hspace{1cm}}\hfill   agreg 2011 (F.Han\footnote{http://www.math.jussieu.fr/$\sim$han/agreg})}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\code#1{{\tt #1}}
%% 
\columnsep 0.7cm
\begin{multicols}{2}
% restart;maple_mode(0);cas_setup(0,0,0,1,0,1e-10,10,[1,50,0,25],0,0,0);//radians,pas de cmplx, pas de  Sqrt
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\def\M{{\cal M}}
\exo
\qu \'Etudier les fonctions graphiques de votre logiciel. Pour les options de
couleurs et les noms on pourra obtenir des syntaxes en cliquant, puis ajuster
les objets voulus en ligne de commande. Pour obtenir une description compl\`ete on   
regardera la documentation  dans l'aide html "les fonctions de la g\'eom\'etrie en
2D"  
\squ D\'essiner la droite passant par les points $(0,0)$, et $(3,4)$ en tirets
rouges, et celle passant par $(0,0)$ $(1,-1)$ en  bleu sur le m\^eme
graphique. (Astuce: On pourra travailler avec les nombres complexes)
%!s!<g>
% l1:= droite(0,3+4*(i),'couleur'=(rouge+point_width_5+dot_line));
% l2 := droite(0,1-i,'couleur'=bleu);
\squ D\'essiner 2 translat\'es des droites pr\'ec\'edentes par addition et les 4
intersections.
% E1:=[l1+1,l1+1-i]; E2:=[l2+2,l2+3];
% inter(E1,E2,couleur=(red+point_width_2));
%!s!
\squ Dessiner une liste de deux points. Par exemple $(1,1)$ et
$(2,3)$. En rouge avec nom cach\'e et grosse croix. Lorsque l'on souhaite donner
les m\^emes attributs g\'eom\'etriques \`a de nombreux objets, remarquez que l'on peut
stocker votre syntaxe d'affichage dans une variable, ou bien que l'on peut
cr\'eer une suite d'objets geometrique.
%!s!<g>
% af:='couleur'=(red+point_width_2+hidden_name); //on sauve les options dans af
% l:=[point(1+i,af),point([2,3],af)];
% A:=point(-2.098,1.039,'couleur'=(red+point_width_2+hidden_name))
% af:=objet->couleur(objet,blue+point_width_2+hidden_name)
% seq(af(point(ii,-1)),ii=-2..2);
% af(seq(point(ii,-2),ii=-2..2));
%!s!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{Anneaux d'entiers}
\qusqu On consid\`ere maintenant l'anneau $R=\rela[i.\sqrt{5}]$. et $I$
l'id\'eal engendr\'e par $2$ et $3+3i\sqrt{5}$. Donner une famille g\'en\'eratrice
de $I$ en tant que groupe ab\'elien. Quel est le cardinal de $R/I$ (On
appellera ce nombre la norme de l'id\'eal $I$).
% !s!<c>
%--------------------------------------------Exercice--------------------------------
% Famille generatrice de I comme Z module: les generateurs  et leurs multiples par Isqrt(5)
%!s!
% M:=transpose(matrix([[2,0],[3,3],[0,2],[-15,3]]));
% ismith(M);//Donc N(I)=2
\squ soit $z\in R$. Quelle est la matrice de la multiplication par $z$
de $R$ dans $R$? Quel est son d\'eterminant et le cardinal de $R/(z)$
(ie la norme de $z$). L'id\'eal $I$ est il principal?
\squ Dessiner sur un m\^eme graphique le r\'eseau associ\'e \`a $I$ et celui
de $\rela[i\sqrt{5}]$.
% Zl1:=[seq(couleur(droite(-10,10)+i*j*sqrt(5),red+dash_line),j=-10..10)]:;//les lignes du reseau.
% couleur(hidden_name); //On le met en global.
% Zc1:=[seq(couleur(droite(-10*i,10*i)+j,red+dash_line),j=-10..10)]:; //les colonnes du reseau.
% !s!<c>
% Pour le reseau associe a I on cherche d'abord une base de I comme Z module, soit avec ismith soit de tete par operation sur les colonnes de M
% !s!
% M:=matrix([[2,1],[0,1]]); //est une base de I
% Zl2:=[seq(couleur(droite(2*j-10-10*sqrt(5)*i,2*j+10+10*sqrt(5)*i),blue+dash_line),j=-10..10)]:;
% Zc2:=[seq(couleur(droite(-10+j+j*sqrt(5)*i,10+j+j*sqrt(5)*i),blue+dash_line),j=-10..10)]:;
% evalf(Zc1,Zl1,Zc2,Zl2);
\squ (En mode g\'eom\'etrie 2D). Dessinez un point $a$ \`a la souris. Ensuite dessinez l'image par la
multiplication par l'affixe de $a$ du r\'eseau (ou des droites associ\'ees dont les
intersections donnent le r\'eseau). On
dessinera ces droites en pointill\'es jaunes. D\'eplacez le point $a$ \`a la souris.
% Zisq5:=(Zc1,Zl1):;
%!s!<c>
% Pour illustrer que I n'est pas principal, on l'affiche en bleu et on affiche
% en vert les multiples du r\'eseau Z(i.sqrt(5)). Dans le menu mode on peut
% selectionner le mode pointeur, et en deplacant le point a on obtient tous les
% multiples de Z(i.sqrt(5)) par l'affixe de a. (similitude). Les 2 reseaux ne
% coincident jamais.
%!s!
% !s!<g>
% a:=point(1+i,affichage=blue+point_width_4);
% aZisq5:=affix(a)*[Zisq5]:;
% couleur(aZisq5,green);
% (Zc2,Zl2);
%!s!
\squ Completer:\\ Une similitude conserve les
\framebox{\phantom{angles}}. D\'eduire du dessin\footnote{On prendra
  garde au fait qu'il n'y a pas unicit\'e de la base} que $I$ n'est pas principal.
% !s!<c>
%Attention, le fait d'avoir dessiner des mailles est tendencieux, ca
%n'est pas par qu'un maillage n'est pas orthogonal qu'il n'en existe
%pas un autre orthogonal. Pour conclure correctement que $I$ n'est pas
%principal, il faut dire qu'on ne voit pas de rectangle d'aire 2
%semblable au rectangle de cot\'e 1 et sqrt(5)
%!s!
% !s!<c>
%-----------------------------------------------------------------------------------------------------
%!s!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{}
\qu Quelle est la bonne instruction pour calculer le pgcd de 2
entiers, 3 entiers, et celle de 2 polyn\^omes?
%gcd(6,3);//Attention, a priori pour lui c'est des polynomes, on a dela chance il les normalise bien.
%gcd(x*(x+3),2*x);
%igcd(4,6,8);
%% \qu Les majuscules et les minuscules en mode maple: essayer: \code{gcd(2*X,4*X);}
%%  \code{Gcd(2*X,4*X);} \verb/evala(Gcd(2*X,4*X));/
%%  \linebreak\verb/gcdex(2*x^3,9*x^2+x,x,'a','b');a;b;/ (o\`u $a$  
%% et $b$ sont des variables libres)
%% \qu L'int\'er\^et de ne pas \'evaluer tout de suite: \code{gcd(x+2,x) mod 2;}
%% et \code{Gcd(x+2,x) mod 2;}. Etudier la documentation sur le calcul
%% modulaire.
\qusqu Comment trouver le quotient et le reste d'une division  d'entiers?
Quel est le pgcd d'un entier avec $0$?
%iquo(13,6);igcd(6,0);  
\squ Pour les entiers: Quelle instruction permet de
r\'ecup\'erer un couples de bezout?
% [a,b,d]:=igcdex(4,15);//pour un couple de bezout:
% 4*a+15*b-d;
\qusqu Comment d\'etruire une ligne ou une colonne d'une matrice?
%delrows(matrix([[1,1],[2,3]]),0..0); //pour une colonne: delcols
\squ Quelle instruction permet de trouver une matrice diagonale $GL(\rela)$
\'equivalente \`a un \'el\'ement de ${\cal M}_n(\rela)$ donn\'e?
% A:=diag([3,6,18,36]);B:=matrix(4,4,(ii,jj)->rand(7)-3);det(B);
% ismith(A*B);
% !s!<c>
%------------------------------Exo recherche des facteurs invariants-----------------------------------------------------------------------
%!s!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{Matrices $GL(\rela)$-\'equivalentes}\footnote{$A\sim B \iff
  \exists P,Q \in GL(\rela),\  P^{-1}.A.Q=B$}
(Cf par exemple le\c con "op\'erations lignes/colonnes")
L'algorithme permettant d'obtenir les facteurs invariants: On le
fait sur $\rela$ ou dans le cadre Euclidien, car on n'a pas
d'algorithme pour obtenir les nombres de Bezout dans le cadre
principal.

Cet algorithme est d\'ej\`a programm\'e dans xcas sur $\rela$. (\code{ismith}) On
pourrait aussi le faire dans $k[x]$, mais nous nous limiterons ici \`a
$\rela$. Nous allons proc\'eder en quelques \'etapes.
1a) Trouver un minimum non nul (au sens du stathme) de la matrice. 1c) par
op\'erations lignes/colonnes on fait diminuer les autres coefficients de sa ligne et de
sa colonne. 2) On recommence 1a) et 1c) tant que c'est possible. lorsque l'on a
fini, le minimum n'a que des 0 sur sa ligne et sur sa colonne. On garde cette
valeur, on raye la ligne et la colonne, et l'on recommence avec la matrice plus
petite. On obtient alors une matrice diagonale \'equivalente (dans l'anneau) \`a la
matrice de d\'epart, ce qui est d\'ej\`a bien. 3) On peut passer de cette forme aux diviseurs \'el\'ementaires
par lemme chinois, ou en continuant l'algorithme de maniere un peu modifi\'ee.

\qu Dans les questions suivantes on notera $A_{i,j}$ le coefficient $A[i,j]$
d'une matrice impl\'ement\'ee dans votre logiciel. (ie les indices commencent \`a $0$
si vous \^etes en mode xcas).
\squ Faire une proc\'edure \code{minval} qui donne le couple $(i,j)$ tel que $A_{i,j}$
soit un coefficient de la matrice $A$ ayant la plus petite valeur absolue non
nulle. (Elle pourra \'eventuellement retourner $(-1,-1)$ si $A$ est la matrice nulle)
%!s!<p>
% minval:=proc(A)
% local m,u,v,i0,j0;
% m:=0;u:=-1;v:=-1;
% // NB: On retourne -1,-1 si A est nulle
% for(i0:=0; i0< dim(A)[0];i0++){
% for(j0:=0; j0< dim(A)[1];j0++){
% if ((abs(A[i0,j0])>0) and ((m=0) or (abs(A[i0,j0])<m))) then m:=abs(A[i0,j0]);u:=i0;v:=j0; end if;
% };
% };
% u,v;end proc;
%!s!
% A:=matrix([[6, 0, 7, 9], [6, 8, 6, 9], [3, 2, 4, 6], [3, 2, 3, 3]]);
%minval(A);
\squ Prendre\footnote{On s'entraine \`a la main sur un exemple, pour mieux faire
  la proc\'edure de la question suivante}  un exemple \`a coefficients entiers not\'e $A$. Rep\'erer son plus petit
coefficient non nul: $A_{i,j}$ en valeur absolue, et cr\'eer une matrice $U\in
GL(\rela)$ 
 telle que $(A.U)_{i,l}$ soit  le reste de la
 division de $A_{i,l}$ par $A_{i,j}$ pour $l\neq j$, et $(A.U)_{i,j}=A_{i,j}$.
% (i0,j0):=minval(A);
% U:=identity(4);
%!s!<c>
%normalement il faudrait faire bouger l dans {1..4} sauf j, c'est plus simple de
%ne pas mettre de test, et de corriger U[j,j] ensuite
%!s! 
% for l from 0 to 3 do U[j0,l]:=-iquo(A[i0,l],A[i0,j0]) od:;U[j0,j0]:=1:;U;
%A*U; 
\squ Faire une proc\'edure \code{trans(A,i,j)} qui pour une matrice $A$ telle que
$A_{i,j}\neq 0$ donne une matrice $A'$,
$GL(\rela)$-\'equivalente \`a $A$, telle que $\forall l\in\{1\dots n\}-\{j\}$,
$|A'_{i,l}|<|A_{i,j}|$ et $\forall l\in\{1\dots n\}-\{i\}$ $|A'_{l,j}|<|A_{i,j}|$.
%!s!<p>
% trans:=proc(A,i0,j0)
% local n,U,V,l;
% n:=dim(A)[0];
% U:=identity(n);
% V:=identity(n);
% for l from 0 to n-1 do
% V[l,i0]:=-iquo(A[l,j0],A[i0,j0]);
% od;
% //on corrige
% V[i0,i0]:=1;
% for l from 0 to n-1 do
% U[j0,l]:=-iquo(A[i0,l],A[i0,j0]);
% od;
% //on corrige
% U[j0,j0]:=1;
% V*A*U;
% end proc;
% !s!
% A:=matrix([[6, 1, 7, 9], [6, 8, 6, 9], [3, 1, 4, 6], [3, 2, 1, 3]]);
% trans(A,3,1);
\qusqu Essayer\footnote{Remarquer que la d\'ecroissance stricte oblige
  l'algorithme \`a se terminer, ce qui donne une preuve du r\'esultat
  suivant: Tout $\rela$-module de type fini se d\'ecompose en produit de
module monog\`enes. Du m\^eme genre: tout groupe ab\'elien fini est
isomorphe \`a un produit de groupe cyclique.} de programmer la partie qui trouve
une matrice diagonale $GL(\rela)$-\'equivalente \`a $A$. On appellera
cette proc\'edure \code{Zequiv}. (On remarquera qu'une matrice dont les
coefficients non nuls sont les seuls coefficients non nuls de leur
ligne et de leur colonne est \'equivalente  via des permutations \`a une
matrice diagonale. Dans notre proc\'edure on ne cherchera pas \`a trouver
cette permutation.)
%!s!<p>
% Zequiv:=proc(A)
% local k,n,l,B,i0,j0;
% k:=0;
% n:=dim(A)[1];
% l:=[seq(0,k=1..n)];
% B:=A;
% (i0,j0):=minval(B);
% //minval retourne les coordonnees du minimum non nul,
% //ou un couple impossible (Ex ici (-1,-1) en mode xcas) si B est nulle.
% while(([i0,j0]<>[-1,-1]) and size(B)>1)
% {
% // attention, ne pas oublier de declarer les variables locales
% // dans trans pour  eviter les melanges
% B:=trans(B,i0,j0);
% if [i0,j0]=[minval(B)] then
% // on n'a que des zeros sur la ligne i et la colonne j sauf
% // en (i,j) on sauve donc B[i0,j0] et on raye ligne et colonne.
% l[k]:=B[i0,j0]; k:=k+1;
% B:=delcols(B,j0..j0);
% B:=delrows(B,i0..i0);
% //le cas B de taille 1 pose probleme car on ne peut pas rayer
% //une colonne puis une ligne
% fi;
% // ASTUCE: voici comment assigner 2 valeurs d'un coup.
% (i0,j0):=minval(B);
% };
% // On a eventuellement change le signe du determinant
% diag([seq(l[k],k=0..n-2),B[0,0]]);
% end proc;
% !s!
% A:=matrix([[2,2,2],[6,12,6],[6,4,6]]); //Exemple:
% Zequiv(A);
% A[2,2]:=12:;A;
% Zequiv(A);
% !s!<c>
% On v\'erifie que A et Zequiv(A) ont bien meme forme de smith:
% !s!
% ismith(A)[1], ismith(Zequiv(A))[1];
\squ Obtient t'on forc\'ement les diviseurs \'el\'ementaires?
% !s!<c>
% Attention, on n'obtient pas forcement les diviseurs elementaires, par exemple:
% !s!
% A:=matrix([[4,0,0],[0,6,0],[0,0,8]]);
% ismith(A)[1];
% Zequiv(A);
\qusqu Dans le cas o\`u $A$ est une matrice du type $
\left(\begin{array}{ccc}
  d_1 & \dots & d_n\\
  0   & \ddots & 0\\
  0 & 0 & d_n
\end{array}\right)$ telle que $d_1$ soit un \'el\'ement de valeur absolue
minimale parmi les coefficients non nuls de $A$, quelle est la valeur du
minimum de la valeur absolue des coefficients non nuls de
\code{ZequivC(A)}? (O\`u \code{ZequivC} est une version de \code{Zequiv}
qui ne travaille que sur les colonnes. ie, on ne touche qu'\`a la
premi\`ere ligne) 
%!s!<c> 
% ca sera forc\'ement le pgcd(d_1,...,d_n) car  l'algorithme reste sur la premiere ligne.
%!s!
% f:=(ii,jj)->if (ii-jj)*(ii-1)=0 then 1 else 0 fi;
%matrix(3,3,f);A:=matrix(3,3,f)*A;Zequiv(A);
%!s!<c>
%On recopie trans et Zequiv pour qu'ils ne travaillent que sur les  colonnes
%!s!
%!s!<p>
% transC:=proc(A,i0,j0)
% //attention, si on ne met pas un local n, il modifiera la valeur de n dans ZequivC
% local n,U,l;
% n:=dim(A)[0];
% U:=identity(n);
% for l from 0 to n-1 do
% U[j0,l]:=-iquo(A[i0,l],A[i0,j0]);
% od;
% //pour ne pas mettre de test dans la boucle precedente, on n'ecarte pas l=j, mais on le on corrige ici:
% U[j0,j0]:=1;
% A*U;
% end proc;
% !s!
%!s!<p>
% ZequivC:=proc(A)
% k:=0;
% n:=dim(A)[0];
% l:=[seq(0,k=1..n)];
% B:=A;
% (i0,j0):=minval(B);
% while(([i0,j0]<>[-1,-1]) and size(B)>1)
% {
% // attention, ne pas oublier de declarer les variables locales dans trans pour  eviter les melanges
% B:=transC(B,i0,j0);
% if [i0,j0]=[minval(B)] then
% l[k]:=B[i0,j0]; k:=k+1;
% B:=delcols(B,j0..j0);
% B:=delrows(B,i0..i0);
% fi;
% // ASTUCE: voici comment assigner 2 valeurs d'un coup.
% (i0,j0):=minval(B);
% };
% // On a eventuellement change le signe du determinant
% diag([seq(l[k],k=0..n-2),B[0,0]]);
% end proc;
% !s!

\squ En d\'eduire que l'on peut obtenir les diviseurs \'el\'ementaires d'une
matrice diagonale de taille $n$ en appliquant au plus $n$ fois
\code{ZequivC(C)} \`a des matrices bien choisies. Cr\'eer une proc\'edure
\code{elem} qui le fasse.
%!s!<p>
% elem:=proc(A)
% n:=dim(A)[1];
% d:=Zequiv(A);
% L:=[];
% for(i0:=0;i0< n-1;i0++)
% {
%   T:=matrix(n-i0,n-i0,f);
% d:=ZequivC(T*d);
% L:=[op(L),d[0,0]];
% d:=delrows(delcols(d,0..0),0..0);
% };
% [op(L),d[0,0]];
% end proc;
%!s!
% A:=matrix([[2,2,2],[6,12,6],[6,4,12]]);
% elem(A);ismith(A)[1];
% elem(diag(4,6,16));ismith(diag(4,6,16))[1];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\labelexo{exemplesdivelem}
% !s!<c>
%--------------------------------------------Exercice--------------------------------
%!s!
\exo 
\qu On consid\`ere les sous groupes $N_1,N_2,N_3$ de $M=(\rela^4,+)$ engendr\'e par les
vecteurs $
\left(\begin {array}{cccc}
    8&4&60&0\\
    8&12&18&36\\
    16&16&32&32\\
    32&32&32&32
  \end {array} \right)$, et $
\left(\begin {array}{cccc}
    8&4&60&0\\
    8&12&18&36\\
    16&16&32&32\\
    24&28&40&68
  \end {array} \right)$, $
\left(\begin {array}{ccccc}
    8&4&60&0&16\\
    8&12&18&36&28\\
    16&16&32&32&32\\
    24&28&40&68&68
  \end {array} \right)$.  D\'ecomposer $M/N_i$ en produit de groupe
cycliques. Quel est le cardinal de $M/N_i$?
%!s!<m>
% cardi:=A->if det(A)=0 then print("cardinal infini") else
% abs(det(A)) fi;
%!s!
% A:=matrix([[2*4,4,15*4,0],[8,12,18,36],[16,16,32,32],[32,32,32,32]]);
% B:=ismith(A)[2];cardi(A);
%!s!<c>
% M/N=M/image(A) il est donc isomorphe a M/B ou B=ismith(A) le
% cardinal est donc infini s'il y a un 0 sur la diagnonale de B,
% sinon c'est le produit des termes diagonaux de B, donc aussi |detB|=|det A| (dans le cas d'une matrice carree)
%!s!
% abs(det(B)),abs(det(A)); //dans les 2 cas, c'est le cardinal.
% A:=matrix([[2*4,4,15*4,0],[8,12,18,36],[16,16,32,32],[24,28,50,68]]);
% ismith(A)[2]; cardi(A);
% A:=matrix([[2*4,4,15*4,0,16],[8,12,18,36,28],[16,16,32,32,32],[24,28,50,68,68]]);
% ismith(A)[2]; cardi(A);
\qu On consid\`ere le r\'eseau engendr\'e par les vecteurs $v_1=(1,2)$,
$v_2=(-1,1)$, $v_3=(0,2)$.
\squ Dessiner na\"\i vement en bleu les points de ce r\'eseau de coordonn\'ees dans $[-5,5]$
% v1:=[1,2];v2:=[-1,1];v3:=[0,2];
%!s!<c>
% On fait quelques combinaisons lineaires au hasard, ca serait mieux de trouver une base (on le fera plus dans l'exercice suivant)
%!s!
% l:=seq(seq(seq(couleur(point(ii*v1+j*v2+k*v3),blue+point_width_1+hidden_name),k=-5..5),j=-5..5),ii=-5..5):;
% ismith(transpose(matrix([v1,v2,v3]))); //le reseau engendre est bien Z^2
\squ Rajouter en rouge ceux du r\'eseau engendr\'e par $v_1,v_2$. idem
avec $v_1,v_3$ et $v_2,v_3$. Peut ont forc\'ement extraire une base d'une
famille g\'en\'eratrice?
%% l2:=seq(seq(couleur(point(ii*v1+jj*v2),red+point_width_2+hidden_name),jj=-4..4),ii=-3..3):;
% v1:=[1,i]*v1;v2:=[1,i]*v2;v3:=[1,i]*v3; //notation complexe plus pratique pour les dessins.
% d1:= [seq(droite(0,v1)+ii*v2,ii=-10..10)]:;
% d2:= [seq(droite(0,v2)+ii*v1,ii=-10..10)]:;
% l2:= couleur(inter(d1,d2),red+point_width_2+hidden_name):;
% (l,l2);// ca ne rempli pas tout
% !s!<c>
% aucun des 3 determinants (v1,v2) (v1,v3) (v2,v3) n'est inversible dans Z, on ne peut donc pas en extraire une base.
%!s!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{base adapt\'ee} Lorsque $M$ est un $\rela$-module de type fini et $N$ un sous
module de $M$, on dit que $e_1,\dots,e_n$ est une base adapt\'ee de $M$
pour $N$ si l'ensemble $\{m_1e_1,\dots,m_ne_n\}$ priv\'e de $0$ est une
base de $N$ o\`u les $(m_i)$ sont les diviseurs \'el\'ementaires de $N$
\'eventuellement compl\'etes par des z\'eros. Remarquer que si $N$ est
engendr\'e par l'image de $A$, pour trouver une base adapt\'ee il faut
avoir conserv\'e les op\'erations sur les lignes. En utilisant une
fonction int\'egr\'e dans le logiciel, trouver une base adapt\'ee aux
modules de l'exercice \refexo{exemplesdivelem}.
% !s!<c>
%--------------------------------------------Exercice--------------------------------
%!s!
% A:=matrix([[2*4,4,15*4,0],[8,12,18,36],[16,16,32,32],[32,32,32,32]]);
% (U,B,V):=ismith(A);
% (U*A*V-B);//verification.
% (U^(-1)),(U^(-1)*B);//est une base de M resp N;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{$k[x]$-modules de type fini}
\qu On consid\`ere la matrice sous forme de Jordan {\footnotesize$M=\left( \begin {array}{ccccccc} 1&1&0&0&0&0&0\\0&1&0&0&0&0&0\\0&0&0&1&0&0&0\\0&0&0&0&0
&0&0\\0&0&0&0&0&1&0\\0&0&0&0&0&0&1
\\0&0&0&0&0&0&0\end {array} \right)
$}. R\'epondre de t\^ete aux questions suivantes: Quel est son polyn\^ome
minimal, le polyn\^ome caract\'eristique? Les diviseurs \'el\'ementaires?
\qu En d\'eduire la forme de smith de $M-x.Id$, et v\'erifier votre
r\'eponse avec le logiciel. (On pourra chercher l'instruction pari pour
la forme de smith d'une matrice \`a coefficients polynomiaux. Cf Menu aide>Manuels>Pari-GP )
% !s!<c>
%--------------------------------------------Exercice--------------------------------
% !s!
%M:=matrix(7,7,(ii,jj)->if ii=jj-1 then 1 else 0 fi):;M[1,1]:=1:;M[2,2]:=1:;M[2,3]:=0:;M[4,5]:=0:;M;
% pari(); //on charge pari
% !s!<c>
% Dans pari l'instruction pour la forme de smith est matsnf. Ici il faut mettre l'option 2 pour preciser  que la matrice est a coefficients polynomiaux.
% !s!
% matsnf(M-x*identity(7),2); 


\newpage
\end{multicols}

\end{document}

