ThompsonGroupFNormalForm.h

Go to the documentation of this file.
00001 // Copyright (C) 2007 Alexander Ushakov
00002 // Contents: Definition of class ThompsonGroupFNormalForm
00003 //
00004 // Principal Authors: Alexander Ushakov
00005 //
00006 // Revision History:
00007 //
00008 
00009 
00010 #ifndef _ThompsonGroupFNormalForm_H_
00011 #define _ThompsonGroupFNormalForm_H_
00012 
00013 
00014 #include "Word.h"
00015 
00016 
00017 //---------------------------------------------------------------------------//
00018 //------------------------- ThompsonGroupFNormalForm ------------------------//
00019 //---------------------------------------------------------------------------//
00020 
00021 
00023 
00029 class ThompsonGroupFNormalForm : protected Word
00030 {
00032   //                                                     //
00033   //  Constructors                                       //
00034   //                                                     //
00036 
00037  public:
00038 
00039   ThompsonGroupFNormalForm( );
00040 
00041   ThompsonGroupFNormalForm( const Word& w );
00042 
00043   
00045   //                                                     //
00046   //  Operators                                          //
00047   //                                                     //
00049 
00050 public:
00051   
00052   bool operator== ( const ThompsonGroupFNormalForm& nf ) const {
00053     return (Word)*this==(Word)nf;
00054   }
00055   
00056   
00058   inline ThompsonGroupFNormalForm& operator *= ( const ThompsonGroupFNormalForm& nf ) { 
00059     list< int > unit1 = getList( );
00060     list< int > unit2 = nf.getList( );
00061     list< Generator > new_unit = mergeUnits( unit1 , unit2 );
00062     *this = removeBadPairs( new_unit );
00063     return *this;
00064   }
00065   
00066   
00068   inline ThompsonGroupFNormalForm operator * ( const ThompsonGroupFNormalForm& nf ) const { 
00069     list< int > unit1 = getList( );
00070     list< int > unit2 = nf.getList( );
00071     list< Generator > new_unit = mergeUnits( unit1 , unit2 );
00072     return removeBadPairs( new_unit );
00073   }
00074   
00076   inline ThompsonGroupFNormalForm operator - ( ) const { 
00077     return ThompsonGroupFNormalForm( -(Word)*this );
00078   }
00079   
00081   //                                                     //
00082   //  Accessors                                          //
00083   //                                                     //
00085         
00086 public:
00087   
00088 
00090   //                                                     //
00091   //  Internal functions                                 //
00092   //                                                     //
00094 
00095  private:
00096 
00098   static Word semiNormalFormFor( const Word& w );
00099   
00101   static list< int > mergeUnits( list< int >& unit1 , list< int >& unit2 );
00102   
00104   static int nextOperation( int n1 , int n2 , int n3 , int n4 );
00105 
00107   static Word removeBadPairs( const Word& w );
00108 
00109          
00111   //                                                     //
00112   //  I/O                                                //
00113   //                                                     //
00115 
00116    friend ostream& operator << ( ostream& os , const ThompsonGroupFNormalForm& nf );
00117    
00118   
00120   //                                                     //
00121   //  Data members                                       //
00122   //                                                     //
00124 
00125   private:
00126                 
00127 
00128   
00129 };
00130 
00131 
00132 #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