Application Center - Maplesoft

App Preview:

Quotient Polynomial Rings by Maple

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application




 

``

``

Quotient Polynomial Rings by Maple

 

Kahtan H. Alzubaidy

Department of Mathematics, Faculty of Science, University of Benghazi

E-mail: kahtanalzubaidy@yahoo.com

 

Key Words: Quotient Rings, Multivariate Polynomials, Groebner Basis

 

 

 

Introduction.

       Quotient polynomial rings over the infinite field containing < are involved. The computations concern the univariate polynomial rings and the multivariate polynomial rings in two variables. In both cases a vector space basis for the quotient is constructed. The case of of several variables includes cases of infinite dimensions. Procedure II-2 recognizes the infinite dimensional cases , however  we shall restrict ourselves to the finite computations. Ring operations of addition and multiplication on the quotients are computed as well.

Goebner basis is used and the computations are carried out in Maple 13.

 

 I) Univariate Polynomials.

    Let F be a field. The polynomialring F[x] is a principal ideal domain. If I is an ideal of F[x], then I=<f(x)> for some f(x)2F[x].

We have the quotient polynomial ring  F[x]/I.

F[x]/I={r(x): r(x) is the remainder of any polynomial in F[x] when it is divided by f(x)}.

 

Theorem 1.

 If the degree of f(x) is n, then   F[x]/I is an n-dimensional vector space over F with basis {1,x,..,x^(n-1)}.

 

    The ring operations of F[x]/I  are given as follows

1) addition

    "r[1](x)+r[2](x)  in " F[x]/I

2) multiplication

    
"r[1](x)r[2](x) is the remainder of  r[1](x)*r[2](x) w.r.t division by f(x). Thus  r[1](x)r[2](x) in F[x]/I ."

 

Theorem 2.

   F[x]/I is a field iff f(x) is irreducible over F.

 

  The inverse of r(x) in the field F[x]/I is given as follows

   gcd(f(x),r(x))=u(x)f(x)+v(x)r(x)=1 for some  u(x), v(x)2F[x]. Therefore v(x)r(x)=1 in F[x]/I. Thus inverse(r(x))=v(x).

 

Proceduers

  Example

   NULL

restart

f := x^3+x+1

x^3+x+1

(1)

Parse:-ConvertTo1D, "first argument to _Inert_ASSIGN must be assignable"

"`  &Qopf;[x]/I =<1, x, x`^(2) > is a 3-dimensional vector space over `&Qopf;`."

"`  &Qopf;[x]/I ={ ax`^(2)+bx+c :a,b,c in `&Qopf;`,  x^(3)+x+1=0}."

A := x^2*a[1]+x*b[1]+c[1]; B := x^2*a[2]+x*b[2]+c[2]

a[1]*x^2+b[1]*x+c[1]

a[2]*x^2+b[2]*x+c[2]

(2)

I*Procedure-1.

Ring*Addition

 

with(PolynomialTools)

NULL

ads:=proc(A,B,f);

sort(collect(A+B,x),x);

end proc;

proc (A, B, f) sort(collect(A+B, x), x) end proc

(3)

NULL

ads(A, B, f)

(a[2]+a[1])*x^2+(b[2]+b[1])*x+c[2]+c[1]

(4)

NULL

I*Procedure-2

   `Ring Multiplication`

NULL

mus:=proc(A,B,f) local p;

p:=collect(expand(A*B),x);

sort(rem(p,f,x),x);end proc;

proc (A, B, f) local p; p := collect(expand(A*B), x); sort(rem(p, f, x), x) end proc

(5)

 

mus(A, B, f)

(a[1]*c[2]+b[1]*b[2]+c[1]*a[2]-a[1]*a[2])*x^2+(b[1]*c[2]+c[1]*b[2]-a[1]*a[2]-a[1]*b[2]-b[1]*a[2])*x+c[1]*c[2]-a[1]*b[2]-b[1]*a[2]

(6)

 

Square

NULL

S := a*x^2+b*x+c

a*x^2+b*x+c

(7)

mus(S, S, f)

(2*a*c+b^2-a^2)*x^2+(2*b*c-a^2-2*a*b)*x+c^2-2*a*b

(8)

I*Procedure-3

Inverse*of*an*element

f*is*irreducible*over*rational

 

irreduc(f)

true

(9)

``

inv:=proc(A,f);

gcdex(A,f,x,'u','v');

sort(u,x);

end proc;

proc (A, f) gcdex(A, f, x, 'u', 'v'); sort(u, x) end proc

(10)

NULL

inv(S, f)

(a^2-a*c+b^2)*x^2/(a^3+a^2*c-a^2*b-2*a*c^2+3*a*c*b+b^2*c+c^3-b^3)-(a^2+b*c)*x/(a^3+a^2*c-a^2*b-2*a*c^2+3*a*c*b+b^2*c+c^3-b^3)+(a^2+a*b+b^2-2*a*c+c^2)/(a^3+a^2*c-a^2*b-2*a*c^2+3*a*c*b+b^2*c+c^3-b^3)

(11)

NULL

Special*case

 

inv(x^2+x+1, f)

(1/3)*x^2-(2/3)*x+2/3

(12)

NULL

`II) Multivariate Polynomials`

" F[x[1],x[2],...,x[n]] is apolynomial ring over a field F. Suppose I is an ideal of  F[x[1],x[2],...,x[n]]."

" Therefore  I is finitely generated. i.e   I=< f[1],f[2],...,f[m]> where  f[i] in `F[`x[1],x[2],...,x[n]]"
.

" F[x[1],x[2],...,x[n]]/I  is a ring.  `F[`x[1],x[2],...,x[n]]/I  is also a vector space over F."

" Fix an order. ""LT(I) = {LT(f): f  in I},the set of all  leading terms of the elements of I."

" <LT(I)> is the ideal generated by LT(I).""`  Let  G = { g`[1],... ,g[t]} be a Groebner basis of I."

" Therefore <LT(I)> = <(LT(g[1]),...,LT(g[t]))>=  union  <LT(g[i]) >."

 

Theorem 3.

"           F[x[1],x[2],...,x[n]]/I  &cong;span{x^(alpha):x^(alpha)&notin;<LT(I)>}, where alpha=(alpha[1],...,alpha[n]) and x^(alpha)=( x[1]^(alpha[1]),...,x[n]^(alpha[n]) ) ."

 

Corollory 4.

"           F[x[1],x[2],...,x[n]]/I &cong; intersect complement(<LT(g[i])>) ,  as a vector space."

 

" Different ordering lead to different elements in the spanning set but the cardinalities of the spanning sets remain the same."

" Now, we restrict ourselves to the finite dimensional case of two variables x an y and a field F containing `&Qopf;`."

"` Leading monomials in this case are of the forrms  x`^(u), y^(v), x^(u)y^(v). "

"` complement(<x`^(u)>)={1,x,...,x^(u-1)}*{1,y,y^(2),...},  "

complement(`<,>`(y^v)) = `&x`({1, x, x^2, () .. ()}, {1, y, y^(v-1), () .. ()}), and

complement(`<,>`(x^u*y^v)) = `&x`({1, x, x^(u-1), () .. ()}, {1, y, y^(v-1), () .. ()}).Thus we have

 

Theorem 5.

"         F[x,y]/I &cong; intersect complements(<leading monomials >)".

 

Corollory 6.

        
"F[x[1],x[2],...,x[n]]/I  is a finitedimensional vector space over F iff there are at least two monomials of the forms  x^(u) and y^(v)."

 

Proceduers

 

Procedure II.1

Leading Monomials

 

restart

with(PolynomialTools); with(Groebner)

NULL

lm:=proc() local L,G,h,hh,H;

L:= [seq(args[i],i=1..nargs)];

G:=Basis(L,tdeg(x,y));

h:=LeadingMonomial(G,tdeg(x,y));if nops(h)=1 then h; else

hh:=sum(h[j],j=1..nops(h));

H:=sort(hh,order=plex(x,y));

[seq(op(s,H),s=1..nops(H))];fi

end proc;

proc () local L, G, h, hh, H; L := [seq(args[i], i = 1 .. nargs)]; G := Groebner:-Basis(L, tdeg(x, y)); h := Groebner:-LeadingMonomial(G, tdeg(x, y)); if nops(h) = 1 then h else hh := sum(h[j], j = 1 .. nops(h)); H := sort(hh, order = plex(x, y)); [seq(op(s, H), s = 1 .. nops(H))] end if end proc

(13)

``

Examples

``

``

f := x*y^3-x^2; g := x^3*y^2-y

x*y^3-x^2

x^3*y^2-y

(14)

lm(f, g)

[x^4, x^3*y^2, x*y^3, y^4]

(15)

NULL

f[1] := x^3+x^2*y+y^3; f[2] := x^2+y^2

x^3+x^2*y+y^3

x^2+y^2

(16)

lm(f[1], f[2])

[x^2, x*y^2, y^4]

(17)

NULL

lm(x^3+y^3)

[x^3]

(18)

``

``

Procedure II.2

-dimensional*infinite*quotients+Finite

 

fin:=proc() local K;

K:=lm(seq(args[i],i=1..nargs));

if gcd(K[1],K[nops(K)])=1 then print("quotient is finite dimentional")else print("quotient is infinite dimensional") fi;

end proc;

proc () local K; K := lm(seq(args[i], i = 1 .. nargs)); if gcd(K[1], K[nops(K)]) = 1 then print("quotient is finite dimentional") else print("quotient is infinite dimensional") end if end proc

(19)

``

Examples

``

``

f := x*y^3-x^2; g := x^3*y^2-y

x*y^3-x^2

x^3*y^2-y

(20)

fin(f, g)

"quotient is finite dimentional"

(21)

``

f[1] := x^3+x^2*y+y^3; f[2] := x^2+y^2

x^3+x^2*y+y^3

x^2+y^2

(22)

fin(f[1], f[2])

"quotient is finite dimentional"

(23)

``

fin(x^3+y^3)

"quotient is infinite dimensional"

(24)

``

 

Procedure II.3

Total*number*of*monomials

 

 

``

tm:=proc() local K,p,q;

K:=lm(seq(args[i],i=1..nargs));

q:=expand(sum((op(1,K[1]))^i,i=0..op(2,K[1])-1)* sum((op(1,K[nops(K)]))^j,j=0..op(2,K[nops(K)])-1));

{seq(op(r, q), r = 1 .. nops(q))};

end proc;

proc () local K, p, q; K := lm(seq(args[i], i = 1 .. nargs)); q := expand((sum(op(1, K[1])^i, i = 0 .. op(2, K[1])-1))*(sum(op(1, K[nops(K)])^j, j = 0 .. op(2, K[nops(K)])-1))); {seq(op(r, q), r = 1 .. nops(q))} end proc

(25)

``

Examples

``

f := x*y^3-x^2; g := x^3*y^2-y

x*y^3-x^2

x^3*y^2-y

(26)

tm(f, g); nops(%)

{1, x, y, x^2, x^3, y^2, y^3, x*y, x*y^2, x*y^3, x^2*y, x^2*y^2, x^2*y^3, x^3*y, x^3*y^2, x^3*y^3}

16

(27)

``

f[1] := x^3+x^2*y+y^3; f[2] := x^2+y^2

x^3+x^2*y+y^3

x^2+y^2

(28)

tm(f[1], f[2]); nops(%)

{1, x, y, y^2, y^3, x*y, x*y^2, x*y^3}

8

(29)

``

Procedure II.4

Remove*monomial*multiples

 

rm:=proc(w,A) local bn;

bn:=u->is(divide(u,w));

remove(bn,A);

end proc;

proc (w, A) local bn; bn := proc (u) options operator, arrow; is(divide(u, w)) end proc; remove(bn, A) end proc

(30)

``

Procedure II.5

Vector*space*basis

``

 

vsb:=proc() local LM,B,A,w;

LM:=lm(seq(args[i],i=1..nargs));

B:={seq(LM[t],t=2..nops(LM)-1)};A:=tm(seq(args[i],i=1..nargs));

for w in B do A:=rm(w,A) od: A;

end proc;

proc () local LM, B, A, w; LM := lm(seq(args[i], i = 1 .. nargs)); B := {seq(LM[t], t = 2 .. nops(LM)-1)}; A := tm(seq(args[i], i = 1 .. nargs)); for w in B do A := rm(w, A) end do; A end proc

(31)

``

Examples

``

f := x*y^3-x^2; g := x^3*y^2-y

x*y^3-x^2

x^3*y^2-y

(32)

vsb(f, g); nops(%)

{1, x, y, x^2, x^3, y^2, y^3, x*y, x*y^2, x^2*y, x^2*y^2, x^3*y}

12

(33)

``

f[1] := x^3+x^2*y+y^3; f[2] := x^2+y^2

x^3+x^2*y+y^3

x^2+y^2

(34)

vsb(f[1], f[2]); nops(%)

{1, x, y, y^2, y^3, x*y}

6

(35)

``

NULL

 

  Ring Operations

  Addition

  Procedure II.6

 

NULL

NULLadm:=proc(A,B,L) local G;

 G:=Basis(L,tdeg(x,y)); NormalForm(A+B,G,tdeg(x,y));

 end proc;

proc (A, B, L) local G; G := Groebner:-Basis(L, tdeg(x, y)); Groebner:-NormalForm(A+B, G, tdeg(x, y)) end proc

(36)

NULL

``

Example

f[1] := x^3+x^2*y+y^3; f[2] := x^2+y^2

x^3+x^2*y+y^3

x^2+y^2

(37)

A := y^3*a[5]+x*y*a[6]+y^2*a[4]+x*a[2]+y*a[3]+a[1]

a[1]+a[2]*x+a[3]*y+a[4]*y^2+a[5]*y^3+a[6]*x*y

(38)

B := y^3*b[5]+x*y*b[6]+y^2*b[4]+x*b[2]+y*b[3]+b[1]

b[1]+b[2]*x+b[3]*y+b[4]*y^2+b[5]*y^3+b[6]*x*y

(39)

adm(A, B, [f[1], f[2]])

a[1]+b[1]+(a[2]+b[2])*x+(a[3]+b[3])*y+(a[6]+b[6])*x*y+(a[5]+b[5])*y^3+(a[4]+b[4])*y^2

(40)

NULL

 Multiplication

 

 Procedure II.7

NULL

mum:=proc(A,B,L) local G;

G:=Basis(L,tdeg(x,y)); NormalForm(A*B,G,tdeg(x,y))

end proc;

proc (A, B, L) local G; G := Groebner:-Basis(L, tdeg(x, y)); Groebner:-NormalForm(A*B, G, tdeg(x, y)) end proc

(41)

NULL

Example

``

mum(A, B, [f[1], f[2]])

a[1]*b[1]+(a[1]*b[2]+a[2]*b[1])*x+(a[1]*b[3]+a[3]*b[1])*y+(a[1]*b[6]+a[2]*b[3]+a[3]*b[2]+a[6]*b[1])*x*y+(a[3]*b[4]+a[1]*b[5]+a[5]*b[1]+a[4]*b[3]-a[2]*b[6]-a[6]*b[2])*y^3+(-a[2]*b[2]+a[4]*b[1]+a[3]*b[3]+a[1]*b[4])*y^2

(42)

NULL

NULL

``

Square

mum(A, A, [f[1], f[2]])

a[1]^2+2*a[1]*a[2]*x+2*a[1]*a[3]*y+(2*a[1]*a[6]+2*a[2]*a[3])*x*y+(-2*a[2]*a[6]+2*a[1]*a[5]+2*a[3]*a[4])*y^3+(-a[2]^2+2*a[1]*a[4]+a[3]^2)*y^2

(43)

NULL

Numerical*Example

``

A := 4*y^3-2*x*y-3*y^2+2*x+5*y+1

1+2*x+5*y-3*y^2+4*y^3-2*x*y

(44)

B := -4*y^3+6*x*y+5*y^2-x+3*y+2

2-x+3*y+5*y^2-4*y^3+6*x*y

(45)

  addition  A+B

 

adm(A, B, [f[1], f[2]])

3+x+8*y+2*y^2+4*x*y

(46)

  multiplication  AB

 

mum(A, B, [f[1], f[2]])

2+13*y+3*x+16*y^2+3*x*y+6*y^3

(47)

  square  A^2

 

mum(A, A, [f[1], f[2]])

1+10*y+4*x+15*y^2+16*x*y-14*y^3

(48)

NULL

   Remark

   The above procedures can easily be generalized to include the case of three variables x, y, z.

NULL