atlas  0.6
realredgp.h
Go to the documentation of this file.
1 /*
2  This is realredgp.h
3 
4  Copyright (C) 2004,2005 Fokko du Cloux
5  Copyright (C) 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 // Class definitions and function declarations for RealReductiveGroup.
12 
13 #ifndef REALREDGP_H /* guard against multiple inclusions */
14 #define REALREDGP_H
15 
16 #include "bitmap_fwd.h"
17 #include "poset_fwd.h"
18 #include "../Atlas.h"
19 
20 #include "ratvec.h" // containment of |RatCoweight| field
21 #include "topology.h" // containment of |Connectivity| field
22 
23 
24 /******** type definitions **************************************************/
25 
26 namespace atlas {
27 
28 namespace realredgp {
29 
30 /* Represent a real form on a connected reductive complex group,
31  determining a real reductive group
32 
33  An object of this class is determined by a InnerClass and the
34  number of a real form; in addition it stores some data concerning the group
35  of real points of the real form
36 
37  The complex group is referred to by a reference that is not owned; we are
38  dependent on the owner of the complex group, and once it is destructed, the
39  RealReductiveGroup objects referring to it become invalid.
40 */
42 {
46 
47  typedef BitSet<NumStatusFlags> Status;
48 
49  // we do not own the complex group; a RealReductiveGroup should be seen
50  // as dependent on a complex group; when the complex group changes,
51  // the dependent RealReductiveGroup objects are invalidated
52  InnerClass& d_innerClass;
53 
54  RealFormNbr d_realForm; // our identification number
55  topology::Connectivity d_connectivity; // characters of the component group
56 
57  RatCoweight square_class_cocharacter; // a base coweight for square class
58  TorusPart torus_part_x0; // initial |TorusPart| relative to square class base
59 
60  const TitsCoset* d_Tg; // owned pointer; the group is stored here
61  KGB* kgb_ptr; // owned pointer, but initially |NULL|
62  KGB* dual_kgb_ptr; // owned pointer, but initially |NULL|
63 
64  Status d_status;
65 
66  public:
67 
68 // constructors and destructors
69  RealReductiveGroup(InnerClass&, RealFormNbr);
70  RealReductiveGroup(InnerClass&, RealFormNbr,
71  const RatCoweight& coch, TorusPart x0_torus_part);
72  ~RealReductiveGroup(); // not inline: type incomplete; deletes pointers
73 
74 // accessors
75  const InnerClass& innerClass() const { return d_innerClass; }
76  // following method forces |const| result, compare with |cbegin| methods
77  const InnerClass& cinnerClass() const { return d_innerClass; }
78  RealFormNbr realForm() const { return d_realForm; }
79  const RootDatum& rootDatum() const;
80  const TitsCoset& basedTitsGroup() const { return *d_Tg; }
81  const TitsGroup& titsGroup() const;
82  const WeylGroup& weylGroup() const;
83  const TwistedWeylGroup& twistedWeylGroup() const;
84  BitMap Cartan_set() const;
85  const CartanClass& cartan(size_t cn) const; // Cartan number of parent
86 
88  RatCoweight g() const; // |square_class_cocharacter| + $\check\rho$
89  RatCoweight g_rho_check() const // that |g()|, minus $\check\rho$:
90  { return square_class_cocharacter; }
91  Grading base_grading() const; // grading (1=noncompact) at square class base
92 
93  bool isConnected() const { return d_status[IsConnected]; }
94 
95  bool isCompact() const { return d_status[IsCompact]; }
96  bool isQuasisplit() const { return d_status[IsQuasisplit]; }
97  bool isSplit() const { return d_status[IsSplit]; }
98 
99  bool isSemisimple() const;
100  size_t numCartan() const;
101  size_t rank() const;
102  size_t semisimpleRank() const;
103  size_t numInvolutions(); // non-|const|, as Cartan classes get generated
104  size_t KGB_size() const; // the cardinality of |K\\G/B|.
105  size_t mostSplit() const;
106 
107 /*
108  Return the grading offset (on simple roots) adapted to |G|. This flags among
109  the simple roots those that are noncompact imaginary at the initial KGB
110  element |x0| of G (which lives on the fundamental Cartan).
111 */
113 
114  const size_t component_rank() const;
115  const SmallBitVectorList& dualComponentReps() const;
116  const WeightInvolution& distinguished() const;
117 
118 /* Return the set of noncompact imaginary roots for (the representative of)
119  the real form.
120 */
121  RootNbrSet noncompactRoots() const;
122 
123 // manipulators
124  void swap(RealReductiveGroup&);
125 
126  InnerClass& innerClass()
127  { return d_innerClass; }
128 
129  const KGB& kgb();
130  const KGB& kgb_as_dual();
131  const BruhatOrder& Bruhat_KGB();
132 
133 // internal methods
134  private:
135  void construct(); // work common to two constructors
136 }; // |class RealReductiveGroup|
137 
138 
139 // function declarations
140 
142  (const InnerClass& G, RealFormNbr wrf, RatCoweight coch,
143  TwistedInvolution tw, // by value, modified
144  const RatCoweight& torus_factor
145  );
146 
147 } // |namespace realredgp|
148 
149 } // |namespace atlas|
150 
151 #endif
KGB * kgb_ptr
Definition: realredgp.h:61
size_t mostSplit() const
Definition: realredgp.cpp:174
WeylElt TwistedInvolution
Definition: Atlas.h:231
const TitsGroup & titsGroup() const
Definition: realredgp.cpp:135
const TitsCoset & basedTitsGroup() const
Definition: realredgp.h:80
const CartanClass & cartan(size_t cn) const
Definition: realredgp.cpp:148
bool isSplit() const
Definition: realredgp.h:97
bool isQuasisplit() const
Definition: realredgp.h:96
Definition: realredgp.h:41
RealFormNbr realForm() const
Definition: realredgp.h:78
const TitsCoset * d_Tg
Definition: realredgp.h:60
size_t numInvolutions()
Definition: realredgp.cpp:168
TorusPart x0_torus_part() const
Definition: realredgp.h:87
BitSet< NumStatusFlags > Status
Definition: realredgp.h:47
KGB * dual_kgb_ptr
Definition: realredgp.h:62
bool isCompact() const
Definition: realredgp.h:95
bool isConnected() const
Definition: realredgp.h:93
RealFormNbr d_realForm
Definition: realredgp.h:54
size_t KGB_size() const
Definition: realredgp.cpp:171
RatCoweight square_class_cocharacter
Definition: realredgp.h:57
~RealReductiveGroup()
Definition: realredgp.cpp:110
const WeightInvolution & distinguished() const
Definition: realredgp.cpp:196
BitMap Cartan_set() const
Definition: realredgp.cpp:144
BitVectorList< constants::RANK_MAX > SmallBitVectorList
Definition: Atlas.h:182
InnerClass & innerClass()
Definition: realredgp.h:126
const KGB & kgb()
Definition: realredgp.cpp:204
const TwistedWeylGroup & twistedWeylGroup() const
Definition: realredgp.cpp:141
Grading grading_offset()
Definition: realredgp.cpp:184
TorusPart torus_part_x0
Definition: realredgp.h:58
size_t numCartan() const
Definition: realredgp.cpp:161
RootNbrSet noncompactRoots() const
Definition: realredgp.cpp:199
const RootDatum & rootDatum() const
Definition: realredgp.cpp:132
topology::Connectivity d_connectivity
Definition: realredgp.h:55
void construct()
Definition: realredgp.cpp:75
const WeylGroup & weylGroup() const
Definition: realredgp.cpp:138
unsigned short RealFormNbr
Definition: Atlas.h:302
void swap(RealReductiveGroup &)
Definition: realredgp.cpp:120
const KGB & kgb_as_dual()
Definition: realredgp.cpp:212
Definition: topology.h:43
const size_t component_rank() const
Definition: realredgp.cpp:191
StatusFlagNames
Definition: realredgp.h:43
const InnerClass & cinnerClass() const
Definition: realredgp.h:77
size_t semisimpleRank() const
Definition: realredgp.cpp:165
RatCoweight g() const
Definition: realredgp.cpp:151
Grading base_grading() const
Definition: realredgp.cpp:156
Definition: Atlas.h:38
const SmallBitVectorList & dualComponentReps() const
Definition: realredgp.cpp:193
Container of a large (more than twice the machine word size) set of bits.
Definition: bitmap.h:52
const BruhatOrder & Bruhat_KGB()
Definition: realredgp.cpp:220
TorusPart minimal_torus_part(const InnerClass &G, RealFormNbr wrf, RatCoweight coch, TwistedInvolution tw, const RatCoweight &torus_factor)
Definition: realredgp.cpp:230
RealReductiveGroup(InnerClass &, RealFormNbr)
Definition: realredgp.cpp:42
SmallBitVector TorusPart
Definition: Atlas.h:256
const InnerClass & innerClass() const
Definition: realredgp.h:75
Status d_status
Definition: realredgp.h:64
RankFlags Grading
Definition: Atlas.h:289
size_t rank() const
Definition: realredgp.cpp:163
InnerClass & d_innerClass
Definition: realredgp.h:52
RatCoweight g_rho_check() const
Definition: realredgp.h:89