Semisimple.jl 1.3.0 is out.
The 1.0.0 announcement was the last release
post, so there is some catching up to do: 1.1.0 made everything faster,
1.2.0 added conveniences for Dynkin types, and 1.3.0 has one theme:
everything that folds a weight into the dominant chamber can now fold into the
dominant chamber of a root subsystem.
Relative folds
The functions conjugate_dominant_weight, conjugate_dominant_weight_with_elem,
conjugate_dominant_weight_with_length, and is_singular all accept an optional
set of nodes $S$ of the Dynkin diagram. They then reflect only in the simple roots
indexed by $S$, so the Weyl group element they produce lives in the parabolic
subgroup $\mathrm{W}_S$, and singularity means lying on a wall of that subsystem:
using Semisimple
λ = WeightLatticeElem(TypeA{3}, [-1, 2, -1])
conjugate_dominant_weight_with_length(λ) # (ω1 + ω3, 2)
conjugate_dominant_weight_with_length(λ, (2, 3)) # (-ω1 + ω2 + ω3, 1)
is_singular(λ) # true
is_singular(λ, (2, 3)) # false
Note how the relative fold is happy to leave a negative coordinate on node 1: dominance is only asked for on $S$. And a weight can be singular for the full Weyl group while being regular for $\mathrm{W}_S$, as above.
This is exactly the combinatorics behind the relative
Borel–Weil–Bott theorem: the higher direct images along a projection of flag varieties are
computed by the same $\rho$-shifted fold, restricted to the nodes of the fibre.
It is what powers pushforward in
PartialFlagVarieties.jl 0.3.0,
and with 1.3.0 the fold lives where it belongs, next to the Weyl group.
The releases in between
1.1.0 was a performance release. The Weyl group kernels (dominant-chamber
folds, Freudenthal, orbit traversal) are now specialized per rank rather than
per Dynkin type, all simple types up to rank 10 come precompiled, and
Freudenthal multiplicities are BigInt, since the Int values could overflow.
1.2.0 added three conveniences for Dynkin types:
parse_dynkin_type("A3 x D5")turns a string into a type, accepting exactly the labels the package works with;sub_dynkin_type(DT, vertices)reads off the type of the sub-diagram spanned by a set of vertices, which is how one finds the semisimple part of a Levi;WeightLatticeElem(DT)is the zero weight, no vector of zeros needed.
The second one pairs well with the relative folds above: nodes picks the
subsystem, and sub_dynkin_type tells you which type it has.
One rename
The unexported borel_weil_bott is now _borel_weil_bott: the underscore marks
it as internal and outside semantic versioning. The theorem properly belongs to
PartialFlagVarieties.jl, which builds it from the exported
conjugate_dominant_weight_with_length; the copy in Semisimple.jl stays around
to exercise the restricted fold from the tests.
Updating
Semisimple.jl is registered in the General registry, so:
using Pkg
Pkg.update("Semisimple")
As always, issues and feature requests are welcome on the repository.