Hi Jean-Pierre,

On 2014-08-19, Jean-Pierre Flori <jpfl...@gmail.com> wrote:
> Though (non-prime) finite fields with the same order and defining 
> polynomial are considered equal, I'd say the hashes should be different.

Absolutely no way. If they are considered equal, then the hashes must be
the same.

It may, however, be a possibility to make them compare unequal, but with
coercion maps in both directions.

> So, let's add the string of the implementation of the finite field into 
> it's hash (which is cached by the way).
> Does that seem sensible?

No.

> Or should I modify the finite field code so that these hashes are equal 
> whatever the implementation is?
> Then we'd need coercion between all of the implementations (which is not 
> currently the case but should be done anyway), but that would surely yield 
> a non-negligible speed penalty,

Why should that be the case? Once a coercion is established, it will be
looked up from cache, which by the way uses a special kind of dictionary
that compares parents by identity, not equality.

> and you'll never know what the 
> implementation of the base ring of the polynomial ring will be as it will 
> depend on the order finite fields and their polynomial rings are created.

So what? If possible, avoid making your code depend on types.

> Or should we modify the caching system of the polynomial rings not to use 
> hashes but ids?

This might indeed be a possibility. As mentioned above, the coercion
system uses such caches.

Let F1, F2 be two different implementation of "the same" finite field.
Currently, F1[x] and F2[x] are identical objects, which may indeed
constitute a problem. Apart from making the cache use comparison by
identity, there is the possibility to be explicit about the
implementation of the polynomial ring (or do you still want to use the default
implementation for the polynomial rings if there are different implementations
of the base ringst?). Then your cache problem would vanish, since the
implementation is part of the cache key (the PolynomialRing constructor
has an "implementation" optional argument).

Best regards,
Simon


-- 
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 sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to