Opened 3 years ago
Closed 3 years ago
#26440 closed enhancement (fixed)
Fusion algebras from Weyl Character Rings
Reported by:  bump  Owned by:  bump 

Priority:  major  Milestone:  sage8.4 
Component:  combinatorics  Keywords:  Fusion Ring, Verlinde Algebra 
Cc:  tscrim, sagecombinat, bump  Merged in:  
Authors:  Daniel Bump  Reviewers:  Travis Scrimshaw 
Report Upstream:  N/A  Work issues:  
Branch:  7546a0d (Commits, GitHub, GitLab)  Commit:  7546a0d9c6496761ded1266fd6c423c85e2a1fa0 
Dependencies:  Stopgaps: 
Description (last modified by )
Fusion algebras for WZW conformal field theories can be computed easily as instances of WeylCharacterRings?. The WeylCharacterRing
code is modified with an optional parameter k, the level. If k==None
the behavior is unchanged. However if k is a positive integer the corresponding fusion ring is created. The reason this works is that the KacWalton algorithm for computing the fusion products is closely similar to the BrauerKlimyk (aka RacahSpeiser) algorithm that is already used by the WeylCharacterRing
. One has only to add an affine reflection to make the algorithm compute the fusion product.
I tested this for level 2 in types A2 and B2, comparing with tabulated formulas in Feingold, Fusion Rules for affine KacMoody algebras.
A related patch is #15485.
Change History (35)
comment:1 Changed 3 years ago by
 Description modified (diff)
 Owner changed from (none) to bump
 Type changed from PLEASE CHANGE to enhancement
comment:2 Changed 3 years ago by
 Branch set to public/fusion26440
 Commit set to ed039bab16e4976443cf89713dbfd6e55d3b0980
comment:3 Changed 3 years ago by
 Commit changed from ed039bab16e4976443cf89713dbfd6e55d3b0980 to 2b75fb534856524bf33bc9506b4e059fc86a27e0
Branch pushed to git repo; I updated commit sha1. New commits:
2b75fb5  contragredient or conjugation map

comment:4 Changed 3 years ago by
 Commit changed from 2b75fb534856524bf33bc9506b4e059fc86a27e0 to cada3b3a887c4ca30d82c13018ff92ca9a786199
Branch pushed to git repo; I updated commit sha1. New commits:
cada3b3  don't import Matrix

comment:5 followup: ↓ 6 Changed 3 years ago by
For fusion rings, we should have a method that returns the (finite) canonical basis as a list or an iterator. Actually WeylCharacterRing
has a basis method that it inherits from CombinatorialFreeModule
.
To avoid confusion with this basis method, the method that returns the basis as a list could then be called fusion_basis
.
So, what is the best way to enumerate all dominant weights of level <= k
?
comment:6 in reply to: ↑ 5 Changed 3 years ago by
Replying to bump:
For fusion rings, we should have a method that returns the (finite) canonical basis as a list or an iterator. Actually
WeylCharacterRing
has a basis method that it inherits fromCombinatorialFreeModule
.To avoid confusion with this basis method, the method that returns the basis as a list could then be called
fusion_basis
.
I am not sure I like the basis for the fusion ring being anything other than what you want to call the fusion_basis
. More generally, I am not sure I like that the basis for WeylCharacterRing
is not the set of dominant integral weights. Since the fusion algebra is finitedimensional, I definite would rather have basis
correspond to the dominant weights of level <= k
(which we would give in the __init__
to CombinatorialFreeModule
).
So, what is the best way to enumerate all dominant weights of level
<= k
?
I just constructed this as a RecursivelyEnumeratedSet
, but we could also use WeightedIntegerVectors
. Between those two, I have not run timings to determine which is faster. Both should take 2 lines to construct (one to get the levels, one to construct the parent to iterate over).
comment:7 followup: ↓ 8 Changed 3 years ago by
I am not sure I like the basis for the fusion ring being anything other than what you want to call the fusion_basis.
Does this mean we should overwrite the existing basis method (which, you are pointing out is already not correct)?
I just constructed this as a RecursivelyEnumeratedSet?, but we could also use WeightedIntegerVectors?. Between those two, I have not run timings to determine which is faster. Both should take 2 lines to construct (one to get the levels, one to construct the parent to iterate over).
I doubt whether speed is an issue for this. The user will run it once. So you could choose on the basis of elegance rather than timing.
comment:8 in reply to: ↑ 7 Changed 3 years ago by
Replying to bump:
I am not sure I like the basis for the fusion ring being anything other than what you want to call the fusion_basis.
Does this mean we should overwrite the existing basis method (which, you are pointing out is already not correct)?
Well, sort of. What I think should be done is the correct indices needs to be passed to CombinatorialFreeModule.__init__
(instead of self._space
). This will also automatically put it into the category of FiniteDimensionalModulesWithBasis
and give it extra methods.
With the existing basis method, the actual basis is too big as it says that, e.g., \Lambda_{1} is a basis elements. However, this is not allowed through more standard constructions. For simplicity of the implementation, this is nice. Although for the style='coroots'
, you can get a fair bit of speed by using weights expressed as linear combinations of fundamental weights rather than in the ambient basis (I have some really hacked together code to get some computations at a reasonable speed and memory usage I need in E_{7} that I need to cleanup to get into Sage). Although it means some code duplication and added complexity. However, this makes it more ameable to the "correct" basis. Unless I am misunderstanding something about what this should be able to compute.
I just constructed this as a RecursivelyEnumeratedSet?, but we could also use WeightedIntegerVectors?. Between those two, I have not run timings to determine which is faster. Both should take 2 lines to construct (one to get the levels, one to construct the parent to iterate over).
I doubt whether speed is an issue for this. The user will run it once. So you could choose on the basis of elegance rather than timing.
Timing might matter if someone wants to construct a "large" rank and level example. In terms of elegance, I would say WeightedIntegerVectors
is better and more inline with the output as sums of fundamental weights (as dense vectors).
comment:9 Changed 3 years ago by
 Commit changed from cada3b3a887c4ca30d82c13018ff92ca9a786199 to e8dec301fbfe25ff72c521096267632512bb9b92
Branch pushed to git repo; I updated commit sha1. New commits:
e8dec30  bugfix: reducible cartan types have no opposition involution

comment:10 Changed 3 years ago by
 Commit changed from e8dec301fbfe25ff72c521096267632512bb9b92 to cda3cce4b7c34a13b20df4f61a74517c43d2aebf
Branch pushed to git repo; I updated commit sha1. New commits:
cda3cce  fusion_basis method

comment:11 Changed 3 years ago by
I implemented fusion_basis
method using RecursivelyEnumeratedSet
. Travis, feel free to change basis per comments 6 and 8.
I also fixed a bug that broke WeylCharacterRing? for reducible types.
comment:12 Changed 3 years ago by
 Keywords Fusion Ring Verlinde Algebra added
 Status changed from new to needs_review
 Work issues The conjugation method needs to be created. deleted
comment:13 Changed 3 years ago by
 Commit changed from cda3cce4b7c34a13b20df4f61a74517c43d2aebf to 0555717cee66f7ed9c706fbb77644f0f38ff8795
Branch pushed to git repo; I updated commit sha1. New commits:
0555717  FusionRing becomes a class

comment:14 Changed 3 years ago by
 Commit changed from 0555717cee66f7ed9c706fbb77644f0f38ff8795 to d4166cc3bd9ad1bf50c571672ed8d8df5f52d2f0
Branch pushed to git repo; I updated commit sha1. New commits:
d4166cc  names of basis elements can be customized

comment:15 Changed 3 years ago by
 Commit changed from d4166cc3bd9ad1bf50c571672ed8d8df5f52d2f0 to e52606e8cb53da647b19983439d20f50d481fe45
comment:16 Changed 3 years ago by
 Commit changed from e52606e8cb53da647b19983439d20f50d481fe45 to 49ab394d606e05a71cf4113b789a5e5d26daff39
Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:
49ab394  Making an explicit basis for the fusion rings.

comment:17 Changed 3 years ago by
I made the FusionRing
explicitly construct and set its basis on initialization. One small drawback to this is that a basis has to be constructed at initialization, but it should be relatively quick to compute since it is just adding weights.
One issue I did find and fix is with type A and the ambient space not having a welldefined normalization for the fundamental weights. So I instead converted the ambient weights to be expressed in terms of the fundamental weights (i.e., how style="coroots"
prints) to match up with the fusion_labels
.
comment:18 Changed 3 years ago by
So I think all we need to do at this point to set this to a positive review is to add the appropriate documentation and tests.
comment:19 Changed 3 years ago by
 Commit changed from 49ab394d606e05a71cf4113b789a5e5d26daff39 to ff9871683c0cb3c9b680493cf29f2d8017e25907
Branch pushed to git repo; I updated commit sha1. New commits:
ff98716  make dual a method of the element, not the ring

comment:20 Changed 3 years ago by
So I think all we need to do at this point to set this to a positive review is to add the appropriate documentation and tests.
Most of the new methods have doctests.
I just made a minor change which is to make dual a method of the element, not the ring.
I'm a little dissatisfied that the Smatrix has not been implemented but that can be another patch.
comment:21 Changed 3 years ago by
 Commit changed from ff9871683c0cb3c9b680493cf29f2d8017e25907 to 02fb2383c474bc4f3f8c8d8a41b01c74555ca2b7
Branch pushed to git repo; I updated commit sha1. New commits:
02fb238  added a few doctests

comment:22 Changed 3 years ago by
 Commit changed from 02fb2383c474bc4f3f8c8d8a41b01c74555ca2b7 to 6736b8c8196d11167d44fc647668380781391581
Branch pushed to git repo; I updated commit sha1. New commits:
6736b8c  fusion_weight element is made a method of WeylCharacterRing Elements and renamed highest_weight.

comment:23 Changed 3 years ago by
 Commit changed from 6736b8c8196d11167d44fc647668380781391581 to d18b3d8ad4a449c221d7ec1648216297ae17c2cf
Branch pushed to git repo; I updated commit sha1. New commits:
d18b3d8  doctest for _dual_helper

comment:24 Changed 3 years ago by
 Commit changed from d18b3d8ad4a449c221d7ec1648216297ae17c2cf to 102b00b855ae5c641f741ced0134a84825a04085
Branch pushed to git repo; I updated commit sha1. New commits:
102b00b  Added some doctets, fixed bug with some_elements, moved the refences to master ref file.

comment:25 Changed 3 years ago by
I added some additional doctests, which led me to finding a bug with some_elements
returning elements that are not basis elements of the fusion ring because the level of the fundamental weight is too large. I also moved the references to the masted reference file (and added a bit more details to them). If my changes are good, then you can set a positive review.
comment:26 Changed 3 years ago by
 Status changed from needs_review to positive_review
comment:27 Changed 3 years ago by
 Reviewers set to Travis Scrimshaw
comment:28 Changed 3 years ago by
 Status changed from positive_review to needs_work
Test failures (see patchbot)
comment:29 Changed 3 years ago by
 Commit changed from 102b00b855ae5c641f741ced0134a84825a04085 to 768ca32a5c35fbefd8923acf44d5a84fdc08b3f1
Branch pushed to git repo; I updated commit sha1. New commits:
768ca32  Test for reducibility rather than atomicness for dual.

comment:30 Changed 3 years ago by
 Status changed from needs_work to needs_review
The failures come from the difference between is_atomic
and is_irreducible
. I changed this to the appropriate tests. Please check.
comment:31 Changed 3 years ago by
 Commit changed from 768ca32a5c35fbefd8923acf44d5a84fdc08b3f1 to 7546a0d9c6496761ded1266fd6c423c85e2a1fa0
Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:
7546a0d  Test for reducibility rather than atomicness for dual.

comment:32 Changed 3 years ago by
I also did some small tweaks for speed.
comment:33 Changed 3 years ago by
This passes the tests in weyl_characters.py and I am also able to build the documentation. May I change the status back to positive_review?
comment:34 Changed 3 years ago by
 Status changed from needs_review to positive_review
Thank you. They also pass for me.
comment:35 Changed 3 years ago by
 Branch changed from public/fusion26440 to 7546a0d9c6496761ded1266fd6c423c85e2a1fa0
 Resolution set to fixed
 Status changed from positive_review to closed
New commits:
fusion algebras from weyl character rings