RE: How to make symbolic computations?

Fabio Stumbo <[email protected]>
Newsgroups gmane.comp.mathematics.axiom.general
Organization Università di Ferrara
Message-ID <Pine.LNX.4.62.0604031245180.5844@studio>
Hi all,
I am back again to ask for some help on symbolic computation.
The setting was:

>> I would like to build the non-commutative algebra h=k[x,y] and
>> then I would like to make computations in h using some predefined
>> rules for x and y. As an example, take the three equations
>>
>> x*y*x=y*x*y
>> x*x=a*x+b
>> y*y=a*y+b
>>
>> where a and b are (generic, if possible) elements of k.
>>
>> Then, I would like to be able to reduce polynomials in x and
>> y according to the previous rules. For example,
>>
>> (x+y)^2 (=x^2+x*y+y*x+y^2)
>>
>> should reduce to
>>
>> a*(x+y)+2*b+x*y+y*x
>>
>> and
>>
>> (x+y)^3
>>
>> (
>> =(x+y)(x+y)^2
>> =(x+y)(a(x+y)+2b+xy+yx)
>> =axx+axy+ayx+ayy+2bx+2by+xxy+xyx+yxy+yyx
>> =a^2x+ab+axy+ayx+a^2y+ab+2bx+2by+(ax+b)y+xyx+yxy+(ay+b)x
>> =a^2x+ab+axy+ayx+a^2y+ab+2bx+2by+axy+by+xyx+yxy+ayx+bx
>> =xyx+yxy+axy+axy+ayx+ayx+a^2x+2bx+bx+a^2y+2by+by+ab+ab
>> )
>>
>> should reduce to
>>
>> 2*x*y*x+2*a*x*y+2*a*y*x+(a^2+3*b)*x+(a^2+3*b)*y+2*a*b
>>
>
> Look at the example at:
>
> http://wiki.axiom-developer.org/SandBoxNoncommutativePolynomials
>

...



I made many computations and I am quite satisfied with the results.
I had no difficult to modify the functions defined on the wiki page to 
change the settings (variable number, minimal polinomial). About this, I 
have just a couple of simple questions:

1) Is it possible to define the functions so that the number of variable 
is itself a variable and the function generates "on the fly" the required 
variables (all with the same minimal polinomial)? I am meaning the 
following: instead of
newpoly(t:H):H
I would like to define
newpoly(t:H,n:INT):H
so that t is a polinomial in the variables x_1,...,x_n the relations are, 
for example, x_i^2=ax_i+b for each i.
So, we should generate the array of the variables, then an array with all 
the relations and then we should try div for each relation in this last 
array...

I am asking this beacuse I had to make may examples changing the number of 
variables and I had to rewrite the same file each time with minor 
(and uniform) changes.

2) Is it possible to get rid of all the declarations ::V in 
p1:=(x::V+y::V)$H^2  ?

I want to add a remark: as noted on the wiki, the reduction should be 
carried over as many time as possible, so I use the auxiliary function

reduce(p:H):H ==
  p2 := newpoly(p)
  p3 := newpoly(p2)
  while p3 ~= p2 repeat
   p2 := p3
   p3 := newpoly(p2)
  p3

Now, if you try to reduce the successive powers of x+y, the functions 
slows down very quicly and you can't go further than (x+y)^10 or little 
more. In this particular case, it is much more efficient to do it 
in the following way:

power(q:H,n:INT):H ==
   qq:H:=1
   for i in 1..n repeat
    qq:=reduce(qq*q)
   qq

This way, I have no difficulties in calculating (x+y)^100 or even much 
more. Is there another way to obtain this same efficency?


All of this is, anyway, simply a matter of making working better what 
already is done.
I also have another problem, more important to me.

The above setting is:
Q=FRAC INT
K=Q(a,b)
H=K[x,y]

with relations

xyx=yxy
xx=ax+b
yy=ay+b

I would like to write the element
s=1+x+y+xy+yx+xyx
of H like a polinomial in u=x+y

In mathematics, if I is the ideal
I=(xyx-yxy,xx-ax-b,yy-ay-b) and L=H/I,
then I would like to see if s belongs to the subring L[u].

I guess that one way should be to use Groebner basis, but H is 
noncommutative. Is there a noncommutative groebner basis package in axiom?

In any case, it is not exactly this: I do not want to see if s belongs to 
I, but I want to write it as a polynomial in u.

Thank you and best regards

Fabio
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.