2008/12/22 Robert Bradshaw <rober...@math.washington.edu>: > > On Dec 22, 2008, at 6:20 AM, John Cremona wrote: > >> You can do K(r.lift()), but it would be nicer if this was handled by >> coercion magic. > > This isn't really a coercion issue per se, it's a question of adding > another case to the _element_constructor_ method of number fields. Do > we want coercion here, i.e. should someone be able to write r + K.gen > ()? If so, would it be the most natural to put the result into K or > the quotient ring?
Given that we would like K(r) to work more generally, I think that this should not be handled by coercion, i.e. r+K.gen() should not (need not) work. If we were going to make it work (and I am open to persuasion) then the result should be in K and not in r's parent R, since there will be maps R -> K in situations where there is none in the reverse. It should not be hard to add the desired functionality to the _element_constructor_ method of number fields. Alex, do you want to do that as part of the patch you are working on or should we separate it? John > >> I don't know how that could be done in Sage, but >> mathematically it would make sense whenever the defining polynomial of >> K divided that of R. >> >> John >> >> 2008/12/22 Alex Ghitza <aghi...@gmail.com>: >>> Hi, >>> >>> While working with number fields, I've run into this: >>> >>> sage: K.<a> = NumberField(x^8+1) >>> sage: R = K.polynomial_quotient_ring() >>> sage: r = R.random_element() >>> >>> And now the point of this: I would like to think of r as an >>> element of K. >>> However: >>> >>> sage: K(r) >>> --------------------------------------------------------------------- >>> ------ >>> TypeError Traceback (most recent >>> call last) >>> >>> /opt/sage-3.2.1/devel/sage-main/sage/<ipython console> in <module>() >>> >>> /opt/sage-3.2.1/local/lib/python2.5/site-packages/sage/structure/ >>> parent.so >>> in sage.structure.parent.Parent.__call__ (sage/structure/parent.c: >>> 3645)() >>> >>> /opt/sage-3.2.1/local/lib/python2.5/site-packages/sage/structure/ >>> coerce_maps.so >>> in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ >>> (sage/structure/coerce_maps.c:2778)() >>> >>> /opt/sage-3.2.1/local/lib/python2.5/site-packages/sage/structure/ >>> coerce_maps.so >>> in sage.structure.coerce_maps._call_ (sage/structure/coerce_maps.c: >>> 2685)() >>> >>> /opt/sage-3.2.1/local/lib/python2.5/site-packages/sage/rings/ >>> number_field/number_field.pyc >>> in _element_constructor_(self, x) >>> 1422 raise ValueError, "vector must be of >>> length equal to >>> the degree of this number field" >>> 1423 return sum([ x[i]*self.gen(0)**i for i in >>> range(self.degree()) ]) >>> -> 1424 return self._coerce_non_number_field_element_in(x) >>> 1425 >>> 1426 def _coerce_from_str(self, x): >>> >>> /opt/sage-3.2.1/local/lib/python2.5/site-packages/sage/rings/ >>> number_field/number_field.pyc >>> in _coerce_non_number_field_element_in(self, x) >>> 1520 except (TypeError, AttributeError), msg: >>> 1521 pass >>> -> 1522 raise TypeError, type(x) >>> 1523 >>> 1524 def _coerce_map_from_(self, R): >>> >>> TypeError: <class >>> 'sage.rings.polynomial.polynomial_quotient_ring_element.PolynomialQuo >>> tientRingElement'> >>> >>> >>> >>> Since K and R are canonically isomorphic, it seems to me that K(r) >>> should >>> really work. Any thoughts? Is there another way I can get r into K? >>> >>> Best, >>> Alex >>> >>> >>> -- >>> Alex Ghitza -- Lecturer in Mathematics -- The University of >>> Melbourne -- >>> Australia -- http://www.ms.unimelb.edu.au/~aghitza/ >>> >>>> >>> >> >> > > > > > > --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---