Fabio Stumbo
2006-04-04 08:34:23 UTC
I said that symbolic computation was ok, but making more and more examples
I found some problem.
I refer to
http://wiki.axiom-developer.org/SandBoxNoncommutativePolynomials
with notations
Q=FRAC INT
K=Q(a,b)
H=K[x,y]
Now I use relations of degree 3 for x and y, namely:
yxy=xyx
x^3=ax^2+bx+c
y^3=ax^2+by+c
Accordingly, I modified the core function subs to
subs(w:M):H ==
-- y*x*y=x*y*x
n:=div(w,(y::V*x::V*y::V)$M)$M
n case ok => monom(n.ok.lm,1)$H * (x::V*y::V*x::V)$H * monom(n.ok.rm,1)$H
-- x*x*x=a*x*x+b*x+c
n:=div(w,(x::V^3)$M)$M
n case ok => monom(n.ok.lm,1)$H * (a::K*(x::V)^2+b::K*x::V+c::K)$H * monom(n.ok.rm,1)$H
-- y*y*y=a*y*y+b*y+c
n:=div(w,(y::V^3)$M)$M
n case ok => monom(n.ok.lm,1)$H * (a::K*y::V*y::V+b::K*y::V+c::K)$H * monom(n.ok.rm,1)$H
-- no change
monom(w,1)$H
and I use the auxilliary function
reduce(p:H):H ==
p2 := newpoly(p)
p3 := newpoly(p2)
while p3 ~= p2 repeat
p2 := p3
p3 := newpoly(p2)
p3
The problem is that not every monomial gets reduced to its "lowest degree"
form. Take, for example,
w=xxyxxyx
you get
reduce(w)=w
and this happens because it doesn't contain any yxy,xxx,yyy. On the other
hand, it DOES reduce:
xxyxxyx
---
xxyxyxy
---
xxxyxxy
and so now a x^3 appears, which can be reduced.
Adding the relation for xyx=yxy doesn't help: you go in loop in many
cases. So, how to handle this kind of problem?
Thanks again
Fabio
PS: I tried to add this to the relative sandbox page, but I have not been
able: I added the "reduce" function, but it complains that H is not a
valid type. That is, it doesn't load automatically all the previous
definition. How do I get this?
I found some problem.
I refer to
http://wiki.axiom-developer.org/SandBoxNoncommutativePolynomials
with notations
Q=FRAC INT
K=Q(a,b)
H=K[x,y]
Now I use relations of degree 3 for x and y, namely:
yxy=xyx
x^3=ax^2+bx+c
y^3=ax^2+by+c
Accordingly, I modified the core function subs to
subs(w:M):H ==
-- y*x*y=x*y*x
n:=div(w,(y::V*x::V*y::V)$M)$M
n case ok => monom(n.ok.lm,1)$H * (x::V*y::V*x::V)$H * monom(n.ok.rm,1)$H
-- x*x*x=a*x*x+b*x+c
n:=div(w,(x::V^3)$M)$M
n case ok => monom(n.ok.lm,1)$H * (a::K*(x::V)^2+b::K*x::V+c::K)$H * monom(n.ok.rm,1)$H
-- y*y*y=a*y*y+b*y+c
n:=div(w,(y::V^3)$M)$M
n case ok => monom(n.ok.lm,1)$H * (a::K*y::V*y::V+b::K*y::V+c::K)$H * monom(n.ok.rm,1)$H
-- no change
monom(w,1)$H
and I use the auxilliary function
reduce(p:H):H ==
p2 := newpoly(p)
p3 := newpoly(p2)
while p3 ~= p2 repeat
p2 := p3
p3 := newpoly(p2)
p3
The problem is that not every monomial gets reduced to its "lowest degree"
form. Take, for example,
w=xxyxxyx
you get
reduce(w)=w
and this happens because it doesn't contain any yxy,xxx,yyy. On the other
hand, it DOES reduce:
xxyxxyx
---
xxyxyxy
---
xxxyxxy
and so now a x^3 appears, which can be reduced.
Adding the relation for xyx=yxy doesn't help: you go in loop in many
cases. So, how to handle this kind of problem?
Thanks again
Fabio
PS: I tried to add this to the relative sandbox page, but I have not been
able: I added the "reduce" function, but it complains that H is not a
valid type. That is, it doesn't load automatically all the previous
definition. How do I get this?