Spin Crystals#

These are the crystals associated with the three spin representations: the spin representations of odd orthogonal groups (or rather their double covers); and the \(+\) and \(-\) spin representations of the even orthogonal groups.

We follow Kashiwara and Nakashima (Journal of Algebra 165, 1994) in representing the elements of the spin crystal by sequences of signs \(\pm\).

sage.combinat.crystals.spins.CrystalOfSpins(ct)[source]#

Return the spin crystal of the given type \(B\).

This is a combinatorial model for the crystal with highest weight \(Lambda_n\) (the \(n\)-th fundamental weight). It has \(2^n\) elements, here called Spins. See also CrystalOfLetters(), CrystalOfSpinsPlus(), and CrystalOfSpinsMinus().

INPUT:

  • ['B', n] – A Cartan type \(B_n\).

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: C.list()
[+++, ++-, +-+, -++, +--, -+-, --+, ---]
sage: C.cartan_type()
['B', 3]
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> C.list()
[+++, ++-, +-+, -++, +--, -+-, --+, ---]
>>> C.cartan_type()
['B', 3]
sage: [x.signature() for x in C]
['+++', '++-', '+-+', '-++', '+--', '-+-', '--+', '---']
>>> from sage.all import *
>>> [x.signature() for x in C]
['+++', '++-', '+-+', '-++', '+--', '-+-', '--+', '---']
sage.combinat.crystals.spins.CrystalOfSpinsMinus(ct)[source]#

Return the minus spin crystal of the given type D.

This is the crystal with highest weight \(Lambda_{n-1}\) (the \((n-1)\)-st fundamental weight).

INPUT:

  • ['D', n] – A Cartan type \(D_n\).

EXAMPLES:

sage: E = crystals.SpinsMinus(['D',4])
sage: E.list()
[+++-, ++-+, +-++, -+++, +---, -+--, --+-, ---+]
sage: [x.signature() for x in E]
['+++-', '++-+', '+-++', '-+++', '+---', '-+--', '--+-', '---+']
>>> from sage.all import *
>>> E = crystals.SpinsMinus(['D',Integer(4)])
>>> E.list()
[+++-, ++-+, +-++, -+++, +---, -+--, --+-, ---+]
>>> [x.signature() for x in E]
['+++-', '++-+', '+-++', '-+++', '+---', '-+--', '--+-', '---+']
sage.combinat.crystals.spins.CrystalOfSpinsPlus(ct)[source]#

Return the plus spin crystal of the given type D.

This is the crystal with highest weight \(Lambda_n\) (the \(n\)-th fundamental weight).

INPUT:

  • ['D', n] – A Cartan type \(D_n\).

EXAMPLES:

sage: D = crystals.SpinsPlus(['D',4])
sage: D.list()
[++++, ++--, +-+-, -++-, +--+, -+-+, --++, ----]
>>> from sage.all import *
>>> D = crystals.SpinsPlus(['D',Integer(4)])
>>> D.list()
[++++, ++--, +-+-, -++-, +--+, -+-+, --++, ----]
sage: [x.signature() for x in D]
['++++', '++--', '+-+-', '-++-', '+--+', '-+-+', '--++', '----']
>>> from sage.all import *
>>> [x.signature() for x in D]
['++++', '++--', '+-+-', '-++-', '+--+', '-+-+', '--++', '----']
class sage.combinat.crystals.spins.GenericCrystalOfSpins(ct, element_class, case)[source]#

Bases: UniqueRepresentation, Parent

A generic crystal of spins.

lt_elements(x, y)[source]#

Return True if and only if there is a path from x to y in the crystal graph.

Because the crystal graph is classical, it is a directed acyclic graph which can be interpreted as a poset. This function implements the comparison function of this poset.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: x = C([1,1,1])
sage: y = C([-1,-1,-1])
sage: C.lt_elements(x, y)
True
sage: C.lt_elements(y, x)
False
sage: C.lt_elements(x, x)
False
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> x = C([Integer(1),Integer(1),Integer(1)])
>>> y = C([-Integer(1),-Integer(1),-Integer(1)])
>>> C.lt_elements(x, y)
True
>>> C.lt_elements(y, x)
False
>>> C.lt_elements(x, x)
False
class sage.combinat.crystals.spins.Spin[source]#

Bases: Element

A spin letter in the crystal of spins.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: c = C([1,1,1])
sage: c
+++
sage: c.parent()
The crystal of spins for type ['B', 3]

sage: D = crystals.Spins(['B',4])
sage: a = C([1,1,1])
sage: b = C([-1,-1,-1])
sage: c = D([1,1,1,1])
sage: a == a
True
sage: a == b
False
sage: b == c
False
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> c = C([Integer(1),Integer(1),Integer(1)])
>>> c
+++
>>> c.parent()
The crystal of spins for type ['B', 3]

>>> D = crystals.Spins(['B',Integer(4)])
>>> a = C([Integer(1),Integer(1),Integer(1)])
>>> b = C([-Integer(1),-Integer(1),-Integer(1)])
>>> c = D([Integer(1),Integer(1),Integer(1),Integer(1)])
>>> a == a
True
>>> a == b
False
>>> b == c
False
pp()[source]#

Pretty print self as a column.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: b = C([1,1,-1])
sage: b.pp()
+
+
-
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> b = C([Integer(1),Integer(1),-Integer(1)])
>>> b.pp()
+
+
-
signature()[source]#

Return the signature of self.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: C([1,1,1]).signature()
'+++'
sage: C([1,1,-1]).signature()
'++-'
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> C([Integer(1),Integer(1),Integer(1)]).signature()
'+++'
>>> C([Integer(1),Integer(1),-Integer(1)]).signature()
'++-'
value#

Return self as a tuple with \(+1\) and \(-1\).

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: C([1,1,1]).value
(1, 1, 1)
sage: C([1,1,-1]).value
(1, 1, -1)
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> C([Integer(1),Integer(1),Integer(1)]).value
(1, 1, 1)
>>> C([Integer(1),Integer(1),-Integer(1)]).value
(1, 1, -1)
weight()[source]#

Return the weight of self.

EXAMPLES:

sage: [v.weight() for v in crystals.Spins(['B',3])]
[(1/2, 1/2, 1/2), (1/2, 1/2, -1/2),
 (1/2, -1/2, 1/2), (-1/2, 1/2, 1/2),
 (1/2, -1/2, -1/2), (-1/2, 1/2, -1/2),
 (-1/2, -1/2, 1/2), (-1/2, -1/2, -1/2)]
>>> from sage.all import *
>>> [v.weight() for v in crystals.Spins(['B',Integer(3)])]
[(1/2, 1/2, 1/2), (1/2, 1/2, -1/2),
 (1/2, -1/2, 1/2), (-1/2, 1/2, 1/2),
 (1/2, -1/2, -1/2), (-1/2, 1/2, -1/2),
 (-1/2, -1/2, 1/2), (-1/2, -1/2, -1/2)]
class sage.combinat.crystals.spins.Spin_crystal_type_B_element[source]#

Bases: Spin

Type B spin representation crystal element

e(i)[source]#

Return the action of \(e_i\) on self.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: [[C[m].e(i) for i in range(1,4)] for m in range(8)]
[[None, None, None], [None, None, +++], [None, ++-, None], [+-+, None, None],
 [None, None, +-+], [+--, None, -++], [None, -+-, None], [None, None, --+]]
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> [[C[m].e(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[None, None, None], [None, None, +++], [None, ++-, None], [+-+, None, None],
 [None, None, +-+], [+--, None, -++], [None, -+-, None], [None, None, --+]]
epsilon(i)[source]#

Return \(\varepsilon_i\) of self.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: [[C[m].epsilon(i) for i in range(1,4)] for m in range(8)]
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0],
 [0, 0, 1], [1, 0, 1], [0, 1, 0], [0, 0, 1]]
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> [[C[m].epsilon(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0],
 [0, 0, 1], [1, 0, 1], [0, 1, 0], [0, 0, 1]]
f(i)[source]#

Return the action of \(f_i\) on self.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: [[C[m].f(i) for i in range(1,4)] for m in range(8)]
[[None, None, ++-], [None, +-+, None], [-++, None, +--], [None, None, -+-],
 [-+-, None, None], [None, --+, None], [None, None, ---], [None, None, None]]
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> [[C[m].f(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[None, None, ++-], [None, +-+, None], [-++, None, +--], [None, None, -+-],
 [-+-, None, None], [None, --+, None], [None, None, ---], [None, None, None]]
phi(i)[source]#

Return \(\varphi_i\) of self.

EXAMPLES:

sage: C = crystals.Spins(['B',3])
sage: [[C[m].phi(i) for i in range(1,4)] for m in range(8)]
[[0, 0, 1], [0, 1, 0], [1, 0, 1], [0, 0, 1],
 [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]]
>>> from sage.all import *
>>> C = crystals.Spins(['B',Integer(3)])
>>> [[C[m].phi(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[0, 0, 1], [0, 1, 0], [1, 0, 1], [0, 0, 1],
 [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]]
class sage.combinat.crystals.spins.Spin_crystal_type_D_element[source]#

Bases: Spin

Type D spin representation crystal element

e(i)[source]#

Return the action of \(e_i\) on self.

EXAMPLES:

sage: D = crystals.SpinsPlus(['D',4])
sage: [[D.list()[m].e(i) for i in range(1,4)] for m in range(8)]
[[None, None, None], [None, None, None], [None, ++--, None], [+-+-, None, None],
 [None, None, +-+-], [+--+, None, -++-], [None, -+-+, None], [None, None, None]]
>>> from sage.all import *
>>> D = crystals.SpinsPlus(['D',Integer(4)])
>>> [[D.list()[m].e(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[None, None, None], [None, None, None], [None, ++--, None], [+-+-, None, None],
 [None, None, +-+-], [+--+, None, -++-], [None, -+-+, None], [None, None, None]]
sage: E = crystals.SpinsMinus(['D',4])
sage: [[E[m].e(i) for i in range(1,4)] for m in range(8)]
[[None, None, None], [None, None, +++-], [None, ++-+, None], [+-++, None, None],
 [None, None, None], [+---, None, None], [None, -+--, None], [None, None, --+-]]
>>> from sage.all import *
>>> E = crystals.SpinsMinus(['D',Integer(4)])
>>> [[E[m].e(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[None, None, None], [None, None, +++-], [None, ++-+, None], [+-++, None, None],
 [None, None, None], [+---, None, None], [None, -+--, None], [None, None, --+-]]
epsilon(i)[source]#

Return \(\varepsilon_i\) of self.

EXAMPLES:

sage: C = crystals.SpinsMinus(['D',4])
sage: [[C[m].epsilon(i) for i in C.index_set()] for m in range(8)]
[[0, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [1, 0, 0, 0],
 [0, 0, 0, 1], [1, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0]]
>>> from sage.all import *
>>> C = crystals.SpinsMinus(['D',Integer(4)])
>>> [[C[m].epsilon(i) for i in C.index_set()] for m in range(Integer(8))]
[[0, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [1, 0, 0, 0],
 [0, 0, 0, 1], [1, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0]]
f(i)[source]#

Return the action of \(f_i\) on self.

EXAMPLES:

sage: D = crystals.SpinsPlus(['D',4])
sage: [[D.list()[m].f(i) for i in range(1,4)] for m in range(8)]
[[None, None, None], [None, +-+-, None], [-++-, None, +--+], [None, None, -+-+],
 [-+-+, None, None], [None, --++, None], [None, None, None], [None, None, None]]
>>> from sage.all import *
>>> D = crystals.SpinsPlus(['D',Integer(4)])
>>> [[D.list()[m].f(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[None, None, None], [None, +-+-, None], [-++-, None, +--+], [None, None, -+-+],
 [-+-+, None, None], [None, --++, None], [None, None, None], [None, None, None]]
sage: E = crystals.SpinsMinus(['D',4])
sage: [[E[m].f(i) for i in range(1,4)] for m in range(8)]
[[None, None, ++-+], [None, +-++, None], [-+++, None, None], [None, None, None],
 [-+--, None, None], [None, --+-, None], [None, None, ---+], [None, None, None]]
>>> from sage.all import *
>>> E = crystals.SpinsMinus(['D',Integer(4)])
>>> [[E[m].f(i) for i in range(Integer(1),Integer(4))] for m in range(Integer(8))]
[[None, None, ++-+], [None, +-++, None], [-+++, None, None], [None, None, None],
 [-+--, None, None], [None, --+-, None], [None, None, ---+], [None, None, None]]
phi(i)[source]#

Return \(\varphi_i\) of self.

EXAMPLES:

sage: C = crystals.SpinsPlus(['D',4])
sage: [[C[m].phi(i) for i in C.index_set()] for m in range(8)]
[[0, 0, 0, 1], [0, 1, 0, 0], [1, 0, 1, 0], [0, 0, 1, 0],
 [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0]]
>>> from sage.all import *
>>> C = crystals.SpinsPlus(['D',Integer(4)])
>>> [[C[m].phi(i) for i in C.index_set()] for m in range(Integer(8))]
[[0, 0, 0, 1], [0, 1, 0, 0], [1, 0, 1, 0], [0, 0, 1, 0],
 [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0]]