Kyoto Path Model for Affine Highest Weight Crystals

class sage.combinat.crystals.kyoto_path_model.KyotoPathModel(crystals, weight, P)

Bases: sage.combinat.crystals.tensor_product.TensorProductOfCrystals

The Kyoto path model for an affine highest weight crystal.

Note

Here we are using anti-Kashiwara notation and might differ from some of the literature.

Consider a Kac–Moody algebra g of affine Cartan type X, and we want to model the Uq(g)-crystal B(λ). First we consider the set of fundamental weights {Λi}iI of g and let {¯Λi}iI0 be the corresponding fundamental weights of the corresponding classical Lie algebra g0. To model B(λ), we start with a sequence of perfect Uq(g)-crystals (B(i))i of level l such that

λ¯P+l={μ¯P+c,μ=l}

where c is the canonical central element of Uq(g) and ¯P+ is the nonnegative weight lattice spanned by {¯ΛiiI}.

Next we consider the crystal isomorphism Φ0:B(λ0)B(0)B(λ1) defined by uλ0b(0)λ0uλ1 where b(0)λ0 is the unique element in B(0) such that φ(b(0)λ0)=λ0 and λ1=ε(b(0)λ0) and uμ is the highest weight element in B(μ). Iterating this, we obtain the following isomorphism:

Φn:B(λ)B(0)B(1)B(N)B(λN+1).

We note by Lemma 10.6.2 in [HK2002] that for any bB(λ) there exists a finite N such that

ΦN(b)=(N1k=0b(k))uλN.

Therefore we can model elements bB(λ) as a Uq(g)-crystal by considering an infinite list of elements b(k)B(k) and defining the crystal structure by:

¯wt(b)=λN+N1k=0¯wt(b(k))ei(b)=ei(bb(N))uλN,fi(b)=fi(bb(N))uλN,εi(b)=max

where b^{\prime} = b^{(0)} \otimes \cdots \otimes b^{(N-1)}. To translate this into a finite list, we consider a finite sequence b^{(0)} \otimes \cdots \otimes b^{(N-1)} \otimes b^{(N)}_{\lambda_N} and if

f_i\left( b^{(0)} \otimes \cdots b^{(N-1)} \otimes b^{(N)}_{\lambda_N} \right) = b_0 \otimes \cdots \otimes b^{(N-1)} \otimes f_i\left( b^{(N)}_{\lambda_N} \right),

then we take the image as b^{(0)} \otimes \cdots \otimes f_i\left( b^{(N)}_{\lambda_N}\right) \otimes b^{(N+1)}_{\lambda_{N+1}}. Similarly we remove b^{(N)}_{\lambda_{N}} if we have b_0 \otimes \cdots \otimes b^{(N-1)} \otimes b^{(N-1)}_{\lambda_{N-1}} \otimes b^{(N)}_{\lambda_N}. Additionally if

e_i\left( b^{(0)} \otimes \cdots \otimes b^{(N-1)} \otimes b^{(N)}_{\lambda_N} \right) = b^{(0)} \otimes \cdots \otimes b^{(N-1)} \otimes e_i\left( b^{(N)}_{\lambda_N} \right),

then we consider this to be 0.

We can then lift the U_q'(\mathfrak{g})-crystal structure to a U_q(\mathfrak{g})-crystal structure by using a tensor product of the affinization of the of crystals B^{(i)} for all i.

INPUT:

  • B – a single or list of U_q^{\prime} perfect crystal(s) of level l
  • weight – a weight in \overline{P}_l^+

EXAMPLES:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]; mg
[[[3]]]
sage: mg.f_string([0,1,2,2])
[[[3]], [[3]], [[1]]]
sage: x = mg.f_string([0,1,2]); x
[[[2]], [[3]], [[1]]]
sage: x.weight()
Lambda[0]

An example of type A_5^{(2)}:

sage: B = crystals.KirillovReshetikhin(['A',5,2], 1,1)
sage: La = RootSystem(['A',5,2]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]; mg
[[[-1]]]
sage: mg.f_string([0,2,1,3])
[[[-3]], [[2]], [[-1]]]
sage: mg.f_string([0,2,3,1])
[[[-3]], [[2]], [[-1]]]

An example of type D_3^{(2)}:

sage: B = crystals.KirillovReshetikhin(['D',3,2], 1,1)
sage: La = RootSystem(['D',3,2]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]; mg
[[]]
sage: mg.f_string([0,1,2,0])
[[[0]], [[1]], []]

An example using multiple crystals of the same level:

sage: B1 = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: B2 = crystals.KirillovReshetikhin(['A',2,1], 2,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel([B1, B2, B1], La[0])
sage: mg = C.module_generators[0]; mg
[[[3]]]
sage: mg.f_string([0,1,2,2])
[[[3]], [[1], [3]], [[3]]]
sage: mg.f_string([0,1,2,2,2])
sage: mg.f_string([0,1,2,2,1,0])
[[[3]], [[2], [3]], [[1]], [[2]]]
sage: mg.f_string([0,1,2,2,1,0,0,2])
[[[3]], [[1], [2]], [[1]], [[3]], [[1], [3]]]

By using the extended weight lattice, the Kyoto path model lifts the perfect crystals to their affinizations:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: P = RootSystem(['A',2,1]).weight_lattice(extended=True)
sage: La = P.fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]; mg
[[[3]](0)]
sage: x = mg.f_string([0,1,2]); x
[[[2]](-1), [[3]](0), [[1]](0)]
sage: x.weight()
Lambda[0] - delta
class Element

Bases: sage.combinat.crystals.tensor_product_element.TensorProductOfRegularCrystalsElement

An element in the Kyoto path model.

e(i)

Return the action of e_i on self.

EXAMPLES:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]
sage: all(mg.e(i) is None for i in C.index_set())
True
sage: mg.f(0).e(0) == mg
True
epsilon(i)

Return \varepsilon_i of self.

EXAMPLES:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]
sage: [mg.epsilon(i) for i in C.index_set()]
[0, 0, 0]
sage: elt = mg.f(0)
sage: [elt.epsilon(i) for i in C.index_set()]
[1, 0, 0]
sage: elt = mg.f_string([0,1,2])
sage: [elt.epsilon(i) for i in C.index_set()]
[0, 0, 1]
sage: elt = mg.f_string([0,1,2,2])
sage: [elt.epsilon(i) for i in C.index_set()]
[0, 0, 2]
f(i)

Return the action of f_i on self.

EXAMPLES:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]
sage: mg.f(2)
sage: mg.f(0)
[[[1]], [[2]]]
sage: mg.f_string([0,1,2])
[[[2]], [[3]], [[1]]]
phi(i)

Return \varphi_i of self.

EXAMPLES:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]
sage: [mg.phi(i) for i in C.index_set()]
[1, 0, 0]
sage: elt = mg.f(0)
sage: [elt.phi(i) for i in C.index_set()]
[0, 1, 1]
sage: elt = mg.f_string([0,1])
sage: [elt.phi(i) for i in C.index_set()]
[0, 0, 2]
truncate(k=None)

Truncate self to have length k and return as an element in a (finite) tensor product of crystals.

INPUT:

  • k – (optional) the length to truncate to; if not specified, then returns one more than the current non-ground-state elements (i.e. the current list in self)

EXAMPLES:

sage: B1 = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: B2 = crystals.KirillovReshetikhin(['A',2,1], 2,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel([B1,B2,B1], La[0])
sage: mg = C.highest_weight_vector()
sage: elt = mg.f_string([0,1,2,2,1,0]); elt
[[[3]], [[2], [3]], [[1]], [[2]]]
sage: t = elt.truncate(); t
[[[3]], [[2], [3]], [[1]], [[2]]]
sage: t.parent() is C.finite_tensor_product(4)
True
sage: elt.truncate(2)
[[[3]], [[2], [3]]]
sage: elt.truncate(10)
[[[3]], [[2], [3]], [[1]], [[2]], [[1], [3]],
 [[2]], [[1]], [[2], [3]], [[1]], [[3]]]
weight()

Return the weight of self.

EXAMPLES:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: P = RootSystem(['A',2,1]).weight_lattice(extended=True)
sage: La = P.fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: mg = C.module_generators[0]
sage: mg.weight()
Lambda[0]
sage: mg.f_string([0,1,2]).weight()
Lambda[0] - delta
finite_tensor_product(k)

Return the finite tensor product of crystals of length k from truncating self.

EXAMPLES:

sage: B1 = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: B2 = crystals.KirillovReshetikhin(['A',2,1], 2,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel([B1,B2,B1], La[0])
sage: C.finite_tensor_product(5)
Full tensor product of the crystals
 [Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1),
  Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(2,1),
  Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1),
  Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1),
  Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(2,1)]
weight_lattice_realization()

Return the weight lattice realization used to express weights.

EXAMPLES:

sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
sage: C = crystals.KyotoPathModel(B, La[0])
sage: C.weight_lattice_realization()
Weight lattice of the Root system of type ['A', 2, 1]

sage: P = RootSystem(['A',2,1]).weight_lattice(extended=True)
sage: C = crystals.KyotoPathModel(B, P.fundamental_weight(0))
sage: C.weight_lattice_realization()
Extended weight lattice of the Root system of type ['A', 2, 1]