Fundamental Group of an Extended Affine Weyl Group

AUTHORS:

  • Mark Shimozono (2013) initial version
class sage.combinat.root_system.fundamental_group.FundamentalGroupElement(parent, x)

Bases: sage.structure.element.MultiplicativeGroupElement

This should not be called directly

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: x = FundamentalGroupOfExtendedAffineWeylGroup(['A',4,1], prefix="f").an_element()
sage: TestSuite(x).run()
act_on_affine_lattice(wt)

Act by self on the element wt of an affine root/weight lattice realization.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1])
sage: wt = RootSystem(F.cartan_type()).weight_lattice().an_element(); wt
2*Lambda[0] + 2*Lambda[1] + 3*Lambda[2]
sage: F(3).act_on_affine_lattice(wt)
2*Lambda[0] + 3*Lambda[1] + 2*Lambda[3]

Warning

Doesn’t work on ambient spaces.

act_on_affine_weyl(w)

Act by self on the element w of the affine Weyl group.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1])
sage: W = WeylGroup(F.cartan_type(),prefix="s")
sage: w = W.from_reduced_word([2,3,0])
sage: F(1).act_on_affine_weyl(w).reduced_word()
[3, 0, 1]
inverse()

Return the inverse element of self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1])
sage: F(1).inverse()
pi[3]
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['E',6,1], prefix="f")
sage: F(1).inverse()
f[6]
value()

Return the special node which indexes the special automorphism self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',4,1], prefix="f")
sage: F.special_nodes()
(0, 1, 2, 3, 4)
sage: x = F(4); x
f[4]
sage: x.value()
4
class sage.combinat.root_system.fundamental_group.FundamentalGroupGL(cartan_type, prefix='pi')

Bases: sage.combinat.root_system.fundamental_group.FundamentalGroupOfExtendedAffineWeylGroup_Class

Fundamental group of GL_n. It is just the integers with extra privileges.

Element

alias of FundamentalGroupGLElement

action(i)

The action of the i-th automorphism on the affine Dynkin node set.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True)
sage: F.action(4)(2)
0
sage: F.action(-4)(2)
1
an_element()

An element of self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True).an_element()
pi[5]
dual_node(i)

The node whose special automorphism is inverse to that of i.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True)
sage: F.dual_node(2)
-2
family()

The family associated with the set of special nodes.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: fam = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True).family() # indirect doctest
sage: fam
Lazy family (<lambda>(i))_{i in Integer Ring}
sage: fam[-3]
-3
group_generators()

Return group generators for self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True).group_generators()
(pi[1],)
one()

Return the identity element of the fundamental group.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True).one()
pi[0]
product(x, y)

Return the product of x and y.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True)
sage: F.special_nodes()
Integer Ring
sage: F(2)*F(3)
pi[5]
sage: F(1)*F(3)^(-1)
pi[-2]
reduced_word(i)

A reduced word for the finite permutation part of the special automorphism indexed by i.

More precisely, return a reduced word for the finite Weyl group element u where i-th automorphism (expressed in the extended affine Weyl group) has the form t u where t is a translation element.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True)
sage: F.reduced_word(10)
(1, 2)
some_elements()

Return some elements of self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True).some_elements()
[pi[-2], pi[2], pi[5]]
class sage.combinat.root_system.fundamental_group.FundamentalGroupGLElement(parent, x)

Bases: sage.combinat.root_system.fundamental_group.FundamentalGroupElement

This should not be called directly

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: x = FundamentalGroupOfExtendedAffineWeylGroup(['A',4,1], prefix="f").an_element()
sage: TestSuite(x).run()
act_on_classical_ambient(wt)

Act by self on the classical ambient weight vector wt.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True)
sage: f = F.an_element(); f
pi[5]
sage: la = F.cartan_type().classical().root_system().ambient_space().an_element(); la
(2, 2, 3)
sage: f.act_on_classical_ambient(la)
(2, 3, 2)
sage.combinat.root_system.fundamental_group.FundamentalGroupOfExtendedAffineWeylGroup(cartan_type, prefix='pi', general_linear=None)

Factory for the fundamental group of an extended affine Weyl group.

INPUT:

  • cartan_type – a Cartan type that is either affine or finite, with the latter being a shorthand for the untwisted affinization
  • prefix (default: ‘pi’) – string that labels the elements of the group
  • general_linear – (default: None, meaning False) In untwisted type A, if True, use the universal central extension

Fundamental group

Associated to each affine Cartan type \tilde{X} is an extended affine Weyl group E. Its subgroup of length-zero elements is called the fundamental group F. The group F can be identified with a subgroup of the group of automorphisms of the affine Dynkin diagram. As such, every element of F can be viewed as a permutation of the set I of affine Dynkin nodes.

Let 0 \in I be the distinguished affine node; it is the one whose removal produces the associated finite Cartan type (call it X). A node i \in I is called special if some automorphism of the affine Dynkin diagram, sends 0 to i. The node 0 is always special due to the identity automorphism. There is a bijection of the set of special nodes with the fundamental group. We denote the image of i by \pi_i. The structure of F is determined as follows.

  • \tilde{X} is untwisted – F is isomorphic to P^\vee/Q^\vee where P^\vee and Q^\vee are the coweight and coroot lattices of type X. The group P^\vee/Q^\vee consists of the cosets \omega_i^\vee + Q^\vee for special nodes i, where \omega_0^\vee = 0 by convention. In this case the special nodes i are the cominuscule nodes, the ones such that \omega_i^\vee(\alpha_j) is 0 or 1 for all j\in I_0 = I \setminus \{0\}. For i special, addition by \omega_i^\vee+Q^\vee permutes P^\vee/Q^\vee and therefore permutes the set of special nodes. This permutation extends uniquely to an automorphism of the affine Dynkin diagram.
  • \tilde{X} is dual untwisted – (that is, the dual of \tilde{X} is untwisted) F is isomorphic to P/Q where P and Q are the weight and root lattices of type X. The group P/Q consists of the cosets \omega_i + Q for special nodes i, where \omega_0 = 0 by convention. In this case the special nodes i are the minuscule nodes, the ones such that \alpha_j^\vee(\omega_i) is 0 or 1 for all j \in I_0. For i special, addition by \omega_i+Q permutes P/Q and therefore permutes the set of special nodes. This permutation extends uniquely to an automorphism of the affine Dynkin diagram.
  • \tilde{X} is mixed – (that is, not of the above two types) F is the trivial group.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1]); F
Fundamental group of type ['A', 3, 1]
sage: F.cartan_type().dynkin_diagram()
0
O-------+
|       |
|       |
O---O---O
1   2   3
A3~
sage: F.special_nodes()
(0, 1, 2, 3)
sage: F(1)^2
pi[2]
sage: F(1)*F(2)
pi[3]
sage: F(3)^(-1)
pi[1]

sage: F = FundamentalGroupOfExtendedAffineWeylGroup("B3"); F
Fundamental group of type ['B', 3, 1]
sage: F.cartan_type().dynkin_diagram()
    O 0
    |
    |
O---O=>=O
1   2   3
B3~
sage: F.special_nodes()
(0, 1)

sage: F = FundamentalGroupOfExtendedAffineWeylGroup("C2"); F
Fundamental group of type ['C', 2, 1]
sage: F.cartan_type().dynkin_diagram()
O=>=O=<=O
0   1   2
C2~
sage: F.special_nodes()
(0, 2)

sage: F = FundamentalGroupOfExtendedAffineWeylGroup("D4"); F
Fundamental group of type ['D', 4, 1]
sage: F.cartan_type().dynkin_diagram()
    O 4
    |
    |
O---O---O
1   |2  3
    |
    O 0
D4~
sage: F.special_nodes()
(0, 1, 3, 4)
sage: (F(4), F(4)^2)
(pi[4], pi[0])

sage: F = FundamentalGroupOfExtendedAffineWeylGroup("D5"); F
Fundamental group of type ['D', 5, 1]
sage: F.cartan_type().dynkin_diagram()
  0 O   O 5
    |   |
    |   |
O---O---O---O
1   2   3   4
D5~
sage: F.special_nodes()
(0, 1, 4, 5)
sage: (F(5), F(5)^2, F(5)^3, F(5)^4)
(pi[5], pi[1], pi[4], pi[0])
sage: F = FundamentalGroupOfExtendedAffineWeylGroup("E6"); F
Fundamental group of type ['E', 6, 1]
sage: F.cartan_type().dynkin_diagram()
        O 0
        |
        |
        O 2
        |
        |
O---O---O---O---O
1   3   4   5   6
E6~
sage: F.special_nodes()
(0, 1, 6)
sage: F(1)^2
pi[6]

sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['D',4,2]); F
Fundamental group of type ['C', 3, 1]^*
sage: F.cartan_type().dynkin_diagram()
O=<=O---O=>=O
0   1   2   3
C3~*
sage: F.special_nodes()
(0, 3)

We also implement a fundamental group for GL_n. It is defined to be the group of integers, which is the covering group of the fundamental group Z/nZ for affine SL_n:

sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True); F
Fundamental group of GL(3)
sage: x = F.an_element(); x
pi[5]
sage: x*x
pi[10]
sage: x.inverse()
pi[-5]
sage: wt = F.cartan_type().classical().root_system().ambient_space().an_element(); wt
(2, 2, 3)
sage: x.act_on_classical_ambient(wt)
(2, 3, 2)
sage: w = WeylGroup(F.cartan_type(),prefix="s").an_element(); w
s0*s1*s2
sage: x.act_on_affine_weyl(w)
s2*s0*s1
class sage.combinat.root_system.fundamental_group.FundamentalGroupOfExtendedAffineWeylGroup_Class(cartan_type, prefix, finite=True)

Bases: sage.structure.unique_representation.UniqueRepresentation, sage.structure.parent.Parent

The group of length zero elements in the extended affine Weyl group.

Element

alias of FundamentalGroupElement

action(i)

Return a function which permutes the affine Dynkin node set by the i-th special automorphism.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1])
sage: [[(i, j, F.action(i)(j)) for j in F.index_set()] for i in F.special_nodes()]
[[(0, 0, 0), (0, 1, 1), (0, 2, 2)], [(1, 0, 1), (1, 1, 2), (1, 2, 0)], [(2, 0, 2), (2, 1, 0), (2, 2, 1)]]
sage: G = FundamentalGroupOfExtendedAffineWeylGroup(['D',4,1])
sage: [[(i, j, G.action(i)(j)) for j in G.index_set()] for i in G.special_nodes()]
[[(0, 0, 0), (0, 1, 1), (0, 2, 2), (0, 3, 3), (0, 4, 4)], [(1, 0, 1), (1, 1, 0), (1, 2, 2), (1, 3, 4), (1, 4, 3)], [(3, 0, 3), (3, 1, 4), (3, 2, 2), (3, 3, 0), (3, 4, 1)], [(4, 0, 4), (4, 1, 3), (4, 2, 2), (4, 3, 1), (4, 4, 0)]]
an_element()

Return an element of self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',4,1],prefix="f").an_element()
f[4]
cartan_type()

The Cartan type of self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1]).cartan_type()
['A', 3, 1]
dual_node(i)

Return the node that indexes the inverse of the i-th element.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',4,1])
sage: [(i, F.dual_node(i)) for i in F.special_nodes()]
[(0, 0), (1, 4), (2, 3), (3, 2), (4, 1)]
sage: G = FundamentalGroupOfExtendedAffineWeylGroup(['E',6,1])
sage: [(i, G.dual_node(i)) for i in G.special_nodes()]
[(0, 0), (1, 6), (6, 1)]
sage: H = FundamentalGroupOfExtendedAffineWeylGroup(['D',5,1])
sage: [(i, H.dual_node(i)) for i in H.special_nodes()]
[(0, 0), (1, 1), (4, 5), (5, 4)]
group_generators()

Return a tuple of generators of the fundamental group.

Warning

This returns the entire group, a necessary behavior because it is used in __iter__().

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['E',6,1],prefix="f").group_generators()
Finite family {0: f[0], 1: f[1], 6: f[6]}
index_set()

The node set of the affine Cartan type of self.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1]).index_set()
(0, 1, 2)
one()

Return the identity element of the fundamental group.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1])
sage: F.one()
pi[0]
product(x, y)

Return the product of x and y.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1])
sage: F.special_nodes()
(0, 1, 2, 3)
sage: F(2)*F(3)
pi[1]
sage: F(1)*F(3)^(-1)
pi[2]
reduced_word(i)

Return a reduced word for the finite Weyl group element associated with the i-th special automorphism.

More precisely, for each special node i, self.reduced_word(i) is a reduced word for the element v in the finite Weyl group such that in the extended affine Weyl group, the i-th special automorphism is equal to t v where t is a translation element.

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: F = FundamentalGroupOfExtendedAffineWeylGroup(['A',3,1])
sage: [(i, F.reduced_word(i)) for i in F.special_nodes()]
[(0, ()), (1, (1, 2, 3)), (2, (2, 1, 3, 2)), (3, (3, 2, 1))]
special_nodes()

Return the special nodes of self.

See sage.combinat.root_system.cartan_type.special_nodes().

EXAMPLES:

sage: from sage.combinat.root_system.fundamental_group import FundamentalGroupOfExtendedAffineWeylGroup
sage: FundamentalGroupOfExtendedAffineWeylGroup(['D',4,1]).special_nodes()
(0, 1, 3, 4)
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1]).special_nodes()
(0, 1, 2)
sage: FundamentalGroupOfExtendedAffineWeylGroup(['C',3,1]).special_nodes()
(0, 3)
sage: FundamentalGroupOfExtendedAffineWeylGroup(['D',4,2]).special_nodes()
(0, 3)
sage: FundamentalGroupOfExtendedAffineWeylGroup(['A',2,1], general_linear=True).special_nodes()
Integer Ring