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()
, andCrystalOfSpinsMinus()
.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 fromx
toy
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]]