On Wed, Jan 20, 2016 at 7:47 PM, Nils Bruin <[email protected]> wrote:
> On Wednesday, January 20, 2016 at 3:22:54 PM UTC-8, Dima Pasechnik wrote:
>>
>>
>> to me, two fields that are specified by the same irreducible polynomial
>> over the same prime subfield ought to be identical.
>> it'd be much better design, not wedding them to named generators at all.
>>
>> That's not compatible with the coercion model in sage where
>
> Z['x'] coerces into QQ['x'] and QQ['u','x','v'], but not into QQ['y']
>
> Names of generators are part of the identity of a structure in sage. With
> respect to polynomial rings this allows for various automatic behaviours
> that are out of reach for other computer algebra systems, so we are getting
> a benefit from it. It also has unfortunate and/or counterintuitive
> consequences in other cases; for you this may be one of them. It'll be way
> too invasive to change sage's concepts at this stage, so I think we'll have
> to live with it. Currently the generator name is important for finite
> fields:
>
> sage: GF(64,'x').0+GF(64,'y').0
> TypeError: unsupported operand parent(s) for '+'
>
I agree that it would be quite intrusive to remove the concept of variable
names from finite fields. What if GF(p^n) were equivalent to
GF(p).algebraic_closure().subfield(n)[0] ? Here's a quick timing
comparison (a bit noisy since I ran only once in order to eliminate caching
effects)
sage: for p in prime_range(2,20):
....: print p,
timeit("L=GF(p).algebraic_closure().subfield(12)[0]",number=1,repeat=1)
2 1 loops, best of 1: 256 ms per loop
3 1 loops, best of 1: 33.1 ms per loop
5 1 loops, best of 1: 9.18 ms per loop
7 1 loops, best of 1: 8.25 ms per loop
11 1 loops, best of 1: 6.36 ms per loop
13 1 loops, best of 1: 6.23 ms per loop
17 1 loops, best of 1: 9.78 ms per loop
19 1 loops, best of 1: 6.56 ms per loop
sage: for p in prime_range(2,20):
....: print p, timeit("L=GF(p^12,'x')",number=1,repeat=1)
2 1 loops, best of 1: 230 ms per loop
3 1 loops, best of 1: 34.6 ms per loop
5 1 loops, best of 1: 2.69 ms per loop
7 1 loops, best of 1: 2.4 ms per loop
11 1 loops, best of 1: 3.34 ms per loop
13 1 loops, best of 1: 2.19 ms per loop
17 1 loops, best of 1: 2.07 ms per loop
19 1 loops, best of 1: 11.9 ms per loop
There seems to be some speed penalty to my suggestion, but it's not too
bad. And if you care you can always use a variable name....
David
> --
> You received this message because you are subscribed to the Google Groups
> "sage-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sage-devel.
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.