=====================================================================
===                                                               ===
===               EQUIVARIANT  SCHUBERT  CALCULATOR               ===
===                                                               ===
===               Written  by  Anders Skovsted Buch               ===
===                                                               ===
===                        October 4, 2014                        ===
===                                                               ===
=====================================================================


1. Introduction

This is a preliminary user manual for the Equivariant Schubert
Calculator, a Maple package to perform calculations in the equivariant
K-theory of generalized flag varieties G/P, as well as the equivariant
quantum K-theory of cominuscule homogeneous spaces.

The Equivariant Schubert Calculator is loaded into Maple by the
commands:

> read equivcalc;
> with(equivcalc);


2. Data Structures

The most important objects represented in the Equivariant Schubert
Calculator are ROOT SYSTEMs, ROOTs, WEIGHTs, WEYL GROUP ELEMENTs,
PARABOLIC SUBGROUPs, and SCHUBERT CLASSES.  In this section I explain
how each of these objects are represented.

A ROOT SYSTEM is represented by its Cartan matrix, given as a list of
lists of integers.  The root system G2 is represented by:

    [[2, -1], [-3, 2]]

A ROOT is represented as the list of coefficients required to express
the root as a linear combination of simple roots.  For example, the
longest root of G2 is equal to 3 times the first simple root plus two
times the second simple root; this longest root is represented by the
list:

    [3, 2]

A WEIGHT is represented by the list of coefficients required to
express the weight as a linear combination of fundamental weights (the
basis vectors dual to the simple coroots).  For example, [1,1,...,1]
is the sum of all the fundamental weights.

A WEYL GROUP ELEMENT w is represented as the weight obtained by
applying w^{-1} to the weight [1,1,...,1].  For example, the first
simple reflection s_1 in the Weyl group of type G2 is represented as
the weight

    [-1, 2]

as we have s_1.[1,1] = [-1,2].  This way to represent Weyl group
elements has the advantage that it works for root systems of all Lie
types.  On the other hand, it is difficult for humans to interpret the
representation of a Weyl group element.  However, the Equivariant
Schubert Calculator offers many functions that compute alternative
representations, including reduced expressions or signed permutations
for elements of classical Weyl groups.

A PARABOLIC SUBGROUP is represented as the set of numbers of simple
reflections that generate the parabolic subgroup.  The parabolic
subgroup of G2 generated by the first simple reflection is represented
by:

    {1}

A SCHUBERT CLASS of the homogeneous space G/P, given by a root system
R and a parabolic subgroup P, is represented as X[w], where [w] is the
weight representation of the Weyl group element of minimal length that
corresponds to the Schubert class.  More precisely, X[w] is the class
of the opposite Schubert variety given by w, with codimension equal to
the length of w.  For example, the class of the opposite Schubert
divisor in G2/B that corresponds to the first simple reflection is:

    X[-1, 2]

Notice that the Equivariant Schubert Calculator makes no attempt to
keep track of which lists of integers represent roots or weights, or
which root systems these roots or weights belong to.  The user is
responsible for this.  Similarly, the notation for Schubert classes is
the same for all cohomology theories, and the user is responsible for
knowing where a Schubert class lives.


3. Choosing a root system

The Equivariant Schubert Calculator operates with a current root
system and a current parabolic subgroup.  To choose this pair, use the
command rs(R,P).  For example, to choose the root system G2 and the
parabolic subgroup generated by the first simple reflection, issue the
command:

> rs("G2", {1});

The first argument of rs() can be either a Cartan matrix (given as a
list of lists of integers) or the name of a root system (as a string).
In a string representing a root system name, the Lie type letter must
be CAPITALIZED.  Therefore the command  rs("g2",{1});  does NOT work!

The root systems and parabolic subgroups corresponding to common
spaces G/P can be set by specialized commands.  For example, the
command

> Fl(1,4,6);

tells the package that we wish to work with the variety of two-step
flags of dimension (1,4) in a vector space of dimension 6.  This
command will set the current root system to A5 and the current
parabolic subgroup to {2,3,5}.

The following commands can be used to choose other common flag
varieties:

Gr(m,n)         :  Grassmannian of m-planes in C^n.
Fl(n)           :  Variety of complete flags in C^n.
Fl(a,b,...,c,n) :  Variety of partial flags in C^n.

OG(m,N)         :  Grassmannian of isotropic m-planes in an orthogonal
                   vector space of dimension N.
OF(N)           :  Variety of complete isotropic flags in an
                   orthogonal vector space of dimension N.
OF(a,b,...,c,N) :  Variety of partial isotropic flags.

SG(m,N)         :  Grassmannian of isotropic m-planes in a symplectic
                   vector space of dimension N (N must be even).
SF(N)           :  Variety of complete isotropic flags in a symplectic
                   vector space of dimension N.
SF(a,b,...,c,N) :  Variety of partial isotropic flags.

The current root system and parabolic subgroup can be recalled using
the functions get_rs() and get_parab().

After setting a current root system R and parabolic subgroup P,
associated sets of positive roots and Weyl group elements can be
obtained with the following functions:

pos_roots()     :  Return the set of all positive roots of the current
                   root system R that are not in the subsystem given
                   by the current parabolic subgroup P.

weyl_group()    :  Return the set of minimal representatives of the
                   cosets in W/P, where W is the Weyl group of R.

It is also possible to specify a root system and parabolic subgroup
directly to these function with optional arguments.  In fact, this is
true about all functions that rely on the current root system and
parabolic subgroup.

pos_roots(R)    :  Return all positive roots of the root system R.
                   For example, the command pos_roots(get_rs());
                   returns the set of all positive roots of the
                   current root system.

pos_roots(R,P)  :  Return the positive roots of R that are not in the
                   subsystem of P.

weyl_group(R)   :  Return all Weyl group elements of root system R.

weyl_group(R,P) :  Minimal representatives of the cosets in W/P.

The specified root system R can be a Cartan matrix (list of lists of
integers) or a string specifying the name of the root system (with
capitalized Lie type).  For example, the following command returns the
set of all positive roots of the root system B3:

> pos_roots("B3");


4. Multiplication of Schubert classes

If a root system and a parabolic subvariety is specified, the
following commands can be used to compute products of Schubert classes
in various cohomology theories of X = G/P.

hmult(u, v)     :  Compute the product X[u]*X[v] in the singular
                   cohomology ring H(X).

htmult(u, v)    :  Compute X[u]*X[v] in the equivariant cohomology
                   ring H_T(X).

kmult(u, v)     :  Compute X[u]*X[v] in the K-theory ring K(X).

ktmult(u, v)    :  Compute X[u]*X[v] in equivariant K-theory K_T(X).

Classes in the equivariant cohomology ring H_T(X) are represented as
linear combinations of Schubert classes, where the coefficients are
polynomials in variables t[1], t[2], ..., t[n].  Here n is the rank of
the root system.  The variable t[i] represents the class in H_T(point)
given as the restriction of the (opposite) Schubert divisor of the
i-th simple reflection to the T-fixed point of the i-th simple
reflection.

Classes in the equivariant K-theory ring K_T(X) are represented as
linear combinations of Schubert classes, where the coefficients are
polynomials in the variables T[1], T[2], ..., T[n].  Here T[i] is the
class in K_T(point) given as the restriction of the ideal of the i-th
Schubert divisor to the T-fixed point of the i-th simple reflection.

If the variety G/P is cominuscule, then the above commands have the
following quantum versions:

comin_qhmult(u, v)  :  Product in QH(X).
comin_qhtmult(u, v) :  Product in QH_T(X).
comin_qkmult(u, v)  :  Product in QK(X).
comin_qktmult(u, v) :  Product in QK_T(X).


5. Common indexing conventions for Schubert classes

Let X = G/P be the generalized flag variety given by the root system R
and the parabolic subgroup P.  The following commands can be used to
convert Weyl group elements of Schubert classes of X (represented as
weights) to other common indexing objects for Schubert classes.

weyl_redexp(w) :  Return a reduced word of w, i.e. a list of simple
                  reflection numbers in a reduced expression for w.

redexp_weyl(a) :  Convert a reduced word back to a Weyl group element.

weyl_sp(w)     :  If R is a root system of classical type, then return
                  the signed permutation representing the Weyl group
                  element w.

sp_weyl(sp)    :  Convert a signed permutation back to a Weyl group
                  element.

weyl_part(w)   :  If X is a cominuscule variety or an isotropic
                  Grassmann variety, then return a partition
                  representing w.

part_weyl(la)  :  Convert the partition la back to a Weyl group
                  element.

Notice that these functions can also be applied to expressions of
Schubert classes.  This makes it possible to print products of
Schubert classes using any desired indexing convention.

Example:
The following commands compute the square of the divisor class on
Gr(2,4) and displays this product using partition notation as well as
permutation notation:

Gr(2,4);
u := part_weyl([1]);
prd := hmult(u, u);
weyl_part(prd);
weyl_sp(prd);


6. Additional functions

The Equivariant Schubert Calculator has many more functions
available.  A full list of function names is printed by the command:

> with(equivcalc);

I plan to write an expanded version of this user manual that will
explain how all these functions work.  Until then you may be able to
guess what a function does from its name, and you can see which
arguments it expects by looking at the source code in the file
equivcalc.

You are also encouraged to read the example files supplied with the
Equivariant Schubert Calculator:

    ex_curvenbhd   ex_kminu       ex_kpieri      ex_qkcayley
    ex_qkgrass     ex_qktP2       ex_twostep

Each file contains a few lines of maple commands that compute an
interesting example, as well as a reference to a paper that explains
the underlying mathematics.


Enjoy!

Anders Buch

=====================================================================

