Ask Your Question
1

coercion between polynomial rings with block term orders

asked 2019-02-26 12:15:45 +0100

Philipp Schneider gravatar image

Hello,

I have the following problem: I define a polynomial ring

R.<x,y> = PolynomialRing(QQ,2,order='deglex')

then I define a new polynomial ring, with an addition auxiliary variable and a polynomial in this ring

S = PolynomialRing(R.base(),['w1']+[str(v) for v in R.gens() ],order=TermOrder('lex',1)+R.term_order())
S.inject_variables(verbose=False)
f = w1*x^3 + w1*y + x^2 + y^2

then I define another polynomial ring, with another addition auxiliary variable. Coercing to this new ring works fine

T = PolynomialRing(S.base(),['w2']+[str(v) for v in S.gens() ],order=TermOrder('lex',1)+S.term_order())
f2 = T(f)

However the way backwards fails

S(f2)

(...) /home/phil/Applications/SageMath/local/lib/python2.7/site-packages/sage/rings/polynomial/polynomial_ring.pyc in _coerce_map_from_(self, P) 791 from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing 792 if is_MPolynomialRing(P) and self.variable_name() in P.variable_names(): --> 793 P_ = P.remove_var(self.variable_name()) 794 return self.base_ring()!=P_ and self.base_ring().has_coerce_map_from(P_) 795

/home/phil/Applications/SageMath/local/lib/python2.7/site-packages/sage/rings/polynomial/multi_polynomial_ring_base.pyx in sage.rings.polynomial.multi_polynomial_ring_base.MPolynomialRing_base.remove_var (build/cythonized/sage/rings/polynomial/multi_polynomial_ring_base.c:5831)() 299 return PolynomialRing(self.base_ring(), vars, order=self.term_order()) 300 except ValueError: --> 301 raise ValueError("impossible to use the original term order (most likely because it was a block order). Please specify the term order for the subring") 302 else: 303 return PolynomialRing(self.base_ring(), vars, order=order)

ValueError: impossible to use the original term order (most likely because it was a block order). Please specify the term order for the subring

Any ideas what I could do to prevent this problem? How would I specify the term order (as it was suggested)?

Kind regards, Philipp

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
1

answered 2019-02-26 20:48:42 +0100

Philipp Schneider gravatar image

a quick and dirty workaround is calling

S(str(f2))

instead of

S(f2)
edit flag offensive delete link more
1

answered 2019-02-27 03:22:52 +0100

nbruin gravatar image

A map from $\mathbb{Q}[w2,w1,x,y]$ to $\mathbb{Q}[w1,x,y]$ is always going to be tricky because it's just a partial map. I don't know why the block order gets in the way, but it's not hard to work around it:

sage: S(QQ['w1,x,y'](f2))
w1*x^3 + w1*y + x^2 + y^2
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2019-02-26 12:15:45 +0100

Seen: 363 times

Last updated: Feb 27 '19