UNIVERSITA` DEGLI STUDI DI REGGIO CALABRIA FACOLTA` DI

annuncio pubblicitario
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
Scarica