 restart;maple_mode(1);cas_setup(0,0,0,1,0,1e-10,10,[1,50,0,25],0,0,0); #radians,pas de cmplx, pas de  Sqrt
/* -----------------------------------------------Exercice-----------------------------------*/
/*  Essayons (1,1) (1,0) (2,1). C'est l'ensemble des points annulant les elements de I.*/
q1:=(x+y-1)*(y-1);q2:=(x-y-1)*(x-1);q3:=(x-1)*(y-1); #Les coniques contenant les 3 points.
I1:=[q1,q2,q3]; #l'ideal des 3 points.
 I2:=[q1^2,q1*q2,q2^2,q3^2,q2*q3,q1*q3]; #le carr\'e de l'id\'eal I1.
P:=normal(([1,2,-3,0,-5,6]*transpose(I2))[1]-q2^2);
factor(P);
/* P est irreductible sur Q, mais on ne le sait pas sur C. En revanche, le£dessin suivant ne ressemble ni a la reunion de 2 coniques, ni a la reunion£d'une droite et d'une cubique. P est donc bien irreductible sur C. */
DP:=implicitplot(P,x=-1..4,y=-4..4,xstep=0.01,ystep=0.01,couleur=blue+line_width_3):
/*  On trouve 2 element de I1 de degre 2 sans terme constant.*/
 C1:=q1-q2;
 C2:=q1-q3;
/* Une conique passant par (0,0) et les 3 autres points coupe la quartique en£(0,0) et deux fois les 3 autres points. Ceci se voit sur le resultant. IL y a£un facteur de degre 5 qui ne depend pas de la conique passant par ces 4 points,£et dont les racines sont les projections des 4 points avec multiplicit\'ees.  */
 factor(gcd(resultant(P,C1,y),resultant(P,C2,y)));
 quo(resultant(P,C1,y),x*(x-2)^2*(x-1)^4,x);
 quo(resultant(P,C2,y),x*(x-2)^2*(x-1)^4,x);
 dernierfacteurx:=quo(resultant(P,C1+t*C2,y),x*(x-2)^2*(x-1)^4,x);
 xt:=solve(dernierfacteurx,x);
/*  On peut ne pas avoir de chance avec les 2 coniques choisies, ici le pgcd est£ de degre 8 , et pas 7,*/
 factor(gcd(resultant(P,C1,x),resultant(P,C2,x)));
/* Mais en prenant  une combinaison lineaire generale on voit le facteur£correspondant aux 1+3*2 racines deja connues, On simplifie donc par ce polynome£de degre 7. */
 factor(resultant(P,C1+t*C2,x));
 dernierfacteury:=quo(resultant(P,C1+t*C2,x),y^3*(y-1)^4,y);
 yt:=solve(dernierfacteury,y);
/* On verifie graphiquement la parametrisation.*/
 paramplot(xt+I*yt,t=-75..75,tstep=0.01);
/* ----------------------------Exercice---------------------------------------------*/
 P:=x^4+x+1;
A:=1/d*add(a[i]*x^i,i=0..degree(P)-1);
H:=d*A;
M:=matrix([seq([seq(coeff(rem(A*x^i,P,x),x,j),i=0..degree(P)-1)],j=0..degree(P)-1)]);
M:=matrix(4,4,(i,j)->coeff(rem(A*x^(j-1),P),x,i-1)); #c'est plus simple
cp:=charpoly(M,x):
res:=resultant(subs(x=y,P),d*x-subs(x=y,H),y): #attention re est un mot reserve
/* le poly caract est 1/d^(deg P) * resultant: verification:*/
normal(d^(degree(P))*cp-res); #ils sont bien egaux
 P:=x^4+1;
 A:=x^2:H:=A;
 M:=matrix([seq([seq(coeff(rem(A*x^i,P,x),x,j),i=0..degree(P)-1)],j=0..degree(P)-1)]);
cp:=charpoly(M,x):
res:=resultant(subs(x=y,P),x-subs(x=y,H),y):
/* le poly caract est 1/d^(deg P) * resultant: verification:*/
normal(cp-res);
/* le poly min est une puissance de:*/
 gcd(res,diff(res,x));
 pmin(M,x);#ils sont egaux.
