Crystals of Modified Nakajima Monomials

AUTHORS:

  • Arthur Lubovsky: Initial version

  • Ben Salisbury: Initial version

Let Yi,k, for iI and kZ, be a commuting set of variables, and let 1 be a new variable which commutes with each Yi,k. (Here, I represents the index set of a Cartan datum.) One may endow the structure of a crystal on the set M^ of monomials of the form

M=(i,k)I×Z0Yi,kyi(k)1.

Elements of M^ are called modified Nakajima monomials. We will omit the 1 from the end of a monomial if there exists at least one yi(k)0. The crystal structure on this set is defined by

wt(M)=iI(k0yi(k))Λi,φi(M)=max{0jkyi(j):k0},εi(M)=φi(M)hi,wt(M),kf=kf(M)=min{k0:φi(M)=0jkyi(j)},ke=ke(M)=max{k0:φi(M)=0jkyi(j)},

where {hi:iI} and {Λi:iI} are the simple coroots and fundamental weights, respectively. With a chosen set of integers C=(cij)ij such that cij+cji=1, one defines

Ai,k=Yi,kYi,k+1jiYj,k+cjiaji,

where (aij) is a Cartan matrix. Then

eiM={0if εi(M)=0,Ai,keMif εi(M)>0,fiM=Ai,kf1M.

It is shown in [KKS2007] that the connected component of M^ containing the element 1, which we denote by M(), is crystal isomorphic to the crystal B().

Let M~ be M^ as a set, and with crystal structure defined as on M^ with the exception that

fiM={0if φi(M)=0,Ai,kf1Mif φi(M)>0.

Then Kashiwara [Ka2003] showed that the connected component in M~ containing a monomial M such that eiM=0, for all iI, is crystal isomorphic to the irreducible highest weight crystal B(wt(M)).

WARNING:

Monomial crystals depend on the choice of positive integers C=(cij)ij satisfying the condition cij+cji=1. We have chosen such integers uniformly such that cij=1 if i<j and cij=0 if i>j.

class sage.combinat.crystals.monomial_crystals.CrystalOfNakajimaMonomials(ct, La, c)[source]

Bases: InfinityCrystalOfNakajimaMonomials

Let M~ be M^ as a set, and with crystal structure defined as on M^ with the exception that

fiM={0if φi(M)=0,Ai,kf1Mif φi(M)>0.

Then Kashiwara [Ka2003] showed that the connected component in M~ containing a monomial M such that eiM=0, for all iI, is crystal isomorphic to the irreducible highest weight crystal B(wt(M)).

INPUT:

  • ct – a Cartan type

  • La – an element of the weight lattice

EXAMPLES:

sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
sage: M = crystals.NakajimaMonomials("A2",La[1]+La[2])
sage: B = crystals.Tableaux("A2",shape=[2,1])
sage: GM = M.digraph()
sage: GB = B.digraph()
sage: GM.is_isomorphic(GB,edge_labels=True)
True

sage: La = RootSystem("G2").weight_lattice().fundamental_weights()
sage: M = crystals.NakajimaMonomials("G2",La[1]+La[2])
sage: B = crystals.Tableaux("G2",shape=[2,1])
sage: GM = M.digraph()
sage: GB = B.digraph()
sage: GM.is_isomorphic(GB,edge_labels=True)
True

sage: La = RootSystem("B2").weight_lattice().fundamental_weights()
sage: M = crystals.NakajimaMonomials(['B',2],La[1]+La[2])
sage: B = crystals.Tableaux("B2",shape=[3/2,1/2])
sage: GM = M.digraph()
sage: GB = B.digraph()
sage: GM.is_isomorphic(GB,edge_labels=True)
True

sage: La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights()
sage: M = crystals.NakajimaMonomials(['A',3,1],La[0]+La[2])
sage: B = crystals.GeneralizedYoungWalls(3,La[0]+La[2])
sage: SM = M.subcrystal(max_depth=4)
sage: SB = B.subcrystal(max_depth=4)
sage: GM = M.digraph(subset=SM) # long time
sage: GB = B.digraph(subset=SB) # long time
sage: GM.is_isomorphic(GB,edge_labels=True) # long time
True

sage: La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
sage: LA = RootSystem(['A',5,2]).weight_space().fundamental_weights()
sage: M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
sage: B = crystals.LSPaths(3*LA[0])
sage: SM = M.subcrystal(max_depth=4)
sage: SB = B.subcrystal(max_depth=4)
sage: GM = M.digraph(subset=SM)
sage: GB = B.digraph(subset=SB)
sage: GM.is_isomorphic(GB,edge_labels=True)
True

sage: c = matrix([[0,1,0],[0,0,1],[1,0,0]])
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
sage: M = crystals.NakajimaMonomials(2*La[1], c=c)
sage: sorted(M.subcrystal(max_depth=3), key=str)
[Y(0,0) Y(0,1) Y(1,0) Y(2,1)^-1,
 Y(0,0) Y(0,1)^2 Y(1,1)^-1 Y(2,0) Y(2,1)^-1,
 Y(0,0) Y(0,2)^-1 Y(1,0) Y(1,1) Y(2,1)^-1 Y(2,2),
 Y(0,1) Y(0,2)^-1 Y(1,1)^-1 Y(2,0)^2 Y(2,2),
 Y(0,1) Y(1,0) Y(1,1)^-1 Y(2,0),
 Y(0,1)^2 Y(1,1)^-2 Y(2,0)^2,
 Y(0,2)^-1 Y(1,0) Y(2,0) Y(2,2),
 Y(1,0) Y(1,3) Y(2,0) Y(2,3)^-1,
 Y(1,0)^2]
>>> from sage.all import *
>>> La = RootSystem("A2").weight_lattice().fundamental_weights()
>>> M = crystals.NakajimaMonomials("A2",La[Integer(1)]+La[Integer(2)])
>>> B = crystals.Tableaux("A2",shape=[Integer(2),Integer(1)])
>>> GM = M.digraph()
>>> GB = B.digraph()
>>> GM.is_isomorphic(GB,edge_labels=True)
True

>>> La = RootSystem("G2").weight_lattice().fundamental_weights()
>>> M = crystals.NakajimaMonomials("G2",La[Integer(1)]+La[Integer(2)])
>>> B = crystals.Tableaux("G2",shape=[Integer(2),Integer(1)])
>>> GM = M.digraph()
>>> GB = B.digraph()
>>> GM.is_isomorphic(GB,edge_labels=True)
True

>>> La = RootSystem("B2").weight_lattice().fundamental_weights()
>>> M = crystals.NakajimaMonomials(['B',Integer(2)],La[Integer(1)]+La[Integer(2)])
>>> B = crystals.Tableaux("B2",shape=[Integer(3)/Integer(2),Integer(1)/Integer(2)])
>>> GM = M.digraph()
>>> GB = B.digraph()
>>> GM.is_isomorphic(GB,edge_labels=True)
True

>>> La = RootSystem(['A',Integer(3),Integer(1)]).weight_lattice(extended=True).fundamental_weights()
>>> M = crystals.NakajimaMonomials(['A',Integer(3),Integer(1)],La[Integer(0)]+La[Integer(2)])
>>> B = crystals.GeneralizedYoungWalls(Integer(3),La[Integer(0)]+La[Integer(2)])
>>> SM = M.subcrystal(max_depth=Integer(4))
>>> SB = B.subcrystal(max_depth=Integer(4))
>>> GM = M.digraph(subset=SM) # long time
>>> GB = B.digraph(subset=SB) # long time
>>> GM.is_isomorphic(GB,edge_labels=True) # long time
True

>>> La = RootSystem(['A',Integer(5),Integer(2)]).weight_lattice(extended=True).fundamental_weights()
>>> LA = RootSystem(['A',Integer(5),Integer(2)]).weight_space().fundamental_weights()
>>> M = crystals.NakajimaMonomials(['A',Integer(5),Integer(2)],Integer(3)*La[Integer(0)])
>>> B = crystals.LSPaths(Integer(3)*LA[Integer(0)])
>>> SM = M.subcrystal(max_depth=Integer(4))
>>> SB = B.subcrystal(max_depth=Integer(4))
>>> GM = M.digraph(subset=SM)
>>> GB = B.digraph(subset=SB)
>>> GM.is_isomorphic(GB,edge_labels=True)
True

>>> c = matrix([[Integer(0),Integer(1),Integer(0)],[Integer(0),Integer(0),Integer(1)],[Integer(1),Integer(0),Integer(0)]])
>>> La = RootSystem(['A',Integer(2),Integer(1)]).weight_lattice(extended=True).fundamental_weights()
>>> M = crystals.NakajimaMonomials(Integer(2)*La[Integer(1)], c=c)
>>> sorted(M.subcrystal(max_depth=Integer(3)), key=str)
[Y(0,0) Y(0,1) Y(1,0) Y(2,1)^-1,
 Y(0,0) Y(0,1)^2 Y(1,1)^-1 Y(2,0) Y(2,1)^-1,
 Y(0,0) Y(0,2)^-1 Y(1,0) Y(1,1) Y(2,1)^-1 Y(2,2),
 Y(0,1) Y(0,2)^-1 Y(1,1)^-1 Y(2,0)^2 Y(2,2),
 Y(0,1) Y(1,0) Y(1,1)^-1 Y(2,0),
 Y(0,1)^2 Y(1,1)^-2 Y(2,0)^2,
 Y(0,2)^-1 Y(1,0) Y(2,0) Y(2,2),
 Y(1,0) Y(1,3) Y(2,0) Y(2,3)^-1,
 Y(1,0)^2]
La = RootSystem("A2").weight_lattice().fundamental_weights()
M = crystals.NakajimaMonomials("A2",La[1]+La[2])
B = crystals.Tableaux("A2",shape=[2,1])
GM = M.digraph()
GB = B.digraph()
GM.is_isomorphic(GB,edge_labels=True)
La = RootSystem("G2").weight_lattice().fundamental_weights()
M = crystals.NakajimaMonomials("G2",La[1]+La[2])
B = crystals.Tableaux("G2",shape=[2,1])
GM = M.digraph()
GB = B.digraph()
GM.is_isomorphic(GB,edge_labels=True)
La = RootSystem("B2").weight_lattice().fundamental_weights()
M = crystals.NakajimaMonomials(['B',2],La[1]+La[2])
B = crystals.Tableaux("B2",shape=[3/2,1/2])
GM = M.digraph()
GB = B.digraph()
GM.is_isomorphic(GB,edge_labels=True)
La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights()
M = crystals.NakajimaMonomials(['A',3,1],La[0]+La[2])
B = crystals.GeneralizedYoungWalls(3,La[0]+La[2])
SM = M.subcrystal(max_depth=4)
SB = B.subcrystal(max_depth=4)
GM = M.digraph(subset=SM) # long time
GB = B.digraph(subset=SB) # long time
GM.is_isomorphic(GB,edge_labels=True) # long time
La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
LA = RootSystem(['A',5,2]).weight_space().fundamental_weights()
M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
B = crystals.LSPaths(3*LA[0])
SM = M.subcrystal(max_depth=4)
SB = B.subcrystal(max_depth=4)
GM = M.digraph(subset=SM)
GB = B.digraph(subset=SB)
GM.is_isomorphic(GB,edge_labels=True)
c = matrix([[0,1,0],[0,0,1],[1,0,0]])
La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
M = crystals.NakajimaMonomials(2*La[1], c=c)
sorted(M.subcrystal(max_depth=3), key=str)
Element[source]

alias of CrystalOfNakajimaMonomialsElement

cardinality()[source]

Return the cardinality of self.

EXAMPLES:

sage: La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
sage: M = crystals.NakajimaMonomials(['A',2], La[1])
sage: M.cardinality()
3

sage: La = RootSystem(['D',4,2]).weight_lattice(extended=True).fundamental_weights()
sage: M = crystals.NakajimaMonomials(['D',4,2], La[1])
sage: M.cardinality()
+Infinity
>>> from sage.all import *
>>> La = RootSystem(['A',Integer(2)]).weight_lattice().fundamental_weights()
>>> M = crystals.NakajimaMonomials(['A',Integer(2)], La[Integer(1)])
>>> M.cardinality()
3

>>> La = RootSystem(['D',Integer(4),Integer(2)]).weight_lattice(extended=True).fundamental_weights()
>>> M = crystals.NakajimaMonomials(['D',Integer(4),Integer(2)], La[Integer(1)])
>>> M.cardinality()
+Infinity
La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
M = crystals.NakajimaMonomials(['A',2], La[1])
M.cardinality()
La = RootSystem(['D',4,2]).weight_lattice(extended=True).fundamental_weights()
M = crystals.NakajimaMonomials(['D',4,2], La[1])
M.cardinality()
class sage.combinat.crystals.monomial_crystals.CrystalOfNakajimaMonomialsElement(parent, Y, A)[source]

Bases: NakajimaMonomial

Element class for CrystalOfNakajimaMonomials.

The fi operators need to be modified from the version in monomial_crystalsNakajimaMonomial in order to create irreducible highest weight realizations. This modified fi is defined as

fiM={0if φi(M)=0,Ai,kf1Mif φi(M)>0.

EXAMPLES:

sage: La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
sage: M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
sage: m = M.module_generators[0].f(0); m
Y(0,0)^2 Y(0,1)^-1 Y(2,0)
sage: TestSuite(m).run()
>>> from sage.all import *
>>> La = RootSystem(['A',Integer(5),Integer(2)]).weight_lattice(extended=True).fundamental_weights()
>>> M = crystals.NakajimaMonomials(['A',Integer(5),Integer(2)],Integer(3)*La[Integer(0)])
>>> m = M.module_generators[Integer(0)].f(Integer(0)); m
Y(0,0)^2 Y(0,1)^-1 Y(2,0)
>>> TestSuite(m).run()
La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
m = M.module_generators[0].f(0); m
TestSuite(m).run()
f(i)[source]

Return the action of fi on self.

INPUT:

  • i – an element of the index set

EXAMPLES:

sage: La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
sage: M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
sage: m = M.module_generators[0]
sage: [m.f(i) for i in M.index_set()]
[Y(0,0)^2 Y(0,1)^-1 Y(2,0), None, None, None]
>>> from sage.all import *
>>> La = RootSystem(['A',Integer(5),Integer(2)]).weight_lattice(extended=True).fundamental_weights()
>>> M = crystals.NakajimaMonomials(['A',Integer(5),Integer(2)],Integer(3)*La[Integer(0)])
>>> m = M.module_generators[Integer(0)]
>>> [m.f(i) for i in M.index_set()]
[Y(0,0)^2 Y(0,1)^-1 Y(2,0), None, None, None]
La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
m = M.module_generators[0]
[m.f(i) for i in M.index_set()]

sage: M = crystals.infinity.NakajimaMonomials("E8")
sage: M.set_variables('A')
sage: m = M.module_generators[0].f_string([4,2,3,8])
sage: m
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1
sage: [m.f(i) for i in M.index_set()]
[A(1,2)^-1 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
 A(2,0)^-1 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,0)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(4,1)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(5,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(6,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(7,1)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-2]
sage: M.set_variables('Y')
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials("E8")
>>> M.set_variables('A')
>>> m = M.module_generators[Integer(0)].f_string([Integer(4),Integer(2),Integer(3),Integer(8)])
>>> m
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1
>>> [m.f(i) for i in M.index_set()]
[A(1,2)^-1 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
 A(2,0)^-1 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,0)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(4,1)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(5,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(6,0)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(7,1)^-1 A(8,0)^-1,
 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-2]
>>> M.set_variables('Y')
M = crystals.infinity.NakajimaMonomials("E8")
M.set_variables('A')
m = M.module_generators[0].f_string([4,2,3,8])
m
[m.f(i) for i in M.index_set()]
M.set_variables('Y')
weight()[source]

Return the weight of self as an element of the weight lattice.

EXAMPLES:

sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
sage: M = crystals.NakajimaMonomials("A2",La[1]+La[2])
sage: M.module_generators[0].weight()
(2, 1, 0)
>>> from sage.all import *
>>> La = RootSystem("A2").weight_lattice().fundamental_weights()
>>> M = crystals.NakajimaMonomials("A2",La[Integer(1)]+La[Integer(2)])
>>> M.module_generators[Integer(0)].weight()
(2, 1, 0)
La = RootSystem("A2").weight_lattice().fundamental_weights()
M = crystals.NakajimaMonomials("A2",La[1]+La[2])
M.module_generators[0].weight()
class sage.combinat.crystals.monomial_crystals.InfinityCrystalOfNakajimaMonomials(ct, c, category=None)[source]

Bases: UniqueRepresentation, Parent

Crystal B() in terms of (modified) Nakajima monomials.

Let Yi,k, for iI and kZ, be a commuting set of variables, and let 1 be a new variable which commutes with each Yi,k. (Here, I represents the index set of a Cartan datum.) One may endow the structure of a crystal on the set M^ of monomials of the form

M=(i,k)I×Z0Yi,kyi(k)1.

Elements of M^ are called modified Nakajima monomials. We will omit the 1 from the end of a monomial if there exists at least one yi(k)0. The crystal structure on this set is defined by

wt(M)=iI(k0yi(k))Λi,φi(M)=max{0jkyi(j):k0},εi(M)=φi(M)hi,wt(M),kf=kf(M)=min{k0:φi(M)=0jkyi(j)},ke=ke(M)=max{k0:φi(M)=0jkyi(j)},

where {hi:iI} and {Λi:iI} are the simple coroots and fundamental weights, respectively. With a chosen set of nonnegative integers C=(cij)ij such that cij+cji=1, one defines

Ai,k=Yi,kYi,k+1jiYj,k+cjiaji,

where (aij)i,jI is a Cartan matrix. Then

eiM={0if εi(M)=0,Ai,keMif εi(M)>0,fiM=Ai,kf1M.

It is shown in [KKS2007] that the connected component of M^ containing the element 1, which we denote by M(), is crystal isomorphic to the crystal B().

INPUT:

  • cartan_type – a Cartan type

  • c – (optional) the matrix (cij)i,jI such that cii=0 for all iI, cijZ>0 for all i,jI, and cij+cji=1 for all ij; the default is cij=0 if i<j and 0 otherwise

EXAMPLES:

sage: B = crystals.infinity.Tableaux("C3")
sage: S = B.subcrystal(max_depth=4)
sage: G = B.digraph(subset=S) # long time
sage: M = crystals.infinity.NakajimaMonomials("C3") # long time
sage: T = M.subcrystal(max_depth=4) # long time
sage: H = M.digraph(subset=T) # long time
sage: G.is_isomorphic(H,edge_labels=True) # long time
True

sage: M = crystals.infinity.NakajimaMonomials(['A',2,1])
sage: T = M.subcrystal(max_depth=3)
sage: H = M.digraph(subset=T) # long time
sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
sage: YS = Y.subcrystal(max_depth=3)
sage: YG = Y.digraph(subset=YS) # long time
sage: YG.is_isomorphic(H,edge_labels=True) # long time
True

sage: M = crystals.infinity.NakajimaMonomials("D4")
sage: B = crystals.infinity.Tableaux("D4")
sage: MS = M.subcrystal(max_depth=3)
sage: BS = B.subcrystal(max_depth=3)
sage: MG = M.digraph(subset=MS) # long time
sage: BG = B.digraph(subset=BS) # long time
sage: BG.is_isomorphic(MG,edge_labels=True) # long time
True
>>> from sage.all import *
>>> B = crystals.infinity.Tableaux("C3")
>>> S = B.subcrystal(max_depth=Integer(4))
>>> G = B.digraph(subset=S) # long time
>>> M = crystals.infinity.NakajimaMonomials("C3") # long time
>>> T = M.subcrystal(max_depth=Integer(4)) # long time
>>> H = M.digraph(subset=T) # long time
>>> G.is_isomorphic(H,edge_labels=True) # long time
True

>>> M = crystals.infinity.NakajimaMonomials(['A',Integer(2),Integer(1)])
>>> T = M.subcrystal(max_depth=Integer(3))
>>> H = M.digraph(subset=T) # long time
>>> Y = crystals.infinity.GeneralizedYoungWalls(Integer(2))
>>> YS = Y.subcrystal(max_depth=Integer(3))
>>> YG = Y.digraph(subset=YS) # long time
>>> YG.is_isomorphic(H,edge_labels=True) # long time
True

>>> M = crystals.infinity.NakajimaMonomials("D4")
>>> B = crystals.infinity.Tableaux("D4")
>>> MS = M.subcrystal(max_depth=Integer(3))
>>> BS = B.subcrystal(max_depth=Integer(3))
>>> MG = M.digraph(subset=MS) # long time
>>> BG = B.digraph(subset=BS) # long time
>>> BG.is_isomorphic(MG,edge_labels=True) # long time
True
B = crystals.infinity.Tableaux("C3")
S = B.subcrystal(max_depth=4)
G = B.digraph(subset=S) # long time
M = crystals.infinity.NakajimaMonomials("C3") # long time
T = M.subcrystal(max_depth=4) # long time
H = M.digraph(subset=T) # long time
G.is_isomorphic(H,edge_labels=True) # long time
M = crystals.infinity.NakajimaMonomials(['A',2,1])
T = M.subcrystal(max_depth=3)
H = M.digraph(subset=T) # long time
Y = crystals.infinity.GeneralizedYoungWalls(2)
YS = Y.subcrystal(max_depth=3)
YG = Y.digraph(subset=YS) # long time
YG.is_isomorphic(H,edge_labels=True) # long time
M = crystals.infinity.NakajimaMonomials("D4")
B = crystals.infinity.Tableaux("D4")
MS = M.subcrystal(max_depth=3)
BS = B.subcrystal(max_depth=3)
MG = M.digraph(subset=MS) # long time
BG = B.digraph(subset=BS) # long time
BG.is_isomorphic(MG,edge_labels=True) # long time
Element[source]

alias of NakajimaMonomial

c()[source]

Return the matrix cij of self.

EXAMPLES:

sage: La = RootSystem(['B',3]).weight_lattice().fundamental_weights()
sage: M = crystals.NakajimaMonomials(La[1]+La[2])
sage: M.c()
[0 1 1]
[0 0 1]
[0 0 0]

sage: c = Matrix([[0,0,1],[1,0,0],[0,1,0]])
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
sage: M = crystals.NakajimaMonomials(2*La[1], c=c)
sage: M.c() == c
True
>>> from sage.all import *
>>> La = RootSystem(['B',Integer(3)]).weight_lattice().fundamental_weights()
>>> M = crystals.NakajimaMonomials(La[Integer(1)]+La[Integer(2)])
>>> M.c()
[0 1 1]
[0 0 1]
[0 0 0]

>>> c = Matrix([[Integer(0),Integer(0),Integer(1)],[Integer(1),Integer(0),Integer(0)],[Integer(0),Integer(1),Integer(0)]])
>>> La = RootSystem(['A',Integer(2),Integer(1)]).weight_lattice(extended=True).fundamental_weights()
>>> M = crystals.NakajimaMonomials(Integer(2)*La[Integer(1)], c=c)
>>> M.c() == c
True
La = RootSystem(['B',3]).weight_lattice().fundamental_weights()
M = crystals.NakajimaMonomials(La[1]+La[2])
M.c()
c = Matrix([[0,0,1],[1,0,0],[0,1,0]])
La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
M = crystals.NakajimaMonomials(2*La[1], c=c)
M.c() == c
cardinality()[source]

Return the cardinality of self, which is always .

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['A',5,2])
sage: M.cardinality()
+Infinity
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['A',Integer(5),Integer(2)])
>>> M.cardinality()
+Infinity
M = crystals.infinity.NakajimaMonomials(['A',5,2])
M.cardinality()
get_variables()[source]

Return the type of monomials to use for the element output.

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['A', 4])
sage: M.get_variables()
'Y'
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['A', Integer(4)])
>>> M.get_variables()
'Y'
M = crystals.infinity.NakajimaMonomials(['A', 4])
M.get_variables()
set_variables(letter)[source]

Set the type of monomials to use for the element output.

If the A variables are used, the output is written as iIYi,0λii,kAi,kci,k, where iIλiΛi is the corresponding dominant weight.

INPUT:

  • letter – can be one of the following:

    • 'Y' – use Yi,k, corresponds to fundamental weights

    • 'A' – use Ai,k, corresponds to simple roots

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['A', 4])
sage: elt = M.highest_weight_vector().f_string([2,1,3,2,3,2,4,3])
sage: elt
Y(1,2) Y(2,0)^-1 Y(2,2)^-1 Y(3,0)^-1 Y(3,2)^-1 Y(4,0)
sage: M.set_variables('A')
sage: elt
A(1,1)^-1 A(2,0)^-1 A(2,1)^-2 A(3,0)^-2 A(3,1)^-1 A(4,0)^-1
sage: M.set_variables('Y')
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['A', Integer(4)])
>>> elt = M.highest_weight_vector().f_string([Integer(2),Integer(1),Integer(3),Integer(2),Integer(3),Integer(2),Integer(4),Integer(3)])
>>> elt
Y(1,2) Y(2,0)^-1 Y(2,2)^-1 Y(3,0)^-1 Y(3,2)^-1 Y(4,0)
>>> M.set_variables('A')
>>> elt
A(1,1)^-1 A(2,0)^-1 A(2,1)^-2 A(3,0)^-2 A(3,1)^-1 A(4,0)^-1
>>> M.set_variables('Y')
M = crystals.infinity.NakajimaMonomials(['A', 4])
elt = M.highest_weight_vector().f_string([2,1,3,2,3,2,4,3])
elt
M.set_variables('A')
elt
M.set_variables('Y')

sage: La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
sage: M = crystals.NakajimaMonomials(La[1]+La[2])
sage: lw = M.lowest_weight_vectors()[0]
sage: lw
Y(1,2)^-1 Y(2,1)^-1
sage: M.set_variables('A')
sage: lw
Y(1,0) Y(2,0) A(1,0)^-1 A(1,1)^-1 A(2,0)^-2
sage: M.set_variables('Y')
>>> from sage.all import *
>>> La = RootSystem(['A',Integer(2)]).weight_lattice().fundamental_weights()
>>> M = crystals.NakajimaMonomials(La[Integer(1)]+La[Integer(2)])
>>> lw = M.lowest_weight_vectors()[Integer(0)]
>>> lw
Y(1,2)^-1 Y(2,1)^-1
>>> M.set_variables('A')
>>> lw
Y(1,0) Y(2,0) A(1,0)^-1 A(1,1)^-1 A(2,0)^-2
>>> M.set_variables('Y')
La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
M = crystals.NakajimaMonomials(La[1]+La[2])
lw = M.lowest_weight_vectors()[0]
lw
M.set_variables('A')
lw
M.set_variables('Y')
class sage.combinat.crystals.monomial_crystals.NakajimaMonomial(parent, Y, A)[source]

Bases: Element

An element of the monomial crystal.

Monomials of the form Yi1,k1y1Yit,ktyt, where i1,,it are elements of the index set, k1,,kt are nonnegative integers, and y1,,yt are integers.

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['B',3,1])
sage: mg = M.module_generators[0]
sage: mg
1
sage: mg.f_string([1,3,2,0,1,2,3,0,0,1])
Y(0,0)^-1 Y(0,1)^-1 Y(0,2)^-1 Y(0,3)^-1 Y(1,0)^-3
 Y(1,1)^-2 Y(1,2) Y(2,0)^3 Y(2,2) Y(3,0) Y(3,2)^-1
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['B',Integer(3),Integer(1)])
>>> mg = M.module_generators[Integer(0)]
>>> mg
1
>>> mg.f_string([Integer(1),Integer(3),Integer(2),Integer(0),Integer(1),Integer(2),Integer(3),Integer(0),Integer(0),Integer(1)])
Y(0,0)^-1 Y(0,1)^-1 Y(0,2)^-1 Y(0,3)^-1 Y(1,0)^-3
 Y(1,1)^-2 Y(1,2) Y(2,0)^3 Y(2,2) Y(3,0) Y(3,2)^-1
M = crystals.infinity.NakajimaMonomials(['B',3,1])
mg = M.module_generators[0]
mg
mg.f_string([1,3,2,0,1,2,3,0,0,1])

An example using the A variables:

sage: M = crystals.infinity.NakajimaMonomials("A3")
sage: M.set_variables('A')
sage: mg = M.module_generators[0]
sage: mg.f_string([1,2,3,2,1])
A(1,0)^-1 A(1,1)^-1 A(2,0)^-2 A(3,0)^-1
sage: mg.f_string([3,2,1])
A(1,2)^-1 A(2,1)^-1 A(3,0)^-1
sage: M.set_variables('Y')
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials("A3")
>>> M.set_variables('A')
>>> mg = M.module_generators[Integer(0)]
>>> mg.f_string([Integer(1),Integer(2),Integer(3),Integer(2),Integer(1)])
A(1,0)^-1 A(1,1)^-1 A(2,0)^-2 A(3,0)^-1
>>> mg.f_string([Integer(3),Integer(2),Integer(1)])
A(1,2)^-1 A(2,1)^-1 A(3,0)^-1
>>> M.set_variables('Y')
M = crystals.infinity.NakajimaMonomials("A3")
M.set_variables('A')
mg = M.module_generators[0]
mg.f_string([1,2,3,2,1])
mg.f_string([3,2,1])
M.set_variables('Y')
e(i)[source]

Return the action of ei on self.

INPUT:

  • i – an element of the index set

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['E',7,1])
sage: m = M.module_generators[0].f_string([0,1,4,3])
sage: [m.e(i) for i in M.index_set()]
[None,
 None,
 None,
 Y(0,0)^-1 Y(1,1)^-1 Y(2,1) Y(3,0) Y(3,1) Y(4,0)^-1 Y(4,1)^-1 Y(5,0),
 None,
 None,
 None,
 None]

sage: M = crystals.infinity.NakajimaMonomials("C5")
sage: m = M.module_generators[0].f_string([1,3])
sage: [m.e(i) for i in M.index_set()]
[Y(2,1) Y(3,0)^-1 Y(3,1)^-1 Y(4,0),
 None,
 Y(1,0)^-1 Y(1,1)^-1 Y(2,0),
 None,
 None]

sage: M = crystals.infinity.NakajimaMonomials(['D',4,1])
sage: M.set_variables('A')
sage: m = M.module_generators[0].f_string([4,2,3,0])
sage: [m.e(i) for i in M.index_set()]
[A(2,1)^-1 A(3,1)^-1 A(4,0)^-1,
 None,
 None,
 A(0,2)^-1 A(2,1)^-1 A(4,0)^-1,
 None]
sage: M.set_variables('Y')
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['E',Integer(7),Integer(1)])
>>> m = M.module_generators[Integer(0)].f_string([Integer(0),Integer(1),Integer(4),Integer(3)])
>>> [m.e(i) for i in M.index_set()]
[None,
 None,
 None,
 Y(0,0)^-1 Y(1,1)^-1 Y(2,1) Y(3,0) Y(3,1) Y(4,0)^-1 Y(4,1)^-1 Y(5,0),
 None,
 None,
 None,
 None]

>>> M = crystals.infinity.NakajimaMonomials("C5")
>>> m = M.module_generators[Integer(0)].f_string([Integer(1),Integer(3)])
>>> [m.e(i) for i in M.index_set()]
[Y(2,1) Y(3,0)^-1 Y(3,1)^-1 Y(4,0),
 None,
 Y(1,0)^-1 Y(1,1)^-1 Y(2,0),
 None,
 None]

>>> M = crystals.infinity.NakajimaMonomials(['D',Integer(4),Integer(1)])
>>> M.set_variables('A')
>>> m = M.module_generators[Integer(0)].f_string([Integer(4),Integer(2),Integer(3),Integer(0)])
>>> [m.e(i) for i in M.index_set()]
[A(2,1)^-1 A(3,1)^-1 A(4,0)^-1,
 None,
 None,
 A(0,2)^-1 A(2,1)^-1 A(4,0)^-1,
 None]
>>> M.set_variables('Y')
M = crystals.infinity.NakajimaMonomials(['E',7,1])
m = M.module_generators[0].f_string([0,1,4,3])
[m.e(i) for i in M.index_set()]
M = crystals.infinity.NakajimaMonomials("C5")
m = M.module_generators[0].f_string([1,3])
[m.e(i) for i in M.index_set()]
M = crystals.infinity.NakajimaMonomials(['D',4,1])
M.set_variables('A')
m = M.module_generators[0].f_string([4,2,3,0])
[m.e(i) for i in M.index_set()]
M.set_variables('Y')
epsilon(i)[source]

Return the value of εi on self.

INPUT:

  • i – an element of the index set

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['G',2,1])
sage: m = M.module_generators[0].f(2)
sage: [m.epsilon(i) for i in M.index_set()]
[0, 0, 1]

sage: M = crystals.infinity.NakajimaMonomials(['C',4,1])
sage: m = M.module_generators[0].f_string([4,2,3])
sage: [m.epsilon(i) for i in M.index_set()]
[0, 0, 0, 1, 0]
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['G',Integer(2),Integer(1)])
>>> m = M.module_generators[Integer(0)].f(Integer(2))
>>> [m.epsilon(i) for i in M.index_set()]
[0, 0, 1]

>>> M = crystals.infinity.NakajimaMonomials(['C',Integer(4),Integer(1)])
>>> m = M.module_generators[Integer(0)].f_string([Integer(4),Integer(2),Integer(3)])
>>> [m.epsilon(i) for i in M.index_set()]
[0, 0, 0, 1, 0]
M = crystals.infinity.NakajimaMonomials(['G',2,1])
m = M.module_generators[0].f(2)
[m.epsilon(i) for i in M.index_set()]
M = crystals.infinity.NakajimaMonomials(['C',4,1])
m = M.module_generators[0].f_string([4,2,3])
[m.epsilon(i) for i in M.index_set()]
f(i)[source]

Return the action of fi on self.

INPUT:

  • i – an element of the index set

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials("B4")
sage: m = M.module_generators[0].f_string([1,3,4])
sage: [m.f(i) for i in M.index_set()]
[Y(1,0)^-2 Y(1,1)^-2 Y(2,0)^2 Y(2,1) Y(3,0)^-1 Y(4,0) Y(4,1)^-1,
 Y(1,0)^-1 Y(1,1)^-1 Y(1,2) Y(2,0) Y(2,2)^-1 Y(3,0)^-1 Y(3,1) Y(4,0) Y(4,1)^-1,
 Y(1,0)^-1 Y(1,1)^-1 Y(2,0) Y(2,1)^2 Y(3,0)^-2 Y(3,1)^-1 Y(4,0)^3 Y(4,1)^-1,
 Y(1,0)^-1 Y(1,1)^-1 Y(2,0) Y(2,1) Y(3,0)^-1 Y(3,1) Y(4,1)^-2]
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials("B4")
>>> m = M.module_generators[Integer(0)].f_string([Integer(1),Integer(3),Integer(4)])
>>> [m.f(i) for i in M.index_set()]
[Y(1,0)^-2 Y(1,1)^-2 Y(2,0)^2 Y(2,1) Y(3,0)^-1 Y(4,0) Y(4,1)^-1,
 Y(1,0)^-1 Y(1,1)^-1 Y(1,2) Y(2,0) Y(2,2)^-1 Y(3,0)^-1 Y(3,1) Y(4,0) Y(4,1)^-1,
 Y(1,0)^-1 Y(1,1)^-1 Y(2,0) Y(2,1)^2 Y(3,0)^-2 Y(3,1)^-1 Y(4,0)^3 Y(4,1)^-1,
 Y(1,0)^-1 Y(1,1)^-1 Y(2,0) Y(2,1) Y(3,0)^-1 Y(3,1) Y(4,1)^-2]
M = crystals.infinity.NakajimaMonomials("B4")
m = M.module_generators[0].f_string([1,3,4])
[m.f(i) for i in M.index_set()]
phi(i)[source]

Return the value of φi on self.

INPUT:

  • i – an element of the index set

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['D',4,3])
sage: m = M.module_generators[0].f(1)
sage: [m.phi(i) for i in M.index_set()]
[1, -1, 1]

sage: M = crystals.infinity.NakajimaMonomials(['C',4,1])
sage: m = M.module_generators[0].f_string([4,2,3])
sage: [m.phi(i) for i in M.index_set()]
[0, 1, -1, 2, -1]
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['D',Integer(4),Integer(3)])
>>> m = M.module_generators[Integer(0)].f(Integer(1))
>>> [m.phi(i) for i in M.index_set()]
[1, -1, 1]

>>> M = crystals.infinity.NakajimaMonomials(['C',Integer(4),Integer(1)])
>>> m = M.module_generators[Integer(0)].f_string([Integer(4),Integer(2),Integer(3)])
>>> [m.phi(i) for i in M.index_set()]
[0, 1, -1, 2, -1]
M = crystals.infinity.NakajimaMonomials(['D',4,3])
m = M.module_generators[0].f(1)
[m.phi(i) for i in M.index_set()]
M = crystals.infinity.NakajimaMonomials(['C',4,1])
m = M.module_generators[0].f_string([4,2,3])
[m.phi(i) for i in M.index_set()]
weight()[source]

Return the weight of self as an element of the weight lattice.

EXAMPLES:

sage: C = crystals.infinity.NakajimaMonomials(['A',1,1])
sage: v = C.highest_weight_vector()
sage: v.f(1).weight() + v.f(0).weight()
-delta

sage: M = crystals.infinity.NakajimaMonomials(['A',4,2])
sage: m = M.highest_weight_vector().f_string([1,2,0,1])
sage: m.weight()
2*Lambda[0] - Lambda[1] - delta
>>> from sage.all import *
>>> C = crystals.infinity.NakajimaMonomials(['A',Integer(1),Integer(1)])
>>> v = C.highest_weight_vector()
>>> v.f(Integer(1)).weight() + v.f(Integer(0)).weight()
-delta

>>> M = crystals.infinity.NakajimaMonomials(['A',Integer(4),Integer(2)])
>>> m = M.highest_weight_vector().f_string([Integer(1),Integer(2),Integer(0),Integer(1)])
>>> m.weight()
2*Lambda[0] - Lambda[1] - delta
C = crystals.infinity.NakajimaMonomials(['A',1,1])
v = C.highest_weight_vector()
v.f(1).weight() + v.f(0).weight()
M = crystals.infinity.NakajimaMonomials(['A',4,2])
m = M.highest_weight_vector().f_string([1,2,0,1])
m.weight()
weight_in_root_lattice()[source]

Return the weight of self as an element of the root lattice.

EXAMPLES:

sage: M = crystals.infinity.NakajimaMonomials(['F',4])
sage: m = M.module_generators[0].f_string([3,3,1,2,4])
sage: m.weight_in_root_lattice()
-alpha[1] - alpha[2] - 2*alpha[3] - alpha[4]

sage: M = crystals.infinity.NakajimaMonomials(['B',3,1])
sage: mg = M.module_generators[0]
sage: m = mg.f_string([1,3,2,0,1,2,3,0,0,1])
sage: m.weight_in_root_lattice()
-3*alpha[0] - 3*alpha[1] - 2*alpha[2] - 2*alpha[3]

sage: M = crystals.infinity.NakajimaMonomials(['C',3,1])
sage: m = M.module_generators[0].f_string([3,0,1,2,0])
sage: m.weight_in_root_lattice()
-2*alpha[0] - alpha[1] - alpha[2] - alpha[3]
>>> from sage.all import *
>>> M = crystals.infinity.NakajimaMonomials(['F',Integer(4)])
>>> m = M.module_generators[Integer(0)].f_string([Integer(3),Integer(3),Integer(1),Integer(2),Integer(4)])
>>> m.weight_in_root_lattice()
-alpha[1] - alpha[2] - 2*alpha[3] - alpha[4]

>>> M = crystals.infinity.NakajimaMonomials(['B',Integer(3),Integer(1)])
>>> mg = M.module_generators[Integer(0)]
>>> m = mg.f_string([Integer(1),Integer(3),Integer(2),Integer(0),Integer(1),Integer(2),Integer(3),Integer(0),Integer(0),Integer(1)])
>>> m.weight_in_root_lattice()
-3*alpha[0] - 3*alpha[1] - 2*alpha[2] - 2*alpha[3]

>>> M = crystals.infinity.NakajimaMonomials(['C',Integer(3),Integer(1)])
>>> m = M.module_generators[Integer(0)].f_string([Integer(3),Integer(0),Integer(1),Integer(2),Integer(0)])
>>> m.weight_in_root_lattice()
-2*alpha[0] - alpha[1] - alpha[2] - alpha[3]
M = crystals.infinity.NakajimaMonomials(['F',4])
m = M.module_generators[0].f_string([3,3,1,2,4])
m.weight_in_root_lattice()
M = crystals.infinity.NakajimaMonomials(['B',3,1])
mg = M.module_generators[0]
m = mg.f_string([1,3,2,0,1,2,3,0,0,1])
m.weight_in_root_lattice()
M = crystals.infinity.NakajimaMonomials(['C',3,1])
m = M.module_generators[0].f_string([3,0,1,2,0])
m.weight_in_root_lattice()