#14010: Add `__call__` method to FreeGroupElement
----------------------------+-----------------------------------------------
   Reporter:  ppurka        |             Owner:  joyner  
       Type:  enhancement   |            Status:  new     
   Priority:  major         |         Milestone:  sage-5.7
  Component:  group theory  |          Keywords:          
Work issues:                |   Report Upstream:  N/A     
  Reviewers:                |           Authors:          
  Merged in:                |      Dependencies:          
   Stopgaps:                |  
----------------------------+-----------------------------------------------
 Copy-paste from #12339:

 I have some comments regarding the set of patches in #12339. 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
 }}}

 ----

 Related discussion in [https://groups.google.com/d/topic/sage-combinat-
 devel/f_Und2NDyFE/discussion combinat-devel].

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14010>
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