(Miguel's post follows) On 2 October 2015 at 14:50, <mma...@unizar.es> wrote: > What you say is pretty much correct, but something must be added. > > Solving the word problem (that is, testing equality) is not only very hard: it > is an undecidable problem in general. That is: there can't be any algorithm > that determines if two words correspond to the same element of an arbitrary > finitely presented group. So "implementing a decent __eq__" is an impossible > task. > > There is some hope though. It is impossible to solve the problem in general, > but there are some techniques that can be succesful in many cases (and i guess > most of the cases you would be interested in fall in this lucky category). > > As you said, computing a normal form is a harder problem than testing > equality... but most of the techniques that can be used to attack the word > problem happen to be based on some kind of normal form. So, even if in theory > the normal form problem is harder than the word problem, in practice almost > always the solution for both problems come together: either we are able to > compute a normal form, or we are unable to decide equality. > > The case of cyclic groups that you mention is a very easy one. They are > finite, > abelian and have a very simple confluent rewriting system. Every possible > techinque to solve the word problem works immediately. That is why, if you > delegate the equality to gap (which is what happen when the hash does not > distinguish), it is able to determine if two elements are the same or not. > > But as I said, that is incidental. It happens because we are dealing with very > simple presentations, and the basic reductions that gap does internally are > enough to distinguish the elements. If, for instance, we would present the > same groups with a more complicated presentation, it could happen that those > simple reductions wouldn't be enough to correctly distinguish the elements. > > In general, it is not a good idea to use the structure of a finitely presented > group if you need to accurately distinguish elements. If that is your case, > and you group allows any other way to be represented (PermutationGroup, > AbelianGroup, MatrixGroup...), it is a much better idea to do so: in those > structures equality testing is trivial (in fact you have a unique canonical > form of each element), whereas in the finitely presented group theory it is > undecidable. > > I hope i clarified things a bit. > > Best, > > Miguel
-- 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.