load("tors_lattice.py")
Construct your poset and name your poset poset
.
Input using SageMath's Poset
function.
poset = Poset( ([1,2,3,4,5], [[1,2], [2,5], [1,3],[3,4],[4,5]] ) )
poset
The directions of Hasse arrows in SageMath is opposite to our convention!
Input using Jan Geuenich's String Applet and my String Applet to Sage converter
load("converter.py")
poset = Poset( SAtoSage("data.tex"))
myshow(poset, label = False)
Construct the lattice of torsion classes by TorsLattice(poset)
tors = TorsLattice(poset)
The lattice of wide subcats: tors.wide_lattice()
wide = tors.wide_lattice()
wide
Finite lattice containing 60 elements (use the .plot() method to plot)
myshow(wide)
The lattice of ICE-closed subcats: tors.ice_lattice()
myshow(tors.ice_lattice(), label = False)
The poset of torsion hearts: tors.heart_poset()
heart = tors.heart_poset()
heart.is_lattice()
False
$\Delta(\Lambda)$: tors.s_tau_tilt_complex()
cpx = tors.s_tau_tilt_complex()
cpx.h_vector()
[1, 14, 30, 14, 1]
$\mathsf{tors} kQ$ for a Dynkin quiver $Q$ is given by the Cambiran lattice [Ingalls-Thomas].
Consider the path algebra $k [ 1 \to 2 \leftarrow 3]$, type $A_3$ with its source sequence $(1,3,2)$.
Name W = WeylGroup(["A3"])
, and $\mathsf{tors} kQ$ is W.cambrian_lattice((1,3,2))
.
W = WeylGroup(["A3"])
poset = W.cambrian_lattice((1,3,2))
tors = TorsLattice(poset)
myshow(tors, label = False)
$\mathsf{wide} kQ$ should be isomorphic to the so-called non-crossing partition lattice, given by posets.NoncrossingPartitions(W)
.
wide = tors.wide_lattice()
NC = posets.NoncrossingPartitions(W)
wide.is_isomorphic(NC)
True
$\Delta(kQ)$ should be isomorphic to ClusterComplex(["A3"])
.
cpx = tors.s_tau_tilt_complex()
cpx.is_isomorphic(ClusterComplex(["A3"]))
True
$\mathsf{tors} \Pi$ is given by the right weak order of the Weyl group [Mizuno].
Consider the preprojective algebra of $\Pi$ type $D_4$.
Let's google how to input this!
W = CoxeterGroup(["D4"])
poset = W.weak_poset()
tors = TorsLattice(poset)
myshow(tors, label = False)
Compare $\mathsf{wide} \Pi$ and shard intersection order, given by W.shard_poset()
tors.wide_lattice().is_isomorphic(W.shard_poset())
True
Guess what $\Delta(\Pi)$ is.
Hint: compute invariants like the f-vector, and search it in OEIS.
cpx = tors.s_tau_tilt_complex()
cpx.f_vector()
[1, 48, 240, 384, 192]
W.permutahedron().polar().boundary_complex().is_isomorphic(cpx)
True
Let's see what kind of properties the lattice of wide subcategories has.
wide.is_ranked()
True
wide.is_semidistributive()
False
wide.is_complemented()
True
wide.is_relatively_complemented()
True
wide.is_sperner()
True
wide.is_eulerian()
False
Conjecture. The number of Hasse arrows in the poset of ICE-closed subcats is equal to the number of indecomposable Ext-projective objects!
Suppose you have tors
. Then the next code check this conjecture.
ice = tors.ice_lattice()
ice_itv = {itv for itv in tors.all_itvs() if tors.is_ice_itv(itv)} # the set of all ICE intervals
for itv in ice_itv:
num_proj = tors.number_of_projs(itv)
itv_brick = tors.bricks(itv)
num_Hasse_arrows = len(ice.lower_covers(itv_brick))
if num_proj != num_Hasse_arrows:
print ("Not True!!")
break
else:
print("The conjecture is True in this case.")
Not True!!