00001 /*! 00002 \file 00003 \brief Forward declarations of classes and types for namespace latticetypes. 00004 00005 A LatticeCoeff is an integer. A LatticeElt is a vector of 00006 LatticeCoeff's; that is, an element of Z^n. A Weight is a LatticeElt. 00007 The LatticeElt's now used are mostly of dimension RANK_MAX (now set at 00008 16). 00009 00010 A RatLatticeElt is a class corresponding to an element of Q^n. 00011 */ 00012 /* 00013 This is latticetypes_fwd.h 00014 00015 Copyright (C) 2004,2005 Fokko du Cloux 00016 part of the Atlas of Reductive Lie Groups 00017 00018 See file main.cpp for full copyright notice 00019 */ 00020 00021 #ifndef LATTICETYPES_FWD_H /* guard against multiple inclusions */ 00022 #define LATTICETYPES_FWD_H 00023 00024 #include <vector> 00025 00026 #include "bitvector_fwd.h" 00027 #include "matrix_fwd.h" 00028 #include "subquotient_fwd.h" 00029 00030 #include "constants.h" 00031 00032 /******** forward type declarations ******************************************/ 00033 00034 namespace atlas { 00035 00036 namespace latticetypes { 00037 00038 /*! 00039 \brief 00040 A LatticeElt is a vector of LatticeCoeff's; that is, an element of 00041 Z^n. 00042 */ 00043 typedef int LatticeCoeff; 00044 00045 const LatticeCoeff ZeroCoeff = 0; 00046 const LatticeCoeff OneCoeff = 1; 00047 00048 00049 /*! 00050 \brief 00051 A LatticeElt is a vector of LatticeCoeff's; that is, an element of 00052 Z^n. 00053 */ 00054 typedef std::vector<LatticeCoeff> LatticeElt; 00055 00056 /*! 00057 \brief 00058 This type of list of integers is used as the list of invariant 00059 factors in a Smith normal form. 00060 */ 00061 typedef std::vector<LatticeCoeff> CoeffList; 00062 class RatLatticeElt; 00063 00064 typedef LatticeElt Weight; 00065 typedef RatLatticeElt RatWeight; 00066 00067 typedef std::vector<Weight> WeightList; 00068 typedef std::vector<RatWeight> RatWeightList; 00069 00070 typedef matrix::Matrix<LatticeCoeff> LatticeMatrix; 00071 00072 /*! 00073 \brief Element of (Z/2Z)^RANK_MAX. 00074 00075 Used to represent an element of a component group of a real torus; 00076 this is why it turns up in connection with lattices. 00077 */ 00078 typedef bitvector::BitVector<constants::RANK_MAX> Component; 00079 00080 /* In Fokko's code, the type |Component| hardly ever represents an element 00081 of the component group of a real torus (or other variety). For this 00082 reason I've introduced a more neutral name to replace such uses. MvL */ 00083 00084 typedef bitvector::BitVector<constants::RANK_MAX> SmallBitVector; 00085 00086 typedef bitvector::BitVectorList<constants::RANK_MAX> SmallBitVectorList; 00087 00088 /* In Fokko's code, the type |LongComponent| is used (exclusively?) to 00089 represent a line of an equation matrix over $Z/2Z$, with a left hand side 00090 of at most |RANK_MAX| coefficient bits, and one bit right hand side. For 00091 this reason I've introduced a more appropirate type for such uses. MvL */ 00092 00093 typedef bitvector::BitVector<constants::RANK_MAX+1> BinaryEquation; 00094 00095 typedef bitvector::BitVectorList<constants::RANK_MAX+1> BinaryEquationList; 00096 00097 /*! 00098 \brief Element of (Z/2Z)^2*RANK_MAX. 00099 */ 00100 typedef bitvector::BitVector<2*constants::RANK_MAX> LongComponent; 00101 00102 /*! 00103 \brief Square matrix of size RANK_MAX with entries in Z/2Z. 00104 00105 Used to represent for instance the map on (dual) component groups of real 00106 tori induced by a lattice map. 00107 */ 00108 typedef bitvector::BitMatrix<constants::RANK_MAX> BinaryMap; 00109 00110 /*! 00111 \brief Subgroup of (Z/2Z)^RANK_MAX. 00112 00113 Used to represent a subgroup of the group of connected components of 00114 a real torus. 00115 */ 00116 typedef subquotient::Subspace<constants::RANK_MAX> SmallSubspace; 00117 00118 00119 /*! 00120 \brief Subquotient of (Z/2Z)^RANK_MAX. 00121 */ 00122 typedef subquotient::Subquotient<constants::RANK_MAX> 00123 SmallSubquotient; 00124 00125 /*! 00126 \brief List of elements of (Z/2Z)^RANK_MAX. 00127 00128 Used to represent a subset of the group of connected components of 00129 a real torus. 00130 */ 00131 typedef std::vector<Component> ComponentList; 00132 00133 /*! 00134 \brief List of elements of (Z/2Z)^2*RANK_MAX. 00135 */ 00136 typedef std::vector<LongComponent> LongComponentList; 00137 00138 } 00139 00140 } 00141 00142 #endif
1.3.9.1