On Wed, Sep 7, 2011 at 2:14 PM, Simon King <simon.k...@uni-jena.de> wrote:
> Hi William,
>
> On 7 Sep., 22:27, William Stein <wst...@gmail.com> wrote:
>> > In other words, I and J are equal, but have different hash. Actually,
>> > I think it is a bug that hash(I) does not result in a TypeError.
>>
>> It's a bug that hash isn't canonical.    One should compute a standard
>> form for I before hashing it.   At least this is what happens with
>> ideals of rings of integers of number fields.  (I'm not claiming that
>> hash is good -- it's something dumb like hashing the Pari HNF string,
>> but still it is well defined.)
>> ...
>> I good compromise may be the following.  When creating a quotient
>> ring, compute a standard form for the ideal.  Then when testing
>> equality of two quotient rings, the whole issue we're talking about
>> vanishes.  If you're going to do any nontrivial arithmetic in the
>> quotient ring, you'll *need* this standard form anyways.
>
> That's a good point. But:...
>
>>  So just
>> compute it up front.  In a multivariate poly ring it would be computed
>> via something like his:
>>
>>         self.change_ring(R.change_ring(order="degrevlex")).groebner_basis()
>>
>> (code copied from the __cmp__ method.)  The point is that degrevlex
>> GB's are faster to compute than wrt other term orders... and for our
>> purposes a GB wrt any term order suffices.
>
> ... if you want to do any nontrivial arithmetic in the quotient ring,
> you are likely to want to work with a Gröbner basis *for the given
> term order of the polynomial ring*.

If "arithmetic" is addition, subtraction, multiplication, and equality
checking, then it does not matter which term order you use.   The
specific term order doesn't matter in the least for basic arithmetic.

> And even degrevlex Gröbner bases
> are often enough difficult to compute.

If you don't do that, then how will you ever check equality.  There is
little arithmetic one would do that never involves actually doing
something (like testing an equality) with the answer.

> Moreover, one must not forget that we want to create quotient rings
> not only for ideals in polynomial rings.

True, but it is an important case, since the ideas covers all finitely
generated quotient rings, and there are a lot of finitely generated
rings in Sage.

I'm personally more interested in rings of integers of number fields,
where one uses Hermite form and linear algebra instead of Groebner
basis.

> See #11068: Technically, we
> can do computations in the quotient ring as soon as the ideal has a
> method I.reduce(x) that returns a normal form of x with respect to I.
>
> But in addition to I.reduce(x), we may consider to request another
> method:
>  * We could introduce a new method of ideals called, say,
> I.normal_form(), returning some hashable object.
>  * Comparison of ideals I,J should be reduced to I.ring()==J.ring()
> and I.normal_form()==J.normal_form().
>  * hash(I) should return hash(I.normal_form()).
>  * By default, I.normal_form() just returns the given generators of I
> as a tuple (or polynomial sequence?). Hence, for general ideals
> (without the possibility to compute Gröbner bases), equality of ideals
> becomes equality of generator lists
>  * For some types of ideals, I.normal_form() returns a "proper" normal
> form. So, for polynomial ideals, it returns an ordered reduced Gröbner
> basis. In rings of integers of number fields, it returns the pari HNF
> string.
>
> It seems better to me to have a general __cmp__ method for *all*
> ideals and implement a normal_form method, than to have different
> __cmp__ for all types of ideals.
>
> And then, uniqueness of quotient rings could easily be implemented,
> based on R.quo(I,names1)==S.quo(J,names2) <=> R==S and I==J and
> names1==names2.

This would be an acceptable solution to me.

William

>
> Best regards,
> Simon
>
> --
> To post to this group, send an email to sage-devel@googlegroups.com
> To unsubscribe from this group, send an email to 
> sage-devel+unsubscr...@googlegroups.com
> For more options, visit this group at 
> http://groups.google.com/group/sage-devel
> URL: http://www.sagemath.org
>



-- 
William Stein
Professor of Mathematics
University of Washington
http://wstein.org

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to