UNIVERSITA' DEGLI STUDI DI REGGIO CALABRIA FACOLTA' DI INGEGNERIA Dipartimento di Informatica Matematica Elettronica e Trasporti QD-SD 01/04 Algebra computazionale Giancarlo Rinaldo QUADERNI DI DIPARTIMENTO Serie didattica Feo di Vito - 89100 Reggio Calabria - Italy 1 ALGEBRA COMPUTAZIONALE Giancarlo Rinaldo Sommario In questo lavoro si descrivono alcuni tra gli algoritmi piu noti di algebra commutativa e se ne mostra la traduzione in codice scritto in CoCoA (vedi [3]) da parte dell'autore. Tali procedure sono state utilizzate nei laboratori tenuti nei corsi di algebra computazionale. Abstract In this work we describe some known algorithms of commutative algebra and we show a translation in CoCoA code (see [3]) written from the author. These procedures have been used for practical exercise in computational algebra lectures. 2 Introduzione Sia R l'anello dei polinomi su un campo k, ad esempio il campo R dei numeri reali o il campo C dei numeri complessi, k[x1 ; : : : ; xn ] e I un ideale dell'anello R. Nel caso in cui l'anello ha una sola indeterminata, n = 1, esiste il ben noto algoritmo di divisione euclidea che ci dice : 1) Ogni ideale di R e principale; 2) per ogni polinomio in R il suo rappresentante standard in R=I e dato dal resto della divisione euclidea. Per problemi analoghi ai suddetti nel caso n > 1 per una risposta esauriente si deve attendere il 1965, quando B. Buchberger (vedi [2]) da una generalizzazione all'algoritmo di divisione euclidea e ssato un ordine sui monomi riesce a calcolare l'ideale iniziale di un ideale dato. In tal modo risolvendo nel caso n > 1 il problema di dare un unico rappresentante, per ogni insieme di polinomi congrui modulo I , detto rappresentante standard in R=I . Le applicazioni di tale teoria sono svariate. Eccone alcuni esempi: risoluzione di sistemi algebrici non lineari, eliminazione di variabili da un sistema di polinomi, calcolo della risoluzione proiettiva di un ideale o un modulo, etc. Nel nostro articolo abbiamo incentrato la nostra attenzione al problema della colorazione dei gra (vedi [1]). Sia G un grafo connesso avente nv vertici e siano dati nc colori. Si vuole conoscere se e possibile o meno colorare il grafo, assegnando ad ogni vertice un colore evitando di dare colore uguale a vertici adiacenti. Nel nostro articolo si mostrera lo sviluppo di codice relativo ai suddetti problemi, traducendo gli algoritmi noti in CoCoA 4.2 (vedi [3]), essendo quest'ultimo un sistema per il calcolo nell'ambito dell'algebra commutativa. Per un riferimento sull'uso di tale sistema si veda [6], e il manuale in linea. 3 1 Divisione euclidea Sia R = k[x], anello dei polinomi in una indeterminata su un campo di caratteristica qualsiasi. Denizione 1 Deniamo per ogni polinomio f 2 R le funzioni 1. Deg : R 7! N, che calcola il grado del monomio direttore del polinomio, cioe del massimo esponente della x che appare in f ; 2. LM : R 7! R, che calcola il monomio direttore del polinomio; 3. LC : R nomio; 7! k, che calcola il coeciete del monomio direttore del poli- 4. LT : R 7! R, che calcola il monomio direttore con coeciente 1. Esempio 1 Sia f 2 R, f = a0xn + a1xn 1 + + an , si ha: Deg(f ) = n LM (f ) = a0 xn LC (f ) = a0 LT (f ) = xn Possiamo ora enunciare il classico: Teorema 1 (Algoritmo della divisione) Sia k un campo, g un polinomio non nullo in R = k[x]. Allora ogni polinomio f 2 R puo essere scritto unicamente come f = gq + r dove q; r 2 R, e o r = 0 o Deg (r) < Deg(g). Da questo segue immediatemente: Corollario 1 Sia R = k[x], anello dei polinomi in una indeterminata su un campo di caratteristica qualsiasi. Ogni ideale I R e generato da un solo elemento unico a meno di una costante non nulla. 4 Dimostrazione : Se I = (0) e banale. Viceversa sia f 2 I di grado minimo. Dimostriamo che I = (f ), tramite la doppia inclusione. (f ) I e ovvio. I (f ). Sia g 2 I per il teorema precedente g = qf + r con r = 0 o di grado Deg (r) < Deg (f ). r = g fq 2 I dunque r 2 I che contraddice la scelta di f di grado minimo. Dunque r = 0 e g e un multiplo di f . L'implementazione dell'algoritmo euclideo in CoCoA e il seguente (vedi [1], Algorithm 1.3.1 per una presentazione in metalinguaggio): Define Divisione(F,G,Var Q,Var Resto); Q:=0; Resto:=F; While Resto<>0 And Deg(G)<=Deg(Resto) Do Q:=Q+LM(Resto)/LM(G); Resto:=Resto-(LM(Resto)/LM(G))*G; End; End; Osservazione 1 Gli argomenti della funzione Divisione sono 4: F; G sono argomenti in Input, Q; Resto, modicati all'interno della funzione in Output. Ovviamente alla ne del processo si avra: F = GQ + Resto: All'interno della funzione il ciclo W hile itera il processo di divisione, nche non accade uno dei seguenti eventi: 1. Il resto della divisione diventa 0; 2. Il grado di G e maggiore del grado di Resto, o equivalentemente il monomio direttore di G non divide il monomio direttore del Resto; Se nessuno dei 2 eventi si verica si incrementa il valore di Q e decrementa il resto come noto nell'algoritmo della divisione. Ecco un esempio in CoCoA dell'utilizzo della funzione Divisione: Esempio 2 Use R::=Q[x]; F:=x^3+1; G:=x+1; 5 Resto:=0; Q:=0; Divisione(F,G,Q,Resto); Q; Resto; -------------------------------- Risultato in Output ------------------------------x^2 - x + 1 ------------------------------0 ------------------------------- 6 2 Divisione in R = [ k x1 ; : : : ; x n ] Sia R = k[x1 ; : : : ; xn ], anello dei polinomi in n indeterminate su un campo di caratteristica qualsiasi. Osservazione 2 Se per n = 1 il monomio direttore e univocamente determinato come il monomio di grado massimo nell'unica indeterminata x, per n > 1 abbiamo piu ordinamenti possibili, dunque anche piu monomi direttori. Denizione 2 Un ordine monomiale e una relazione > sull'insieme di monomi x , 2 N n , che soddis: 1) > e un ordine totale su Nn ; 2) Se > e 2 Nn , allora + > + ; 3) > e un buon ordinamento, cioe ogni sottoinsieme non vuoto di Nn ha un elemento minimo rispetto a >. Di seguito si deniscono i 3 ordini monomiali piu utilizzati: P P Denizione 3 Siano = (1 ; : : : ; n ), = (1 ; : : : ; n ) n n i=1 i , j j = i=1 i . 2 Nn, e jj = Lexicographic order: Si dice che >lex , se il vettore dierenza 2 Nn ha l'entrata piu a sinistra non nulla, positiva. Graded Lexicographic order: Si dice che >grlex , se jj > jbetaj , oppure jj = j j e >lex . Graded Reverse Lexicographic order: Si dice che >grlex , se jj > j j , oppure jj = j j e nel vettore dierenza 2 Nn l'entrata piu a destra non nulla e negativa. Esempio 3 Sia f = xy2 z + z 2 + x3 + x2 z 2 riordinino i termini rispetto agli ordini: 2 k[x; y; z]. Si osservi come si Lexicographic: x3 + x2 z 2 + xy2 z + z 2 . Graded Lexicographic: x2 z 2 + xy2 z + x3 + z 2 . Graded Reverse Lexicographic: xy2 z + x2 z 2 + x3 + z 2 . Denizione 4 Deniamo per ogni f 2 R la funzione Log(f ) : R 7! Nn che calcola il multigrado, ossia il vettore degli esponenti, del monomio direttore del polinomio. 7 Teorema 2 (Algoritmo della divisione in piu variabili) Sia ssato un ordine monomiale > su Nn e F = (f1 ; : : : ; fs ) una s-upla di polinomi in R. Allora ogni f 2 R puo essere scritto come f = a1 f1 + + as fs + r dove o r = 0 o r e una combinazione lineare di monomi, con coecienti in k, nessuno dei quali e divisibile da LM (f1 ); : : : ; LM (fs ). Noi chiameremo r il resto di f diviso da F . Inoltre, se ai fi 6= 0, allora abbiamo Log(f ) Log(ai fi ) L'implementazione dell'algoritmo di divisione in piu variabil in CoCoA e il seguente (vedi [1], Algorithm 1.5.1 per una presentazione in metalinguaggio): Define Divisione(F,Var A,G,Var Resto); Nr:=Len(F); Pr:=G; While Pr<>0 Do I:=1; Diviso:=FALSE; While I<=Nr And Not Diviso Do If Divide(LT(F[I]),LT(Pr)) Then A[I]:=A[I]+LM(Pr)/LM(F[I]); Pr:=Pr-(LM(Pr)/LM(F[I]))*F[I]; Diviso:=TRUE; PrintLn(A[I]); Else I:=I+1; End; End; If Not Diviso Then Resto:=Resto+LM(Pr); Pr:=Pr-LM(Pr); End; End; End; Osservazione 3 Gli argomenti della funzione Divisione sono 4: F; G sono argomenti in Input, A; Resto, modicati all'interno della funzione in Output. Ovviamente alla ne del processo si avra: G = A[1]F [1] + A[Nr]F [Nr] + Resto: 8 dove Nr e una variabile interna alla funzione che indica la lunghezza del vettore F dei divisori e dunque anche dei quozienti A. Si puo osservare inoltre la variabile interna P r che contiene il resto temporaneo, che e l'intero polinomio G all'inizio del processo e che diventa 0 alla dello stesso, e la variabile booleana Diviso che viene messa true se nell'iterazione e stata eettuata una divisione . E appunto il ciclo W hile piu esterno che controlla P r a iterare il processo di divisione. P r viene decrementato in 2 casi: 1. Dal ciclo W hile piu interno se uno dei divisori F [I ] ha LM (F [I ]) che divide LM (P r), nel qual caso viene anche incrementato il quoziente A[I ] e viene messo aggiornato il valore di Diviso a "True". 2. Quando si e usciti dal ciclo W hile piu interno senza aver fatto alcuna divisione, con il valore di Diviso uguale a "False", nel qual caso viene anche incrementata la variabile Resto. In particolare la funzione che controlla se il monomio M 1 divide il monomio M 2 e denita dal segunte codice: Define Divide(M1,M2); L1:=Log(M1); L2:=Log(M2); Divisibile:=TRUE; I:=1; While I<=Len(L1) And Divisibile Do If L1[I]>L2[I] Then Divisibile:=FALSE; End; I:=I+1; End; Return Divisibile; End; Ecco un esempio in CoCoA dell'utilizzo della funzione Divisione: Esempio 4 Use R::=Q[x,y], Lex; F:=NewList(2,0); A:=NewList(2,0); F[1]:=xy-1; 9 F[2]:=y^2-1; G:=xy^2-x; Resto:=0; Divisione(F,A,G,Resto); A; Resto; -------------------------------- Risultato -----------------------------[y, 0] -------------------------------x + y ------------------------------A[1]:=0; A[2]:=0; F[1]:=y^2-1; F[2]:=xy-1; Resto:=0; Divisione(F,A,G,Resto); A; Resto; -------------------------------- Risultato in Output ------------------------------[x, 0] ------------------------------0 ------------------------------- Si osservi come, invertendo l'ordine dei divisori, cambiano sia quozienti che resto. 10 3 Base di Groebner e algoritmo di Buchberger Sia R = k[x1 ; : : : ; xn ], anello dei polinomi in n indeterminate su un campo di caratteristica qualsiasi, ed I un suo ideale. Denizione 5 Sia ssato un ordine monomiale. Un sottoinsieme nito G = fg1; : : : ; gsg di un ideale I e detto base di Groebner se LT (I ) = (LT (g1 ); : : : ; LT (gs )): Una notevole proprieta, per ogni base di Groebner G, che estende proriamente il caso dell'algoritmo euclideo, e che il resto delle divisione tramite G e unicamente determinato, ovviando al problema osservato nell'esempio 4. Infatti: Proposizione 1 Sia G = fg1 ; : : : ; gs g una base di Groebner per l'ideale I R e sia f 2 R. Allora esiste un unico r 2 R che soddis le seguenti proprieta: 1) Nessun monomio di r e divisibile da LM (g1 ); : : : ; LM (gs ); 2) Esiste g 2 I tale che f = g + r. In particolare r e il resto della divisione di f tramite G indipendentemente dall'ordine dei polinomi in G. Per il calcolo della base di Groebner e necessaria la seguente Denizione 6 Siano f e g due polinomi non nulli in R. Detta x il minimo comune multiplo di multideg(g) e multideg(f ), si denisce S -coppia di f e g il polinomio x x S (f; g) = f g LM (f ) LM (g) Teorema 3 Sia I un ideale di R. Allora una base G = fg1 ; : : : ; gs g per I e una base di Groebner per I se, e solo se, per ogni coppia i 6= j , il resto della divisione di S (gi ; gj ) tramite G e 0. Tramite quest' ultimo teorema e possibile l'implementazione dell'algoritmo di Buchberger in CoCoA (vedi [1], Algorithm 1.7.1): Define GB(F); G:=F; Repeat G1:=G; LG1:=Len(G1); For I:=1 To LG1-1 Do 11 For J:=I+1 To LG1 Do S:=NR(SPoly(G1[I],G1[J]),G1); If S<>0 Then Append(G,S) End; End; End; Until Len(G)=LG1; Return G; End; Osservazione 4 L'unico argomento della funzione GB e dato dalla lista F di polinomi generatori l'ideale. La funzione alla ne del calcolo restituira G, lista dei polinomi che rappresentano la base di Groebner. I due cicli F or nidicati incrementano le variabili I e J , necessarie per il calcolo di tutte le S -coppie. La funzione NR, riduzione normale, e l'algoritmo di divisione modicato, e calcola se l'S -coppia appena calcola si riduce a 0 o meno. Nel caso in cui nessuna nuova S -coppia viene aggiunta a G (tramite il comando Append), il ciclo piu esterno Repeat : : : Until si interrompera (dato che la lunghezza di G restera invariata). La funzione SP oly e semplicemente l'implementazione in CoCoA della denizione 6: Define SPoly(F,G); LTF:=LT(F); LTG:=LT(G); MCM:=LCM(LTF,LTG); RES1:=MCM/(LC(F)LTF)F; RES2:=MCM/(LC(G)LTG)G; RES:=RES1-RES2; Return RES; End; Ecco un esempio in CoCoA dell'utilizzo della funzione GB : Esempio 5 Use R::=Q[x,y]; F:=NewList(2,0); F[1]:=xy-1; 12 F[2]:=y^2-1; GB(F); -------------------------------- Risultato -----------------------------[xy - 1, y^2 - 1, x - y] ------------------------------- 13 4 Colorazione dei gra Sia dato un grafo G con nv vertici, si vogliono colorare i vertici di tale grafo in modo che ogni coppia di vertici adiacenti abbia colore diverso. Sia detto nc il numero di colori. Se G e colorabile in tale maniera si dice nc -colorabile. Siano 1 ; : : : ; nc le radici complesse nc -esime dell'unita (jnc = 1, 8j = 1; : : : ; nc ). Siano x1 ; : : : ; xnv le variabili rappresentanti i vertic del grafo G. Ad ogni vertice puo essere assegnato uno degli nc colori. Questo puo essere rappresentato mediante le nv equazioni xni c = 1; i = 1; : : : ; nv Inoltre, se i vertici xi e xj sono connessi devono avere dierente colore. Dato che per ogni i, j , xni c = xnj c abbiamo che per i e j adiacenti deve essere: xni c xnj c = (xi xj )P (xi ; xj ) = 0 dunque essendo xi 6= xj , si deve imporre P (xi ; xj ) = 0 per ogni i; j adiacenti. Sia allora R = C[x1 ; : : : ; xnv ] e I un suo ideale cos denito: I = (fxni c 1; i = 1; : : : ; nv g [ fP (xi ; xj ); 8fi; j g 2 Gg) Ricordiamo che l'insieme V (I ) kn , detto varieta ane, e : V (I ) = f(a1 ; : : : ; an ) 2 kn : f (a1 ; : : : ; an ) = 0; 8f 2 I g: Richiamiamo il teorema degli zeri di Hilbert (in forma debole): Teorema 4 ([4],Chap.4 Theorem 1) Sia k un campo algebricamente chiuso e I k[x1 ; : : : ; xn ] un ideale tale che V (I ) = ;. Allora I = k[x1 ; : : : ; xn ]. Da questo segue immediatamente che: Teorema 5 Il grafo G e nc -colorabile se, e solo se, V (I ) 6= ;. In particolare e possibile calcolare la base di Groebner G dell'ideale I . Se 1 2 G allora V (I ) = ;, e viceversa. L'implementazione dell'algoritmo descritto in CoCoA sara: --Numero di colori Nc:=4; --Numero di vertici del grafo G Nv:=4; 14 --Lati del grafo G L:=[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]; Use R::=Q[x[1..Nv]]; -- Funzione che calcola i polinomi P(x_i,x_j) e x_i^n_c -1 F:=NColor(N,Len(L),Nc,L); I:=Ideal(F); ReducedGBasis(I); -- Funzione NColor Define NColor(Nv,Nl,Nc,L); F:=NewList(Nv+Nl); For I:=1 To Nv Do F[I]:=x[I]^Nc-1; End; For I:=1 To Nl Do F[Nv+I]:=(x[L[I,1]]^Nc-x[L[I,2]]^Nc)/(x[L[I,1]]-x[L[I,2]]); End; Return F; End; 15 References [1] W.W. Adams, P. Loustanau. An Introduction to Groebner Bases. American Mathematical Society, 1994. [2] B. Buchberger. Ein Algorithmus zum Aund der basiselemente des Restklassenringes nach einem multidimensionalen Polynomideal. Ph. D. Thesis, Inst. University of Innsbruck. Innsbruck, Austria, 1965. [3] A. Capani, G. Niesi, L. Robbiano. CoCoA, a system for doing Computations in Commutative Algebra. Available via anonymous ftp from cocoa.dima.unige.it, 4.0, 2000. [4] D. Cox, J. Little, D. O'Shea. Ideals, Varieties, and Algorithms. Springer, New York, 1996. [5] R. Froeberg. An Introduction to Groebner Bases. John Wiley and Sons, 1997. [6] A. Giovini, G. Niesi. CoCoA user manual. 1990. Giancarlo Rinaldo Dipartimento di Matematica Universita di Messina Contrada Papardo, salita Sperone 31, 98166 Messina (Italy) e-mail: [email protected] 16