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: sage-8.4
Component: combinatorics Keywords: Fusion Ring, Verlinde Algebra
Cc: tscrim, sage-combinat, bump Merged in:
Authors: Daniel Bump Reviewers: Travis Scrimshaw
Report Upstream: N/A Work issues:
Branch: 7546a0d (Commits, GitHub, GitLab) Commit: 7546a0d9c6496761ded1266fd6c423c85e2a1fa0
Dependencies: Stopgaps:

Status badges

Description (last modified by bump)

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 Kac-Walton algorithm for computing the fusion products is closely similar to the Brauer-Klimyk (aka Racah-Speiser) 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 Kac-Moody algebras.

A related patch is #15485.

Change History (35)

comment:1 Changed 3 years ago by bump

  • Description modified (diff)
  • Owner changed from (none) to bump
  • Type changed from PLEASE CHANGE to enhancement

comment:2 Changed 3 years ago by bump

  • Branch set to public/fusion-26440
  • Commit set to ed039bab16e4976443cf89713dbfd6e55d3b0980

New commits:

ed039bafusion algebras from weyl character rings

comment:3 Changed 3 years ago by git

  • Commit changed from ed039bab16e4976443cf89713dbfd6e55d3b0980 to 2b75fb534856524bf33bc9506b4e059fc86a27e0

Branch pushed to git repo; I updated commit sha1. New commits:

2b75fb5contragredient or conjugation map

comment:4 Changed 3 years ago by git

  • Commit changed from 2b75fb534856524bf33bc9506b4e059fc86a27e0 to cada3b3a887c4ca30d82c13018ff92ca9a786199

Branch pushed to git repo; I updated commit sha1. New commits:

cada3b3don't import Matrix

comment:5 follow-up: Changed 3 years ago by 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 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 tscrim

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 from CombinatorialFreeModule.

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 finite-dimensional, 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 follow-up: Changed 3 years ago by 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)?

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 tscrim

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., -\Lambda1 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 E7 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 git

  • Commit changed from cada3b3a887c4ca30d82c13018ff92ca9a786199 to e8dec301fbfe25ff72c521096267632512bb9b92

Branch pushed to git repo; I updated commit sha1. New commits:

e8dec30bugfix: reducible cartan types have no opposition involution

comment:10 Changed 3 years ago by git

  • Commit changed from e8dec301fbfe25ff72c521096267632512bb9b92 to cda3cce4b7c34a13b20df4f61a74517c43d2aebf

Branch pushed to git repo; I updated commit sha1. New commits:

cda3ccefusion_basis method

comment:11 Changed 3 years ago by bump

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 bump

  • 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 git

  • Commit changed from cda3cce4b7c34a13b20df4f61a74517c43d2aebf to 0555717cee66f7ed9c706fbb77644f0f38ff8795

Branch pushed to git repo; I updated commit sha1. New commits:

0555717FusionRing becomes a class

comment:14 Changed 3 years ago by git

  • Commit changed from 0555717cee66f7ed9c706fbb77644f0f38ff8795 to d4166cc3bd9ad1bf50c571672ed8d8df5f52d2f0

Branch pushed to git repo; I updated commit sha1. New commits:

d4166ccnames of basis elements can be customized

comment:15 Changed 3 years ago by git

  • Commit changed from d4166cc3bd9ad1bf50c571672ed8d8df5f52d2f0 to e52606e8cb53da647b19983439d20f50d481fe45

Branch pushed to git repo; I updated commit sha1. New commits:

246239dMerge branch 'public/fusion-26440' of git://trac.sagemath.org/sage into public/fusion-26440
e52606eMaking an explicit basis for the fusion rings.

comment:16 Changed 3 years ago by git

  • Commit changed from e52606e8cb53da647b19983439d20f50d481fe45 to 49ab394d606e05a71cf4113b789a5e5d26daff39

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

49ab394Making an explicit basis for the fusion rings.

comment:17 Changed 3 years ago by tscrim

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 well-defined 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 tscrim

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 git

  • Commit changed from 49ab394d606e05a71cf4113b789a5e5d26daff39 to ff9871683c0cb3c9b680493cf29f2d8017e25907

Branch pushed to git repo; I updated commit sha1. New commits:

ff98716make dual a method of the element, not the ring

comment:20 Changed 3 years ago by bump

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 S-matrix has not been implemented but that can be another patch.

comment:21 Changed 3 years ago by git

  • Commit changed from ff9871683c0cb3c9b680493cf29f2d8017e25907 to 02fb2383c474bc4f3f8c8d8a41b01c74555ca2b7

Branch pushed to git repo; I updated commit sha1. New commits:

02fb238added a few doctests

comment:22 Changed 3 years ago by git

  • Commit changed from 02fb2383c474bc4f3f8c8d8a41b01c74555ca2b7 to 6736b8c8196d11167d44fc647668380781391581

Branch pushed to git repo; I updated commit sha1. New commits:

6736b8cfusion_weight element is made a method of WeylCharacterRing Elements and renamed highest_weight.

comment:23 Changed 3 years ago by git

  • Commit changed from 6736b8c8196d11167d44fc647668380781391581 to d18b3d8ad4a449c221d7ec1648216297ae17c2cf

Branch pushed to git repo; I updated commit sha1. New commits:

d18b3d8doctest for _dual_helper

comment:24 Changed 3 years ago by git

  • Commit changed from d18b3d8ad4a449c221d7ec1648216297ae17c2cf to 102b00b855ae5c641f741ced0134a84825a04085

Branch pushed to git repo; I updated commit sha1. New commits:

102b00bAdded some doctets, fixed bug with some_elements, moved the refences to master ref file.

comment:25 Changed 3 years ago by tscrim

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 bump

  • Status changed from needs_review to positive_review

comment:27 Changed 3 years ago by tscrim

  • Authors changed from bump to Daniel Bump
  • Reviewers set to Travis Scrimshaw

comment:28 Changed 3 years ago by vbraun

  • Status changed from positive_review to needs_work

Test failures (see patchbot)

comment:29 Changed 3 years ago by git

  • Commit changed from 102b00b855ae5c641f741ced0134a84825a04085 to 768ca32a5c35fbefd8923acf44d5a84fdc08b3f1

Branch pushed to git repo; I updated commit sha1. New commits:

768ca32Test for reducibility rather than atomicness for dual.

comment:30 Changed 3 years ago by tscrim

  • 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 git

  • Commit changed from 768ca32a5c35fbefd8923acf44d5a84fdc08b3f1 to 7546a0d9c6496761ded1266fd6c423c85e2a1fa0

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

7546a0dTest for reducibility rather than atomicness for dual.

comment:32 Changed 3 years ago by tscrim

I also did some small tweaks for speed.

comment:33 Changed 3 years ago by bump

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 tscrim

  • Status changed from needs_review to positive_review

Thank you. They also pass for me.

comment:35 Changed 3 years ago by vbraun

  • Branch changed from public/fusion-26440 to 7546a0d9c6496761ded1266fd6c423c85e2a1fa0
  • Resolution set to fixed
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.