This also works fine: sage: GF(5)(-1).sqrt() 2
as does this sage: a=GF(5)(2).sqrt() sage: a sqrt2 sage: a^2 2 but not GF(5)(sqrt(2)). I can see that coercing simple symbolic expressions like sqrt(integer) into various fields would not be hard, but handling arbitrary symbolic expressions would be very hard (probably impossible); if what you want to a solution to an equation in a certain field then it would be better (surely) to construct it that way instead of coercing a symbolic expression. John 2008/5/16 William Stein <[EMAIL PROTECTED]>: > > On Thu, May 15, 2008 at 4:00 PM, John H Palmieri <[EMAIL PROTECTED]> wrote: >> >> The fact that i is not in CC doesn't bother me too much, since i is a >> "formal square root of -1": >> >> sage: i in CC >> False >> >> I can force it to be in CC by doing this: >> >> sage: CC(i) >> 1.00000000000000*I >> >> But then I think I should be able to do this: >> >> sage: GF(5)(i) >> >> Someone who knows more number theory than I do can come up with a >> better solution, but coercion code like this ought to work: replace >> the end ("raise TypeError...") of the _coerc_impl() method for >> Finite_Field_prime_modn (in sage.rings.finite_field_prime_modn.py) >> with this: >> >> from sage.functions.constants import I >> from sage.rings.arith import primitive_root >> p = self.__char >> if x == i and p % 4 == 1: >> return self(primitive_root(p))**((p-1)/4) >> raise TypeError, "no canonical coercion of x" >> >> But this isn't the right place to patch. When I do this, >> GF(5)._coerce_(i) works, but GF(5)(i) doesn't. >> >> Perhaps IntegerMod in the file integer_mod.pyx should be patched, but >> I don't want to mess around with Cython. Perhaps some other file >> should be patched. Can anyone help? > > You should put the code in __call__. _coerce_ is only > for canonical coercions, which the above definitely isn't. > > By the way, it would be (asymptotically) a lot faster to > choose a random element of GF(p) and raise it to the > power (p-1)/4 and check the resulting power is not +/-1. > Finding a primitive root requires factoring p-1, which is > potentially very slow. > > -- William > > > > --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---