Read-only forum archive

Maps over transcendental field extensions

Maps over transcendental field extensions

levandov · Sun Mar 14, 2010 6:05 pm

I work over K(q) with K-linear maps.
(1) Is there some procedure, which makes correct analog to subst. I want to apply K(q)-automorphisms (even of order 2), they are of the form q-> (a+bq)/(c+dq) with a,b,c,d in K subject to some relations. At the moment subst says it "ignores denominators"...
(2) What I need further is the modification of type map indeed, since I need to do (anti-)morphisms of K and NOT of K(q)-algebras in noncommutative context, say (commutatively)
K(q)[x,y] -> K(q)[x,y], q->(a+bq)/(c+dq)=theta(q), x -> theta(x), y-> theta(y). Theta includes twisting on q, that is it's K- but not K(q)-linear.
HOWEVER: it is enough to apply this generalized map to a single object (poly/ideal/module/matrix). This will be used e.g. to extend the procedure involution from involut.lib to the case of quantum and quantized algebras.

Thanks in advance to any hints,
Viktor

Re: Maps over transcendental field extensions

gorzel · Sat Mar 20, 2010 10:34 pm

Dear Viktor,
ad 1) I really had difficulties to see the case where this message appears.

Then I found, that subst does not work, if the
poly or number in which we want to substitute has
denominators in the parameters.

So this trivial examples fails:
Code:
  > ring rt = (0,t),x,dp;
  > subst(2/t,t,t);
  // ** ignoring denominators of coefficients...
  2


but (yes!) I found a solution. See the proc parsubst below.

The idea is, first to clear the denominator, then use subst
and divide by the substituted denominator again.

Some care must be taken for the following cases:

i) if the input only consists of a parameter, then
cleardenom returns 1.

Here I multiply first with a ring variable, (hopefully this
will not change the result in the non-commutative case),

ii) if f(0)=0, we can not recover the denominator.
Therefore, I add a constant.

This two operations will be reversed at the end.

The example above and substitution as you mention will work.
Code:
  > parsubst(2/t,t,t);
  2/(t)
  > parsubst(2/t,t,(2t+4)/(3t+1))
  (3t+1)/(t+2)
 
  > // example parsubst
  > number q = (3t+4)/(2t+3);
  > parsubst(1/t,t,q);

  > poly f = t/(t-1)*x2 + 2/t;
  > parsubst(f,t,q);
  (3t+4)/(t+1)*x2+(4t+6)/(3t+4)
 



Code:
  proc parsubst(poly f,number t,number q)
  " USAGE: parsubst(f,t,q); f poly or number, t number, q number
  RETURN: poly, resp. number as the input type
  ASSUME: t is a parameter of the basering
  EXAMPLE: example parsubst; shows an example
  "
  {
    int is_constant = deg(f)==0;
    if  (is_constant) { f = f*var(1); } //  f was a number

    int zero_const_term = jet(f,0)==0;
    if (zero_const_term) { f = f + 1;}  //otherwise denom is lost
     
    poly g = cleardenom(f);
    number commondenom = leadcoef(g)/leadcoef(f);
    f = subst(g,t,q)/subst(commondenom,t,q);
    if (zero_const_term) { f = f - 1;}
    if(is_constant) { f = f/var(1);}
    return(f);
}
example
{
  "EXAMPLE:"; echo = 2;
  ring r=(0,t),x,dp;
   
  number q = (3t+4)/(2t+3);
  parsubst(1/t,t,q);

  poly f = t/(t-1)*x2 + 2/t;
  parsubst(f,t,q);
}


ad 2) If I understand correctly, then theta(x) would form
an rational expression built on variables?


Best regards,
Christian

Re: Maps over transcendental field extensions

gorzel · Mon Mar 22, 2010 3:38 pm

Could the following proc fit your pupose?

Code:
proc quantummap(poly f, number q)
{
  map qphi = basering,q*var(2),q*var(1),
  f = qphi(f);
  f = parsubst(f,q);
return(f);
}


Does it define a map your looking for?

Regards,
Christian