axiom-math
[Top][All Lists]

## RE: [Axiom-math] How to make symbolic computations?

 From: Fabio Stumbo Subject: RE: [Axiom-math] How to make symbolic computations? Date: Mon, 3 Apr 2006 13:24:22 +0200 (CEST)

```
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

```