Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

atlas::kl::helper::Thicket Class Reference

Collection of block elements y_j of the same length, differing by type II real cross actions, and having no other descents. More...

Collaboration diagram for atlas::kl::helper::Thicket:

Collaboration graph
[legend]
List of all members.

Public Types

typedef std::vector< EdgeEdgeList

Public Member Functions

 Thicket ()
 Thicket (Helper &, BlockElt)
 Constructs a thicket from y.
 ~Thicket ()
BlockElt cross (size_t s, BlockElt y) const
 Cross action of simple reflection s on block element y.
const descents::DescentStatusdescent (BlockElt y) const
 List of RankMax unsigned chars; number s gives the descent status 0-7 of simple root s for y.
descents::DescentStatus::Value descentValue (size_t s, BlockElt y) const
 Unsigned char between 0 and 7; gives the descent of simple root s for y.
const EdgeListedgeList (size_t j) const
 List of |Edge|s ending at y_j.
KLPolRef klPol (BlockElt x, size_t pos) const
 KL polynomial P_{x,y_pos}, for any y_pos in Thicket.
const klsupport::PrimitiveRowprimitiveRow (size_t j) const
 List of all x of length strictly less than l(y) that are primitive with respect to y_j.
size_t nonExtremal (BlockElt x) const
 Returns the position in d_vertices of the first y that is not extremal w.r.t. x, size() if there is no such y.
KLIndex one () const
 Pointer to the KL polynomial one.
size_t rank () const
 Semisimple rank.
size_t size () const
 Number of vertices in Thicket.
const std::vector< BlockElt > & vertices () const
 List of vertices in Thicket.
KLIndex zero () const
 Pointer to the KL polynomial zero.
bool ascentCompute (BlockElt x, size_t pos)
 Checks if x has an ascent in row y_pos, and computes the K-L pol in that case.
void edgeCompute (BlockElt x, size_t pos, const Edge &e)
 Computes the K-L polynomial for x in row pos, using the recurrence relation from e.
void fill ()
 Fills in the K-L polynomials for the elements of the thicket.
void fillXList ()
 Puts in d_xlist the union of the extremal lists for the elements of the thicket, top element excluded.
KLRowklRow (BlockElt y)
KLStorestore ()

Private Types

typedef klsupport::PrimitiveRow::iterator PI
typedef KLRow::iterator KLI

Private Attributes

std::vector< BlockEltd_vertices
 List of elements y_j in Thicket.
std::vector< EdgeListd_edges
 Entry j lists the edges ending at y_j.
std::vector< BlockEltd_xlist
 List of all x that are extremal with respect to some y in Thicket.
std::vector< klsupport::PrimitiveRowd_extr
 Entry j lists all x of length strictly less than l(y) that are extremal with respect to y_j.
std::vector< klsupport::PrimitiveRowd_prim
 Entry j lists all x of length strictly less than l(y) that are primitive with respect to y_j.
std::vector< KLRowd_klr
std::vector< PId_firstPrim
std::vector< KLId_firstKL
Helperd_helper

Detailed Description

Collection of block elements y_j of the same length, differing by type II real cross actions, and having no other descents.

A pair (y_j, s x y_j) (with s type II real) is an Edge of the thicket. Such an s is a descent for both y_j and s x y_j. The pair is the image of the Cayley transform (type II imaginary) of a single element y_0, of length one less. The first class of KL recursion relations used in a Thicket is this:

P_{x,y_j} + P_{x,s x y_j} = [formula involving various P_{? , y_0}].

The right hand side terms here are known by induction on y, and recorded in the recursion data member of the Edge. We can therefore compute P_{x,y} as soon as we know P_{x,y'} for a single element y' in the thicket. For that (given x) we find essentially three possibilities:

1) x is equal to y', so P_{x,y'} = 1.

2) There is an s that is a good ascent for x (not in tau(x), and leading to an x' of length one more than the length of x), but is type II real for y'. In this case there is a recursion formula something like

P_{x,y'} = P_{x' , y'}.

(If s is type II imaginary for x, then there are two terms on the right.) In any case the right side is known by downward induction on x, so finally we know all P_{x,y_j} for y_j in the Thicket.

3) P_{x,y'} = 0.

This computation is carried out in the member function fill(). '

Definition at line 278 of file kl.cpp.


Member Typedef Documentation

typedef std::vector<Edge> atlas::kl::helper::Thicket::EdgeList
 

Definition at line 283 of file kl.cpp.

Referenced by Thicket().

typedef KLRow::iterator atlas::kl::helper::Thicket::KLI [private]
 

Definition at line 288 of file kl.cpp.

typedef klsupport::PrimitiveRow::iterator atlas::kl::helper::Thicket::PI [private]
 

Definition at line 287 of file kl.cpp.


Constructor & Destructor Documentation

atlas::kl::helper::Thicket::Thicket  )  [inline]
 

Definition at line 329 of file kl.cpp.

atlas::kl::helper::Thicket::Thicket Helper h,
BlockElt  y
 

Constructs a thicket from y.

Explanation: the thicket of y is the connected component of y in the graph whose edges are the real type II cross-actions. It is therefore contained in the R-packet of y. The edges of the thicket are a spanning tree; each edge goes from y1 to y2, where y2 is obtained from y1 through real cross action by s (the position of y2 in the vertex list, and s, are recorded in the edge). The recursion recorded is the recursion for s as a descent of y2. In this way, we can move along a path of edges and have the required recursion formulas available for computing the polynomial for y2 from that of y1 (all edges are two-sided, i.e., we also make the corresponding edge from y2 to y1.)

Definition at line 1689 of file kl.cpp.

References atlas::hashtable::HashTable< Entry, Number >::begin(), cross(), d_edges, d_extr, d_firstKL, d_firstPrim, d_helper, d_klr, d_prim, d_vertices, descentValue(), atlas::graph::Edge, EdgeList, atlas::hashtable::HashTable< Entry, Number >::end(), atlas::hashtable::HashTable< Entry, Number >::find(), atlas::kl::KLContext::makeExtremalRow(), atlas::kl::KLContext::makePrimitiveRow(), rank(), atlas::kl::helper::Helper::recursionRow(), size(), and atlas::hashtable::HashTable< Entry, Number >::swap().

atlas::kl::helper::Thicket::~Thicket  )  [inline]
 

Definition at line 333 of file kl.cpp.


Member Function Documentation

bool atlas::kl::helper::Thicket::ascentCompute BlockElt  x,
size_t  pos
 

Checks if x has an ascent in row y_pos, and computes the K-L pol in that case.

Precondition: x is primitive in the row;

Explanation: If the ascent exists, it will be imaginary type II. if x1 = (x1.first,x1.second) is the corresponding Cayley transform, the formula is P_x = P_x1.first + P_x1.second, both of which can be read off from the known part of the row.

Definition at line 1806 of file kl.cpp.

References atlas::kl::helper::Helper::cayley(), d_firstKL, d_firstPrim, atlas::kl::helper::Helper::d_hashtable, d_helper, d_vertices, descent(), atlas::kl::helper::firstAscent(), atlas::polynomials::Polynomial< C >::isZero(), klPol(), atlas::kl::KLPol, atlas::hashtable::HashTable< Entry, Number >::match(), rank(), and atlas::polynomials::Polynomial< C >::safeAdd().

Referenced by fill().

BlockElt atlas::kl::helper::Thicket::cross size_t  s,
BlockElt  y
const [inline]
 

Cross action of simple reflection s on block element y.

Definition at line 340 of file kl.cpp.

References atlas::kl::helper::Helper::cross().

Referenced by Thicket().

const descents::DescentStatus& atlas::kl::helper::Thicket::descent BlockElt  y  )  const [inline]
 

List of RankMax unsigned chars; number s gives the descent status 0-7 of simple root s for y.

Definition at line 348 of file kl.cpp.

References atlas::kl::helper::Helper::descent().

Referenced by ascentCompute(), and nonExtremal().

descents::DescentStatus::Value atlas::kl::helper::Thicket::descentValue size_t  s,
BlockElt  y
const [inline]
 

Unsigned char between 0 and 7; gives the descent of simple root s for y.

Definition at line 357 of file kl.cpp.

References atlas::kl::helper::Helper::descentValue().

Referenced by Thicket().

void atlas::kl::helper::Thicket::edgeCompute BlockElt  x,
size_t  pos,
const Edge e
 

Computes the K-L polynomial for x in row pos, using the recurrence relation from e.

Precondition: x is extremal in the row; e points towards pos; the polynomial for x for the source of e is known.

Explanation: P_{x,pos} + P_{x,source} will be given by the recurrence relation corresponding to x.

Definition at line 1839 of file kl.cpp.

References atlas::hashtable::HashTable< Entry, Number >::begin(), d_extr, d_firstKL, d_firstPrim, atlas::kl::helper::Helper::d_hashtable, d_helper, d_vertices, atlas::polynomials::Polynomial< C >::isZero(), klPol(), atlas::kl::KLPol, atlas::hashtable::HashTable< Entry, Number >::match(), atlas::kl::helper::Thicket::Edge::recursion, atlas::polynomials::Polynomial< C >::safeSubtract(), and atlas::kl::helper::Thicket::Edge::source.

Referenced by fill().

const EdgeList& atlas::kl::helper::Thicket::edgeList size_t  j  )  const [inline]
 

List of |Edge|s ending at y_j.

Definition at line 364 of file kl.cpp.

Referenced by atlas::kl::helper::ThicketIterator::operator++(), and atlas::kl::helper::ThicketIterator::ThicketIterator().

void atlas::kl::helper::Thicket::fill  ) 
 

Fills in the K-L polynomials for the elements of the thicket.

Algorithm: for each element y_j of the thicket, we have the list of primitive elements pr[j], and a list of K-L polynomials klv[j]. We are going to fill in the polynomials downwards from the top (the top elements being all ones); at the end of the process, we will have iterators pointing into each pr[j] and each klv[j], where the extremal list from that iterator on will contain all x'es for which the klpol is non zero (in other words, the other ones have been "weeded out" from pr[j]), and klv[j] from the iterator on contains the corresponding polynomials. Then all that remains to do is copy these onto the corresponding lists of the context. In order to achieve this, we put in d_xlist an ordered list of all elements that are primitive for _some_ y_j, not equal to y_j, and we move downwards in that list. It is guaranteed by Lemma 6.2 in David's notes, that for each x in d_xlist there is a y_j for which there is an easy reduction (i.e., x might be primitive for y_j, but not extremal.) So we can deduce P_{x,y_j} from the already known part of klv[j], and then traversing the tree structure of edge relations imposed on the thicket, we can compute all the other P_{x,y_i} that need to be (i.e., those for which x is in pr[j].) We record the result only if the corresponding polynomial is non-zero.

Definition at line 1888 of file kl.cpp.

References ascentCompute(), atlas::bits::copy(), d_firstKL, d_firstPrim, d_helper, atlas::kl::KLContext::d_kl, d_klr, atlas::kl::KLContext::d_one, atlas::kl::KLContext::d_prim, d_prim, d_vertices, d_xlist, atlas::kl::helper::ThicketIterator::edge(), edgeCompute(), fillXList(), nonExtremal(), atlas::kl::helper::Helper::nr_of_prim_nulls, atlas::kl::helper::Helper::prim_size, primitiveRow(), and size().

Referenced by atlas::kl::helper::Helper::fillThickets().

void atlas::kl::helper::Thicket::fillXList  ) 
 

Puts in d_xlist the union of the extremal lists for the elements of the thicket, top element excluded.

Definition at line 1946 of file kl.cpp.

References atlas::bits::copy(), d_xlist, primitiveRow(), and size().

Referenced by fill().

KLPolRef atlas::kl::helper::Thicket::klPol BlockElt  x,
size_t  pos
const [inline]
 

KL polynomial P_{x,y_pos}, for any y_pos in Thicket.

Definition at line 371 of file kl.cpp.

References atlas::kl::helper::Helper::klPol(), and atlas::kl::KLPolRef.

Referenced by ascentCompute(), and edgeCompute().

KLRow& atlas::kl::helper::Thicket::klRow BlockElt  y  )  [inline]
 

Definition at line 433 of file kl.cpp.

References atlas::kl::KLContext::d_kl, and atlas::kl::KLRow.

size_t atlas::kl::helper::Thicket::nonExtremal BlockElt  x  )  const
 

Returns the position in d_vertices of the first y that is not extremal w.r.t. x, size() if there is no such y.

Definition at line 1780 of file kl.cpp.

References d_vertices, descent(), atlas::kl::helper::firstAscent(), rank(), and size().

Referenced by fill().

KLIndex atlas::kl::helper::Thicket::one  )  const [inline]
 

Pointer to the KL polynomial one.

Definition at line 392 of file kl.cpp.

References atlas::kl::KLContext::d_one, and atlas::kl::KLIndex.

const klsupport::PrimitiveRow& atlas::kl::helper::Thicket::primitiveRow size_t  j  )  const [inline]
 

List of all x of length strictly less than l(y) that are primitive with respect to y_j.

Primitive means that each descent for y_j is either a descent for x or type II imaginary for x.

Definition at line 383 of file kl.cpp.

Referenced by fill(), and fillXList().

size_t atlas::kl::helper::Thicket::rank  )  const [inline]
 

Semisimple rank.

Definition at line 399 of file kl.cpp.

References atlas::kl::KLContext::rank().

Referenced by ascentCompute(), nonExtremal(), and Thicket().

size_t atlas::kl::helper::Thicket::size  )  const [inline]
 

Number of vertices in Thicket.

Definition at line 406 of file kl.cpp.

References atlas::kl::KLContext::size().

Referenced by fill(), fillXList(), nonExtremal(), atlas::kl::helper::ThicketIterator::operator++(), Thicket(), and atlas::kl::helper::ThicketIterator::ThicketIterator().

KLStore& atlas::kl::helper::Thicket::store  )  [inline]
 

Definition at line 437 of file kl.cpp.

References atlas::kl::KLContext::d_store, and atlas::kl::KLStore.

const std::vector<BlockElt>& atlas::kl::helper::Thicket::vertices  )  const [inline]
 

List of vertices in Thicket.

Definition at line 413 of file kl.cpp.

KLIndex atlas::kl::helper::Thicket::zero  )  const [inline]
 

Pointer to the KL polynomial zero.

Definition at line 420 of file kl.cpp.

References atlas::kl::KLContext::d_zero, and atlas::kl::KLIndex.


Member Data Documentation

std::vector<EdgeList> atlas::kl::helper::Thicket::d_edges [private]
 

Entry j lists the edges ending at y_j.

Definition at line 298 of file kl.cpp.

Referenced by Thicket().

std::vector<klsupport::PrimitiveRow> atlas::kl::helper::Thicket::d_extr [private]
 

Entry j lists all x of length strictly less than l(y) that are extremal with respect to y_j.

Extremal means that each descent for y_j is a descent for x.

Definition at line 311 of file kl.cpp.

Referenced by edgeCompute(), and Thicket().

std::vector<KLI> atlas::kl::helper::Thicket::d_firstKL [private]
 

Definition at line 323 of file kl.cpp.

Referenced by ascentCompute(), edgeCompute(), fill(), and Thicket().

std::vector<PI> atlas::kl::helper::Thicket::d_firstPrim [private]
 

Definition at line 322 of file kl.cpp.

Referenced by ascentCompute(), edgeCompute(), fill(), and Thicket().

Helper* atlas::kl::helper::Thicket::d_helper [private]
 

Definition at line 324 of file kl.cpp.

Referenced by ascentCompute(), edgeCompute(), fill(), and Thicket().

std::vector<KLRow> atlas::kl::helper::Thicket::d_klr [private]
 

Definition at line 321 of file kl.cpp.

Referenced by fill(), and Thicket().

std::vector<klsupport::PrimitiveRow> atlas::kl::helper::Thicket::d_prim [private]
 

Entry j lists all x of length strictly less than l(y) that are primitive with respect to y_j.

Primitive means that each descent for y_j is either a descent for x or type II imaginary for x.

Definition at line 320 of file kl.cpp.

Referenced by fill(), and Thicket().

std::vector<BlockElt> atlas::kl::helper::Thicket::d_vertices [private]
 

List of elements y_j in Thicket.

Definition at line 293 of file kl.cpp.

Referenced by ascentCompute(), edgeCompute(), fill(), nonExtremal(), and Thicket().

std::vector<BlockElt> atlas::kl::helper::Thicket::d_xlist [private]
 

List of all x that are extremal with respect to some y in Thicket.

Definition at line 303 of file kl.cpp.

Referenced by fill(), and fillXList().


The documentation for this class was generated from the following file:
Generated on Wed Mar 26 16:52:57 2008 for atlas by  doxygen 1.3.9.1