#12339: Free Groups
------------------------------------------------------------------+---------
       Reporter:  mmarco                                          |         
Owner:  joyner      
           Type:  enhancement                                     |        
Status:  needs_info  
       Priority:  major                                           |     
Milestone:  sage-pending
      Component:  group theory                                    |    
Resolution:              
       Keywords:  free groups, finitely presented groups, braids  |   Work 
issues:              
Report Upstream:  N/A                                             |     
Reviewers:  Volker Braun
        Authors:  Miguel Marco, Volker Braun                      |     Merged 
in:              
   Dependencies:  #6391, #13687, #13588                           |      
Stopgaps:              
------------------------------------------------------------------+---------
Changes (by ppurka):

  * status:  positive_review => needs_info


Comment:

 I have some comments regarding this patch. I myself can not give much
 technical input, but I have a colleague here who has been trying to use
 this and has come across some inconsistencies.

 1. Is there a reason why a `FreeGroupElement` does not have the `__call__`
 method? A `FreeMonoidElement` does have the `__call__` method. This is
 needed to make the following work
 {{{#!python
 sage: G.<a,b> = FreeGroup()
 sage: a.subs(a=1,b=2) # We would expect the answer to be 1
 a
 }}}
 2. Related to the implementation of the `__call__` method is the following
 problem. Suppose in order to make `subs()` work, we implement the
 `__call__` method. The current code has to call `a.Tietze()` to get the
 index of the free generator `a` and its exponent. For a more complicated
 expression the output is as follows, and we would have to go along and
 parse the output tuple to find out the exponent by counting. Is there any
 method (maybe in GAP) which outputs just a list of tuples `[(generator1,
 exponent1), (generator2, exponent2),...]`. This is again how `FreeMonoid`
 is implemented.
 {{{
 sage: (a^2 * b^-3).Tietze()
 (1, 1, -2, -2, -2)
 sage: (a^2 * b^-3).some_function() # some function which gives (generator,
 exponent) tuples
 [(a, 2), (b, -3)]
 }}}
 3. There is also this inconsistency in the output of the following two
 functions. In language, they say the same thing, but they are not
 mathematically equal (according to the current implementation):
 {{{#!python
 sage: G.<a,b> = FreeGroup()
 sage: test = (a).fox_derivative(a)
 sage: f = test.parent()
 sage: g = GroupAlgebra(G, ZZ)
 sage: print f
 Group algebra of Free Group on generators {a, b, c, d, e} over Integer
 Ring
 sage: print g
 Group algebra of group "Free Group on generators {a, b, c, d, e}" over
 base ring Integer Ring
 sage: print f == g
 False
 }}}

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/12339#comment:75>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" 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 http://groups.google.com/group/sage-trac?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to