#!/usr/bin/env python # coding: utf-8 # # Note for representation theorists # # This note explains [`kappa.py`](https://github.com/haruhisa-enomoto/kappa-map-for-lattices) for those who study the representation theory of finite-dimensional (artin) algebras. # I will explain how kappa maps appears in the representation theory, # and demonstrate how to use [`kappa.py`](https://github.com/haruhisa-enomoto/kappa-map-for-lattices/blob/main/kappa.py) to study torsion classes. # ## References # # - [Asa] # S. Asai, Semibricks, Int. Math. Res. Not. rny150, 2018. # # - [BCZ1] E. Barnard, G. Todorov, S. Zhu, # Minimal inclusion of torsion classes, # Algebraic Combin., 2 (5) (2019), 879--901. # # - [BCZ2] E. Barnard, G. Todorov, S. Zhu, # Dynamical Combinatorics and Torsion Classes, # J. Pure Appl. Algebra 225 (2021), no. 9, 106642. # # - [DIRRT] L. Demonet, O. Iyama, N. Reading, I. Reiten, H. Thomas, # Lattice theory of torsion classes, arXiv:1711.01785. # # - [RST] N. Reading, D. E. Speyer, H. Thomas, # The fundamental theorem of finite semidistributive lattices, # arXiv:1907.08050. # ## Lattice of torsion classes in SageMath # # Recently, many people (including me) have been considering the lattice of torsion classes. # # Let $\Lambda$ be a finite-dimensional algebra. Then consider $L:=\mathsf{tors}\,\Lambda$, the complete lattice of torsion classes. Assume further that $\Lambda$ is **$\tau$-tilting finite**, which means that $\mathsf{tors}\,\Lambda$ is a **finite** lattice. # # This lattice $L$ is a **semidistributive** lattice, that is, if $\mathcal{T} \cap \mathcal{U}_1 = \mathcal{T} \cap \mathcal{U}_2$, then $\mathcal{T} \cap (\mathcal{U}_1 \vee \mathcal{U}_2) = \mathcal{T} \cap \mathcal{U}_1\, ( = \mathcal{T} \cap \mathcal{U}_2)$ holds, and the dual condition is satisfied. The key fact to prove this is the equality $\mathcal{U}_1 \vee \mathcal{U}_2 = \mathsf{Filt}\,(\mathcal{U}_1 \cup \mathcal{U}_2)$, and the dual condition is automatic by the standard duality (see [DIRRT Theorem 3.1] for the precise proof). ~~Thus we do not have to remember the definition of semidistributivity like me.~~ # Let's look at some examples in SageMath. The easiest non-trivial lattice which is isomorphic to the lattice of torsion class is: # In[1]: L_A2 = posets.PentagonPoset() L_A2.plot(figsize = 3) # This lattice ``L`` is nothing but $\mathsf{tors}\, \Lambda$ for $\Lambda = kQ$ for $Q = [1 \to 2]$. *Note that the Hasse quiver in SageMath is opposite of the representation-theorist's Hasse quiver convention*, thus the node ``0`` is the smallest element. **In this document, we follow representation-theoretist's convention**. # # The following ``L_pp`` is $\mathsf{tors}\, \Pi$ where $\Pi$ is a preprojective algebra of type $A_3$, since $\mathsf{tors}\,\Pi$ is isomorphic to the lattice of weak order on the Weyl group $W$ of type $A_3$. In this way, we can construct the lattice of torsion classes for any preprojective algebra of Dynkin type. # In[2]: W = WeylGroup("A3") L_pp = W.weak_lattice() # Moreover, we can construct the lattice of torsion classes for any Dynkin path algebra, since it is isomorphic to the Cambrian lattice. # For example, the following ``L_A3`` is $\mathsf{tors}\,\Lambda$ for $\Lambda = k[1 \leftarrow 2 \to 3]$, where ``(1,3,2)`` represents the Coxeter element $s_1 s_3 s_2$ corresponding to the orientation $1 \leftarrow 2 \to 3$. # In[3]: L_A3 = W.cambrian_lattice((1,3,2)) L_A3.plot(label_elements=False, figsize = 5) # Or we can construct this lattice by constructing posets of $c_Q$-sortable elements as follows. # In[4]: c_Q = W.from_reduced_word([1,3,2]) LL_A3_poset = L_pp.subposet([w for w in W if w.is_coxeter_sortable(c_Q)]) LL_A3 = LatticePoset(LL_A3_poset) # In[5]: LL_A3.is_isomorphic(L_A3) # ## Brick labeling # # In [DIRRT] and [BCZ1], the labeling of arrows in the Hasse quiver of $L$ was introduced, which assign a brick to each arrow defined as follows (recall that a brick is a module with a division endomorphism ring). # # Suppose that there is an arrow $\mathcal{T} \to \mathcal{U}$, namely, $\mathcal{T}\supsetneq \mathcal{U}$ is a minimal inclusion of torsion classes. # Then [DIRRT Theorem 3.3] shows that **there uniquely exists a brick $B$ contained in the category $\mathcal{T} \cap \mathcal{U}^\perp$**, where $\mathcal{U}^\perp$ is the Hom-perpendicular category of $\mathcal{U}$, that is, the torsion-free class corresponding to $\mathcal{U}$. Thus we can put a brick $B$ on the arrow $\mathcal{T} \to \mathcal{U}$, which is called a *brick labeling*. # # However, we cannot naively compute brick labels in SageMath because we should consider bricks. The problem is that **we cannot deal with modules, hence bricks, for a general f.d. algebra in SageMath**. Instead, we use **join-irreducible elements**. # ## Join-irreducible torsion classes and bricks # # Consider when a torsion class $\mathcal{T}$ cannot be written as a join of other torsion classes properly contained in $\mathcal{T}$. Such an element of $\mathcal{T} \in L$ is called **join-irreducible**. We can easily check that this is the case precisely when there is a unique arrow $\mathcal{T} \to \mathcal{T}_*$ starting at $\mathcal{T}$. # This is a purely lattice-theoretic notion, but surprisingly, there is a representation-theoretic description of join-irreducibles as follows [DIRRT Theorem 1.4]: # # *We have a bijection between* # 1. *the set of join-irreducible elements in $L$, and* # 1. *the set of bricks in $\mathsf{mod}\,\Lambda$.* # # The maps are given as follows. # - 1 to 2: For a join-irreducible torsion class $\mathcal{T}$, take the brick label $B$ of the unique arrow $\mathcal{T} \to \mathcal{T}_*$ starting at $\mathcal{T}$. # - 2 to 1: For a brick $B$, take the torsion closure $\mathsf{T}(B)$, the smallest torsion class containing $B$. # # Of course, we can compute join-irreducibles in SageMath since it's purely combinatorial: # In[6]: L_A2.plot(figsize=3) # In[7]: L_A2.join_irreducibles() # The following shows that there are $11$ bricks in $\mathsf{mod}\, \Pi$ for a preprojective algebra $\Pi$ of type $A_3$. # In[8]: len(L_pp.join_irreducibles()) # Therefore, under this bijection, we can **use join-irreducibles to represent bricks!** # ## Bijections between join-irreducibles and meed-irreducibles # # Of course, one may dualize the above bijection by the standard duality: there is a bijection between bricks and join-irreducible elements in the lattice of torsion-free classes. Since the lattice of torsion-free classes is the opposite of $L$, the second set can be regarded as the set of **meet-irreducible** element in $L$. By combining, we obtain the following bijections. # # $$ # \{\text{join-irreducibles in $L$}\} \rightleftarrows \{\text{bricks}\} \rightleftarrows \{\text{meet-irreducibles in $L$}\} # $$ # # Let $\kappa$ be the composition, which is a bijection from join-irreducibles to meet-irreducibles. # It is natural to ask whether one can compute $\kappa$ in a purely lattice-theoretical way, and this turns out to be **true**. # # Before describing it, let's describe $\kappa$ from the representation-theoretic perspective. Let $B$ be a brick. Then the corresponding join-irreducible element is $\mathsf{T}(B)$, and the corresponding meet-irreducible element is $^\perp \mathsf{F}(B)$ (where $\mathsf{F}(B)$ is the smallest torsion-free class containing $B$), and it's easy to see $^\perp \mathsf{F}(B) = {}^\perp B$. # # Thus $\kappa$ satisfies the following formula. # # $$ # \kappa(\mathsf{T}(B)) = {}^\perp B. # $$ # ## Definition of the kappa map # # Let $L$ be a general finite semiditributive lattice and $j$ a join-irreducible element of $L$. Then there is a unique Hasse arrow $j \to j_*$ starting at $j$. Define $\kappa(j)$ as follows: # # $$ # \kappa(j) = \max \{ m \in L \, | \, j \wedge x = j_* \}, # $$ # # where $\max$ is the maximum element. Then actually this is well-defined, is meet-irreducible, and gives a bijection from join-irreducibles to meet-irreducibles, see e.g. [RST Theorem 2.28]. # # In [BCZ2 Theorem A] (and maybe implicitly in [DIRRT]), it was shown that $\kappa$ on $L = \mathsf{tors}\, \Lambda$ is precisely the above composition $\{ \text{j-irr} \} \xrightarrow{\sim} \{\text{bricks}\} \xrightarrow{\sim} \{\text{meet-irr} \}$, hence it coincides with the above description $\kappa(\mathsf{T}(B)) = {}^\perp B$. # To compute the kappa map, let's use `kappa.py`. To use it, import `add_kappa()` function from `kappa.py` and execute it. # In[9]: from kappa import add_kappa add_kappa() # For example, for a pentagon poset ``L_A2``, we can compute $\kappa$ as follows. # In[10]: L_A2.plot(figsize = 3) # In[11]: for j in L_A2.join_irreducibles(): print(f"The kappa of {j} is {L_A2.kappa(j)}") # ## When to use kappa? # # So, why do we need this kappa map in the representation theory of algebra? The answer is that it naturally arises when we consider the relation between torsion-free classes and bricks represented by join-irreducibles. # # Let $B$ be a brick, and consider the following problem. # # - For a given torsion class $\mathcal{T}$, when $B$ is contained in $\mathcal{T}$? # # In SageMath, *we can use join-irreducibles to represent bricks* since they are in bijection. The join-irreducible corresponding to $B$ is $\mathsf{T}(B)$, hence the answer is clear: # # - $B \in \mathcal{T}$ if and only if $\mathsf{T}(B) \subseteq \mathcal{T}$. # # For example, the number of bricks contained in $\mathcal{T}$ is equal to the number of join-irreducibles $x$ satisfying $x \leq \mathcal{T}$. The following code prints the number of bricks contained in each torsion class over the path algebra of type $A_2$. # In[12]: for T in L_A2: bricks_in_T = [j for j in L_A2.join_irreducibles() if L_A2.is_lequal(j,T)] print(f"The number of bricks in {T} is {len(bricks_in_T)}") # Next, consider **torsion-free side**, namely, the following problem. # # - For a given torsion class $\mathcal{T}$, when $B$ is contained in a torsion-free class $\mathcal{T}^\perp$? # # Since we have decided that we use join-irreducibles to represent bricks, we can only use $\mathsf{T}(B)$. Thus this problem is not so easy, and **we can use kappa map to solve it!** # # Consider when $B \in \mathcal{T}^\perp$ holds. This is equivalent to $\mathsf{F}(B) \subseteq \mathcal{T}^\perp$, where $\mathsf{F}(B)$ is the smallest torsion-free class containing $B$. By taking $^\perp(-)$, we obtain $^\perp B = ^\perp \mathsf{F}(B) \supseteq \mathcal{T}$. Therefore, we want to represent $^\perp B$ using $\mathsf{T}(B)$, **and this is achieved by the kappa map by the above formula: $\kappa(\mathsf{T}(B)) = {}^\perp B$!** # # To sum up, the answer is: # # - $B \in \mathcal{T}^\perp$ if and only if $\kappa(\mathsf{T}(B)) \supseteq \mathcal{T}$. # # And this condition is purely lattice-theoretical, hence SageMath can compute it! # # For example, the following code computes the numbers of torsion classes and torsion-free classes containing each brick. # In[13]: for j in L_A2.join_irreducibles(): tors = [T for T in L_A2 if L_A2.is_lequal(j,T)] m = L_A2.kappa(j) torf = [T for T in L_A2 if L_A2.is_gequal(m,T)] print(f"There are {len(tors)} tors and {len(torf)} torfs which contain a brick represented by {j}") # As another example, one can compute the number of bricks containing in $\mathcal{T}_1 \cap \mathcal{T}_2^\perp$ for given torsion classes $\mathcal{T}_1$ and $\mathcal{T}_2$. The subcategory of this form appears in various literatures including [my paper](https://arxiv.org/abs/2010.05433), which was the motivation for dealing with the kappa map. # ## Extended kappa map # # In `kappa.py`, we also compute the extended kappa map $\overline{\kappa}$ for a finite semidistributive. I'll explain the meaning of it following [BCZ2]. # # Let $\mathcal{T}$ be any torsion class. Since we are assuming that $\Lambda$ is $\tau$-tilting finite, there are only finitely many Hasse arrows starting at $\mathcal{T}$, namely, $\mathcal{T} \to \mathcal{T}_i$ for $i=1,2,\dots, m$. Let $B_i$ be the brick label of $\mathcal{T} \to \mathcal{T}_i$. Then it is known that the following equality holds (e.g. [Asa], [BCZ1]): # # $$ # \mathcal{T} = \mathsf{T}(B_1)\vee \cdots \vee \mathsf{T}(B_m) # $$ # # This represents an arbitrary torsion class $\mathcal{T}$ as a join of join-irreducibles $\mathsf{T}(B_i)$. This presentation has a good lattice-theoretic property, thus is called a *canonical join representation* (see [BCZ1]). I omit the definition, but this says that this presentation is minimal, and is uniquely determined naturally only from $\mathcal{T}$. # # In [BCZ2], the extended kappa map $\overline{\kappa} \colon L \to L$ for a finite semiditributive lattice $L$ was introduced. # This is defined as follows: for $x \in L$, take a canonical join representation $x = j_1 \vee \cdots \vee j_m$. Then # # $$ # \overline{\kappa}(x) := \kappa(j_1) \wedge \cdots \wedge \kappa(j_m) # $$ # # Therefore, when applied to the above $\mathcal{T}$, we obtain # # $$ # \overline{\kappa}(\mathcal{T}) = \kappa(\mathsf{T}(B_1)) \wedge \cdots \wedge \kappa(\mathsf{T}(B_m)) # = {}^\perp B_1 \cap \cdots \cap {}^\perp B_m. # $$ # # Let's consider it in detail. By duality, $\mathcal{T}':= \overline{\kappa}(\mathcal{T}) = {}^\perp B_1 \cap \cdots \cap {}^\perp B_m$ is a *canonical meet representation* (note that ${}^\perp B$ is meet-irreducible in our $L$ by duality). # Therefore, there are exactly $m$ arrows $\mathcal{T}'_i \to \mathcal{T}'$ with its label $B_i$ for $i=1,\dots, m$, and $\mathcal{T}'$ is characterized by this property. # # To sum up, $\overline{\kappa}(\mathcal{T})$ is the following description using the brick labeling: # # 1. Compute brick labels $B_i$ of $\mathcal{T} \to \mathcal{T}_i$ for all arrows starting at $\mathcal{T}$ ($i=1,\dots,m$). # 2. There uniquely exists a torsion class $\mathcal{T}'$ satisfying the following: there are exactly $m$ arrows $\mathcal{T}'_i \to \mathcal{T}'$ ending at $\mathcal{T}'$ for $i=1,\dots m$ and the labels are $B_i$ for each $i$. Then $\overline{\kappa}(\mathcal{T}) = \mathcal{T}'$. # # This $\overline{\kappa}$ is bijective by construction, hence this map is an **extra symmetry** on the lattice of torsion classes! # For a further investigation of this map, we refer the reader to [BCZ2]. # For example, let us compute $\overline{\kappa}$ for $A_2$ quiver: # In[14]: L_A2.plot(figsize = 3) # In[15]: for x in L_A2: print(f"The extended kappa of {x} is {L_A2.extended_kappa(x)}") # Finally, consider $\overline{\kappa}$ using wide subcategoeis. It's known that torsion classes are in bijection with wide subcategories (since we are assuming that $\Lambda$ is $\tau$-tilting finite). The wide subcategory corresponding to the above $\mathcal{T}$ is precisely $\mathcal{W}:= \mathsf{Filt}\, \{ B_1,\dots, B_m\}$, and the coverse is given by $\mathsf{T}(\mathcal{W})$. Then it is easy to check ${}^\perp B_1 \cap \cdots \cap {}^\perp B_m = {}^\perp \mathcal{W}$. To sum up, starting from the wide subcategory $\mathcal{W}$, we have # # $$ # \overline{\kappa}(\mathsf{T}(\mathcal{W})) = {}^\perp \mathcal{W} # $$ # # This means that the follownig commutes! # # $$ # \require{AMScd} # \begin{CD} # \{ \text{wide subcats} \} @= \{ \text{wide subcats} \} \\ # @V{\mathsf{T}}VV @V{^\perp (-)}VV\\ # L = \{ \text{torsion classes}\} @>{\overline{\kappa}}>> L # \end{CD} # $$