Opened 6 years ago
Closed 5 years ago
#15361 closed enhancement (fixed)
Branching Rules for Exceptional Groups
Reported by:  bump  Owned by:  bump 

Priority:  major  Milestone:  sage6.1 
Component:  combinatorics  Keywords:  
Cc:  bump, sagecombinat, vbraun  Merged in:  
Authors:  Daniel Bump  Reviewers:  Volker Braun 
Report Upstream:  N/A  Work issues:  
Branch:  public/combinat/15361branchingrules (Commits)  Commit:  d3e1db5eef471eb9eb935804c011085e6aa0ac49 
Dependencies:  Stopgaps: 
Description (last modified by )
Branching rules for Lie groups are mostly already implemented in weyl_characters
. That is, if G is a Lie group and H a subgroup (maximal without loss of generality) we can compute the branching rule from G => H
in most cases, always if G is of classical type, and sometimes if G is an exceptional group.
Before the patch, the following rules are not implemented.
E6 => C4 , A2 , G2 , A2xG2 E7 => A2 , A1 , A1 , A1xF4 , G2xC3 , A1xG2 , A1xA1 E8 => G2xF4 , C2 , A1xA2 , A1 , A1 , A1 F4 => A1 , A1xG2 G2 => A1
With the patch, ALL of these are now implemented in Sage. After the patch, every branching rule in the tables of McKay? and Patera (Tables of dimensions, indices and branching rules for representations of simple Lie algebras) is available in Sage!
Here is a file that constructs the branching rule for every maximal subgroup of every simple Lie group of rank less than or equal to 8. This includes every case considered by McKay? and Patera, and every exceptional group.
http://sporadic.stanford.edu/bump/branchtable.sage
The embeddings are described in the thematic tutorial. I've posted a copy of the patched tutorial and reference manual on sporadic.stanford.edu. The relevant sections are here:
http://sporadic.stanford.edu/thematic_tutorials/lie/branching_rules.html
http://sporadic.stanford.edu/reference/combinat/sage/combinat/root_system/weyl_characters.html
http://sporadic.stanford.edu/reference/combinat/sage/combinat/root_system/branching_rules.html
The patch makes a class BranchingRule? for branching rules. Notable methods are a multiplication corresponding to composition, and a describe()
method for branching rules which shows how simple roots and the affine root restrict. The multiplication gives a better method of concatenating branching rules. A projection method for composite types is given. The goals set out in Comment 6 are all achieved. The thematic tutorial is revised.
Since weyl_characters.py was getting huge, I split it, moving the branching rule material into a new file, branching_rules.py.
Change History (76)
comment:1 Changed 6 years ago by
 Description modified (diff)
comment:2 Changed 6 years ago by
 Description modified (diff)
comment:3 Changed 6 years ago by
 Description modified (diff)
comment:4 Changed 6 years ago by
 Branch set to public/combinat/15361branchingrules
 Commit set to 5feebdbfa73f64dafe28a5e4fe0144ab36083ab0
comment:5 Changed 6 years ago by
 Description modified (diff)
comment:6 Changed 6 years ago by
comment:7 Changed 6 years ago by
 Description modified (diff)
comment:8 Changed 6 years ago by
 Commit changed from 5feebdbfa73f64dafe28a5e4fe0144ab36083ab0 to 35f73af5fbf79ab782dd2572711beb1682a7f389
Branch pushed to git repo; I updated commit sha1. New commits:
35f73af  implemented E6>G2xA2 branching rule and corrected wrong timing info on long tests 
comment:9 Changed 6 years ago by
 Cc vbraun added
comment:10 Changed 6 years ago by
 Commit changed from 35f73af5fbf79ab782dd2572711beb1682a7f389 to fa2255a6ebd944a43d39c86d957f1855ad19e098
Branch pushed to git repo; I updated commit sha1. New commits:
fa2255a  implemented multiplication of branching rules 
ecadb7a  Merge branch 'public/combinat/15361branchingrules' of trac.sagemath.org:sage into 15361branchingrules 
dcd5477  updated timing information and implemented E6>G2xA2 branching rule 
36e6b24  make CartanType? idempotent in get_branching_rule 
comment:11 Changed 6 years ago by
 Commit changed from fa2255a6ebd944a43d39c86d957f1855ad19e098 to 3372f1e1bd04efa834d33c11c8b786c2a7b7ecb7
Branch pushed to git repo; I updated commit sha1. New commits:
3372f1e  revision of branching rules, including composite rules 
comment:12 Changed 6 years ago by
 Commit changed from 3372f1e1bd04efa834d33c11c8b786c2a7b7ecb7 to 9b2121d67b840ff60ee820b7b860534841596821
Branch pushed to git repo; I updated commit sha1. New commits:
9b2121d  F4 => G2xA1 branching rule implemented 
comment:13 Changed 6 years ago by
 Commit changed from 9b2121d67b840ff60ee820b7b860534841596821 to 0bf9e4021a272e919ee0785c739ecc5c1341f36a
comment:14 Changed 6 years ago by
 Commit changed from 0bf9e4021a272e919ee0785c739ecc5c1341f36a to 4a4bac8fd0836c56c9c67232b04a6c09c87fb3b5
Branch pushed to git repo; I updated commit sha1. New commits:
4a4bac8  corrections and revisions to existing branching rules and tests 
37ad3a2  Use compact representation for Cartan type in WeylCharacterRing? repr method 
comment:15 Changed 6 years ago by
 Commit changed from 4a4bac8fd0836c56c9c67232b04a6c09c87fb3b5 to e9cceada2d9fe93becda2d667588c893931e3dc8
Branch pushed to git repo; I updated commit sha1. New commits:
e9ccead  further cleanup and corrections 
comment:16 Changed 6 years ago by
 Commit changed from e9cceada2d9fe93becda2d667588c893931e3dc8 to efb2a920c00fabbf750266d15086202cdefb1b23
Branch pushed to git repo; I updated commit sha1. New commits:
efb2a92  E8>E7,E7>E6 rules gave correct answers but did not map weight lattice into weight lattice, hence were broke for composition. This is fixed. 
comment:17 Changed 6 years ago by
 Commit changed from efb2a920c00fabbf750266d15086202cdefb1b23 to 3ed90567805299bbd3e2507e358291f6429c7b9e
Branch pushed to git repo; I updated commit sha1. New commits:
3ed9056  projection branching for reducible types 
comment:18 Changed 6 years ago by
 Commit changed from 3ed90567805299bbd3e2507e358291f6429c7b9e to e656f782fb1dea3bcab96d0154b2b675d861d7e2
Branch pushed to git repo; I updated commit sha1. New commits:
e656f78  improved repr for class BranchingRule? 
comment:19 Changed 6 years ago by
 Commit changed from e656f782fb1dea3bcab96d0154b2b675d861d7e2 to c1e91073169134e77a0b47858450110d85274e3a
Branch pushed to git repo; I updated commit sha1. New commits:
c1e9107  revised G2=>A2 rule, added describe() method to class BranchingRule? 
a8cbda3  revisions to repr method of BranchingRule? 
comment:20 Changed 6 years ago by
 Commit changed from c1e91073169134e77a0b47858450110d85274e3a to 6b31a25eb19e519a33cd581e1043ca2483ae13ab
Branch pushed to git repo; I updated commit sha1. New commits:
6b31a25  describe method of BranchingRule? 
comment:21 Changed 6 years ago by
 Commit changed from 6b31a25eb19e519a33cd581e1043ca2483ae13ab to 59b98683dbd36bedcb17ed2bf843805c1b4434ba
Branch pushed to git repo; I updated commit sha1. New commits:
59b9868  revised test for describe method 
comment:22 Changed 6 years ago by
 Commit changed from 59b98683dbd36bedcb17ed2bf843805c1b4434ba to 8de25326bfe0c9a2253004c9a32a7d8eb156eee8
Branch pushed to git repo; I updated commit sha1. New commits:
8de2532  work on describe method of BranchingRule? 
comment:23 Changed 6 years ago by
 Milestone changed from sage6.0 to sage6.1
comment:24 Changed 6 years ago by
 Commit changed from 8de25326bfe0c9a2253004c9a32a7d8eb156eee8 to 5e9a05da4ceab341410de7f57f9578fde62ea2ee
Branch pushed to git repo; I updated commit sha1. New commits:
5e9a05d  revision of describe method, E6 => G2xA2 branching 
comment:25 Changed 6 years ago by
 Commit changed from 5e9a05da4ceab341410de7f57f9578fde62ea2ee to 98e2002372c737c7d41330735bfadbdf907aa7bf
Branch pushed to git repo; I updated commit sha1. New commits:
98e2002  fundamental weight restrictions added to describe method for BranchingRule

comment:26 Changed 6 years ago by
 Commit changed from 98e2002372c737c7d41330735bfadbdf907aa7bf to b4a5cceb9fc1c8c8ca37042913db2bbbf12886fa
Branch pushed to git repo; I updated commit sha1. New commits:
b4a5cce  revision of thematic tutorials regarding branching rules

comment:27 Changed 6 years ago by
 Commit changed from b4a5cceb9fc1c8c8ca37042913db2bbbf12886fa to 2d8bd61565b9648c0c6864a6e5c95a12fd48dc35
Branch pushed to git repo; I updated commit sha1. New commits:
2d8bd61  E7 => G2xC3 branching rule implemented.

comment:28 Changed 6 years ago by
 Description modified (diff)
 Status changed from new to needs_review
 Type changed from PLEASE CHANGE to enhancement
comment:29 Changed 6 years ago by
 Commit changed from 2d8bd61565b9648c0c6864a6e5c95a12fd48dc35 to 95d9098e7cfd19b419bbad0b764c2f7edba7ee26
Branch pushed to git repo; I updated commit sha1. New commits:
95d9098  doc revision regarding orthogonal branching rules

comment:30 Changed 6 years ago by
 Commit changed from 95d9098e7cfd19b419bbad0b764c2f7edba7ee26 to 7e3878684d1b0502c3f434aa4ead26e10992e52c
Branch pushed to git repo; I updated commit sha1. New commits:
7e38786  thematic tutorial revision

comment:31 Changed 6 years ago by
 Commit changed from 7e3878684d1b0502c3f434aa4ead26e10992e52c to e8c63391a93031917f675e7624ec2ee6db0805c5
Branch pushed to git repo; I updated commit sha1. New commits:
e8c6339  added OCI acknowledgement

comment:32 Changed 6 years ago by
 Commit changed from e8c63391a93031917f675e7624ec2ee6db0805c5 to db39e9256986b10ffe67551215734dc33cc34c60
comment:33 Changed 6 years ago by
 Description modified (diff)
comment:34 Changed 6 years ago by
 Description modified (diff)
comment:35 Changed 6 years ago by
 Commit changed from db39e9256986b10ffe67551215734dc33cc34c60 to ac6cfe370c047dea0e5a81c9d2c89d83a0dd587f
Branch pushed to git repo; I updated commit sha1. New commits:
ac6cfe3  several rules implemented, including A1 embeddings into exceptional groups.

comment:36 Changed 6 years ago by
 Description modified (diff)
comment:37 Changed 6 years ago by
 Description modified (diff)
comment:38 Changed 5 years ago by
 Commit changed from ac6cfe370c047dea0e5a81c9d2c89d83a0dd587f to 4fffc86f471c83b5ff877f5e8cc6db8266c95705
Branch pushed to git repo; I updated commit sha1. New commits:
4fffc86  added branching rules E6 => G2,A2 per Testerman (1989)

comment:39 Changed 5 years ago by
 Commit changed from 4fffc86f471c83b5ff877f5e8cc6db8266c95705 to d8c75d9bed6e49a0b8fbcd0350c51ba93f48e9dd
Branch pushed to git repo; I updated commit sha1. New commits:
d8c75d9  thematic tutorial: minor cleanup

comment:40 Changed 5 years ago by
 Description modified (diff)
comment:41 Changed 5 years ago by
 Description modified (diff)
comment:42 Changed 5 years ago by
 Commit changed from d8c75d9bed6e49a0b8fbcd0350c51ba93f48e9dd to 7185c7d7716578a4eac894625b50ee3c1dfc2e6e
Branch pushed to git repo; I updated commit sha1. New commits:
7185c7d  thematic tutorial: minor cleanup

comment:43 Changed 5 years ago by
 Commit changed from 7185c7d7716578a4eac894625b50ee3c1dfc2e6e to e68046a516cd213caad3967a8dbe3df09f5c7d30
Branch pushed to git repo; I updated commit sha1. New commits:
e68046a  E7=>A1xA1 branching rule implemented

comment:44 Changed 5 years ago by
 Description modified (diff)
comment:45 Changed 5 years ago by
 Commit changed from e68046a516cd213caad3967a8dbe3df09f5c7d30 to 0868d1c84fd1d96d6a07c9a19011eab2b01818e4
comment:46 Changed 5 years ago by
 Description modified (diff)
comment:47 Changed 5 years ago by
 Commit changed from 0868d1c84fd1d96d6a07c9a19011eab2b01818e4 to f0474ad1022dbc79085b82c694da819686b5d307
Branch pushed to git repo; I updated commit sha1. New commits:
f0474ad  E7 => A2 branching rule implemented

comment:48 Changed 5 years ago by
 Description modified (diff)
comment:49 Changed 5 years ago by
 Commit changed from f0474ad1022dbc79085b82c694da819686b5d307 to 2afcfe7e8764e69a2690a4dcc2434ef25178386a
Branch pushed to git repo; I updated commit sha1. New commits:
2afcfe7  E8 => B2 rule implemented. Exceptional branching rules are now complete

comment:50 Changed 5 years ago by
 Description modified (diff)
 Owner changed from (none) to bump
comment:51 Changed 5 years ago by
 Commit changed from 2afcfe7e8764e69a2690a4dcc2434ef25178386a to e45ae6fcac5e47883140bcb037c896ce9123bc45
Branch pushed to git repo; I updated commit sha1. New commits:
e45ae6f  tutorial fixup

comment:52 Changed 5 years ago by
 Commit changed from e45ae6fcac5e47883140bcb037c896ce9123bc45 to 5fbd7f6d674dfd53eb70cba009fa6294cac68db1
Branch pushed to git repo; I updated commit sha1. New commits:
5fbd7f6  alternative method of constructing plethysm branching rules

comment:53 Changed 5 years ago by
 Description modified (diff)
comment:54 Changed 5 years ago by
 Commit changed from 5fbd7f6d674dfd53eb70cba009fa6294cac68db1 to 7e13c8cb16b765faa4938e628ae2220af43cba36
Branch pushed to git repo; I updated commit sha1. New commits:
7e13c8c  implemented maximal subgroups function

comment:55 Changed 5 years ago by
 Commit changed from 7e13c8cb16b765faa4938e628ae2220af43cba36 to 21f0aeab6109461403416544e7ddead58d67436e
Branch pushed to git repo; I updated commit sha1. New commits:
21f0aea  minor docfixes

comment:56 Changed 5 years ago by
 Commit changed from 21f0aeab6109461403416544e7ddead58d67436e to faec22739d4590ddc1cc5d72490f5381fbb908fd
Branch pushed to git repo; I updated commit sha1. New commits:
faec227  moved branching code to branching_rules.py

comment:57 Changed 5 years ago by
 Description modified (diff)
comment:58 Changed 5 years ago by
 Description modified (diff)
comment:59 Changed 5 years ago by
I'm looking at the code and its great. One worry that I have is that the global maximal_subgroups
can lead to confusion, as a user would probably expect
sage: maximal_subgroups(SymmetricGroup(4))
to work as well. Also, global functions can't be discovered through tab completion. Is there any reason for not making it a method like
sage: A4 = WeylCharacterRing('A4') sage: A4.maximal_subgroups()
Also, it is nice to be able to print a table of subgroups but the most useful thing in actual computations is to return objects that one can work with. So maybe make mode='get_rule'
the default?
comment:60 Changed 5 years ago by
There are two suggestions here. I think I agree with the first though there was a rationale for making maximal_subgroups global: this was that as it stands one may call it without creating the WeylCharacterRing?. So if you wanted to explore the subgroup lattice by descending through various subgroups this would be an advantage.
Still I agree with the comment.
For the second, if one is making maximal_subgroups a method, one might have two different methods and avoid the question of which is default. The question remains how to name them ...
comment:61 Changed 5 years ago by
I see. I don't have a particular suggestion for method names... maximal_subgroups()
vs. maximal_subgroups_table()
? A third option would be to write a custom container for the subgroups that behaves like a dictionary but prints like the table, though imho that would be overengineered for the problem at hand.
comment:62 followup: ↓ 64 Changed 5 years ago by
In the "Nonmaximal Levi subgroups and Projection from Reducible Types" section you say that 'branching_rule("E6","A5","levi") returns a notimplemented error'. But you did implement it in this patch ;) Its a good example, maybe just change it to say that it used to be not implemented (although it works now). Is there any Levi branching rule that still needs manual intervention? Maybe that subsection should be changed to just talk about projection to reducible types?
comment:63 followup: ↓ 65 Changed 5 years ago by
Is there an easy way to apply a BranchingRule
to a representation (i.e. a WeylCharacterRing.element_class
)? This seems like it would be one of the most common use cases:
sage: rule = branching_rule("A3", "C2", "symmetric") sage: rep = WeylCharacterRing("A3")(1,0,0,0) sage: rule.branch(rep) # does not exist sage: rep.branch(rule) # does not work sage: rule(rep) # somewhat unexpected result [0, 0]
The only thing I can come up with is the slightly awkward
sage: rep.branch(WeylCharacterRing(rule.Stype()), rule=rule) C2(1,0)
The BranchingRule.__call__
could check for the parent of the argument and simply return the branched representation.
comment:64 in reply to: ↑ 62 Changed 5 years ago by
Replying to vbraun:
Hopefully all branching rules to maximal subgroups are either implemented or constructable as plethysms, but branching to a nonmaximal Levi may or may not be implemented. For example, one of the G2 Levi's is implemented, the other not. (Neither Levi is a maximal subgroup.)
I'll have to correct the documentation per your comment.
In the "Nonmaximal Levi subgroups and Projection from Reducible Types" section you say that 'branching_rule("E6","A5","levi") returns a notimplemented error'. But you did implement it in this patch ;) Its a good example, maybe just change it to say that it used to be not implemented (although it works now). Is there any Levi branching rule that still needs manual intervention? Maybe that subsection should be changed to just talk about projection to reducible types?
comment:65 in reply to: ↑ 63 Changed 5 years ago by
Replying to vbraun:
sage: rep.branch(rule) # does not work
You do need to construct the WeylCharacterRing
you are branching to. The following works.
sage: br = branching_rule("A3", "C2", "symmetric") sage: [A3,C2] = [WeylCharacterRing(x,style="coroots") for x in ["A3","C2"]] sage: rep=A3(1,0,0,0); rep A3(1,0,0) sage: rep.branch(C2, rule=br) C2(1,0)
sage: rule.branch(rep) # does not exist
It does seem like an excellent idea for branch
to also be a method of the branching rule and I'll try to implement that.
comment:66 Changed 5 years ago by
 Commit changed from faec22739d4590ddc1cc5d72490f5381fbb908fd to 4dac78b5945b4e6439dbeabde269572e8207022c
Branch pushed to git repo; I updated commit sha1. New commits:
4dac78b  implemented maximal_subgroup(s) as a WeylCharacterRing method etc.

comment:67 Changed 5 years ago by
 Reviewers set to Volker Braun
 Status changed from needs_review to needs_work
 Work issues set to Thematic tutorial needs further revision
New commits:
4dac78b  implemented maximal_subgroup(s) as a WeylCharacterRing method etc.

comment:68 Changed 5 years ago by
In response to the above discussion, WeylCharacterRing
instances now have two (very similarly named) methods, maximal_subgroups
and maximal_subgroup
. Also, the BranchingRule
class has a branch
method.
The thematic tutorials still need to be revised so I changed the status to needs_work.
comment:69 Changed 5 years ago by
 Commit changed from 4dac78b5945b4e6439dbeabde269572e8207022c to d6de77bbf0df267634315c374dc45d7ab58d98d0
Branch pushed to git repo; I updated commit sha1. New commits:
d6de77b  removed bogus commits

comment:70 Changed 5 years ago by
 Commit changed from d6de77bbf0df267634315c374dc45d7ab58d98d0 to f688ff30f0616187d95bac1d007018d4664b59e5
Branch pushed to git repo; I updated commit sha1. New commits:
f688ff3  reference: branching_rules: minor fixup

comment:71 Changed 5 years ago by
 Commit changed from f688ff30f0616187d95bac1d007018d4664b59e5 to 7ca100a4016c9522b45486e49361352159d3cbba
Branch pushed to git repo; I updated commit sha1. New commits:
7ca100a  revised thematic tutorial regarding maximal_subgroup(s) method

comment:72 Changed 5 years ago by
 Status changed from needs_work to needs_review
I have pushed revisions to the thematic tutorial. I'm changing the status back to needs_review
comment:73 Changed 5 years ago by
 Work issues Thematic tutorial needs further revision deleted
comment:74 Changed 5 years ago by
 Commit changed from 7ca100a4016c9522b45486e49361352159d3cbba to d3e1db5eef471eb9eb935804c011085e6aa0ac49
Branch pushed to git repo; I updated commit sha1. New commits:
d3e1db5  note that the E6>A5 rule is now implemented

comment:76 Changed 5 years ago by
 Resolution set to fixed
 Status changed from needs_review to closed
The principal changes for this ticket are listed above. This comment contains a list of other less important changes.
In both the thematic tutorial and the docstring, hand written rules are discussed. It is omitted to say that the rule should map the positive Weyl chamber into the positive Weyl chamber. The doc should be revised on this point. (It is not *necessary* for the rule to map dominant weights into the positive Weyl chamber but it is desirable.)
In thematic tutorial and docstring, we should explain how to branch
B_r => D_r
andD_r => B_{r1
}. This should go in the section orthogonalandsymplecticsubgroupsoforthogonalandsymplecticgroups of the thematic tutorial. The r=4 case should be used as an example.Some doctests in weyl_characters are marked "long time" with obsolete timing information. For example the doctest [F4(fw).branch(B3,rule="levi") for fw in F4.fundamental_weights()] is given with the timing information 36s. This takes less than a second on my laptop. These misleading timings should be removed.
Branching (rule="levi") from E6 to A5 currently returns an error message, but this branching rule should be implemented.
Branching from composite type needs work: for example, branching from AxB to A or B should be implemented.