\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}{13\baselineskip}
\topmargin=-5\baselineskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        
\everymath={\displaystyle}
\begin{document}
\noindent{\bf Universit\'e de Paris 7 \hfill \framebox{\Large \bf
    \hspace{ 1cm} TP16: Codes; sur l'exemple du jury.\hspace{1cm}}\hfill   agreg 2007 (F.Han)}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\code#1{{\tt #1}}
%% 
\columnsep 0.7cm
\begin{multicols}{2}
  \exo Diff\'erentes fa\c cons de faire jouer le jury
  \qu Niveau 0: On rentre la r\'eponse \`a la main, ainsi que la matrice.
% interface(screenwidth=120);
% with(LinearAlgebra);
% #with(Modular);
% # pour pouvoir faire Mod d'une matrice. Pb ca n'existe pas avec maple7
% # pour maple7 on recree Mod, k ne sert que pour etre compatible avec
% # le Mod demaple9
% Mod:=proc(n,A,k)
% B:=Dimensions(A);
% if nops([B])=1 then Vector(B,i->A[i] mod n) else  
% Matrix(B,(i,j)->A[i,j] mod n) fi
% end proc;
% #jeu1 du  jury   
% m:=Vector(7,0);
% # ou bien m:=Matrix(7,1,0); et on rentre m[k,1]:= 
% H:=Matrix([[1,0,1,0,1,0,1],[0,1,1,0,0,1,1],[0,0,0,1,1,1,1]]);
% # entrer les valeurs non nulles (1=oui) selon les reponses Ex: m[1]:=1;  
% m[1]:=1;m[4]:=1;m[7]:=1;
% w:=Mod(2,H.m,integer);#ok avec maple9
% k:=4*w[3]+2*w[2]+w[1];
% if k<>0 then print("menti a la question:",k);m[k]:=m[k]+1 mod 2   else
% print("pas menti"); fi: 
% r:=m[4]+m[3]*2+m[2]*4+m[1]*8:print("votre nombre est:",r); 
% #le meme dans une procedure:
% #m est le vecteur reponse: 1 pour oui a la question
% jeu:=proc(m)
% H:=Matrix([[1,0,1,0,1,0,1],[0,1,1,0,0,1,1],[0,0,0,1,1,1,1]]);
% w:=Mod(2,H.m,integer);
% k:=4*w[3]+2*w[2]+w[1];
% if k<>0 then print("menti a la question:",k);m[k]:=m[k]+1 mod 2   else
% print("pas menti"); fi: 
% r:=m[4]+m[3]*2+m[2]*4+m[1]*8:print("votre nombre est:",r);
% end proc;  
\qu Quel paquet faut il charger pour travailler avec des matrices
modulo $2$? (Attention, \code{Mod} d'une matrice n'existe
  pas sous maple7, il vaut donc mieux le reprogrammer) 
%% #with(Modular);
%% # pour pouvoir faire Mod d'une matrice. Pb ca n'existe pas avec maple7
%% # pour maple7 on recree Mod, k ne sert que pour etre compatible avec
%% # le Mod demaple9
\qu Am\'eliorations:
\squ Cr\'eation
 de  $H$ automatiquement en remarquant que les colonnes sont les
 chiffres de $1$ \`a $8$  en base $2$.
% f:=(i,j)->floor(j/2^(i-1)) mod 2;
% H:=Matrix(3,7,f);
\qusqu Comment trouver un noyau modulo 2? Comment r\'esoudre un syst\`eme
affine modulo 2. 
% #On trouve une famille generatrice du code:
% noyau:=Nullspace(H) mod 2;
% #On converti le resultat en une matrice.
% C:=Matrix(convert(noyau,list));
% #On verifie:
% Mod(2,H.C,integer);
\squ comment obtenir  $(x,y)$ (autrement dit \code[3,1]) \`a
partir de \verb/{y=1,x=3}/? Comment \'evaluer les param\`etres des
solutions d'un syst\`eme?
% subs({y=1,x=3},[x,y]);
%#Nullspace,Linsolve() mod 2,subs
\squ Cr\'eer une proc\'edure \code{syst(k)} qui cr\'ee une  matrice $4\times
7$ obtenue \`a partir de $H$ en rajoutant une ligne ayant $1$ sur la
colonne $k$ et $0$ ailleurs. 
% f:=(i,j)->if i=j then 1  else 0 fi;
% #On insere H dans une matrice plus  grande.
% syst:=proc(i)
% HE:=Matrix(4,3,f).H;
% HE[4,i]:=1;
% HE;
% end proc;
\squ Que remarquez vous lorsque l'on fait
\verb/Linsolve(syst(k),Vector([0,0,0,1])) mod 2;/ pour $k=1$ et $k=4$?
\squ Cr\'eer une proc\'edure \code{sol(k)} qui retourne les solutions de
\code{syst(k)} mais cette fois param\'et\'ees par \verb/_t[1],_t[2],_t[3]/
% sol:=proc(k)
% j:=1;
% X:=Linsolve(syst(k),Vector([0,0,0,1])) mod 2;
% for i from 1 to 7 do if (X<>subs(_t[i]=0,X)) then X:=subs(_t[i]=_t[j],X);
% j:=j+1; fi; od;
% X;
% end proc;
\squ Cr\'eation des questions (ie des listes) automatiquement. 
% #oui a la question k veut dire etre dans le code et m[i]=1, donc etre solution de syst(k)
% S:=Linsolve(syst(3),Vector([0,0,0,1])) mod 2;
% Mod(2, subs({_t[5]=1,_t[6]=0,_t[7]=0}, S),integer);
% question:=proc(k)
% S:=sol(k);
% f:=(a,b,c)->Mod(2, subs({_t[1]=a,_t[2]=b,_t[3]=c}, S),integer);
%# [1] pour retirer les []
% l:=seq(seq(seq((Matrix([[8,4,2,1,0,0,0]]).f(a,b,c))[1],a=0..1),b=0..1),c=0..1);
% sort([l]);
% end proc;
% for k from 1 to 7 do print("est il dans",question(k));od;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\squ pour \'eviter les \verb/seq(seq(seq/ cr\'eer une proc\'edure qui
retourne le produit de 2 listes, et une qui retourne la puissance
nieme:
% prodlist:=(E,F)->[seq(seq([i,j],j=F),i=E)];
% powerlist:=proc(E,n)
%  if n=0 then [[]] else
%  aa:=prodlist(E,powerlist(E,n-1)) ; map(a->[a[1],op(a[2])],aa) fi
%  end proc;
%  # pour enlever les [] faire op
% 
% questionbis:=proc(k)
% S:=sol(k);
% L:=powerlist([0,1],3);
% f:=(a,b,c)->Mod(2, subs({_t[1]=a,_t[2]=b,_t[3]=c},S),integer);
% # [1] pour retirer les []
% l:=seq((Matrix([[8,4,2,1,0,0,0]]).f(op(A)))[1],A=L);
% sort([l]);
% end proc;
% for k from 1 to 7 do print("est il dans",questionbis(k));od;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\exo
\qu Expliquer pourquoi on ne travaille pas modulo $4$?
\newcommand{\F}{{\rm I} \! {\rm F}}
\qu G\'en\'eraliser l'exemple? Etudier une g\'en\'eralisation sur $\F_4$?
\squ Cr\'eer une liste de tous les \'el\'ements de $\F_4$:
\verb/l:={0,1,j,1+j};/
% l:={0,1,j,1+j};
\squ Cr\'eer tous les vecteurs de $\F_4^2$
% # Attention, si on a charge Modular, Transpose est modifiee, faire alors:
% #Transpose(2,Matrix([seq(seq([u,v],v=l),u=l)]));
% Transpose(Matrix([seq(seq([u,v],v=l),u=l)]));
\squ Donner un vecteur directeur de chaque droite
vectorielle de $\F_4^2$ puis un vecteur directeur de chaque droite
vectorielle de $\F_4^3$. On notera $H4$ la matrice $3\times 21$ associ\'ee. 
% Hb:='Hb';
% Hb:=Matrix([[0,seq(1,i=l)],[1,seq(i,i=l)]]);
% f:=(i,j)->if (i=j+1) then 1 else 0 fi;
% T:=Matrix(3,2,f);
% A:=convert(Transpose(T.Hb),listlist);
% op(A);
% # la generalisation du code sur F4 est le noyau de:
% H4:=Transpose(Matrix([op(A),seq(seq([1,u,v],v=l),u=l)]));
%%\squ  Trouver le noyau de $H4$.
% #Pb Comment trouver un noyau dans F4
% Nullspace(H4) mod 2;#on a de la chance, ca donne bien 18 vecteurs du noyau, mais on n'est pas sur que la famille est libre sur F4, il faudrait verifier que ses facteurs invariants ne sont pas divisibles par j^2+j+1 
\newpage
\end{multicols}

\end{document}
