atlas  0.6
innerclass.h
Go to the documentation of this file.
1 /*
2  This is innerclass.h
3 
4  Copyright (C) 2004,2005 Fokko du Cloux
5  Copyright (C) 2006--2016 Marc van Leeuwen
6  part of the Atlas of Lie Groups and Representations
7 
8  For license information see the LICENSE file
9 */
10 
11 /*
12  Class definitions and function declarations for the class
13  InnerClass.
14 */
15 
16 #ifndef INNERCLASS_H /* guard against multiple inclusions */
17 #define INNERCLASS_H
18 
19 #include "../Atlas.h"
20 
21 #include "tags.h"
22 #include "bitmap.h" // containment of bitmaps for real forms
23 #include "permutations.h"// containment of root twist
24 
25 #include "cartanclass.h"// containment of |Fiber|
26 #include "involutions.h"// containment of |InvolutionTable|, |Cartan_orbits|
27 #include "poset.h" // containment of Cartan poset
28 #include "rootdata.h" // containment of root datum and its dual
29 #include "tits.h" // containment of Tits group and its dual
30 
31 namespace atlas {
32 
33 namespace innerclass {
34 
35 /******** function declarations **********************************************/
36 
37 
38 WeylWord canonicalize // return value is conjugator, built left-to-right
39  (TwistedInvolution& sigma,
40  const RootDatum& rd,
41  const TwistedWeylGroup& W,
42  RankFlags gens);
43 
44 /* this function should NOT be made into a method, suppressing the |rs| and |W|
45  parameters, as these can be be dual to those in the |InnerClass|!
46 */
48  WeylWord& cross,
49  const TwistedInvolution& tw,
50  const RootSystem& rs,
51  const TwistedWeylGroup& W);
52 
53 RealFormNbr real_form_of // who claims this KGB element?
54  (InnerClass& G, TwistedInvolution tw, // by value
55  const RatCoweight& torus_factor,
56  RatCoweight& cocharacter // additional output
57  );
58 
59 RatCoweight some_coch // some cocharacter whose real form is in class |csc|
60  (const InnerClass& G,cartanclass::square_class csc);
61 
63  (const InnerClass& G, const RatCoweight& coch);
64 
65 // find compact ones among imaginary simple roots for |G|, as defined by |coch|
66  Grading compacts_for(const InnerClass& G, TorusElement coch);
67 
68 containers::sl_list<TorusPart> preimage
69  (const Fiber& fund_f, const cartanclass::square_class csc,
71 
72 
73  // apply involution action of |tw| on weight lattice to |v|
74 void twisted_act
75  (const InnerClass& G, const TwistedInvolution& tw,Weight& v);
76 void twisted_act
77  (const InnerClass& G, const TwistedInvolution& tw,RatWeight& v);
78 
79 void twisted_act
80  (const InnerClass& G,Weight& v, const TwistedInvolution& tw);
81 void twisted_act
82  (const InnerClass& G,RatWeight& v, const TwistedInvolution& tw);
83 
84 
85 
86 /******** type definitions ***************************************************/
87 
88 
89 /* Complex reductive group endowed with an inner class of real forms.
90 
91  This class computes those aspects of the structure theory of (an inner class
92  of) real reductive groups G(R) that will be needed to describe the Langlands
93  classification of irreducible representations of G(R). Since we look at an
94  inner class of real forms, the first problem is to enumerate the different
95  real forms constituting this inner class.
96 
97  We list in d_cartanSet the conjugacy classes of real Cartan subgroups up to
98  stable conjugacy; this classification does not refer to a particular real
99  form. However, the enumeration of the real forms actually takes place during
100  the construction of the first (fundamental) Cartan subgroup. Each stable
101  class corresponds to at most one conjugacy class of real Cartan subgroups in
102  each real form; so for each stable class of Cartan subgroups, we enumerate
103  the real forms over which it is defined (the fundamental Cartan subgroup is
104  defined for all real forms).
105 
106  We compute the structure of the real Cartan subgroups (notably the groups of
107  connected components); this depends only on the stable conjugacy class. We
108  determine the real Weyl groups of Cartan subgroups (which are _almost_
109  constant across the stable class, but not quite).
110 
111  Everything is determined by (and computed from) two things: the based root
112  datum recorded in the RootDatum class d_rootDatum, and its involutive
113  distinguished automorphism. Many computations take place inside the Tits
114  group, which is an extension of the (complex) Weyl group by the elements of
115  order 2 in the torus. (In fact the structure we store in |d_titsGroup|
116  allows computing in an even larger group, the semidirect product of the Tits
117  group just described by a factor Z/2Z whose action on the other factor is
118  determined by the given automorphism of the based root datum, the "twist".)
119 
120  The field |d_rootDatum| stores the root datum, which must have been
121  constructed before. The field |d_titsGroup| holds the mentioned (enlarged)
122  Tits group, which is constructed upon entry from the root datum and the
123  involution; it also gives access to just the (complex) Weyl group when that
124  is necessary. Finally the other fields store the information relative to
125  (stable conjugacy classes of) Cartan subgroups and real forms.
126 
127  Each stable conjugacy classes of Cartan subgroups corresponds to a
128  W-conjugacy class of involutions in the Gamma-enlarged Weyl group (W
129  semidirect <Gamma>, where <Gamma>=Z/2Z acts on W), contained in the
130  complement of its subgroup W. Since such involutions are of the form
131  (w,Gamma), they can be represented by their element w, which is called a
132  twisted involution. The condition for being a twisted involution $t$ is
133  $t\Gamma(t)=e$ and "twisted conjugacy" of $t$ by $w\in W$ is given by
134  $w\cdot t=wt\Gamma(w^{-1})$. The stable conjugacy classes of Cartan
135  subgroups will each be represented by a canonical representative of the
136  corresponding twisted conjugacy class of twisted involutions.
137 
138  In addition to describing the set of Cartan classes, this class provides
139  access (via the |Cartan| array) to data for each individual one of them, and
140  (via |Cartan_poset|) to the partial order relation between them. The
141  structure |C_info| contains the imporatant |CartanClass| field |Cc|, which
142  holds most of the information about the Cartan class (in two |Fiber|
143  structures, an ordinary and dual fiber, see the \.{cartanclass} module);
144  this information is generated for all Cartan classes upon construction of
145  the |InnerClass|. The remaining fields of |C_info| reflect an
146  old and now reverted design decision, in which only a pointer to a
147  |CartanClass| was held, which was intially null and "filled" on demand. This
148  meant that real forms, which are identified as orbits in the adjoint fiber
149  group, were generated without access to the |CartanClass| information. In
150  fact, although that information is now available right away, the real forms
151  are still genrated without using that information. Instead an "adjoint"
152  instance of the Tits group (of which another instance will serve similalrly
153  for generation of KGB elements) is used to find elements representing the
154  real form at each of its Cartan classes. The other fields of |C_info| store
155  minimal information derived from this generation: a single torus part |rep|
156  of an adjoint Tits group element for each real form over which the Cartan
157  class is defined, a dual counterpart |dual_rep|, and some complementary
158  information to help identify real forms across different Cartans.
159 
160  For the partial order relation, let |tau_i| be involutions acting on the
161  complex torus |H| for various classes of Cartan subgroups; (H,tau_1) is
162  considered "more compact" than (H,tau_2) if the identity component of the
163  fixed point set H^tau_2 is W-conjugate to a subtorus of H^tau_1.
164 
165  The problem for the dual group of G is identical, the bijection taking the
166  negative transpose of a twisted involution. This bijection reverses the
167  partial order on Cartans. The class also provides access to Cartans in the
168  dual group.
169 
170  */
172 {
173  // The based root datum. It is stored here (constructed by our constructor)
174  const RootDatum d_rootDatum;
175 
176  // The dual based root datum. It is also stored and constructed by us
177  const RootDatum d_dualRootDatum;
178 
179  const WeylGroup* my_W; // pointer to |W| in case we own |W|, or |NULL|
180  const WeylGroup& W; // possibly owned (via |my_W|) reference
181 
182  /*
183  Fiber class for the fundamental Cartan subgroup
184  The distinguished involution (permuting the simple roots) is stored here
185  so for construction it is convient to precede the |d_titsGroup| member
186  */
188 
189  /*
190  Fiber class for the fundamental Cartan in the dual group.
191  The fiber group here is the group of characters (i.e., the dual group)
192  of the component group of the quasisplit Cartan.
193  */
195 
196  // Tits group of the based root datum, extended by an involutive automorphism
197  // this member also stores the |TwistedWeylGroup| (which refers to |W|)
198  const TitsGroup d_titsGroup;
199  // Tits group of the dual based root datum
200  const TitsGroup d_dualTitsGroup;
201  // the permutation of the roots given by the based automorphism
202  const Permutation root_twist;
203 
204 
205  struct C_info
206  { // gradings of the set of simple (co)roots, for all real forms
207  typedef std::vector<RankFlags> form_reps;
208 
210  BitMap real_forms,dual_real_forms; // mark present (dual) real forms
211  form_reps rep,dual_rep; // gradings representing those (dual) real forms
212  BitMap below; // numbers of Cartan classes below this in partial ordering
213  CartanClass Cc; // detailed information, basically |Fiber| and dual |Fiber|
215 
216  C_info(const InnerClass& G, const TwistedInvolution twi,
217  CartanNbr i); // index |i| of this Cartan used to dimension |below|
218 
219  }; // |C_info|
220  std::vector<C_info> Cartan;
221 
222  // Partial order of Cartan subgroups.
224 
225  // list of the most split Cartan classes for each real form
226  std::vector<CartanNbr> d_mostSplit;
227 
228  // a general repository for involutions, organised by conjugacy class
229  Cartan_orbits C_orb;
230 
231  public:
232 // constructors and destructors
233  InnerClass(const PreRootDatum&, // constructor builds root datum
234  const WeightInvolution&);
235 
236  InnerClass(const RootDatum&, // alternative that copies root datum
237  const WeightInvolution&);
238 
240 
241 // copy, assignment and swap are not needed, and therefore forbidden
242  InnerClass(const InnerClass&) = delete;
243  InnerClass& operator= (const InnerClass&) = delete;
244  void swap(InnerClass& G) = delete;
245 
246 
247  ~InnerClass();
248 
249 // Accessors
250 
251 // Attributes "inherited" from component objects
252 
253  const RootDatum& rootDatum() const { return d_rootDatum; }
254  const RootDatum& dualRootDatum() const { return d_dualRootDatum; }
255  const RootSystem& rootSystem() const {return d_rootDatum; } // base object
256  const RootSystem& dualRootSystem() const {return d_dualRootDatum; } // base
257  size_t rank() const { return rootDatum().rank(); }
258  size_t semisimpleRank() const { return rootSystem().rank(); }
259 
260 // Access to certain component objects themselves
261 
262  const WeylGroup& weylGroup() const { return W; }
263  const TwistedWeylGroup& twistedWeylGroup() const
264  { return d_titsGroup; } // in fact its base object
265  const TwistedWeylGroup& dualTwistedWeylGroup() const
266  { return d_dualTitsGroup; } // in fact its base object
267  const TitsGroup& titsGroup() const { return d_titsGroup; }
268  const TitsGroup& dualTitsGroup() const { return d_dualTitsGroup; }
269 
270  // a general repository for involutions, organised by conjugacy class
271  const Cartan_orbits& involution_table () const { return C_orb; }
272 
273 
274 // Attributes of the inner class as a whole
275 
276  Permutation simple_twist() const
277  { return Permutation
278  (&twistedWeylGroup().twist()[0],
279  &twistedWeylGroup().twist()[semisimpleRank()]); }
280 
281  RankFlags simple_roots_imaginary() const; // $\xi$-fixed simple roots
282  RankFlags simple_roots_real() const; // $(-w_0\xi^t)$-fixed simple roots
283 
284  const Permutation& root_involution() const { return root_twist; }
285  RootNbr twisted_root(RootNbr alpha) const { return root_twist[alpha]; }
286 
287  /* partial ordering of Cartan classes
288  This is the ordering by containment of H^theta up to conjugacy:
289  (H,theta_1) precedes (H,theta_2) if (H^theta_2)_0 is W-conjugate to a
290  subtorus of H^theta_1. Numbering of elements is as in the vector |Cartan|
291  */
292  const poset::Poset& Cartan_ordering() const { return Cartan_poset; }
293 
294  // the distinguished involution for G and for its dual group
296  { return d_fundamental.involution(); }
298  { return d_dualFundamental.involution(); }
299 
300  // number of conjugacy classes of Cartan subgroups.
301  CartanNbr numCartanClasses() const { return Cartan.size(); }
302  // number of weak real forms of G.
303  RealFormNbr numRealForms() const { return d_fundamental.numRealForms(); }
304  // number of weak real forms of the dual group of G.
306  { return d_dualFundamental.numRealForms(); }
307  // total number of involutions for the inner class.
309 
310  // size of a union of sets $K\backslash G/B$ for relevant strong real forms
311  unsigned long global_KGB_size() const;
312 
313  // the (inner) number of the quasisplit real form.
314  RealFormNbr quasisplit() const { return RealFormNbr(0); }
315 
316 
317 // Information about individual Cartan classes
318 
319  // number of weak real forms of G over which this Cartan is defined.
321  { return Cartan[cn].real_forms.size(); }
322  // number of dual real forms over which the dual of this Cartan is defined
324  { return Cartan[cn].dual_real_forms.size(); }
325 
326  // the precise sets over which (the dual of) this Cartan is defined
327  const BitMap& real_forms(CartanNbr cn) const
328  { return Cartan[cn].real_forms; }
329  const BitMap& dual_real_forms(CartanNbr cn) const
330  { return Cartan[cn].dual_real_forms; }
331 
332  // a twisted involution representative of this Cartan class
334  { return Cartan[cn].tw; }
335 
336  // remaining information is stored in |CartanClass| object
337  const CartanClass& cartan(CartanNbr cn) const { return Cartan[cn].Cc; }
338 
339 
340 // Information selected by subset of the Cartan classes
341 
342  // number of involutions for the indicated Cartans
343  InvolutionNbr numInvolutions(const BitMap& Cartan_classes) const;
344 
345 
346 // Information about individual (weak) real forms or dual real forms
347 
348  // the subset of Cartan classes defined over the real form |rf|
349  BitMap Cartan_set(RealFormNbr rf) const;
350 
351  // the set of Cartan classes for the dual real form |drf|
352  BitMap dual_Cartan_set(RealFormNbr drf) const;
353 
354  // the most split Cartan for this real form
355  CartanNbr mostSplit(RealFormNbr rf) const { return d_mostSplit[rf]; }
356 
357  /* a set of noncompact imaginary roots at the distinguished involution
358  for a representative of this real form */
360  { return d_fundamental.noncompactRoots(d_fundamental.wrf_rep(rf)); }
361 
362  /* a set of noncompact imaginary roots at the distinguished involution
363  for a representative of this real form */
365  { return d_dualFundamental.noncompactRoots(d_dualFundamental.wrf_rep(drf)); }
366 
367  // the number of elements in K\\G/B for real form |rf|.
368  unsigned long KGB_size(RealFormNbr rf) const
369  { return KGB_size(rf,Cartan_set(rf)); }
370  // the same limited to indicated Cartan classes only
371  unsigned long KGB_size(RealFormNbr rf, const BitMap& Cartan_classes) const;
372 
373  // compact simple roots ("grading shift") at first element of KGB for |rf|
375 
378 
380 
381  // torus parts that remain in the fiber and do not affect any grading
383 
384 // Information about a real form or dual real form at a given Cartan class
385 
386  // size of the block defined by weak real form |rf| and dual real form| drf|
387  unsigned long block_size(RealFormNbr rf, RealFormNbr drf) const
388  { return block_size(rf,drf,Cartan_set(rf)& dual_Cartan_set(drf)); }
389  // the same limited to indicated Cartan classes only
390  unsigned long block_size(RealFormNbr rf, RealFormNbr drf,
391  const BitMap& Cartan_classes) const;
392 
393  // more functions that interrogate the fundametal fiber
395  { return d_fundamental.strongRealForm(rf); }
396  unsigned long fundamental_fiber_size() const
397  { return d_fundamental.fiberSize(); }
398  const Partition&
400  { return d_fundamental.fiber_partition(csc); }
401  TorusPart lift_from_fundamental_fiber(unsigned long x) const
402  { const Fiber& fund=d_fundamental;
403  SmallBitVector v (static_cast<RankFlags>(x),fund.fiberRank());
404  return fund.fiberGroup().fromBasis(v);
405  }
407  { return d_fundamental.fiberGroup().toBasis(t); }
408 
409  // list torus parts mapping to strong form of |y| and further to |image|
411  (const cartanclass::square_class csc,
413  const;
414 
415  const Partition& weak_real_partition() const
416  { return d_fundamental.weakReal(); }
417  const Partition& dual_weak_real_partition() const
418  { return d_dualFundamental.weakReal(); }
419 
420  // size of fibers in KGB set for |rf| over any involution in Cartan class |cn|
421  unsigned long fiberSize(RealFormNbr rf, CartanNbr cn) const;
422  unsigned long dualFiberSize(RealFormNbr drf, CartanNbr cn) const;
423 
424  // real forms, vector indexed by parts in |cartan(n).fiber().weakReal()|
426  { return Cartan[cn].real_labels; }
427  // dual real forms, indexed by parts in |cartan(n).dual_fiber().weakReal()|
429  { return Cartan[cn].dual_real_labels; }
430 
431  // part in the |weakReal| partition at Cartan |cn| corresponding to |rf|
434  { return permutations::find_index(realFormLabels(cn),rf); }
437  { return permutations::find_index(dualRealFormLabels(cn),drf); }
438 
439  // adjoint fiber element in fiber of Cartan |cn|, representative of |rf|
442  { return cartan(cn).fiber().wrf_rep(real_form_part(rf,cn)); }
443  // adjoint fiber element in dual fiber of Cartan |cn|, representative of |drf|
446  { return cartan(cn).dualFiber().wrf_rep(dual_real_form_part(drf,cn)); }
447 
448 
449 // Information about individual twisted involutions
450 
451  CartanNbr class_number(TwistedInvolution) const; // by value
452  Weight posRealRootSum(const TwistedInvolution&) const; // 2rho_{re}
453  Weight posImaginaryRootSum(const TwistedInvolution&) const; // 2rho_{im}
454 
455  // matrix giving involution action of |tw| on weight lattice (lookup)
456  const WeightInvolution& matrix(const TwistedInvolution& tw) const
457  { return C_orb.matrix(tw); }
458  // version not relying on involution table, so usable during construction
460 
461  InvolutionData involution_data(const TwistedInvolution& tw) const
462  { return InvolutionData::build(rootSystem(),twistedWeylGroup(),tw); }
463 
464 /* Make |sigma| canonical and return Weyl group |w| element that twisted
465  conjugates the canonical representative back to |sigma|. Thus after the
466  call the involution corresponding to |sigma| satisfies:
467 
468  (1) the sum of the positive real roots is dominant (call it $SR$)
469  (2) in the subsystem of roots orthogonal to $SR$ (which contains all the
470  imaginary roots), the sum of the imaginary roots (call it $SI$) is
471  dominant \emph{for the subsystem}
472  (3) in the subsystem of roots orthogonal to both $SR$ and $SI$, the
473  involution corresponding to twisted involution fixes (globally) the
474  dominant chamber of the subsystem (it permutes its simple roots).
475 */
476  WeylWord canonicalize(TwistedInvolution& sigma, RankFlags gens) const;
477  WeylWord canonicalize(TwistedInvolution& sigma) const
479 
480 
481 // Manipulators
482 
483  void generate_Cartan_orbit (CartanNbr i) { C_orb.add(*this,i); }
484 
485 // Auxiliary accessors
486  private:
487 
488  void construct(); // does essential work, common to two constructors
489 
491 
492  // whether Cartan \#cn is defined over real form \#rf.
493  bool is_defined(RealFormNbr rf, CartanNbr cn) const
494  { return Cartan[cn].real_forms.isMember(rf); }
495 
496  // adjoint torus parts, in fundamental coweight basis, \emph{are} gradings
498  { return TorusPart(Cartan[cn].rep[rf],semisimpleRank()); }
500  { return TorusPart(Cartan[cn].dual_rep[drf],semisimpleRank()); }
501 
502 // Auxiliary manipulators
503 
504  void map_real_forms(CartanNbr cn); // set |Cartan[cn].real_labels|
505  void map_dual_real_forms(CartanNbr cn); // set |Cartan[cn].dual_real_labels|
506 
507 }; // |class InnerClass|
508 
509 } // |namespace innerclass|
510 
511 } // |namespace atlas|
512 
513 #endif
const Permutation root_twist
Definition: innerclass.h:202
void map_dual_real_forms(CartanNbr cn)
Definition: innerclass.cpp:534
unsigned int InvolutionNbr
Definition: Atlas.h:281
TwistedInvolution tw
Definition: innerclass.h:209
containers::sl_list< TorusPart > central_fiber(RealFormNbr rf) const
Definition: innerclass.cpp:954
WeylElt TwistedInvolution
Definition: Atlas.h:231
unsigned short square_class
Definition: Atlas.h:312
unsigned long global_KGB_size() const
Definition: innerclass.cpp:751
BitVector< constants::RANK_MAX > SmallBitVector
Definition: Atlas.h:181
cartanclass::adjoint_fiber_orbit real_form_part(RealFormNbr rf, CartanNbr cn) const
Definition: innerclass.h:433
cartanclass::AdjointFiberElt dualRepresentative(RealFormNbr drf, CartanNbr cn) const
Definition: innerclass.h:445
const WeightInvolution & distinguished() const
Definition: innerclass.h:295
Permutation simple_twist() const
Definition: innerclass.h:276
std::vector< RealFormNbr > RealFormNbrList
Definition: Atlas.h:303
CartanClass Cc
Definition: innerclass.h:213
CartanNbr class_number(TwistedInvolution) const
find number of Cartan class containing twisted involution |sigma|
Definition: innerclass.cpp:720
Cartan_orbits C_orb
Definition: innerclass.h:229
RealFormNbr numRealForms(CartanNbr cn) const
Definition: innerclass.h:320
Weight posRealRootSum(const TwistedInvolution &) const
Definition: innerclass.cpp:692
const RealFormNbrList & realFormLabels(CartanNbr cn) const
Definition: innerclass.h:425
Weight posImaginaryRootSum(const TwistedInvolution &) const
Definition: innerclass.cpp:699
unsigned long dualFiberSize(RealFormNbr drf, CartanNbr cn) const
Returns the size of the dual fiber orbits corresponding to the dual strong real forms lying over dual...
Definition: innerclass.cpp:597
WeylWord canonicalize(TwistedInvolution &sigma, const RootDatum &rd, const TwistedWeylGroup &W, RankFlags gens)
Definition: innerclass.cpp:1035
cartanclass::square_class xi_square(RealFormNbr rf) const
Definition: innerclass.cpp:766
BitSet< constants::RANK_MAX > RankFlags
Definition: Atlas.h:60
BitMap Cartan_set(RealFormNbr rf) const
Definition: innerclass.cpp:640
unsigned short adjoint_fiber_orbit
Definition: Atlas.h:311
bool is_defined(RealFormNbr rf, CartanNbr cn) const
Definition: innerclass.h:493
CartanNbr mostSplit(RealFormNbr rf) const
Definition: innerclass.h:355
const WeylGroup & W
Definition: innerclass.h:180
Class definitions and function declarations for the RootDatum class.
unsigned long fiberSize(RealFormNbr rf, CartanNbr cn) const
Definition: innerclass.cpp:571
const BitMap & real_forms(CartanNbr cn) const
Definition: innerclass.h:327
const RealFormNbrList & dualRealFormLabels(CartanNbr cn) const
Definition: innerclass.h:428
static unsigned long lMask[longBits+1]
Definition: constants.h:52
const WeylGroup * my_W
Definition: innerclass.h:179
BitMap dual_real_forms
Definition: innerclass.h:210
cartanclass::StrongRealFormRep sample_strong_form(RealFormNbr rf) const
Definition: innerclass.h:394
const TitsGroup & titsGroup() const
Definition: innerclass.h:267
std::vector< C_info > Cartan
Definition: innerclass.h:220
const RootDatum & dualRootDatum() const
Definition: innerclass.h:254
void swap(InnerClass &G)=delete
const Partition & fundamental_fiber_partition(cartanclass::square_class csc) const
Definition: innerclass.h:399
BitMap dual_Cartan_set(RealFormNbr drf) const
Definition: innerclass.cpp:651
const RootDatum & rootDatum() const
Definition: innerclass.h:253
InnerClass & operator=(const InnerClass &)=delete
CartanNbr numCartanClasses() const
Definition: innerclass.h:301
const TitsGroup d_titsGroup
Definition: innerclass.h:198
const TwistedWeylGroup & twistedWeylGroup() const
Definition: innerclass.h:263
RealFormNbr numDualRealForms(CartanNbr cn) const
Definition: innerclass.h:323
form_reps dual_rep
Definition: innerclass.h:211
cartanclass::adjoint_fiber_orbit dual_real_form_part(RealFormNbr drf, CartanNbr cn) const
Definition: innerclass.h:436
KGBElt cross(const KGB_base &kgb, KGBElt x, RootNbr alpha)
Definition: kgb.cpp:824
RealFormNbr quasisplit() const
Definition: innerclass.h:314
void twisted_act(const InnerClass &G, const TwistedInvolution &tw, Weight &v)
Definition: innerclass.cpp:1311
int_Vector Weight
Definition: Atlas.h:154
Definition: sl_list.h:30
void Cayley_and_cross_part(RootNbrSet &Cayley, WeylWord &cross, const TwistedInvolution &ti, const RootSystem &rs, const TwistedWeylGroup &W)
Definition: innerclass.cpp:1152
void generate_Cartan_orbit(CartanNbr i)
Definition: innerclass.h:483
TorusPart dual_sample_torus_part(CartanNbr cn, RealFormNbr drf) const
Definition: innerclass.h:499
InnerClass(const PreRootDatum &, const WeightInvolution &)
Definition: innerclass.cpp:115
const BitMap & dual_real_forms(CartanNbr cn) const
Definition: innerclass.h:329
unsigned long fundamental_fiber_size() const
Definition: innerclass.h:396
TorusPart x0_torus_part(RealFormNbr rf) const
Definition: innerclass.cpp:980
BitMap below
Definition: innerclass.h:212
void map_real_forms(CartanNbr cn)
Definition: innerclass.cpp:503
RankFlags simple_roots_real() const
Definition: innerclass.cpp:630
InvolutionNbr numInvolutions() const
Definition: innerclass.cpp:662
std::vector< CartanNbr > d_mostSplit
Definition: innerclass.h:226
Fiber d_dualFundamental
Definition: innerclass.h:194
BitMap real_forms
Definition: innerclass.h:210
WeylWord canonicalize(TwistedInvolution &sigma, RankFlags gens) const
Definition: innerclass.cpp:712
RealFormNbrList real_labels
Definition: innerclass.h:214
RankFlags simple_roots_imaginary() const
Definition: innerclass.cpp:621
const TitsGroup & dualTitsGroup() const
Definition: innerclass.h:268
RealFormNbrList dual_real_labels
Definition: innerclass.h:214
unsigned long KGB_size(RealFormNbr rf) const
Definition: innerclass.h:368
const RootSystem & dualRootSystem() const
Definition: innerclass.h:256
RankFlags simple_roots_x0_compact(RealFormNbr rf) const
Definition: innerclass.cpp:774
size_t find_index(const std::vector< T > &v, const T &x)
Definition: permutations.h:31
Definition: innerclass.h:205
RealFormNbr numRealForms() const
Definition: innerclass.h:303
cartanclass::FiberElt to_fundamental_fiber(TorusPart t) const
Definition: innerclass.h:406
const Cartan_orbits & involution_table() const
Definition: innerclass.h:271
C_info(const InnerClass &G, const TwistedInvolution twi, CartanNbr i)
Definition: innerclass.cpp:97
const Partition & weak_real_partition() const
Definition: innerclass.h:415
const TitsGroup d_dualTitsGroup
Definition: innerclass.h:200
TorusPart grading_shift_repr(Grading diff) const
Definition: innerclass.cpp:866
SmallBitVector AdjointFiberElt
Definition: Atlas.h:309
bitmap::BitMap RootNbrSet
Definition: Atlas.h:218
RootNbr twisted_root(RootNbr alpha) const
Definition: innerclass.h:285
std::vector< RankFlags > form_reps
Definition: innerclass.h:207
Represents a poset by the matrix of order relations.
Definition: poset.h:39
const WeightInvolution & matrix(const TwistedInvolution &tw) const
Definition: innerclass.h:456
unsigned short RealFormNbr
Definition: Atlas.h:302
RealFormNbr square_class_repr(cartanclass::square_class csc) const
Definition: innerclass.cpp:770
const RootDatum d_dualRootDatum
Definition: innerclass.h:177
const CartanClass & cartan(CartanNbr cn) const
Definition: innerclass.h:337
RealFormNbr real_form_of(InnerClass &G, TwistedInvolution tw, const RatCoweight &torus_factor, RatCoweight &coch)
Definition: innerclass.cpp:1203
unsigned short CartanNbr
Definition: Atlas.h:301
Definitions and declarations for the BitMap class.
cartanclass::AdjointFiberElt representative(RealFormNbr rf, CartanNbr cn) const
Definition: innerclass.h:441
RatCoweight some_coch(const InnerClass &G, cartanclass::square_class csc)
Definition: innerclass.cpp:846
WeightInvolution compute_matrix(const TwistedInvolution &tw) const
Definition: innerclass.cpp:685
InvolutionData involution_data(const TwistedInvolution &tw) const
Definition: innerclass.h:461
~InnerClass()
Definition: innerclass.cpp:452
containers::sl_list< TorusPart > preimage(const Fiber &fund_f, const cartanclass::square_class csc, const cartanclass::FiberElt y, const cartanclass::AdjointFiberElt image)
Definition: innerclass.cpp:933
TorusPart sample_torus_part(CartanNbr cn, RealFormNbr rf) const
Definition: innerclass.h:497
const WeylGroup & weylGroup() const
Definition: innerclass.h:262
size_t rank() const
Definition: innerclass.h:257
const TwistedWeylGroup & dualTwistedWeylGroup() const
Definition: innerclass.h:265
Definition: Atlas.h:38
Definition of dummy argument tags used for constructor overloading.
Definition: tags.h:51
RootNbrSet noncompactRoots(RealFormNbr rf) const
Definition: innerclass.h:359
WeylWord canonicalize(TwistedInvolution &sigma) const
Definition: innerclass.h:477
poset::Poset Cartan_poset
Definition: innerclass.h:223
const poset::Poset & Cartan_ordering() const
Definition: innerclass.h:292
containers::sl_list< TorusPart > torus_parts_for_grading_shift(const cartanclass::square_class csc, const cartanclass::FiberElt y, const cartanclass::AdjointFiberElt image) const
Definition: innerclass.cpp:902
Fiber d_fundamental
Definition: innerclass.h:187
Container of a large (more than twice the machine word size) set of bits.
Definition: bitmap.h:52
unsigned short RootNbr
Definition: Atlas.h:216
ratvec::RationalVector< arithmetic::Numer_t > RatCoweight
Definition: Atlas.h:157
SmallBitVector TorusPart
Definition: Atlas.h:256
Grading compacts_for(const InnerClass &G, TorusElement coch)
Definition: innerclass.cpp:833
const TwistedInvolution & involution_of_Cartan(CartanNbr cn) const
Definition: innerclass.h:333
const Partition & dual_weak_real_partition() const
Definition: innerclass.h:417
std::bitset< 32 > RankFlags
Definition: KLread.cpp:39
RankFlags Grading
Definition: Atlas.h:289
const CoweightInvolution & dualDistinguished() const
Definition: innerclass.h:297
unsigned long block_size(RealFormNbr rf, RealFormNbr drf) const
Definition: innerclass.h:387
Grading grading_of_simples(const InnerClass &G, const RatCoweight &coch)
Definition: innerclass.cpp:1193
void construct()
Definition: innerclass.cpp:172
SmallBitVector FiberElt
Definition: Atlas.h:307
TorusPart lift_from_fundamental_fiber(unsigned long x) const
Definition: innerclass.h:401
RootNbrSet parity_coroots(RealFormNbr drf) const
Definition: innerclass.h:364
size_t semisimpleRank() const
Definition: innerclass.h:258
std::pair< fiber_orbit, square_class > StrongRealFormRep
Definition: Atlas.h:313
const RootSystem & rootSystem() const
Definition: innerclass.h:255
form_reps rep
Definition: innerclass.h:211
Definition: innerclass.h:171
ratvec::RationalVector< arithmetic::Numer_t > RatWeight
Definition: Atlas.h:156
const Permutation & root_involution() const
Definition: innerclass.h:284
const RootDatum d_rootDatum
Definition: innerclass.h:174
Vertex v
Definition: graph.cpp:116
RealFormNbr numDualRealForms() const
Definition: innerclass.h:305