Opened 5 years ago

Closed 5 years ago

#15361 closed enhancement (fixed)

Branching Rules for Exceptional Groups

Reported by: bump Owned by: bump
Priority: major Milestone: sage-6.1
Component: combinatorics Keywords:
Cc: bump, sage-combinat, vbraun Merged in:
Authors: Daniel Bump Reviewers: Volker Braun
Report Upstream: N/A Work issues:
Branch: public/combinat/15361-branching-rules (Commits) Commit: d3e1db5eef471eb9eb935804c011085e6aa0ac49
Dependencies: Stopgaps:

Description (last modified by bump)

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/branch-table.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 5 years ago by bump

  • Description modified (diff)

comment:2 Changed 5 years ago by bump

  • Description modified (diff)

comment:3 Changed 5 years ago by bump

  • Description modified (diff)

comment:4 Changed 5 years ago by bump

  • Branch set to public/combinat/15361-branching-rules
  • Commit set to 5feebdbfa73f64dafe28a5e4fe0144ab36083ab0

comment:5 Changed 5 years ago by bump

  • Description modified (diff)

comment:6 Changed 5 years ago by bump

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 and D_r => B_{r-1}. This should go in the section orthogonal-and-symplectic-subgroups-of-orthogonal-and-symplectic-groups 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.

Last edited 5 years ago by bump (previous) (diff)

comment:7 Changed 5 years ago by bump

  • Description modified (diff)

comment:8 Changed 5 years ago by git

  • Commit changed from 5feebdbfa73f64dafe28a5e4fe0144ab36083ab0 to 35f73af5fbf79ab782dd2572711beb1682a7f389

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

35f73afimplemented E6->G2xA2 branching rule and corrected wrong timing info on long tests

comment:9 Changed 5 years ago by vbraun

  • Cc vbraun added

comment:10 Changed 5 years ago by git

  • Commit changed from 35f73af5fbf79ab782dd2572711beb1682a7f389 to fa2255a6ebd944a43d39c86d957f1855ad19e098

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

fa2255aimplemented multiplication of branching rules
ecadb7aMerge branch 'public/combinat/15361-branching-rules' of trac.sagemath.org:sage into 15361-branching-rules
dcd5477updated timing information and implemented E6->G2xA2 branching rule
36e6b24make CartanType? idempotent in get_branching_rule

comment:11 Changed 5 years ago by git

  • Commit changed from fa2255a6ebd944a43d39c86d957f1855ad19e098 to 3372f1e1bd04efa834d33c11c8b786c2a7b7ecb7

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

3372f1erevision of branching rules, including composite rules

comment:12 Changed 5 years ago by git

  • Commit changed from 3372f1e1bd04efa834d33c11c8b786c2a7b7ecb7 to 9b2121d67b840ff60ee820b7b860534841596821

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

9b2121dF4 => G2xA1 branching rule implemented

comment:13 Changed 5 years ago by git

  • Commit changed from 9b2121d67b840ff60ee820b7b860534841596821 to 0bf9e4021a272e919ee0785c739ecc5c1341f36a

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

0bf9e40changed E6=>G2xA2 rule not to use redundant components to weight vector
14601e0E6 => G2xA2 branching rule written without x6 and x7

comment:14 Changed 5 years ago by git

  • Commit changed from 0bf9e4021a272e919ee0785c739ecc5c1341f36a to 4a4bac8fd0836c56c9c67232b04a6c09c87fb3b5

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

4a4bac8corrections and revisions to existing branching rules and tests
37ad3a2Use compact representation for Cartan type in WeylCharacterRing? repr method

comment:15 Changed 5 years ago by git

  • Commit changed from 4a4bac8fd0836c56c9c67232b04a6c09c87fb3b5 to e9cceada2d9fe93becda2d667588c893931e3dc8

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

e9cceadfurther cleanup and corrections

comment:16 Changed 5 years ago by git

  • Commit changed from e9cceada2d9fe93becda2d667588c893931e3dc8 to efb2a920c00fabbf750266d15086202cdefb1b23

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

efb2a92E8->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 5 years ago by git

  • Commit changed from efb2a920c00fabbf750266d15086202cdefb1b23 to 3ed90567805299bbd3e2507e358291f6429c7b9e

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

3ed9056projection branching for reducible types

comment:18 Changed 5 years ago by git

  • Commit changed from 3ed90567805299bbd3e2507e358291f6429c7b9e to e656f782fb1dea3bcab96d0154b2b675d861d7e2

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

e656f78improved repr for class BranchingRule?

comment:19 Changed 5 years ago by git

  • Commit changed from e656f782fb1dea3bcab96d0154b2b675d861d7e2 to c1e91073169134e77a0b47858450110d85274e3a

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

c1e9107revised G2=>A2 rule, added describe() method to class BranchingRule?
a8cbda3revisions to repr method of BranchingRule?

comment:20 Changed 5 years ago by git

  • Commit changed from c1e91073169134e77a0b47858450110d85274e3a to 6b31a25eb19e519a33cd581e1043ca2483ae13ab

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

6b31a25describe method of BranchingRule?

comment:21 Changed 5 years ago by git

  • Commit changed from 6b31a25eb19e519a33cd581e1043ca2483ae13ab to 59b98683dbd36bedcb17ed2bf843805c1b4434ba

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

59b9868revised test for describe method

comment:22 Changed 5 years ago by git

  • Commit changed from 59b98683dbd36bedcb17ed2bf843805c1b4434ba to 8de25326bfe0c9a2253004c9a32a7d8eb156eee8

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

8de2532work on describe method of BranchingRule?

comment:23 Changed 5 years ago by vbraun_spam

  • Milestone changed from sage-6.0 to sage-6.1

comment:24 Changed 5 years ago by git

  • Commit changed from 8de25326bfe0c9a2253004c9a32a7d8eb156eee8 to 5e9a05da4ceab341410de7f57f9578fde62ea2ee

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

5e9a05drevision of describe method, E6 => G2xA2 branching

comment:25 Changed 5 years ago by git

  • Commit changed from 5e9a05da4ceab341410de7f57f9578fde62ea2ee to 98e2002372c737c7d41330735bfadbdf907aa7bf

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

98e2002fundamental weight restrictions added to describe method for BranchingRule

comment:26 Changed 5 years ago by git

  • Commit changed from 98e2002372c737c7d41330735bfadbdf907aa7bf to b4a5cceb9fc1c8c8ca37042913db2bbbf12886fa

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

b4a5ccerevision of thematic tutorials regarding branching rules

comment:27 Changed 5 years ago by git

  • Commit changed from b4a5cceb9fc1c8c8ca37042913db2bbbf12886fa to 2d8bd61565b9648c0c6864a6e5c95a12fd48dc35

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

2d8bd61E7 => G2xC3 branching rule implemented.

comment:28 Changed 5 years ago by bump

  • Description modified (diff)
  • Status changed from new to needs_review
  • Type changed from PLEASE CHANGE to enhancement

comment:29 Changed 5 years ago by git

  • Commit changed from 2d8bd61565b9648c0c6864a6e5c95a12fd48dc35 to 95d9098e7cfd19b419bbad0b764c2f7edba7ee26

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

95d9098doc revision regarding orthogonal branching rules

comment:30 Changed 5 years ago by git

  • Commit changed from 95d9098e7cfd19b419bbad0b764c2f7edba7ee26 to 7e3878684d1b0502c3f434aa4ead26e10992e52c

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

7e38786thematic tutorial revision

comment:31 Changed 5 years ago by git

  • Commit changed from 7e3878684d1b0502c3f434aa4ead26e10992e52c to e8c63391a93031917f675e7624ec2ee6db0805c5

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

e8c6339added OCI acknowledgement

comment:32 Changed 5 years ago by git

  • Commit changed from e8c63391a93031917f675e7624ec2ee6db0805c5 to db39e9256986b10ffe67551215734dc33cc34c60

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

db39e92resolved conflicts in lie.rst
0513937thematic tutorial revisions

comment:33 Changed 5 years ago by bump

  • Description modified (diff)

comment:34 Changed 5 years ago by bump

  • Description modified (diff)

comment:35 Changed 5 years ago by git

  • Commit changed from db39e9256986b10ffe67551215734dc33cc34c60 to ac6cfe370c047dea0e5a81c9d2c89d83a0dd587f

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

ac6cfe3several rules implemented, including A1 embeddings into exceptional groups.

comment:36 Changed 5 years ago by bump

  • Description modified (diff)

comment:37 Changed 5 years ago by bump

  • Description modified (diff)

comment:38 Changed 5 years ago by git

  • Commit changed from ac6cfe370c047dea0e5a81c9d2c89d83a0dd587f to 4fffc86f471c83b5ff877f5e8cc6db8266c95705

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

4fffc86added branching rules E6 => G2,A2 per Testerman (1989)

comment:39 Changed 5 years ago by git

  • Commit changed from 4fffc86f471c83b5ff877f5e8cc6db8266c95705 to d8c75d9bed6e49a0b8fbcd0350c51ba93f48e9dd

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

d8c75d9thematic tutorial: minor cleanup

comment:40 Changed 5 years ago by bump

  • Description modified (diff)

comment:41 Changed 5 years ago by bump

  • Description modified (diff)

comment:42 Changed 5 years ago by git

  • Commit changed from d8c75d9bed6e49a0b8fbcd0350c51ba93f48e9dd to 7185c7d7716578a4eac894625b50ee3c1dfc2e6e

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

7185c7dthematic tutorial: minor cleanup

comment:43 Changed 5 years ago by git

  • Commit changed from 7185c7d7716578a4eac894625b50ee3c1dfc2e6e to e68046a516cd213caad3967a8dbe3df09f5c7d30

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

e68046aE7=>A1xA1 branching rule implemented

comment:44 Changed 5 years ago by bump

  • Description modified (diff)

comment:45 Changed 5 years ago by git

  • Commit changed from e68046a516cd213caad3967a8dbe3df09f5c7d30 to 0868d1c84fd1d96d6a07c9a19011eab2b01818e4

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

0868d1cAdds branching rules E7 => G2xA1 and E8 => A2xA1
e629778work on levi branching

comment:46 Changed 5 years ago by bump

  • Description modified (diff)

comment:47 Changed 5 years ago by git

  • Commit changed from 0868d1c84fd1d96d6a07c9a19011eab2b01818e4 to f0474ad1022dbc79085b82c694da819686b5d307

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

f0474adE7 => A2 branching rule implemented

comment:48 Changed 5 years ago by bump

  • Description modified (diff)

comment:49 Changed 5 years ago by git

  • Commit changed from f0474ad1022dbc79085b82c694da819686b5d307 to 2afcfe7e8764e69a2690a4dcc2434ef25178386a

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

2afcfe7E8 => B2 rule implemented. Exceptional branching rules are now complete

comment:50 Changed 5 years ago by bump

  • Description modified (diff)
  • Owner changed from (none) to bump

comment:51 Changed 5 years ago by git

  • Commit changed from 2afcfe7e8764e69a2690a4dcc2434ef25178386a to e45ae6fcac5e47883140bcb037c896ce9123bc45

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

e45ae6ftutorial fixup

comment:52 Changed 5 years ago by git

  • Commit changed from e45ae6fcac5e47883140bcb037c896ce9123bc45 to 5fbd7f6d674dfd53eb70cba009fa6294cac68db1

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

5fbd7f6alternative method of constructing plethysm branching rules

comment:53 Changed 5 years ago by bump

  • Description modified (diff)

comment:54 Changed 5 years ago by git

  • Commit changed from 5fbd7f6d674dfd53eb70cba009fa6294cac68db1 to 7e13c8cb16b765faa4938e628ae2220af43cba36

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

7e13c8cimplemented maximal subgroups function

comment:55 Changed 5 years ago by git

  • Commit changed from 7e13c8cb16b765faa4938e628ae2220af43cba36 to 21f0aeab6109461403416544e7ddead58d67436e

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

21f0aeaminor docfixes

comment:56 Changed 5 years ago by git

  • Commit changed from 21f0aeab6109461403416544e7ddead58d67436e to faec22739d4590ddc1cc5d72490f5381fbb908fd

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

faec227moved branching code to branching_rules.py

comment:57 Changed 5 years ago by bump

  • Description modified (diff)

comment:58 Changed 5 years ago by bump

  • Description modified (diff)

comment:59 Changed 5 years ago by vbraun

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 bump

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

Last edited 5 years ago by bump (previous) (diff)

comment:61 Changed 5 years ago by vbraun

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

In the "Non-maximal Levi subgroups and Projection from Reducible Types" section you say that 'branching_rule("E6","A5","levi") returns a not-implemented 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?

Last edited 5 years ago by vbraun (previous) (diff)

comment:63 follow-up: Changed 5 years ago by vbraun

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 bump

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 "Non-maximal Levi subgroups and Projection from Reducible Types" section you say that 'branching_rule("E6","A5","levi") returns a not-implemented 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 bump

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.

Last edited 5 years ago by bump (previous) (diff)

comment:66 Changed 5 years ago by git

  • Commit changed from faec22739d4590ddc1cc5d72490f5381fbb908fd to 4dac78b5945b4e6439dbeabde269572e8207022c

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

4dac78bimplemented maximal_subgroup(s) as a WeylCharacterRing method etc.

comment:67 Changed 5 years ago by bump

  • Reviewers set to Volker Braun
  • Status changed from needs_review to needs_work
  • Work issues set to Thematic tutorial needs further revision

New commits:

4dac78bimplemented maximal_subgroup(s) as a WeylCharacterRing method etc.

comment:68 Changed 5 years ago by bump

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.

Last edited 5 years ago by bump (previous) (diff)

comment:69 Changed 5 years ago by git

  • Commit changed from 4dac78b5945b4e6439dbeabde269572e8207022c to d6de77bbf0df267634315c374dc45d7ab58d98d0

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

d6de77bremoved bogus commits

comment:70 Changed 5 years ago by git

  • Commit changed from d6de77bbf0df267634315c374dc45d7ab58d98d0 to f688ff30f0616187d95bac1d007018d4664b59e5

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

f688ff3reference: branching_rules: minor fixup

comment:71 Changed 5 years ago by git

  • Commit changed from f688ff30f0616187d95bac1d007018d4664b59e5 to 7ca100a4016c9522b45486e49361352159d3cbba

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

7ca100arevised thematic tutorial regarding maximal_subgroup(s) method

comment:72 Changed 5 years ago by bump

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

  • Work issues Thematic tutorial needs further revision deleted

comment:74 Changed 5 years ago by git

  • Commit changed from 7ca100a4016c9522b45486e49361352159d3cbba to d3e1db5eef471eb9eb935804c011085e6aa0ac49

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

d3e1db5note that the E6->A5 rule is now implemented

comment:75 Changed 5 years ago by vbraun

  • Authors changed from bump to Daniel Bump

I made a minor edit to the tutorial, rest looks great!

comment:76 Changed 5 years ago by vbraun

  • Resolution set to fixed
  • Status changed from needs_review to closed
Note: See TracTickets for help on using tickets.