TheGrigorchukGroupAlgorithms.h

Go to the documentation of this file.
00001 // Copyright (C) 2006 Alexander Ushakov
00002 // Contents: Definition of class TheGrigorchukGroupAlgorithms
00003 //
00004 // Principal Authors: Alexander Ushakov
00005 //
00006 // Revision History:
00007 //
00008 
00009 
00010 #ifndef _TheGrigorchukGroupAlgorithms_h_
00011 #define _TheGrigorchukGroupAlgorithms_h_
00012 
00013 
00014 
00015 #include "map"
00016 #include "list"
00017 #include "set"
00018 using namespace std;
00019 
00020 #include "tuples.h"
00021 #include "Word.h"
00022 
00023 
00024 //---------------------------------------------------------------------------//
00025 //----------------------- TheGrigorchukGroupAlgorithms ----------------------//
00026 //---------------------------------------------------------------------------//
00027 
00028 
00030 
00036 class TheGrigorchukGroupAlgorithms
00037 {
00038   
00040   //                                                     //
00041   //  Constructors:                                      //
00042   //                                                     //
00044 
00045 public:
00046   
00048   TheGrigorchukGroupAlgorithms( );
00049   
00050   
00052   //                                                     //
00053   //  Accessors:                                         //
00054   //                                                     //
00056 
00057 public:
00058 
00059 
00061 
00065   static bool trivial( const Word& w );
00066 
00067 
00069 
00073   static bool trivial_reduced( const Word& w );
00074 
00075 
00077   /*
00078     Result belongs to \f$\mathbb{Z}_2 \times \mathbb{Z}_2 \times \mathbb{Z}_2\f$.
00079     \f$(1,0,0)\f$ corresponds to \f$a\f$, \f$(0,1,0)\f$ corresponds to \f$b\f$, 
00080     \f$(0,0,1)\f$ corresponds to \f$c\f$.
00081   */
00082   static triple< int , int , int > abelianImage( const Word& w );
00083 
00084 
00086 
00089   static Word reduce( const Word& w );
00090   
00091   
00093 
00096   static int findOrder( const Word& w );
00097 
00098   
00100   /*
00101     See Section 5 of "Solved and Unsolved Problems Around One Group".
00102   */
00103   static bool conjugate( const Word& w1 , const Word& w2 ) {
00104     return conjugate_Kcosets( w1 , w2 ).size()!=0;
00105   }
00106 
00107 
00109   /*
00110     For a pair of words \f$w_1\f$, \f$w_2\f$, \f$Q(w_1,w_2) = \{ xK \mid w_1^x = w_2\}\f$, 
00111     where \f$K = ncl(abab)\f$.
00112     See Section 5 of "Solved and Unsolved Problems Around One Group".
00113   */
00114   static set< int > conjugate_Kcosets( const Word& w1 , const Word& w2 );
00115   
00116   
00118   /*
00119     See Section 5 of "Solved and Unsolved Problems Around One Group".
00120   */
00121   static set< Word > findConjugator_Kcosets( const Word& w1 , const Word& w2 );
00122   
00123 
00125 
00129   static pair< Word , Word > split( const Word& w );
00130 
00131 
00133   //                                                     //
00134   //  Element routines:                                  //
00135   //                                                     //
00137 
00138 public:
00139 
00141   static void push_back( Word& w , int g );
00142 
00143 
00145   static void push_front( Word& w , int g );
00146   
00147   
00149   static Word randomWord( int len );
00150 
00151   
00153   //                                                     //
00154   //  Certain subgroups:                                 //
00155   //                                                     //
00157 
00158 public:
00159 
00161 
00166   static pair< Word , list< Word > > decompositionBSbgp( const Word& w );
00167     
00168 
00169 
00171 
00176   static pair< Word , Word > liftToSTone( const Word& w1 , const Word& w2 );
00177   
00178   
00180   /*
00181     The index of \f$K\f$ in \f$\Gamma\f$ is \f$8\f$.
00182     Cosets are numbered by 0,...,7 - ground level, 8,...,15 above level (involving b).
00183     On the level elements are numbered from the trivial element, d-element next, and so on.
00184   */
00185   static int cosetRepresentativeKSbgp( const Word& w );
00186 
00187 
00189   /*
00190     The index of \f$K\f$ in \f$\Gamma\f$ is \f$8\f$.
00191     Cosets are numbered by 0,...,7 - ground level, 8,...,15 above level (involving b).
00192     On the level elements are numbered from the trivial element, d-element next, and so on.
00193   */
00194   static Word cosetRepresentativeKSbgp( int c );
00195   
00196   
00198 
00202   static int liftPairKcosetsUP( int x , int y );
00203   
00204   
00206 
00209   static set< int > liftPairsKcosetsUP( const set< int >& K1 , const set< int >& K2 );
00210 
00211 
00213   //                                                     //
00214   //  Internal functions:                                //
00215   //                                                     //
00217 
00218  private:
00219  public:
00220 
00222   static map< pair< int , int > , int > KCosetLiftTable( );
00223   
00225   //                                                     //
00226   //  Data:                                              //
00227   //                                                     //
00229 
00230 private:
00231 
00232 };
00233 
00234 
00235 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Mon Sep 26 18:43:45 2011 for CRyptography And Groups (CRAG) by  doxygen 1.6.1