#15508: Implement Fock space
-------------------------------------+-------------------------------------
       Reporter:  tscrim             |        Owner:  sage-combinat
           Type:  enhancement        |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-6.4
      Component:  algebra            |   Resolution:
       Keywords:  Fock space         |    Merged in:
  quantum group representations      |
        Authors:  Travis Scrimshaw   |    Reviewers:
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  public/modules/fock_space          |  9632cef81ef0ff0de2d1d2b4461fca7fd146f22e
   Dependencies:  #15289 #15525      |     Stopgaps:
  #15621                             |
-------------------------------------+-------------------------------------

Comment (by tscrim):

 Replying to [comment:31 andrew.mathas]:
 > I have started to look at this. The first thing that it needs is more
 documentation at the start of the module as it took me a while to work out
 what it does, which is quite impressive.

 Thank you so much for taking a look at this. I will start adding more
 documentation and examples as soon as I get around to this. I'm planning
 to use the Kleshchev partitions from #20564 as the indexing set for the
 higher level representations since I don't want to think of it as a tensor
 product.

 > Next, I know that I suggested above that
 > {{{#!sage
 > |4> + q*|2, 2>
 > }}}
 > would be reasonable output but, sorry!, I now think that it would be
 better to have something like
 > {{{#!sage
 > F(4) + q*F(2, 2)
 > }}}
 > with the option of having less condensed output that could be cut-and-
 pasted back into sage like:
 > {{{#!sage
 > F[[4],[3,1]] + q*F[[2, 2,2],[1,1]]
 > }}}

 Would a print option attached to each parent or a global option be okay
 for this? I actually have grown fond of the current print repr since it is
 visually close to the literature.

 > Your implementation makes a clear distinction between the Fock space and
 the integrable highest weight module that it contains. As the highest
 weight module embeds into the Fock space you could drop this distinction
 and instead just allow people to pass from the bases of the highest weight
 module and the basis of the full Fock space. That is, I am suggesting that
 for the user you drop the additional layer of complication of having to
 first construct the Fock space, then the highest weight module and then
 the bases for this module. That is, o me it feels overly cumbersome to
 have `F[4,2,1]` give an element of the Fock space and then have
 `F.highest_weight_representation().A()[3,1]` and
 `F.highest_weight_representation().G()[3,1]` give the elements of the
 highest weight rep. There are arguments both ways, and what you have done
 is certainly fine and it works, so do whatever you think will work best
 even if that means you ignore with this comment.

 One of the main reasons why I want to keep them separate is because the
 Fock space can be larger since it has non-regular partitions as basis
 elements. The current version of the highest weight representation is only
 considered as U,,q,,('''sl''',,n,,)-repr instead of a
 U,,q,,('''gl''',,n,,)-repr. At some point I will find some time to
 implement the U,,q,,('''gl''',,n,,) case (sorry I haven't Anne!), and at
 which point, I would have that be a basis for the Fock space. I also am
 not sure how the natural basis would act under `e`/`f`, in fact, I am not
 sure the natural basis makes sense in the
 U,,q,,('''sl''',,n,,)-representation... So I think they should be
 separate.

 > In terms of the Fock space, it would be good to have an
 `inject_variables` method -- one way of addressing my comment above (apart
 from ignoring it!:), would be to have this method inject the highest
 weight module and its bases into the global namespace.

 What comment, I didn't see a comment <.< >.> :P Although I agree with the
 principle of it, but I don't think it is the correct name. For symmetric
 functions, we use `inject_shorthands`. How about `inject_bases`? Although
 this isn't future-proof.

 > Next, are the terms of "rank" and "type" that you use inside
 FockSpace.__init__ that common? I ask because when I first saw them they
 certainly confused me:) The "rank" is probably fine as I think that it is
 meant to be the rank of the Kac-Moody algebra, although if this is true
 then the following seems strange:
 > {{{#!sage
 > sage: F=FockSpace(3); F
 > Fock space of rank 3 of type (0,) over Fraction Field of Univariate
 Polynomial Ring in q over Rational Field
 > sage: F([]).f(0).f(1).f(2).f(3).f(4).f(5)
 > |6> + q*|5, 1> + q*|3, 2, 1> + q^2*|2, 2, 2>
 > }}}

 Whoops, forgot `rank = n - 1`.

 > If `n` is the rank that I would think that `F(mu).f(i)` should only work
 for `0\le i <n`, so something seems to be wrong here. Perhaps you always
 take `i` modulo `n`? I didn't see this in the code but instead of doing
 this I rather that the code gave an error when `i` was too large rather
 than have it silently convert `i` to an integer mod `n`.

 I will add the appropriate error checks.

 > I think that "type" should be changed to something else because:
 > - it is non-standard and "type" is over-used in mathematics
 > - type is a reserved word in python (I know you don't use it in the
 code...)
 > - I think that (multi)charge or dominant_weight (or an actual dominant
 weight from `CartanType(['A',n,1])` would be better...although perhaps
 dominant weights have not been implemented yet?)

 I agree. I think I just chose it because it was the most appropriate word
 I could think of at the time. I will change it to (multi)charge.

 > Final comment for now is that in my Specht package, in gap, I found it
 really useful to have `.e` and `.f` work for sequences of "residues". That
 is,
 > {{{#!sage
 > sage: F(mu).f(i1).f(i2)...f(ik) == F(mu).f(i1,i2,...,ik)
 > True
 > }}}
 > Of course have a problem here because `F(mu).f(i,m)` corresponds to the
 divided power `F_i^{(m)}`. What do you think of using `F(mu).f( (i,m) )`
 for divided powers and then allowing expressions like the following?
 > {{{#!sage
 > sage: F(mu).f( (i1.m1) ).f( (i2,m2) )...f(ik) \
 >            == F(mu).f( (i1,m1),(i2,m2), i3,...,(ij,mj),...,ik)
 > True
 > }}}
 > Again, happy for you to do what yu think is best here.

 I like the idea of doing the tuples for the divided powers. I think it is
 slightly more natural to have an arbitrary number of integers/tuples than
 using a list (and it also means less input parsing). Will change.

 > Could you please add some more documentation on how to use the Fock
 space code and merge your ticket with the latest develop branch - it's not
 an automatic merge, so I didn't want to break anything. As part of my
 review I can add some background material on the applications to the
 representation theory of the Ariki-Koike algebras.

 I will do so as soon as I can. I should have a lot more time over the
 weekend and into next week.

--
Ticket URL: <https://trac.sagemath.org/ticket/15508#comment:32>
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 https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to