atlas  0.6
subsystem.h
Go to the documentation of this file.
1 
4 /*
5  This is subystem.h
6 
7  Copyright (C) 2010 Marc van Leeuwen
8  part of the Atlas of Lie Groups and Representations
9 
10  For license information see the LICENSE file
11 */
12 
13 #ifndef SUBSYSTEM_H /* guard against multiple inclusions */
14 #define SUBSYSTEM_H
15 
16 #include "../Atlas.h"
17 
18 #include "rootdata.h" // derive from |RootSystem|
19 #include "weyl.h" // containment
20 
21 namespace atlas {
22 
23 namespace subsystem {
24 
25 /* The following data type has a purpose specific for representation theory.
26  It is associated to a subsystem of the dual root datum (with positive roots
27  contained in the positive parent coroots), and is derived from |RootSystem|
28  at that dual side (meaning that inherited |rootSystem| methods present that
29  subsystem of the dual root system of the parent). It remains however
30  attached to the parent root _datum_ (not system), containing and exporting
31  a reference to that rootdatum, and has a method to produce a |PreRootDatum|
32  for the subsystem of the _parent_ defined by simple coroots for the
33  subsystem (a full such root datum is not stored, for efficientcy reasons).
34  */
35 
36 // A subsystem on the dual side of a given root datum
37 class SubSystem : public RootSystem // new system, subsytem of dual
38 {
39  const RootDatum& rd; // parent root datum
40  RootNbrList pos_map; // map positive roots to root number in parent
41  RootNbrList inv_map; // partial map back from all parent roots
42 
43  struct root_info
45  WeylWord to_simple;
46  WeylWord reflection;
47 
48  root_info() : simple(~0), to_simple(), reflection() {}
49  };
50  std::vector<root_info> sub_root;
51 
52  public:
53  SubSystem(const RootDatum& parent,
54  const RootNbrList& sub_sys // list of simple roots in subsys
55  );
56 
57  static SubSystem integral // pseudo contructor for integral system
58  (const RootDatum& parent, const RatWeight& gamma);
59 
60  SubSystem(const SubSystem& s) // copy contructor, not actually used
61  : RootSystem(s) // copy base object
62  , rd(s.rd) // share this one
63  , pos_map(s.pos_map), inv_map(s.inv_map), sub_root(s.sub_root) // copy those
64  {
65  assert(false); // should never be actually called, but exist nonetheless
66  }
67 
68  const RootDatum& parent_datum() const { return rd; }
69 
70  weyl::Twist twist(const WeightInvolution& theta, WeylWord& ww) const;
71  // output value |ww| gives |-^theta| as twisted involution for |sub|
72 
73  weyl::Twist parent_twist(const WeightInvolution& theta, WeylWord& ww) const;
74  // similar, but |ww| is (for subsystem) on parent side, and anchored at its
75  // distinguished involution |delta|: one has |theta=parent(ww).delta|.
76 
77  PreRootDatum pre_root_datum() const; // viewed from parent side
78 
80  { return pos_map[s]; }
81 
82  RootNbr to_parent(RootNbr alpha) const; // |pos_map| with some shifting
83  RootNbr from_parent(RootNbr alpha) const { return inv_map[alpha]; }
84 
86  { return sub_root[s].simple; } // parent simple root conjugated to |sub.s|
87 
88  const WeylWord& to_simple(weyl::Generator s) const
89  { return sub_root[s].to_simple; } // parent conjugating word for |simple(s)|
90 
91  const WeylWord& reflection(weyl::Generator s) const
92  { return sub_root[s].reflection; } // parent reflection corresponding to |s|
93 
94  Coweight sub_2rho() const { return rd.dual_twoRho(pos_map); }
95  Weight parent_sub_2rho() const { return rd.twoRho(pos_map); }
96 
97  // untwisted action of |ww|, as matrix on parent side
98  LatticeMatrix action_matrix(const WeylWord& ww) const;
99 
100  RootNbrSet positive_roots() const; // for subsystem only
101  InvolutionData involution_data (const WeightInvolution& theta) const;
102 
103 }; // |class SubSystem|
104 
105 // We have attempted to alleviate |SubSystem| by splitting off the |WeylGroup|
106 // The following class is for cases where a Weyl group does need to exist
108 {
109  const WeylGroup sub_W; // Weyl group no reference: built by contructor
110  public:
111  SubSystemWithGroup(const RootDatum& parent,
112  const RootNbrList& sub_sys // simple roots in subsys
113  );
114 
115  static SubSystemWithGroup integral // pseudo contructor for integral system
116  (const RootDatum& parent, const RatWeight& gamma);
117 
118  SubSystemWithGroup(const SubSystemWithGroup& s) // copy ctor (for pseudo ctor)
119  : SubSystem(s) // copy base object
120  , sub_W(s.cartanMatrix()) // reconstruct (Weyl group cannot be copied)
121  {
122  assert(false); // should never be actually called, but exist nonetheless
123  }
124 
125  const WeylGroup& Weyl_group() const { return sub_W; }
126 }; // |class SubSystemWithGroup|
127 
128 
129 
130 } // |namespace subsystem|
131 
132 } // |namespace atlas|
133 
134 #endif
SubSystemWithGroup(const SubSystemWithGroup &s)
Definition: subsystem.h:118
Definition: subsystem.h:43
const WeylWord & reflection(weyl::Generator s) const
Definition: subsystem.h:91
Coweight sub_2rho() const
Definition: subsystem.h:94
Class definitions and function declarations for the RootDatum class.
RootNbr to_parent(RootNbr alpha) const
Definition: subsystem.cpp:88
std::vector< root_info > sub_root
Definition: subsystem.h:50
const WeylWord & to_simple(weyl::Generator s) const
Definition: subsystem.h:88
InvolutionData involution_data(const WeightInvolution &theta) const
Definition: subsystem.cpp:186
const WeylGroup sub_W
Definition: subsystem.h:109
Definition: subsystem.h:107
WeylWord to_simple
Definition: subsystem.h:45
RootNbrSet positive_roots() const
Definition: subsystem.cpp:183
SubSystem(const SubSystem &s)
Definition: subsystem.h:60
RootNbrList inv_map
Definition: subsystem.h:41
Class definitions and function declarations for WeylGroup.
LatticeMatrix action_matrix(const WeylWord &ww) const
Definition: subsystem.cpp:173
PreRootDatum pre_root_datum() const
Definition: subsystem.cpp:96
static SubSystem integral(const RootDatum &parent, const RatWeight &gamma)
Definition: subsystem.cpp:75
const WeylGroup & Weyl_group() const
Definition: subsystem.h:125
weyl::Twist parent_twist(const WeightInvolution &theta, WeylWord &ww) const
Definition: subsystem.cpp:149
weyl::Generator simple(weyl::Generator s) const
Definition: subsystem.h:85
A mapping between one interpretation of Generators and another.
Definition: weyl.h:53
RootNbr parent_nr_simple(weyl::Generator s) const
Definition: subsystem.h:79
const RootDatum & rd
Definition: subsystem.h:39
weyl::Generator simple
Definition: subsystem.h:44
work_addr parent
Definition: graph.cpp:117
Definition: Atlas.h:38
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
WeylWord reflection
Definition: subsystem.h:46
unsigned char Generator
Definition: Atlas.h:226
RootNbrList pos_map
Definition: subsystem.h:40
std::vector< RootNbr > RootNbrList
Definition: Atlas.h:217
weyl::Twist twist(const WeightInvolution &theta, WeylWord &ww) const
Definition: subsystem.cpp:110
const RootDatum & parent_datum() const
Definition: subsystem.h:68
Weight parent_sub_2rho() const
Definition: subsystem.h:95
root_info()
Definition: subsystem.h:48
RootNbr from_parent(RootNbr alpha) const
Definition: subsystem.h:83
Definition: subsystem.h:37
SubSystem(const RootDatum &parent, const RootNbrList &sub_sys)
Definition: subsystem.cpp:26